diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml deleted file mode 100644 index e74ac0817..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: Bug Report -description: Create a report to help us improve - -body: - - type: markdown - attributes: - value: | - Thanks for taking the time to fill out this bug report! - - Only file bugs here! Ask questions on the mailing lists https://curl.se/mail/ - - **SECURITY RELATED?** Post it here: https://hackerone.com/curl - - There are collections of known issues to be aware of: - - - https://curl.se/docs/knownbugs.html - - https://curl.se/docs/todo.html - - - type: textarea - id: reproducer - attributes: - label: I did this - validations: - required: false - - - type: textarea - id: expected-behaviour - attributes: - label: I expected the following - validations: - required: false - - - type: textarea - id: version - attributes: - label: curl/libcurl version - description: | - Please paste the output of `curl -V` here. - placeholder: 'curl 8.2.0' - validations: - required: true - - - type: textarea - id: os - attributes: - label: operating system - description: | - On Unix please post the output of `uname -a` here. - placeholder: 'Fedora Linux 38' - validations: - required: true diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 5ace4600a..000000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,6 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" diff --git a/.github/labeler.yml b/.github/labeler.yml deleted file mode 100644 index cef2789d8..000000000 --- a/.github/labeler.yml +++ /dev/null @@ -1,258 +0,0 @@ -# Copyright (C) Daniel Fandrich, , et al. -# -# SPDX-License-Identifier: curl - -# The workflow configures the .github/workflows/label.yml action -# to add labels to pull requests. This is not (yet?) a replacement for human -# triaging, but is intended to add labels to the easy cases. If the matching -# language becomes more powerful, more cases should be able to be handled. -# -# Labels are added in two ways: the any-glob-to-all-files ones are added if all -# the files fit into the category, and the any-glob-to-any-file ones are added -# as long as any file matches. The first ones are for "major" categories (the -# PR is all about that one topic, like HTTP/3), while the second ones are -# "addendums" that give useful information about a PR that's really mostly -# something else (e.g. CI if the PR also touches CI jobs). -# -# N.B. any-glob-to-all-files is misnamed; it acts like one-glob-to-all-files. -# Therefore, to get any-glob-to-all-files semantics, there must be a single glob -# with all matching patterns within braces. -# -# See https://github.com/actions/labeler/ for documentation on this file. - -appleOS: - - all: - - changed-files: - - any-glob-to-all-files: - - '{.github/workflows/macos.yml,lib/config-mac.h,lib/macos*,lib/vtls/sectransp*,m4/curl-sectransp.m4,MacOSX-Framework}' - -authentication: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/mk-ca-bundle.1,docs/libcurl/opts/CURLINFO_HTTPAUTH*,docs/libcurl/opts/CURLINFO_PROXYAUTH*,docs/libcurl/opts/CURLOPT_KRB*,docs/libcurl/opts/CURLOPT_SASL*,docs/libcurl/opts/CURLOPT_SERVICE_NAME*,docs/libcurl/opts/CURLOPT_USERNAME*,docs/libcurl/opts/CURLOPT_USERPWD*,docs/libcurl/opts/CURLOPT_XOAUTH*,lib/*gssapi*,lib/*krb5*,lib/*ntlm*,lib/curl_sasl.*,lib/http_aws*,lib/http_digest.*,lib/http_negotiate.*,lib/vauth/**,tests/server/fake_ntlm.c}' - -build: - - all: - - changed-files: - - any-glob-to-all-files: - - '{**/CMakeLists.txt,**/Makefile.am,**/Makefile.inc,**/Makefile.mk,**/*.m4,**/*.mk,*.m4,docs/INSTALL.cmake,lib/curl_config.h.cmake,lib/libcurl*.in,CMake/**,CMakeLists.txt,configure.ac,m4/**,MacOSX-Framework,Makefile.*,packages/**,plan9/**,projects/**,winbuild/**,libcurl.def}' - -CI: - - all: - - changed-files: - - any-glob-to-any-file: - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - '.github/**' - - 'appveyor.*' - - 'scripts/ci*' - - 'tests/azure.pm' - - 'tests/appveyor.pm' - - 'tests/CI.md' - -cmake: - - all: - - changed-files: - - any-glob-to-all-files: - - '{**/CMakeLists.txt,CMake/**,docs/INSTALL.cmake,lib/curl_config.h.cmake}' - -cmdline tool: - - all: - - changed-files: - - any-glob-to-any-file: - - 'docs/cmdline-opts/**' - - 'src/**' - -connecting & proxies: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/CONNECTION-FILTERS.md,docs/examples/ipv6.c,docs/libcurl/opts/CURLINFO_CONNECT*,docs/libcurl/opts/CURLINFO_PROXY*,docs/libcurl/opts/CURLOPT_ADDRESS*,docs/libcurl/opts/CURLOPT_CONNECT*,docs/libcurl/opts/CURLOPT_HAPROXY*,docs/libcurl/opts/CURLOPT_OPENSOCKET*,docs/libcurl/opts/CURLOPT_PRE_PROXY*,docs/libcurl/opts/CURLOPT_PROXY*,docs/libcurl/opts/CURLOPT_SOCKOPT*,docs/libcurl/opts/CURLOPT_SOCKS*,docs/libcurl/opts/CURLOPT_TCP*,docs/libcurl/opts/CURLOPT_TIMEOUT*,lib/cf-*proxy.*,lib/cf-socket.*,lib/cfilters.*,lib/conncache.*,lib/connect.*,lib/http_proxy.*,lib/if2ip.*,lib/noproxy.*,lib/socks.*,tests/server/socksd.c}' - -cookies: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/HTTP-COOKIES.md,docs/cmdline-opts/cookie*,docs/cmdline-opts/junk-session-cookies.d,docs/libcurl/opts/CURLINFO_COOKIE*,docs/libcurl/opts/CURLOPT_COOKIE*,docs/examples/cookie_interface.c,lib/cookie.*,lib/psl.*}' - -cryptography: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/CIPHERS.md,docs/RUSTLS.md,docs/libcurl/opts/CURLOPT_EGDSOCKET*,lib/*sha256*,lib/curl_des.*,lib/curl_hmac.*,lib/curl_md?.*,lib/md?.*,lib/rand.*}' - -DICT: - - all: - - changed-files: - - any-glob-to-all-files: - - '{lib/dict.*,tests/dictserver.py}' - -documentation: - - all: - - changed-files: - - any-glob-to-all-files: - - '{**/*.md,**/*.txt,**/*.1,**/*.3,CHANGES,docs/**,GIT-INFO,LICENSES/**,README,RELEASE-NOTES}' - - all-globs-to-all-files: - # negative matches - - '!**/CMakeLists.txt' - - '!**/Makefile.am' - -FTP: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/libcurl/opts/CURLINFO_FTP*,docs/libcurl/opts/CURLOPT_FTP*,docs/libcurl/opts/CURLOPT_WILDCARDMATCH*,docs/examples/ftp*,lib/curl_fnmatch.*,lib/curl_range.*,lib/ftp*,tests/ftp*' - -GOPHER: - - all: - - changed-files: - - any-glob-to-all-files: - - '{lib/gopher*}' - -HTTP: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/examples/hsts*,docs/examples/http-*,docs/examples/httpput*,docs/examples/https*,docs/examples/*post*,docs/HSTS.md,docs/HTTP-COOKIES.md,docs/libcurl/opts/CURLINFO_COOKIE*,docs/libcurl/opts/CURLOPT_COOKIE*,docs/libcurl/opts/CURLINFO_HTTP_**,docs/libcurl/opts/CURLINFO_REDIRECT*,docs/libcurl/opts/CURLINFO_REFER*,docs/libcurl/opts/CURLOPT_FOLLOWLOCATION*,docs/libcurl/opts/CURLOPT_HSTS*,docs/libcurl/opts/CURLOPT_HTTP*,docs/libcurl/opts/CURLOPT_POST.*,docs/libcurl/opts/CURLOPT_POSTFIELD*,docs/libcurl/opts/CURLOPT_POSTREDIR*,docs/libcurl/opts/CURLOPT_REDIR*,docs/libcurl/opts/CURLOPT_REFER*,docs/libcurl/opts/CURLOPT_TRAILER*,docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING*,lib/cf-https*,lib/cf-h1*,lib/cf-h2*,lib/cookie.*,lib/http*,tests/http*,tests/http-server.pl,tests/http/*,tests/nghttp*}' - -HTTP/2: - - all: - - changed-files: - - any-glob-to-all-files: - - '{CMake/FindNGHTTP2.cmake,CMake/FindQUICHE.cmake,docs/HTTP2.md,docs/libcurl/opts/CURLOPT_STREAM*,docs/examples/http2*,lib/http2*,tests/http2-server.pl}' - -HTTP/3: - - all: - - changed-files: - - any-glob-to-all-files: - - '{.github/workflows/ngtcp2*,.github/workflows/quiche*,CMake/FindMSH3.cmake,CMake/FindNGHTTP3.cmake,CMake/FindNGTCP2.cmake,docs/HTTP3.md,docs/examples/http3*,lib/vquic/**,tests/http3-server.pl,tests/nghttpx.conf}' - -Hyper: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/HYPER.md,lib/c-hyper.*}' - -IMAP: - - all: - - changed-files: - - any-glob-to-all-files: - - '{lib/imap*,docs/examples/imap*}' - -LDAP: - - all: - - changed-files: - - any-glob-to-all-files: - - '{lib/*ldap*}' - -libcurl API: - - all: - - changed-files: - - any-glob-to-any-file: - - 'docs/libcurl/ABI.md' - - 'docs/libcurl/curl_*.3' - - 'include/curl/**' - -logging: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/cmdline-opts/trace*,docs/libcurl/curl_global_trace*,lib/curl_trc*,tests/http/test_15_tracing.py}' - -MIME: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/libcurl/curl_form*,docs/libcurl/curl_mime_*,docs/libcurl/opts/CURLOPT_MIME*,docs/libcurl/opts/CURLOPT_HTTPPOST*,lib/formdata*,lib/mime*,src/tool_formparse.*}' - -MQTT: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/MQTT.md,lib/mqtt*,tests/server/mqttd.c}' - -name lookup: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/examples/resolve.c,docs/libcurl/opts/CURLINFO_NAMELOOKUP*,docs/libcurl/opts/CURLOPT_DNS*,docs/libcurl/opts/CURLOPT_DOH*,docs/libcurl/opts/CURLOPT_RESOLVE*,lib/asyn*,lib/curl_gethostname.*,lib/doh*,lib/host*,lib/idn*,lib/inet_pton.*,lib/socketpair*,tests/server/resolve.c}' - -POP3: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/examples/pop3*,lib/pop3.*}' - -RTMP: - - all: - - changed-files: - - any-glob-to-all-files: - - '{lib/curl_rtmp.*}' - -RTSP: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/libcurl/opts/CURLINFO_RTSP*,docs/libcurl/opts/CURLOPT_RTSP*,lib/rtsp.*,tests/rtspserver.pl,tests/server/rtspd.c}' - -SCP/SFTP: - - all: - - changed-files: - - any-glob-to-all-files: - - '{CMake/FindLibSSH2.cmake,docs/libcurl/opts/CURLOPT_SSH*,docs/examples/sftp*,lib/vssh/**,tests/sshhelp.pm,tests/sshserver.pl}' - -script: - - all: - - changed-files: - - any-glob-to-all-files: - - '{**/*.pl,**/*.sh,curl-config.in,docs/curl-config.1,docs/mk-ca-bundle.1,docs/THANKS-filter,scripts/**}' - -SMB: - - all: - - changed-files: - - any-glob-to-all-files: - - '{lib/smb.*,tests/smbserver.py}' - -SMTP: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/examples/smtp-*,docs/libcurl/opts/CURLOPT_MAIL*,lib/smtp.*}' - -tests: - - all: - - changed-files: - - any-glob-to-any-file: - - 'tests/**' - -TFTP: - - all: - - changed-files: - - any-glob-to-all-files: - - '{lib/tftp.*,tests/tftpserver.pl,tests/server/tftp*}' - -TLS: - - all: - - changed-files: - - any-glob-to-all-files: - - '{CMake/FindBearSSL.cmake,CMake/FindMbedTLS.cmake,CMake/FindWolfSSL.cmake,docs/examples/ssl*,docs/examples/*ssl.*,docs/examples/*tls.*,docs/SSL*,docs/libcurl/curl_global_sslset*,docs/libcurl/opts/CURLINFO_CA*,docs/libcurl/opts/CURLINFO_CERT*,docs/libcurl/opts/CURLINFO_SSL*,docs/libcurl/opts/CURLINFO_TLS*,docs/libcurl/opts/CURLOPT_CA*,docs/libcurl/opts/CURLOPT_CERT*,docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY*,docs/libcurl/opts/CURLOPT_SSL*,docs/libcurl/opts/CURLOPT_TLS*,docs/libcurl/opts/CURLOPT_USE_SSL*,lib/vtls/**,m4/curl-bearssl.m4,m4/curl-gnutls.m4,m4/curl-mbedtls.m4,m4/curl-openssl.m4,m4/curl-rustls.m4,m4/curl-schannel.m4,m4/curl-sectransp.m4,m4/curl-wolfssl.m4}' - -URL: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/libcurl/curl_url*,docs/URL-SYNTAX.md,docs/examples/parseurl*,include/curl/urlapi.h,lib/urlapi*}' - -WebSocket: - - all: - - changed-files: - - any-glob-to-all-files: - - '{docs/WEBSOCKET.md*,docs/examples/websocket*,docs/libcurl/curl_ws_*,docs/libcurl/libcurl-ws*,docs/libcurl/opts/CURLOPT_WS_*,include/curl/websockets.h,lib/ws.*,tests/http/clients/ws*,tests/http/test_20_websockets.py,tests/http/testenv/ws*}' - -Windows: - - all: - - changed-files: - - any-glob-to-all-files: - - '{appveyor.*,CMake/Platforms/WindowsCache.cmake,lib/*win32*,lib/curl_multibyte.*,lib/rename.*,lib/vtls/schannel*,m4/curl-schannel.m4,projects/**,src/tool_doswin.c,winbuild/**,libcurl.def}' diff --git a/.github/scripts/badwords.pl b/.github/scripts/badwords.pl deleted file mode 100755 index ffebad94e..000000000 --- a/.github/scripts/badwords.pl +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/perl -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl -# -# bad[:=]correct -# -# If separator is '=', the string will be compared case sensitively. -# If separator is ':', the check is done case insensitively. -# -my $w; -while() { - chomp; - if($_ =~ /^#/) { - next; - } - if($_ =~ /^([^:=]*)([:=])(.*)/) { - my ($bad, $sep, $better)=($1, $2, $3); - push @w, $bad; - $alt{$bad} = $better; - if($sep eq "=") { - $exactcase{$bad} = 1; - } - } -} - -my $errors; - -sub file { - my ($f) = @_; - my $l = 0; - open(F, "<$f"); - while() { - my $in = $_; - $l++; - chomp $in; - if($in =~ /^ /) { - next; - } - # remove the link part - $in =~ s/(\[.*\])\(.*\)/$1/g; - # remove backticked texts - $in =~ s/\`.*\`//g; - foreach my $w (@w) { - my $case = $exactcase{$w}; - if(($in =~ /^(.*)$w/i && !$case) || - ($in =~ /^(.*)$w/ && $case) ) { - my $p = $1; - my $c = length($p)+1; - print STDERR "$f:$l:$c: error: found bad word \"$w\"\n"; - printf STDERR " %4d | $in\n", $l; - printf STDERR " | %*s^%s\n", length($p), " ", - "~" x (length($w)-1); - printf STDERR " maybe use \"%s\" instead?\n", $alt{$w}; - $errors++; - } - } - } - close(F); -} - -my @files = @ARGV; - -foreach my $each (@files) { - file($each); -} -exit $errors; diff --git a/.github/scripts/badwords.txt b/.github/scripts/badwords.txt deleted file mode 100644 index 0e6be76c6..000000000 --- a/.github/scripts/badwords.txt +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl -# -back-end:backend -e-mail:email -run-time:runtime -set-up:setup -tool chain:toolchain -tool-chain:toolchain -wild-card:wildcard -wild card:wildcard -i'm:I am -you've:You have -they've:They have -they're:They are -should've:should have -don't:do not -could've:could have -doesn't:does not -isn't:is not - a html: an html - a http: an http - a ftp: an ftp - url =URL -internet\W=Internet -isation:ization -it's:it is -there's:there is -[^.]\. And: Rewrite it somehow? -^(And|So|But) = Rewrite it somehow? -\. But: Rewrite it somehow? -file name :filename -\. So : Rewrite without "so" ? - dir :directory -you'd:you would -you'll:you will -can't:cannot -that's:that is -web page:webpage -host name\W:hostname -file name\W:filename -didn't:did not -doesn't:does not -won't:will not -couldn't:could not diff --git a/.github/scripts/cleancmd.pl b/.github/scripts/cleancmd.pl deleted file mode 100755 index 5d0fe2b2f..000000000 --- a/.github/scripts/cleancmd.pl +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/perl -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl -# -# Input: a cmdline docs markdown, it gets modfied *in place* -# -# The main purpose is to strip off the leading meta-data part, but also to -# clean up whatever else the spell checker might have a problem with that we -# still deem is fine. - -my $header = 1; -while(1) { - # set this if the markdown has no meta-data header to skip - if($ARGV[0] eq "--no-header") { - shift @ARGV; - $header = 0; - } - else { - last; - } -} - -my $f = $ARGV[0]; - -open(F, "<$f") or die; - -my $ignore = $header; -my $sepcount = 0; -my @out; -while() { - if(/^---/ && $header) { - if(++$sepcount == 2) { - $ignore = 0; - } - next; - } - next if($ignore); - - # strip out all long command line options - $_ =~ s/--[a-z0-9-]+//g; - - # strip out https URLs, we don't want them spellchecked - $_ =~ s!https://[a-z0-9\#_/.-]+!!gi; - - push @out, $_; -} -close(F); - -open(O, ">$f") or die; -print O @out; -close(O); diff --git a/.github/scripts/codespell-ignore.txt b/.github/scripts/codespell-ignore.txt deleted file mode 100644 index 3832cec4d..000000000 --- a/.github/scripts/codespell-ignore.txt +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl -clen -te -wont -statics -nome -wast -numer -anull -inout -msdos -ba -fo diff --git a/.github/scripts/verify-examples.pl b/.github/scripts/verify-examples.pl deleted file mode 100755 index 28d24595f..000000000 --- a/.github/scripts/verify-examples.pl +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -my @files = @ARGV; -my $cfile = "test.c"; -my $check = "./scripts/checksrc.pl"; -my $error; - -if($files[0] eq "-h") { - print "Usage: verify-synopsis [man pages]\n"; - exit; -} - -sub testcompile { - my $rc = system("gcc -c test.c -DCURL_DISABLE_TYPECHECK -DCURL_ALLOW_OLD_MULTI_SOCKET -DCURL_DISABLE_DEPRECATION -Wunused -Werror -Wno-unused-but-set-variable -I include") >> 8; - return $rc; -} - -sub checksrc { - my $rc = system("$check test.c") >> 8; - return $rc; -} - -sub extract { - my($f) = @_; - my $syn = 0; - my $l = 0; - my $iline = 0; - my $fail = 0; - open(F, "<$f") or die "failed opening input file $f : $!"; - open(O, ">$cfile") or die "failed opening output file $cfile : $!"; - print O "#include \n"; - while() { - $iline++; - if(/^.SH EXAMPLE/) { - $syn = 1 - } - elsif($syn == 1) { - if(/^.nf/) { - $syn++; - print O "/* !checksrc! disable UNUSEDIGNORE all */\n"; - print O "/* !checksrc! disable COPYRIGHT all */\n"; - print O "/* !checksrc! disable FOPENMODE all */\n"; - printf O "#line %d \"$f\"\n", $iline+1; - } - } - elsif($syn == 2) { - if(/^.fi/) { - last; - } - if(/(?, et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -my @files = @ARGV; -my $cfile = "test.c"; - -if($files[0] eq "-h") { - print "Usage: verify-synopsis [man pages]\n"; - exit; -} - -sub testcompile { - my $rc = system("gcc -c test.c -DCURL_DISABLE_TYPECHECK -DCURL_ALLOW_OLD_MULTI_SOCKET -I include") >> 8; - return $rc; -} - - -sub extract { - my($f) = @_; - my $syn = 0; - my $l = 0; - my $iline = 0; - open(F, "<$f"); - open(O, ">$cfile"); - while() { - $iline++; - if(/^.SH SYNOPSIS/) { - $syn = 1 - } - elsif($syn == 1) { - if(/^.nf/) { - $syn++; - print O "#line $iline \"$f\"\n"; - } - } - elsif($syn == 2) { - if(/^.fi/) { - last; - } - # turn the vararg argument into vararg - $_ =~ s/, parameter\)\;/, ...);/; - print O $_; - $l++; - } - } - close(F); - close(O); - - return 0; -} - -my $error; -for my $m (@files) { - print "Verify $m\n"; - extract($m); - $error |= testcompile($m); -} -exit $error; diff --git a/.github/workflows/awslc.yml b/.github/workflows/awslc.yml deleted file mode 100644 index 485251641..000000000 --- a/.github/workflows/awslc.yml +++ /dev/null @@ -1,152 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: Linux AWS-LC - -on: - push: - branches: - - master - - '*/ci' - paths-ignore: - - '**/*.md' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - pull_request: - branches: - - master - paths-ignore: - - '**/*.md' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - -concurrency: - # Hardcoded workflow filename as workflow name above is just Linux again - group: awslc-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true - -permissions: {} - -env: - MAKEFLAGS: -j 3 - awslc-version: 1.13.0 - -jobs: - autoconf: - name: awslc (autoconf) - runs-on: 'ubuntu-latest' - timeout-minutes: 30 - - steps: - - run: | - sudo apt-get update --yes - sudo apt-get install --yes libtool autoconf automake pkg-config stunnel4 libpsl-dev - # ensure we don't pick up openssl in this build - sudo apt remove --yes libssl-dev - sudo python3 -m pip install impacket - name: 'install prereqs and impacket' - - - name: cache awslc - uses: actions/cache@v4 - id: cache-awslc - env: - cache-name: cache-awslc - with: - path: /home/runner/awslc - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.awslc-version }} - - - name: build awslc - if: steps.cache-awslc.outputs.cache-hit != 'true' - run: | - curl -LOsSf --retry 6 --retry-connrefused --max-time 999 \ - https://github.com/awslabs/aws-lc/archive/refs/tags/v${{ env.awslc-version }}.tar.gz - tar xzf v${{ env.awslc-version }}.tar.gz - mkdir aws-lc-${{ env.awslc-version }}-build - cd aws-lc-${{ env.awslc-version }}-build - cmake -DCMAKE_INSTALL_PREFIX=$HOME/awslc ../aws-lc-${{ env.awslc-version }} - cmake --build . --parallel - cmake --install . - - - uses: actions/checkout@v4 - - - run: autoreconf -fi - name: 'autoreconf' - - - run: | - mkdir build - cd build - ../configure --enable-warnings --enable-werror --with-openssl=$HOME/awslc - cd .. - name: 'configure out-of-tree' - - - run: make -C build V=1 - name: 'make' - - - run: make -C build V=1 examples - name: 'make examples' - - - run: make -C build V=1 -C tests - name: 'make tests' - - - run: make -C build V=1 test-ci - name: 'run tests' - - cmake: - name: awslc (cmake) - runs-on: 'ubuntu-latest' - timeout-minutes: 15 - - steps: - - run: | - sudo apt-get update - sudo apt-get install cmake stunnel4 - # ensure we don't pick up openssl in this build - sudo apt remove --yes libssl-dev - sudo python3 -m pip install impacket - name: 'install prereqs and impacket' - - - name: cache awslc - uses: actions/cache@v4 - id: cache-awslc - env: - cache-name: cache-awslc - with: - path: /home/runner/awslc - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.awslc-version }} - - - name: build awslc - if: steps.cache-awslc.outputs.cache-hit != 'true' - run: | - curl -LOsSf --retry 6 --retry-connrefused --max-time 999 \ - https://github.com/awslabs/aws-lc/archive/refs/tags/v${{ env.awslc-version }}.tar.gz - tar xzf v${{ env.awslc-version }}.tar.gz - mkdir aws-lc-${{ env.awslc-version }}-build - cd aws-lc-${{ env.awslc-version }}-build - cmake -DCMAKE_INSTALL_PREFIX=$HOME/awslc ../aws-lc-${{ env.awslc-version }} - cmake --build . --parallel - cmake --install . - - - uses: actions/checkout@v4 - - # CMAKE_COMPILE_WARNING_AS_ERROR is available in cmake 3.24 or later - - run: cmake -Bbuild -DOPENSSL_ROOT_DIR=$HOME/awslc -DBUILD_SHARED_LIBS=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=ON . - name: 'cmake generate out-of-tree' - - - run: cmake --build build --parallel - name: 'cmake build' - - - run: cmake --install build --prefix $HOME/curl --strip - name: 'cmake install' diff --git a/.github/workflows/badwords.yml b/.github/workflows/badwords.yml deleted file mode 100644 index fc0b52001..000000000 --- a/.github/workflows/badwords.yml +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: badwords - -on: - # Trigger the workflow on push or pull requests, but only for the - # master branch - push: - branches: - - master - - '*/ci' - pull_request: - branches: - - master - -jobs: - check: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: check - run: ./.github/scripts/badwords.pl < .github/scripts/badwords.txt docs/*.md docs/libcurl/*.md docs/libcurl/opts/*.md diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml deleted file mode 100644 index 2b095dae7..000000000 --- a/.github/workflows/codespell.yml +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: Codespell - -on: - push: - branches: - - master - - '*/ci' - paths: - - 'lib/**' - - 'src/**' - - 'include/**' - pull_request: - branches: - - master - - 'lib/**' - - 'src/**' - - 'include/**' - -jobs: - codespell: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: install - run: | - sudo apt-get update - sudo apt-get install codespell - - - name: spellcheck - run: codespell --skip src/tool_hugehelp.c -I .github/scripts/codespell-ignore.txt include src lib diff --git a/.github/workflows/configure-vs-cmake.yml b/.github/workflows/configure-vs-cmake.yml deleted file mode 100644 index dc2273f73..000000000 --- a/.github/workflows/configure-vs-cmake.yml +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: configure-vs-cmake -on: - push: - branches: - - master - paths: - - '*.ac' - - '**/*.m4' - - '**/CMakeLists.txt' - - 'lib/curl_config.h.cmake' - - 'scripts/cmp-config.pl' - - pull_request: - branches: - - master - paths: - - '*.ac' - - '**/*.m4' - - '**/CMakeLists.txt' - - 'lib/curl_config.h.cmake' - - 'scripts/cmp-config.pl' - -permissions: {} - -jobs: - check: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: run configure --with-openssl - run: | - autoreconf -fi - ./configure --with-openssl --without-libpsl - - - name: run cmake - run: | - mkdir build && cd build && cmake .. - - - name: compare generated curl_config.h files - run: ./scripts/cmp-config.pl lib/curl_config.h build/lib/curl_config.h diff --git a/.github/workflows/distcheck.yml b/.github/workflows/distcheck.yml deleted file mode 100644 index 15068b640..000000000 --- a/.github/workflows/distcheck.yml +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: dist - -on: - push: - branches: - - master - - '*/ci' - pull_request: - branches: - - master - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true - -jobs: - maketgz-and-verify-in-tree: - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - uses: actions/checkout@v4 - - - run: sudo apt-get purge -y curl libcurl4 libcurl4-doc - name: 'remove preinstalled curl libcurl4{-doc}' - - - run: autoreconf -fi - name: 'autoreconf' - - - run: ./configure --without-ssl --without-libpsl - name: 'configure' - - - run: make V=1 && make V=1 clean - name: 'make and clean' - - - run: ./maketgz 99.98.97 - name: 'maketgz' - - - uses: actions/upload-artifact@v4 - with: - name: 'release-tgz' - path: 'curl-99.98.97.tar.gz' - - - run: | - echo "::stop-commands::$(uuidgen)" - tar xvf curl-99.98.97.tar.gz - pushd curl-99.98.97 - ./configure --prefix=$HOME/temp --without-ssl --without-libpsl - make - make test-ci - make install - popd - # basic check of the installed files - bash scripts/installcheck.sh $HOME/temp - rm -rf curl-99.98.97 - name: 'verify in-tree configure build including install' - - verify-out-of-tree-docs: - runs-on: ubuntu-latest - timeout-minutes: 30 - needs: maketgz-and-verify-in-tree - steps: - - uses: actions/download-artifact@v4 - with: - name: 'release-tgz' - - - run: | - echo "::stop-commands::$(uuidgen)" - tar xvf curl-99.98.97.tar.gz - touch curl-99.98.97/docs/{cmdline-opts,libcurl}/Makefile.inc - mkdir build - pushd build - ../curl-99.98.97/configure --without-ssl --without-libpsl - make - make test-ci - popd - rm -rf build - rm -rf curl-99.98.97 - name: 'verify out-of-tree configure build including docs' - - verify-out-of-tree-autotools-debug: - runs-on: ubuntu-latest - timeout-minutes: 30 - needs: maketgz-and-verify-in-tree - steps: - - uses: actions/download-artifact@v4 - with: - name: 'release-tgz' - - - run: | - echo "::stop-commands::$(uuidgen)" - tar xvf curl-99.98.97.tar.gz - pushd curl-99.98.97 - mkdir build - pushd build - ../configure --without-ssl --enable-debug "--prefix=${PWD}/pkg" --without-libpsl - make -j3 - make -j3 test-ci - make -j3 install - name: 'verify out-of-tree autotools debug build' - - verify-out-of-tree-cmake: - runs-on: ubuntu-latest - timeout-minutes: 30 - needs: maketgz-and-verify-in-tree - steps: - - uses: actions/download-artifact@v4 - with: - name: 'release-tgz' - - - run: | - echo "::stop-commands::$(uuidgen)" - tar xvf curl-99.98.97.tar.gz - pushd curl-99.98.97 - mkdir build - pushd build - cmake .. - make - name: 'verify out-of-tree cmake build' diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml deleted file mode 100644 index b874c31b5..000000000 --- a/.github/workflows/label.yml +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (C) Daniel Fandrich, , et al. -# -# SPDX-License-Identifier: curl - -# This workflow will triage pull requests and apply a label based on the -# paths that are modified in the pull request. -# -# To use this workflow, you will need to set up a .github/labeler.yml -# file with configuration. For more information, see: -# https://github.com/actions/labeler - -name: Labeler -on: [pull_request_target] - -jobs: - label: - - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: write - - steps: - - uses: actions/labeler@v5 - with: - repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/linux32.yml b/.github/workflows/linux32.yml deleted file mode 100644 index e3fca3d1d..000000000 --- a/.github/workflows/linux32.yml +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright (C) Dan Fandrich -# -# SPDX-License-Identifier: curl - -name: Linux 32-bit - -on: - push: - branches: - - master - - '*/ci' - paths-ignore: - - '**/*.md' - - '**/CMakeLists.txt' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'CMake/**' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - pull_request: - branches: - - master - paths-ignore: - - '**/*.md' - - '**/CMakeLists.txt' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'CMake/**' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true - -permissions: {} - -env: - MAKEFLAGS: -j 3 - -jobs: - linux-i686: - name: ${{ matrix.build.name }} - runs-on: 'ubuntu-22.04' - timeout-minutes: 90 - strategy: - fail-fast: false - matrix: - build: - - name: Linux i686 - install_packages: gcc-11-i686-linux-gnu libssl-dev:i386 zlib1g-dev:i386 libpsl-dev:i386 libbrotli-dev:i386 libzstd-dev:i386 - configure: --enable-debug --enable-websockets --with-openssl --host=i686-linux-gnu CC=i686-linux-gnu-gcc-11 PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig CPPFLAGS=-I/usr/include/i386-linux-gnu LDFLAGS=-L/usr/lib/i386-linux-gnu - - steps: - - run: | - sudo dpkg --add-architecture i386 - sudo apt-get update -y - sudo apt-get install -y --no-install-suggests --no-install-recommends libtool autoconf automake pkg-config stunnel4 ${{ matrix.build.install_packages }} - sudo python3 -m pip install impacket - name: 'install prereqs' - - - uses: actions/checkout@v4 - - - run: autoreconf -fi - name: 'autoreconf' - - - run: ./configure --enable-warnings --enable-werror ${{ matrix.build.configure }} - name: 'configure' - - - run: make V=1 - name: 'make' - - - run: ./src/curl -V - name: 'check curl -V output' - - - run: make V=1 examples - name: 'make examples' - - - run: make V=1 -C tests - name: 'make tests' - - - run: make V=1 test-ci - name: 'run tests' - env: - TFLAGS: "${{ matrix.build.tflags }}" diff --git a/.github/workflows/man-examples.yml b/.github/workflows/man-examples.yml deleted file mode 100644 index 6f0d1e8ae..000000000 --- a/.github/workflows/man-examples.yml +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: manpage examples - -on: - push: - branches: - - master - - '*/ci' - paths: - - 'docs/libcurl/curl_*.3' - - 'docs/libcurl/opts/*.3' - - '.github/scripts/verify-examples.pl' - pull_request: - branches: - - master - paths: - - 'docs/libcurl/curl_*.3' - - 'docs/libcurl/opts/*.3' - - '.github/scripts/verify-examples.pl' - -jobs: - verify: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: render nroff versions - run: autoreconf -fi && ./configure --without-ssl --without-libpsl && make -C docs - - - name: verify examples - run: ./.github/scripts/verify-examples.pl docs/libcurl/curl*.3 docs/libcurl/opts/*.3 diff --git a/.github/workflows/ngtcp2-linux.yml b/.github/workflows/ngtcp2-linux.yml deleted file mode 100644 index 19172b48f..000000000 --- a/.github/workflows/ngtcp2-linux.yml +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: ngtcp2-linux - -on: - push: - branches: - - master - - '*/ci' - paths-ignore: - - '**/*.md' - - '**/CMakeLists.txt' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'CMake/**' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - pull_request: - branches: - - master - paths-ignore: - - '**/*.md' - - '**/CMakeLists.txt' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'CMake/**' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - -concurrency: - # Hardcoded workflow filename as workflow name above is just Linux again - group: ngtcp2-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true - -permissions: {} - -env: - MAKEFLAGS: -j 3 - quictls-version: 3.1.4+quic - gnutls-version: 3.8.3 - wolfssl-version: master - nghttp3-version: v1.1.0 - ngtcp2-version: v1.2.0 - nghttp2-version: v1.59.0 - mod_h2-version: v2.0.26 - -jobs: - autotools: - name: ${{ matrix.build.name }} - runs-on: 'ubuntu-latest' - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - build: - - name: quictls - configure: >- - PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib" - --with-ngtcp2=$HOME/nghttpx --enable-warnings --enable-werror --enable-debug --disable-ntlm - --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" - --with-openssl=$HOME/nghttpx - - name: gnutls - configure: >- - PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib" - --with-ngtcp2=$HOME/nghttpx --enable-warnings --enable-werror --enable-debug - --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" - --with-gnutls=$HOME/nghttpx - - name: wolfssl - configure: >- - PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib" - --with-ngtcp2=$HOME/nghttpx --enable-warnings --enable-werror --enable-debug - --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" - --with-wolfssl=$HOME/nghttpx - - steps: - - run: | - sudo apt-get update - sudo apt-get install libtool autoconf automake pkg-config stunnel4 \ - libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev \ - nettle-dev libp11-kit-dev libtspi-dev libunistring-dev guile-2.2-dev libtasn1-bin \ - libtasn1-6-dev libidn2-0-dev gawk gperf libtss2-dev dns-root-data bison gtk-doc-tools \ - texinfo texlive texlive-extra-utils autopoint libev-dev \ - apache2 apache2-dev libnghttp2-dev - name: 'install prereqs and impacket, pytest, crypto, apache2' - - - name: cache quictls - uses: actions/cache@v4 - id: cache-quictls-no-deprecated - env: - cache-name: cache-quictls-no-deprecated - with: - path: /home/runner/quictls - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.quictls-version }} - - - if: steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b openssl-${{ env.quictls-version }} https://github.com/quictls/openssl quictls - cd quictls - ./config no-deprecated --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib - make - name: 'build quictls' - - - run: | - cd $HOME/quictls - make -j1 install_sw - name: 'install quictls' - - - - name: cache gnutls - uses: actions/cache@v4 - id: cache-gnutls - env: - cache-name: cache-gnutls - with: - path: /home/runner/gnutls - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.gnutls-version }} - - - if: steps.cache-gnutls.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b ${{ env.gnutls-version }} https://github.com/gnutls/gnutls.git - cd gnutls - ./bootstrap - ./configure --prefix=$HOME/nghttpx \ - PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib -L$HOME/nghttpx/lib" \ - --with-included-libtasn1 --with-included-unistring \ - --disable-guile --disable-doc --disable-tests --disable-tools - make - name: 'build gnutls' - - - run: | - cd $HOME/gnutls - make install - name: 'install gnutls' - - - - name: cache wolfssl - uses: actions/cache@v4 - id: cache-wolfssl - env: - cache-name: cache-wolfssl - with: - path: /home/runner/wolfssl - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.wolfssl-version }} - - - if: steps.cache-wolfssl.outputs.cache-hit != 'true' || ${{ env.wolfssl-version }} == 'master' - run: | - cd $HOME - rm -rf wolfssl - git clone --quiet --depth=1 -b ${{ env.wolfssl-version }} https://github.com/wolfSSL/wolfssl.git - cd wolfssl - ./autogen.sh - ./configure --enable-all --enable-quic --prefix=$HOME/nghttpx - make - name: 'build wolfssl' - - - run: | - cd $HOME/wolfssl - make install - name: 'install wolfssl' - - - - name: cache nghttp3 - uses: actions/cache@v4 - id: cache-nghttp3 - env: - cache-name: cache-nghttp3 - with: - path: /home/runner/nghttp3 - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp3-version }} - - - if: steps.cache-nghttp3.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b ${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3 - cd nghttp3 - autoreconf -fi - ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only - make - name: 'build nghttp3' - - - run: | - cd $HOME/nghttp3 - make install - name: 'install nghttp3' - - # depends on all other cached libs built so far - - run: | - git clone --quiet --depth=1 -b ${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2 - cd ngtcp2 - autoreconf -fi - ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl --with-gnutls --with-wolfssl - make install - name: 'install ngtcp2' - - # depends on all other cached libs built so far - - run: | - git clone --quiet --depth=1 -b ${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2 - cd nghttp2 - autoreconf -fi - ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3 - make install - name: 'install nghttp2' - - - name: cache mod_h2 - uses: actions/cache@v4 - id: cache-mod_h2 - env: - cache-name: cache-mod_h2 - with: - path: /home/runner/mod_h2 - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.mod_h2-version }} - - - if: steps.cache-mod_h2.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b ${{ env.mod_h2-version }} https://github.com/icing/mod_h2 - cd mod_h2 - autoreconf -fi - ./configure - make - name: 'build mod_h2' - - - run: | - cd $HOME/mod_h2 - sudo make install - name: 'install mod_h2' - - - uses: actions/checkout@v4 - - - run: | - sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt - name: 'install python test prereqs' - - - run: autoreconf -fi - name: 'autoreconf' - - - run: ./configure ${{ matrix.build.configure }} - name: 'configure' - - - run: make V=1 - name: 'make' - - - run: make V=1 examples - name: 'make examples' - - - run: make V=1 -C tests - name: 'make tests' - - - run: make V=1 test-ci - name: 'run tests' - env: - TFLAGS: "${{ matrix.build.tflags }}" - - - run: pytest -v tests - name: 'run pytest' - env: - TFLAGS: "${{ matrix.build.tflags }}" - CURL_CI: github diff --git a/.github/workflows/osslq-linux.yml b/.github/workflows/osslq-linux.yml deleted file mode 100644 index 997e35bab..000000000 --- a/.github/workflows/osslq-linux.yml +++ /dev/null @@ -1,233 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: osslq-linux - -on: - push: - branches: - - master - - '*/ci' - paths-ignore: - - '**/*.md' - - '**/CMakeLists.txt' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'CMake/**' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - pull_request: - branches: - - master - paths-ignore: - - '**/*.md' - - '**/CMakeLists.txt' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'CMake/**' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - -concurrency: - # Hardcoded workflow filename as workflow name above is just Linux again - group: osslq-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true - -permissions: {} - -env: - MAKEFLAGS: -j 3 - openssl3-version: openssl-3.2.0 - quictls-version: 3.1.4+quic - nghttp3-version: v1.1.0 - ngtcp2-version: v1.2.0 - nghttp2-version: v1.59.0 - mod_h2-version: v2.0.26 - -jobs: - autotools: - name: ${{ matrix.build.name }} - runs-on: 'ubuntu-latest' - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - build: - - name: openssl-quic - configure: >- - PKG_CONFIG_PATH="$HOME/openssl3/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/openssl3/lib" - --enable-warnings --enable-werror --enable-debug --disable-ntlm - --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" - --with-openssl=$HOME/openssl3 --with-openssl-quic - --with-nghttp3=$HOME/nghttpx - - steps: - - run: | - sudo apt-get update - sudo apt-get install libtool autoconf automake pkg-config stunnel4 \ - libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev \ - nettle-dev libp11-kit-dev libtspi-dev libunistring-dev guile-2.2-dev libtasn1-bin \ - libtasn1-6-dev libidn2-0-dev gawk gperf libtss2-dev dns-root-data bison gtk-doc-tools \ - texinfo texlive texlive-extra-utils autopoint libev-dev \ - apache2 apache2-dev libnghttp2-dev - name: 'install prereqs and impacket, pytest, crypto, apache2' - - - name: cache openssl3 - if: contains(matrix.build.install_steps, 'openssl3') - uses: actions/cache@v3 - id: cache-openssl3 - env: - cache-name: cache-openssl3 - with: - path: /home/runner/openssl3 - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.openssl3-version }} - - - name: 'install openssl3' - if: steps.cache-openssl3.outputs.cache-hit != 'true' - run: | - git clone --quiet --depth=1 -b ${{ env.openssl3-version }} https://github.com/openssl/openssl - cd openssl - ./config --prefix=$HOME/openssl3 --libdir=$HOME/openssl3/lib - make -j1 install_sw - - - name: cache quictls - if: contains(matrix.build.install_steps, 'quictls') - uses: actions/cache@v3 - id: cache-quictls - env: - cache-name: cache-quictls - with: - path: /home/runner/quictls - key: ${{ runner.os }}-build-${{ env.cache-name }}-quictls-${{ env.quictls-version }} - - - name: cache quictls - uses: actions/cache@v3 - id: cache-quictls-no-deprecated - env: - cache-name: cache-quictls-no-deprecated - with: - path: /home/runner/quictls - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.quictls-version }} - - - if: steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b openssl-${{ env.quictls-version }} https://github.com/quictls/openssl quictls - cd quictls - ./config no-deprecated --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib - make - name: 'build quictls' - - - run: | - cd $HOME/quictls - make -j1 install_sw - name: 'install quictls' - - - - name: cache nghttp3 - uses: actions/cache@v3 - id: cache-nghttp3 - env: - cache-name: cache-nghttp3 - with: - path: /home/runner/nghttp3 - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp3-version }} - - - if: steps.cache-nghttp3.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b ${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3 - cd nghttp3 - autoreconf -fi - ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only - make - name: 'build nghttp3' - - - run: | - cd $HOME/nghttp3 - make install - name: 'install nghttp3' - - # depends on all other cached libs built so far - - run: | - git clone --quiet --depth=1 -b ${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2 - cd ngtcp2 - autoreconf -fi - ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl - make install - name: 'install ngtcp2' - - # depends on all other cached libs built so far - - run: | - git clone --quiet --depth=1 -b ${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2 - cd nghttp2 - autoreconf -fi - ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3 - make install - name: 'install nghttp2' - - - name: cache mod_h2 - uses: actions/cache@v3 - id: cache-mod_h2 - env: - cache-name: cache-mod_h2 - with: - path: /home/runner/mod_h2 - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.mod_h2-version }} - - - if: steps.cache-mod_h2.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b ${{ env.mod_h2-version }} https://github.com/icing/mod_h2 - cd mod_h2 - autoreconf -fi - ./configure - make - name: 'build mod_h2' - - - run: | - cd $HOME/mod_h2 - sudo make install - name: 'install mod_h2' - - - uses: actions/checkout@v4 - - - run: | - sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt - name: 'install python test prereqs' - - - run: autoreconf -fi - name: 'autoreconf' - - - run: ./configure ${{ matrix.build.configure }} - name: 'configure' - - - run: make V=1 - name: 'make' - - - run: make V=1 examples - name: 'make examples' - - - run: make V=1 -C tests - name: 'make tests' - - - run: make V=1 test-ci - name: 'run tests' - env: - # 2500 and 25002 fail atm due to fin handling - TFLAGS: "!http/3" - - - run: pytest -v tests - name: 'run pytest' - env: - TFLAGS: "${{ matrix.build.tflags }}" - CURL_CI: github diff --git a/.github/workflows/quiche-linux.yml b/.github/workflows/quiche-linux.yml deleted file mode 100644 index 40fc4d580..000000000 --- a/.github/workflows/quiche-linux.yml +++ /dev/null @@ -1,210 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: quiche - -on: - push: - branches: - - master - - '*/ci' - paths-ignore: - - '**/*.md' - - '**/CMakeLists.txt' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'CMake/**' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - pull_request: - branches: - - master - paths-ignore: - - '**/*.md' - - '**/CMakeLists.txt' - - '.azure-pipelines.yml' - - '.circleci/**' - - '.cirrus.yml' - - 'appveyor.*' - - 'CMake/**' - - 'packages/**' - - 'plan9/**' - - 'projects/**' - - 'winbuild/**' - -concurrency: - # Hardcoded workflow filename as workflow name above is just Linux again - group: quiche-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: true - -permissions: {} - -env: - MAKEFLAGS: -j 3 - openssl-version: 3.1.4+quic - nghttp3-version: v1.1.0 - ngtcp2-version: v1.2.0 - nghttp2-version: v1.59.0 - quiche-version: 0.20.0 - mod_h2-version: v2.0.26 - -jobs: - autotools: - name: ${{ matrix.build.name }} - runs-on: 'ubuntu-latest' - timeout-minutes: 60 - strategy: - fail-fast: false - matrix: - build: - - name: quiche - install: >- - libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev - install_steps: pytest - configure: >- - LDFLAGS="-Wl,-rpath,/home/runner/quiche/target/release" - --with-openssl=/home/runner/quiche/quiche/deps/boringssl/src - --enable-debug - --with-quiche=/home/runner/quiche/target/release - --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" - --with-ca-fallback - - steps: - - run: | - sudo apt-get update - sudo apt-get install libtool autoconf automake pkg-config stunnel4 ${{ matrix.build.install }} - sudo apt-get install apache2 apache2-dev libnghttp2-dev - name: 'install prereqs and impacket, pytest, crypto' - - - name: cache nghttpx - uses: actions/cache@v4 - id: cache-nghttpx - env: - cache-name: cache-nghttpx - with: - path: /home/runner/nghttpx - key: ${{ runner.os }}-build-${{ env.cache-name }}-openssl-${{ env.openssl-version }}-nghttp3-${{ env.nghttp3-version }}-ngtcp2-${{ env.ngtcp2-version }}-nghttp2-${{ env.nghttp2-version }} - - - if: steps.cache-nghttpx.outputs.cache-hit != 'true' - run: | - git clone --quiet --depth=1 -b openssl-${{ env.openssl-version }} https://github.com/quictls/openssl - cd openssl - ./config --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib - make -j1 install_sw - name: 'install quictls' - - - if: steps.cache-nghttpx.outputs.cache-hit != 'true' - run: | - git clone --quiet --depth=1 -b ${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3 - cd nghttp3 - autoreconf -fi - ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only - make install - name: 'install nghttp3' - - - if: steps.cache-nghttpx.outputs.cache-hit != 'true' - run: | - git clone --quiet --depth=1 -b ${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2 - cd ngtcp2 - autoreconf -fi - ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl - make install - name: 'install ngtcp2' - - - if: steps.cache-nghttpx.outputs.cache-hit != 'true' - run: | - git clone --quiet --depth=1 -b ${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2 - cd nghttp2 - autoreconf -fi - ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3 - make install - name: 'install nghttp2' - - - name: cache quiche - uses: actions/cache@v4 - id: cache-quiche - env: - cache-name: cache-quiche - with: - path: /home/runner/quiche - key: ${{ runner.os }}-build-${{ env.cache-name }}-quiche-${{ env.quiche-version }} - - - if: steps.cache-quiche.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b ${{ env.quiche-version }} --recursive https://github.com/cloudflare/quiche.git - cd quiche - #### Work-around https://github.com/curl/curl/issues/7927 ####### - #### See https://github.com/alexcrichton/cmake-rs/issues/131 #### - sed -i -e 's/cmake = "0.1"/cmake = "=0.1.45"/' quiche/Cargo.toml - - cargo build -v --package quiche --release --features ffi,pkg-config-meta,qlog --verbose - mkdir -v quiche/deps/boringssl/src/lib - ln -vnf $(find target/release -name libcrypto.a -o -name libssl.a) quiche/deps/boringssl/src/lib/ - - # include dir - # /home/runner/quiche/quiche/deps/boringssl/src/include - # lib dir - # /home/runner/quiche/quiche/deps/boringssl/src/lib - name: 'build quiche and boringssl' - - - name: cache mod_h2 - uses: actions/cache@v4 - id: cache-mod_h2 - env: - cache-name: cache-mod_h2 - with: - path: /home/runner/mod_h2 - key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.mod_h2-version }} - - - if: steps.cache-mod_h2.outputs.cache-hit != 'true' - run: | - cd $HOME - git clone --quiet --depth=1 -b ${{ env.mod_h2-version }} https://github.com/icing/mod_h2 - cd mod_h2 - autoreconf -fi - ./configure - make - name: 'build mod_h2' - - - run: | - cd $HOME/mod_h2 - sudo make install - name: 'install mod_h2' - - - uses: actions/checkout@v4 - - - run: | - sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt - name: 'install python test prereqs' - - - run: autoreconf -fi - name: 'autoreconf' - - - run: ./configure ${{ matrix.build.configure }} - name: 'configure' - - - run: make V=1 - name: 'make' - - - run: make V=1 examples - name: 'make examples' - - - run: make V=1 -C tests - name: 'make tests' - - - run: make V=1 test-ci - name: 'run tests' - env: - TFLAGS: "${{ matrix.build.tflags }}" - - - run: pytest -v tests - name: 'run pytest' - env: - TFLAGS: "${{ matrix.build.tflags }}" - CURL_CI: github diff --git a/.github/workflows/synopsis.yml b/.github/workflows/synopsis.yml deleted file mode 100644 index 0938f4bfc..000000000 --- a/.github/workflows/synopsis.yml +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -name: SYNOPSIS - -on: - push: - branches: - - master - - '*/ci' - paths: - - 'docs/libcurl/curl_*.3' - pull_request: - branches: - - master - paths: - - 'docs/libcurl/curl_*.3' - -jobs: - verify: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: verify-synopsis - run: ./.github/scripts/verify-synopsis.pl docs/libcurl/curl*.3 diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 05c6de630..000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "cmake.configureOnOpen": false, - "dotnet.defaultSolution": "disable" -} \ No newline at end of file diff --git a/CHANGES b/CHANGES index 3e2cd9947..0086fa7b7 100644 --- a/CHANGES +++ b/CHANGES @@ -1,7 +1,11822 @@ -See https://curl.se/changes.html for the edited and human readable online -version of what has changed over the years in different curl releases. + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| -Generate a CHANGES file like the one present in every release like this: + Changelog -$ git log --pretty=fuller --no-color --date=short --decorate=full | \ - ./scripts/log2changes.pl +Version 8.9.1 (31 Jul 2024) + +Daniel Stenberg (31 Jul 2024) + +- RELEASE-NOTES: synced + +- THANKS: add names from the 8.9.1 release notes + + Also remove duplicates + +Stefan Eissing (30 Jul 2024) + +- x509asn1: unittests and fixes for gtime2str + + Fix issues in GTime2str() and add unit test cases to verify correct + behaviour. + + Follow-up to 3c914bc6801 + + Closes #14316 + +Tal Regev (30 Jul 2024) + +- vtls: avoid forward declaration in MultiSSL builds + + The MSVC compiler cannot have forward declaration with const and static + variable, causing this error: + ``` + curl\lib\vtls\vtls.c(417,44): warning C4132: 'Curl_ssl_multi': const object s + hould be initialized + ``` + + Ref: #14276 + Closes #14305 + +Viktor Szakats (30 Jul 2024) + +- tidy-up: URL updates (one more) + + Follow-up to 767d5811b5c783b42cea999dd42ecf0453085d17 #14318 + +- tidy-up: URL updates + + Closes #14318 + +- cmake: drop `if(PKG_CONFIG_FOUND)` guard for `pkg_check_modules()` + + The oldest cmake supported by curl is v3.7.0, which already has such + guard (using `PKG_CONFIG_EXECUTABLE`) inside `pkg_check_modules()`. The + advantage of leaving that guard to CMake is that it will define/reset + all output variables, while the manual guard doesn't do this and also + leaves for example `NETTLE_FOUND` undefined. + + Delete the single use of this guard from the recently added `nettle` + detection, where I included it by accident. Then possibly re-introduce + it universally if we find it useful after more evaluation. + + Follow-up to 669ce42275635dc1f881dab3dfc9a55c9ab49b21 #14285 + Closes #14309 + +Daniel Stenberg (30 Jul 2024) + +- mailmap: dedupe an author showing up twice in shortlog -s + +Ivan Kuchin (30 Jul 2024) + +- misc: cleanup after removing years from copyright + + - remove leftover copyright years from few test files + - fix email in copyright lines + - consistent format of copyright lines + + Closes #14312 + +Alex Snast (30 Jul 2024) + +- wolfssl: avoid calling get_cached_x509_store if store is uncachable + + There's no need for get_cached_x509_store call if the return value won't + be used for caching anyway. + + Closes #14306 + +Daniel Stenberg (30 Jul 2024) + +- contrithanks.sh: use -F with -v to match lines as strings + + Makes names involving [brackets] work. + +Viktor Szakats (30 Jul 2024) + +- GHA/non-native: bump FreeBSD/arm64 python modules + + FreeBSD seems to upgrade their Python separately for arm64 + and Intel. Today, arm64 caught up with the Intel packages. + Update our CI to reflect it. + + Closes #14310 + +dependabot[bot] (30 Jul 2024) + +- GHA: bump github/codeql-action and msys2/setup-msys2 + + - bump github/codeql-action from 3.25.13 to 3.25.15 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3. + 25.13 to 3.25.15. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/2d790406f505036ef + 40ecba973cc774a50395aac...afb54ba388a7dca6ecae48f608c4ff05ff4cc77a) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + Closes #14300 + + - bump msys2/setup-msys2 from 2.23.0 to 2.24.0 + + Bumps [msys2/setup-msys2](https://github.com/msys2/setup-msys2) from 2.23.0 t + o 2.24.0. + - [Release notes](https://github.com/msys2/setup-msys2/releases) + - [Changelog](https://github.com/msys2/setup-msys2/blob/main/CHANGELOG.md) + - [Commits](https://github.com/msys2/setup-msys2/compare/d0e80f58dffbc64f6a3a + 1f43527d469b4fc7b6c8...5df0ca6cbf14efcd08f8d5bd5e049a3cc8e07fd2) + + --- + updated-dependencies: + - dependency-name: msys2/setup-msys2 + dependency-type: direct:production + update-type: version-update:semver-minor + ... + + Signed-off-by: dependabot[bot] + Closes #14301 + +Daniel Stenberg (30 Jul 2024) + +- x509asn1: clean up GTime2str + + Co-authored-by: Stefan Eissing + Reported-by: Dov Murik + + Closes #14307 + +- tool_operate: more defensive socket code + + - use 'struct sockaddr' to getsockname() and its sa_family member + + - use 'curl_socklen_t' instead of 'socklen_t' + + - check for AF_INET6 to exist instead assuming it does + + Should be generally more portable. + + Reported-by: Harry Sintonen + Closes #14304 + +Viktor Szakats (29 Jul 2024) + +- configure: limit `__builtin_available` test to Darwin + + This feature test always fails on non-Apple systems. (For Apple targets + it's supported by llvm and Apple clang.) + + Syncs behaviour with CMake. + + Follow-up to cfd6f43d6ca7e57670b422bab7bbf10221a2cf3e #14127 + Cherry-picked from #14097 + Closes #14196 + +Daniel Stenberg (29 Jul 2024) + +- RELEASE-NOTES: synced + +- CURLOPT_SSL_CTX_FUNCTION.md: mention CA caching + + and add a few more see-also + + Closes #14302 + +Viktor Szakats (29 Jul 2024) + +- cmake: detect `libssh` via `pkg-config` + + Also: + - fix broken libssh `pkg-config` behaviour on old Linux. + (when found, `LIBSSH_LINK_LIBRARIES` remains undefined.) + + - delete manual libssh config from Old Linux CI job, + it's no longer necessary. + + Closes #14199 + +- GHA/non-native: improve, migrate x86_64 FreeBSD with tests from Cirrus CI + + - run tests via `make test-ci` instead of `make check` with autotools. + - add `x86_64` job for FreeBSD, with tests. + It matches the existing Cirrus CI job, with these differences: + - finishes 3x faster (thanks to parallel tests enabled). + - librtmp is not enabled because it's slated for removal by FreeBSD. + (already past the removal deadline, thought the package still + installs.) + - DICT and TELNET servers fail to start. Couldn't figure out why. + It means skipping test 1450 and 1452. + - it runs more tests, e.g. websockets and ip6-localhost. + - no `pkg update -f`. + - it misses the `CRYPTOGRAPHY_DONT_BUILD_RUST=1`, `pkg delete curl`, + `chmod 777`, `sudo -u nobody` and `sysctl net.inet.tcp.blackhole` + tricks. The latter is the default in these runners, the others did + not affect results. + - set `-j0` for tests in the NetBSD job. Flaky otherwise. + + Closes #14244 + +- cmake: detect `nettle` when building with GnuTLS + + `nettle` is a direct dependency of curl, when building with GnuTLS. + Add a new `Find` module to detect it. + + Also: + - GHA/macos: drop `nettle` hack no longer necessary. + - add `nettle` to `libcurl.pc`. + - also add `nettle` to `libcurl.pc` in autotools builds. + + Follow-up to 781242ffa44a9f9b95b6da5ac5a1bf6372ec6257 #11967 + Closes #14285 + +- macos: fix Apple SDK bug workaround for non-macOS targets + + Turns out that MAC != OSX, despite what these names otherwise mean and + what's suggested by source code comments. "MAC" in fact means Darwin + (aka Apple), not macOS. "OSX" means macOS. + + GitHub bumped the macos-14 runner default to Xcode 15.4, hitting the + llvm@15 incompatibility bug by default. Meaning the previous workaround + for the SDK bug is necessary. + + This patch extend the workaround to not apply to mobile OS variants. + + Follow-up to ff784af461175584c73e7e2b65af00b1a5a6f67f #14159 + Reported-by: Sergey + Confirmed-by: Marcel Raad + Fixes #14269 + Closes #14275 + +Stefan Eissing (29 Jul 2024) + +- wolfssl: CA store share fix + + When sharing the x509 store in wolfSSL, always use an explicitly + constructed one, as the SSLCTX might have "only" an internal one which + is not obeying reference count lifetimes. + + Fixes #14278 + Reported-by: Alex Snast + Closes #14279 + +Randall S. Becker (29 Jul 2024) + +- curl: support __ss_family use on NonStop platforms + + The definition of sockaddr_storage incorrectly specifies the ss_family + field as __ss_family. This fix conditionally allows builds to succeed on + all NonStop platforms. + + Signed-off-by: Randall S. Becker + + Closes #14273 + +Daniel Stenberg (29 Jul 2024) + +- test993: list 1000 messages over POP3 + + Attempt to verify issue #14201 + + Closes #14297 + +Stefan Eissing (29 Jul 2024) + +- connect: fix connection shutdown for event based processing + + connections being shutdown would register sockets for events, but then + never remove these sockets again. Nor would the shutdown effectively + been performed. + + - If a socket event involves a transfer, check if that is the + connection cache internal handle and run its multi_perform() + instead (the internal handle is used for all shutdowns). + - When a timer triggers for a transfer, check also if it is + about the connection cache internal handle. + - During processing shutdowns in the connection cache, assess + the shutdown timeouts. Register a Curl_expire() of the lowest + value for the cache's internal handle. + + Reported-by: Gordon Parke + Fixes #14280 + Closes #14296 + +Daniel Stenberg (29 Jul 2024) + +- tests: provide FTP directory contents in the test file + + Instead of providing a fixed single synthetic response in the test + server itself. To allow us to better use *different* directory listings + in different test cases. In this change, most listings remain the same + as before. + + The wildcard match tests still use synthetic responses but we should fix + that as well. + + Updated numerous test cases to use this. + + Closes #14295 + +- ftpserver.pl: make POP3 LIST serve content from the test file + + instead of a fixed list in the test server. + + Adjust test 853 accordingly. + + Closes #14293 + +- TODO: thread-safe sharing + +- CURLSHOPT_SHARE.md: mention sessions/cookies as not thread-safe + + Sharing of these between threads are apparently also not done safely. + + Ref: #14290 + Reported-by: Aki Sakurai + Closes #14292 + +- RELEASE-NOTES: synced + +Patrick Monnerat (28 Jul 2024) + +- os400: build cli manual. + + Use PASE perl to run manual generation scripts. + + As PASE perl is not aware of all possible input file encoding, convert + all files to UTF-8 upon build start (this might be lengthy). + + OS/400 terminal emulation may only offer 76 columns, thus a new -c + parameter has been added to the managen program, defining the allowed + width. + + If perl is not available, omit generation and disable online manual. + + Closes #14289 + +Daniel Stenberg (27 Jul 2024) + +- example/multi-uv: remove the use of globals + + - shows how to pass on local variables (better) + + - start the transfers nicer (with curl_multi_socket_action) + + - consistent and helpful function naming - to better show what functions + and callbacks that are used for what + + - build warning-free with gcc -W -Wall -pedantic + + Closes #14287 + +Viktor Szakats (27 Jul 2024) + +- runtests: fold timing details with GHA, sync `-r` tflags + + - move timing details into a foldable group when run in GitHub Actions. + Spec: + https://docs.github.com/en/actions/using-workflows/workflow-commands-for-gi + thub-actions#grouping-log-lines + + - enable `-r` (run time stats) option in autotools' `test-ci` target, + syncing it with cmake. + + Closes #14284 + +- GHA/windows: increase timeout for vcpkg build step [ci skip] + + Examples: + https://github.com/curl/curl/actions/runs/10102112253/job/27937088909?pr=1427 + 4 + https://github.com/curl/curl/actions/runs/10102112253/job/27937082353?pr=1427 + 4 + https://github.com/curl/curl/actions/runs/10102112253/job/27937088478?pr=1427 + 4 + +- GHA/macos: update comment about default Xcode on macos-14 runner [ci skip] + + New default since: + https://github.com/actions/runner-images/blob/releases/macos-14-arm64/2024072 + 2/images/macos/macos-14-arm64-Readme.md + +Patrick Monnerat (27 Jul 2024) + +- os400: workaround an IBM ASCII run-time library bug + + IBM-provided ASCII function puts() does not output an expected trailing + newline: emulate the correct behavior using other functions. + + Closes #14281 + +Stefan Eissing (27 Jul 2024) + +- transfer: speed limiting fix for 32bit systems + + When checking if a speed limit on receives applies, compare the receive + sizes using the large int type to prevent an overflow on systems where + size_t is 32bit. + + Fixes #14272 + Reported-by: Mamoru Tasaka + Closes #14277 + +Anthony Hu (26 Jul 2024) + +- wolfSSL: allow wolfSSL's implementation of kyber to be used + + Closes #14268 + +Daniel Stenberg (26 Jul 2024) + +- lib: survive some NULL input args + + The input string pointer to: + + curl_escape + curl_easy_escape + curl_unescape + curl_easy_unescape + + The running_handles pointer to: + + curl_multi_perform + curl_multi_socket_action + curl_multi_socket_all + curl_multi_socket + + Reported-by: icy17 on github + Fixes #14247 + Closes #14262 + +- RELEASE-PROCEDURE.md: restore next release date + + Pointed-out-by: extrimexxx on github + Bug: https://github.com/curl/curl/pull/14267#issuecomment-2247062235 + +- RELEASE-NOTES: synced + + bumped to 8.9.1 + +- RELEASE-PROCEDURE.md: remove the initial build step + + Because it is no longer needed to be done by a person as the dmaketgz + script does it by itself. + + Removed two past release dates, added two new future ones + + Closes #14267 + +Version 8.9.0 (24 Jul 2024) + +Daniel Stenberg (24 Jul 2024) + +- RELEASE-NOTES: synced + +- THANKS: updates from the 8.9.0 release + +- curl_easy_escape.md: move historic details to HISTORY + + Closes #14261 + +- docs/libcurl: add to cleanup docs that their inputs go invalid + + Reported-by: icy17 on github + Fixes #14248 + Closes #14258 + +dependabot[bot] (23 Jul 2024) + +- GHA: bump github/codeql-action from 3.25.11 to 3.25.13 + + Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3. + 25.11 to 3.25.13. + - [Release notes](https://github.com/github/codeql-action/releases) + - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) + - [Commits](https://github.com/github/codeql-action/compare/b611370bb5703a7ef + b587f9d136a52ea24c5c38c...2d790406f505036ef40ecba973cc774a50395aac) + + --- + updated-dependencies: + - dependency-name: github/codeql-action + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + Closes #14255 + +Stefan Eissing (23 Jul 2024) + +- conncache: connection shutdown, multi_socket handling + + - implement the socket hash user/reader/writer processing also + for connections that are being shut down by the connection cache. + - split out handling of current vs. last pollset socket event handling + into a function available in other code parts + - add `shutdown_poll` pollset to `connectdata` struct so that changes + in the pollset can be recorded during shutdown. (The internal handle + cannot keep it since it might be used for many connections) + + Reported-by: calvin2021y on github + Fixes #14252 + Closes #14257 + +Daniel Stenberg (22 Jul 2024) + +- tool_cb_prg: output "flying saucers" with leading carriage return + + Because that is how the progress-bar is output, so when the progress-bar + has been shown at least once and the information is reset, like for a + redirect, there might be a moment where the size goes from known to + unknown and then the flying saucerts are shown after a brief display of + the progress-bar. + + It could previously cause accidental character leftovers on the right + side of the bar when using a narrow display. + + Reported-by: Chris Webb + Fixes #14213 + Closes #14246 + +- lib: Curl_posttransfer => multi_posttransfer + + Moved from transfer.c to multi.c as it was only used within multi.c + + Made a void, as it returned a fixed return code nothing checked. + + Closes #14240 + +- CURLOPT_SSL_VERIFYHOST.md: refresh + + Move mentions of old behavior to the HISTORY section to make it easier + to read about modern behavior. + + Added a MATCHING section. + + Closes #14241 + +- multi: do a final progress update on connect failure + + To fix timing metric etc + + Co-authored-by: Justin Maggard + Fixes #14204 + Closes #14239 + +Orgad Shaneh (19 Jul 2024) + +- md4: fix compilation with OpenSSL 1.x with md4 disabled + + If OpenSSL 1.x is used, and it is configured with md4 disabled, + OPENSSL_NO_MD4 is defined in opensslconf.h, but this header was not + included before checking for this define. + + Later in md4.c, openssl/md4.h is included, and it includes that header + indirectly, leading to inconsistency within md4.c. + + Since the md4.h branch was taken, wincrypt.h (or others) is not + included, and later below the USE_WIN32_CRYPTO branch is taken, but the + types are not defined. + + Closes #14218 + +martinevsky (19 Jul 2024) + +- ftp: remove redundant null pointer check in loop condition + + Closes #14234 + +Justin Maggard (19 Jul 2024) + +- mbedtls: check version before getting tls version + + mbedtls_ssl_get_version_number() was added in mbedtls 3.2.0. Check for + that version before using it. + + Closes #14228 + +martinevsky (19 Jul 2024) + +- urlapi: remove unused definition of HOST_BAD + + Closes #14235 + +Daniel Stenberg (19 Jul 2024) + +- curldown: fixups + + - make DEFAULT sections less repetitive + + - make historic mentions use HISTORY + + - generate the protocols section on `# %PROTOCOLS%` instead of guessing + where to put it + + - generate the availability section on `# %AVAILABILITY%` instead of + guessing where to put it + + - make the protocols section more verbose + + Closes #14227 + +Tal Regev (19 Jul 2024) + +- GHA/windows: enable libssh in !ssl MSVC job + + Closes #14232 + +- GHA/windows: enable libidn2 in !ssl MSVC job + + Closes #14200 + +Viktor Szakats (19 Jul 2024) + +- GHA/macos: improve, fix gcc/llvm, add new test matrix + + This PR began as an attempt to drop GCC support, after repeated reports + on fallouts when trying to use it on macOS. + + Then it transformed into a 3-week project turning up the issues causing + the fallouts, ending up including llvm and all available Xcode / macOS + SDK, macOS runner image, build tools and compiler vendors and versions. + Accumulating 400 sub-commits. + + I developed and tested all fixes under this PR, then merged them as + separate patches. + + This PR retained CI jobs updates, extensively reworking and extending + them: [1] + + At first it seemed GCC and the Apple SDK is "naturally" growing more + incompatible, as Apple added further non-standard features to their + headers. This is partly true, but reality is more complicated. + + Besides some issues local to curl, there were bugs in Apple SDK + headers, Homebrew GCC builds, feature missing in the old llvm version + pre-installed on GitHub CI runner images, and subtle incompatibilities + between GCC and llvm/clang when handling language extensions. + + Resulting compiler errors seldom pointed to a useful direction, and + internet search was silent about these issues too. Thus, I had to peel + them off layer by layer, using trial and error, and by recognizing + patterns of failures accross 150-200 builds combinations. Exposing + configure logs, and curl_config.h in the CI logs helped too. + + 1. GCC header compatibility layer ("hack" as GCC calls it) + + The toughest issue is GCC's built-in compatibility layer: + https://github.com/gcc-mirror/gcc/tree/master/fixincludes + + This patch layer is further patched by a "Darwin compatibility" project + applied on top by Homebrew GCC via: + https://github.com/iains/gcc-12-branch + https://github.com/iains/gcc-13-branch + https://github.com/iains/gcc-14-branch + + The hack layer is designed in a way that breaks more builds than it + fixes, esp. in context of GHA runners. The idea is to build GCC + specifically for the SDK for the target macOS version. The problem with + this approach is that the Xcode + SDK installed on the local/CI machine + often does not match with the SDK used on while building GCC on + Homebrew's build machines. In these cases the GCC compatibility layer + turns into an "uncompatibility" layer and consistently breaks builds. + curl cannot offer a fix for this, because the solution (I found) is to + patch the toolchain on the local machine. I implemented this for our CI + builds and curl-for-win. In other case the user must do this patching + manually, or choose a compatible GCC + Xcode/SDK combination. + + An upstream fix doesn't seem trivial either, because the issue is + ingrained in the compatibility layer's design. Offering an `-fapplesdk` + (or recognizing `-target`) option and/or fixing them within the compiler + would seem like a more robust option, and also how mainline llvm solves + this. + + Here's a table summarizing the GCC + SDK combinations and curl build + failures: [2] + + More info: https://github.com/curl/curl/issues/10356#issuecomment-2222734103 + + db135f8d7207b20d531e7e2100a49f3e16bdcfab #14119 macos: add workaround for gcc + , non-c-ares, IPv6, compile error + Ref: https://github.com/curl/curl-for-win/commit/e2db3c475f5981352e6e6a79854a + 255805b28deb + Ref: https://github.com/curl/curl-for-win/commit/f5c58d7fef78e972be33ca2355dc + b42ba56622a6 + + 2. Homebrew GCC's `availability` extension + + A recent minor Homebrew GCC upgrade caused major breakage. The "Darwin + compatibility" patch applied to GCC implemented the `availability` + compiler attribute in GCC. Apple SDK detected this and enabled using + them, but as it turns out GCC accepts compiler attributes with slightly + different rules than llvm/clang, and how the Apple SDK uses them, + breaking builds. + + Affected Homebrew GCC versions are: 12.4.0, 13.3.0 and 14.1.0. + + Possibly tracked here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108796 + More info: https://github.com/llvm/llvm-project/issues/81767 + + Commit implementing the `availability` macro: + gcc-12: https://github.com/iains/gcc-12-branch/commit/fd5530b7cb0012bf4faeddd + 45e13054a1dfa6783 + gcc-13: https://github.com/iains/gcc-13-branch/commit/cb7e4eca68cfc4763474e2e + b0935a844458842a8 + gcc-14: https://github.com/iains/gcc-14-branch/commit/ff62a108865a6403f501738 + 0d7018250c1d3306f + + That applied to Homebrew GCC (12.4.0): + https://github.com/Homebrew/homebrew-core/commit/b904223d9893f62bec2a8f7483bf + 5992747fc6c7#diff-89dd0b4176eca7fcc24b591943509bf8a8d6ea904d71e5dfcd6b78fed62 + fc574R44-R48 + + Ref: #13700 + More info: https://github.com/curl/curl/pull/14091#issuecomment-2222703468 + + e91fcbac7d86292858718a0bfebad57978761af4 #14155 macos: undo `availability` ma + cro enabled by Homebrew gcc + + 3. Proprietary Apple SDK macros + + Apple SDK expects certain macros predefined by the compiler. Missing + them may causes odd issues. Mainline llvm is keeping up with Apple + clang, but it needs a fresh version, while the one installed on GitHub + runners is old (v15). I patched these in `lib/curl_setup.h`. + + baa3270846b2a7307cbd0dd5c02c4e5f00e388dd #14134 build: fix llvm 16 or older + + Xcode 15 or newer, and gcc + + 4. Apple SDK header bug + + Without certain predefined macros, SDK headers can take a codepath where + it mis-defines its own `TARGET_OS_OSX` macro, which make it break its + own headers later. I patched it in `lib/curl_setup.h`. + + ff784af461175584c73e7e2b65af00b1a5a6f67f #14159 build: fix llvm 17 and older + + macOS SDK 14.4 and newer + + 5. `TargetConditionals.h` requires `sys/types.h` + + Fixed in curl. It caused feature-detection failurs with autotools, and + could break builds in certain configurations. + + e1f6192939c9c5ab2310b60bedf4c07d635193f6 #14130 configure: fix `SystemConfigu + ration` detection + + 6. Differences between autotools and CMake compiler options + + Fixed it by syncing compiler warning options. + + 59cadacfcc1d39472245979cdbd614c7a9af6f0d #14128 build: sync warning options b + etween autotools, cmake & compilers + + 7. Differences between autotools and CMake dependency detection + + Fixed it by improving detection of libidn2, with some more fixes + pending for the next feature window. + + f43adc2c4978f7f82a359e89186e58a31d17b0ad #14137 cmake: detect `libidn2` also + via `pkg-config` + Ref: #14136 cmake: detect `nghttp2` via `pkg-config`, enable by default + + 8. libidn2 detection bug with CMake + + Fixed the root cause and also the trigger in the CI config. + + 764fbabf6ed4c1d36c0ab2033ac8df52d9923cd7 #14175 cmake: fix builds with detect + ed libidn2 lib but undetected header + + 9. Suppressed compiler warnings inside Apple-specific curl code + + Fixed these warnings, which allowed to stop silencing them. + + b05dc7eb3592305de9fa85640767f3dd2a8d4c93 #14122 sectransp: fix `HAVE_BUILTIN_ + AVAILABLE` checks to not emit warnings + 5fa534b0dacdc120aaab0766047e0ecac37be4b3 #14162 sectransp: fix clang compiler + warnings, stop silencing them + + 10. CMake mis-detecting a CA bundle path on macOS + + d2ef6255f4a040397d2f40ab7cbf65a203201cd9 #14182 cmake: sync CA bundle/path de + tection with autotools + + 11. Failure to build tests with LibreSSL or wolfSSL with CMake + + Fixed by dropping unnecessary includes, makign test builds dependent + on dependency headers. + + 3765d75ce47b66289f946382b649d0e99389dc77 #14172 cmake: fix building `unit1600 + ` due to missing `ssl/openssl.h` + + 12. curl tests with CMake + + curl's CMake was missing bits for running the C preprocessor accurately. + It made tests 1119 and 1167 fail. I implemented the missing bits. + + efc2c5184d008fe2e5910fd03263e1ab0331d4e6 #14124 tests: include current direct + ory when running test Perl commands + c09db8b51b88ee6ad55bd637dcb4b47678e30906 #14129 cmake: create `configurehelp. + pm` like autotools does + 67cc1e3400b77536a3ca529c986247e1ef985e6e #14125 test1119: adapt for `.md` inp + ut + + 13. GCC missing `__builtin_available()` support + + curl source code assumes this is available to enable certain codepaths. + It's also intermixed with monotonic timer support. + + 14. Monotonic timer support with GCC + + Detected by GCC, while it probably shouldn't be. llvm/clang detects it + depending on target OS version. I've been playing with this, but so far + without a conclusion or fix. + + 15. Runtime/test failures with GCC + + I couldn't find the reason for most of this. A bunch of RTSP tests fail + with GCC. SecureTransport + HTTP/2 is failing a bunch of tests. With + OpenSSL it fails two of those. SecureTransport builds also fail one DoH + test. + + 16. Runtime/test failure in llvm/clang + + AppleIDN support received a fix with two more remaining. + + fd0250869f7837e4a48d7e6f54cc0801ad3820e8 #14179 #14176 IDN: fix ß with Apple + IDN + + 17. Other issues found and fixed while working on this: + + 2c15aa5765900d4351e733671a1c8c3785beee1a GHA/macos: delete misplaced ` + CFLAGS`, drop redundant CMake option + 80fb7c0bef209735ab352bf4afa31193a7bc65f1 #14126 configure: limit `SystemConfi + guration` test to non-c-ares, IPv6 builds + cfd6f43d6ca7e57670b422bab7bbf10221a2cf3e #14127 build: tidy up `__builtin_ava + ilable` feature checks (Apple) + bae555359979016999a9425a2d489f219a78abdd #14174 runtests: show name and keywo + rds for failed tests in summary + 09cdf7e5315711dea4ce7dcf5d99a4d41e7f658b #14178 cmake: delete unused `HAVE_LI + BSSH2`, `HAVE_LIBSOCKET` macros + d3595c74fab829f07ef44da1b7fc2f5668767020 #14186 configure: CA bundle/path det + ection fixes + 58772b0e082eda333e0a5fc8fb0bc7f17a3cd99c #14187 runtests: set `SOURCE_DATE_EP + OCH` to fix failing around midnight + 18f1cd7a77c4beecfd977d43f55634eb593ac99e #14183 tests: sync feature names wit + h `curl -V` + 4c22d97be786ed801e050da6872dd3143d6d0a59 #14181 build: use `#error` instead o + f invalid syntax + + Pending merges: + + - #14185 runtests: fold test details for GitHub CI runs + - #14197 cmake: grab-bag of tidy-ups + - #14196 configure: limit `__builtin_available` test to Darwin + + Summary: + + In general GCC doesn't seem to be a good fit with curl and macOS for + now. These "lucky" combinations (GitHub Actions runner) will build out + of the box now: macos-14 + Xcode 15.0.1 + gcc-11, gcc-12, gcc-14. The + rest builds with the ugly workaround in place, but all this still leaves + some runtime issues. + + More info and links in the commit messages and source code. + + [1]: This PR: + - add info about target OS version requirements per feature, with OS + names and release years. + - stop using `-Wno-deprecated-declarations` to suppress warnings. + - use `LDFLAGS=-w` to suppress 'object file was built for newer macOS + version than being linked' warnings. + (there were tens of thousands of them in some jobs) + - allow overriding Xcode version in all jobs. + - improve job names. + - abbreviate CMake as CM, autotools as AM for more compact job names. + - shorten job names by using `!` instead of `no-` and `non-`. + - bump parellel tests to 10 (from 5). + - drop using `--enable-maintainer-mode` `./configure` option. + - add gcc-12 no-ssl, autotools job with tests, ignore failing test + results. (It's not yet clear why gcc-12 builds have different runtime + results than clang/llvm ones.) + - add comments with OS names and release years next to version numbers, + e.g. 10.15 # Catalina (2019) + - fix broken gcc-12 SecureTransport build. + - show compiler, Xcode, SDK, gcc hack SDK versions, Homebrew + preinstalled packages and C compiler predefined macros for each job. + Useful for debugging all the strange problems these builds might have. + - merge brew bundle and install steps. + - move step names to the top. + - dump configure log for both cmake and autotools also for successful + builds. Useful for debugging. + - dump curl_config.h in short (sorted #defines) and full form. + - add support for the mainline llvm compiler. + - set sysroot for gcc and llvm. + - add timeout for cmake jobs. + - add new job matrix: combinations + It supports building all possible compiler, runner image, Xcode/SDK + combinations, with cmake and autotools, target OS versions and with or + without SecureTransport. It's quick. GHA limits the maximum number of + matrix jobs at 256. + I used this as a test-rig to fix the macOS build fallouts with gcc and + llvm. + I settled with 16 jobs, trying to maximize fallout coverage. + - implement hack to make Homebrew gcc work with all available SDKs. + - add handy mini-table about Xcode / SDK versions, OS names, years for + each GHA images, with the defaults. + - add tests for cmake jobs. + - make cmake config hack to link GnuTLS less intrusive. + - stop ignoring test 1452, seems fine now. + - fix to enable libpsl in autotools builds. + - enable libpsl in cmake builds. + - add an llvm job with tests (both autotools and cmake). + - delete similar macOS jobs from Circle CI. GHA is now arm64 too. + + [2]: Homebrew GCC vs GHA runner images vs curl builds: + ``` + macOS Xcode gcc gcc SDK hacks Xcode SDK SDK major Build + Compile + (*def) (Homebrew) (CommandLineTools) versions + error + -------- -------- ---------- ------------------ ---------- --------- ----- + --------------------- + macos-12 13.1 GCC 11.4.0 MacOSX12 MacOSX12.0 + macos-12 13.2.1 GCC 11.4.0 MacOSX12 MacOSX12.1 + macos-12 13.3.1 GCC 11.4.0 MacOSX12 MacOSX12.3 + macos-12 13.4.1 GCC 11.4.0 MacOSX12 MacOSX12.3 + macos-12 14.0.1 GCC 11.4.0 MacOSX12 MacOSX12.3 + macos-12 14.1 GCC 11.4.0 MacOSX12 MacOSX13.0 MISMATCH FAIL + /Applications/Xcode_14.1.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/os/object.h:275:1: error: expected ';' be + fore 'extern' + macos-12 *14.2 GCC 11.4.0 MacOSX12 MacOSX13.1 MISMATCH FAIL + /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/os/object.h:275:1: error: expected ';' be + fore 'extern' + macos-13 14.1 GCC 11.4.0 MacOSX13 MacOSX13.0 + macos-13 14.2 GCC 11.4.0 MacOSX13 MacOSX13.1 + macos-13 14.3.1 GCC 11.4.0 MacOSX13 MacOSX13.3 + macos-13 *15.0.1 GCC 11.4.0 MacOSX13 MacOSX14.0 MISMATCH FAIL + /Applications/Xcode_15.0.1.app/Contents/Developer/Platforms/MacOSX.platform/ + Developer/SDKs/MacOSX.sdk/usr/include/dispatch/queue.h:103:1: error: unknown + type name 'dispatch_queue_t' + macos-13 15.1 GCC 11.4.0 MacOSX13 MacOSX14.2 MISMATCH FAIL + /Applications/Xcode_15.1.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/dispatch/queue.h:103:1: error: unknown ty + pe name 'dispatch_queue_t' + macos-13 15.2 GCC 11.4.0 MacOSX13 MacOSX14.2 MISMATCH FAIL + /Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/dispatch/queue.h:103:1: error: unknown ty + pe name 'dispatch_queue_t' + macos-14 14.3.1 GCC 11.4.0 MacOSX14 MacOSX13.3 MISMATCH FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-14 *15.0.1 GCC 11.4.0 MacOSX14 MacOSX14.0 + macos-14 15.1 GCC 11.4.0 MacOSX14 MacOSX14.2 + macos-14 15.2 GCC 11.4.0 MacOSX14 MacOSX14.2 + macos-14 15.3 GCC 11.4.0 MacOSX14 MacOSX14.4 + macos-14 15.4 GCC 11.4.0 MacOSX14 MacOSX14.5 + macos-14 16.0 GCC 11.4.0 MacOSX14 MacOSX15.0 MISMATCH FAIL + /opt/homebrew/Cellar/gcc@11/11.4.0/lib/gcc/11/gcc/aarch64-apple-darwin23/11/ + include-fixed/stdio.h:83:8: error: unknown type name 'FILE' + macos-12 13.1 GCC 12.4.0 MacOSX12 MacOSX12.0 + macos-12 13.2.1 GCC 12.4.0 MacOSX12 MacOSX12.1 + macos-12 13.3.1 GCC 12.4.0 MacOSX12 MacOSX12.3 + macos-12 13.4.1 GCC 12.4.0 MacOSX12 MacOSX12.3 + macos-12 14.0.1 GCC 12.4.0 MacOSX12 MacOSX12.3 + macos-12 14.1 GCC 12.4.0 MacOSX12 MacOSX13.0 MISMATCH FAIL + /Applications/Xcode_14.1.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/os/object.h:275:1: error: expected ';' be + fore 'extern' + macos-12 *14.2 GCC 12.4.0 MacOSX12 MacOSX13.1 MISMATCH FAIL + /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/os/object.h:275:1: error: expected ';' be + fore 'extern' + macos-13 14.1 GCC 12.4.0 MacOSX13 MacOSX13.0 + macos-13 14.2 GCC 12.4.0 MacOSX13 MacOSX13.1 + macos-13 14.3.1 GCC 12.4.0 MacOSX13 MacOSX13.3 + macos-13 *15.0.1 GCC 12.4.0 MacOSX13 MacOSX14.0 MISMATCH FAIL + /Applications/Xcode_15.0.1.app/Contents/Developer/Platforms/MacOSX.platform/ + Developer/SDKs/MacOSX.sdk/usr/include/dispatch/queue.h:103:1: error: unknown + type name 'dispatch_queue_t' + macos-13 15.1 GCC 12.4.0 MacOSX13 MacOSX14.2 MISMATCH FAIL + /Applications/Xcode_15.1.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/dispatch/queue.h:103:1: error: unknown ty + pe name 'dispatch_queue_t' + macos-13 15.2 GCC 12.4.0 MacOSX13 MacOSX14.2 MISMATCH FAIL + /Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/dispatch/queue.h:103:1: error: unknown ty + pe name 'dispatch_queue_t' + macos-14 14.3.1 GCC 12.4.0 MacOSX14 MacOSX13.3 MISMATCH + macos-14 *15.0.1 GCC 12.4.0 MacOSX14 MacOSX14.0 + macos-14 15.1 GCC 12.4.0 MacOSX14 MacOSX14.2 + macos-14 15.2 GCC 12.4.0 MacOSX14 MacOSX14.2 + macos-14 15.3 GCC 12.4.0 MacOSX14 MacOSX14.4 + macos-14 15.4 GCC 12.4.0 MacOSX14 MacOSX14.5 + macos-14 16.0 GCC 12.4.0 MacOSX14 MacOSX15.0 MISMATCH FAIL + /opt/homebrew/Cellar/gcc@12/12.4.0/lib/gcc/12/gcc/aarch64-apple-darwin23/12/ + include-fixed/stdio.h:83:8: error: unknown type name 'FILE' + macos-12 13.1 GCC 13.3.0 MacOSX12 MacOSX12.0 + macos-12 13.2.1 GCC 13.3.0 MacOSX12 MacOSX12.1 + macos-12 13.3.1 GCC 13.3.0 MacOSX12 MacOSX12.3 + macos-12 13.4.1 GCC 13.3.0 MacOSX12 MacOSX12.3 + macos-12 14.0.1 GCC 13.3.0 MacOSX12 MacOSX12.3 + macos-12 14.1 GCC 13.3.0 MacOSX12 MacOSX13.0 MISMATCH FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-12 *14.2 GCC 13.3.0 MacOSX12 MacOSX13.1 MISMATCH FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-13 14.1 GCC 13.3.0 MacOSX13 MacOSX13.0 + macos-13 14.2 GCC 13.3.0 MacOSX13 MacOSX13.1 + macos-13 14.3.1 GCC 13.3.0 MacOSX13 MacOSX13.3 + macos-13 *15.0.1 GCC 13.3.0 MacOSX13 MacOSX14.0 MISMATCH FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-13 15.1 GCC 13.3.0 MacOSX13 MacOSX14.2 MISMATCH FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-13 15.2 GCC 13.3.0 MacOSX13 MacOSX14.2 MISMATCH FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-14 14.3.1 GCC 13.3.0 MacOSX14 MacOSX13.3 MISMATCH FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-14 *15.0.1 GCC 13.3.0 MacOSX14 MacOSX14.0 FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-14 15.1 GCC 13.3.0 MacOSX14 MacOSX14.2 FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-14 15.2 GCC 13.3.0 MacOSX14 MacOSX14.2 FAIL + /Users/runner/work/curl/curl/bld/lib/curl_config.h:792:19: error: two or mor + e data types in declaration specifiers + macos-14 15.3 GCC 13.3.0 MacOSX14 MacOSX14.4 + macos-14 15.4 GCC 13.3.0 MacOSX14 MacOSX14.5 + macos-14 16.0 GCC 13.3.0 MacOSX14 MacOSX15.0 MISMATCH FAIL + /opt/homebrew/Cellar/gcc@13/13.3.0/lib/gcc/13/gcc/aarch64-apple-darwin23/13/ + include-fixed/stdio.h:83:8: error: unknown type name 'FILE' + macos-12 13.1 GCC 14.1.0 MacOSX12 MacOSX12.0 + macos-12 13.2.1 GCC 14.1.0 MacOSX12 MacOSX12.1 + macos-12 13.3.1 GCC 14.1.0 MacOSX12 MacOSX12.3 + macos-12 13.4.1 GCC 14.1.0 MacOSX12 MacOSX12.3 + macos-12 14.0.1 GCC 14.1.0 MacOSX12 MacOSX12.3 + macos-12 14.1 GCC 14.1.0 MacOSX12 MacOSX13.0 MISMATCH FAIL + /Applications/Xcode_14.1.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/os/object.h:275:1: error: expected ';' be + fore 'extern' + macos-12 *14.2 GCC 14.1.0 MacOSX12 MacOSX13.1 MISMATCH FAIL + /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/os/object.h:275:1: error: expected ';' be + fore 'extern' + macos-13 14.1 GCC 14.1.0 MacOSX13 MacOSX13.0 + macos-13 14.2 GCC 14.1.0 MacOSX13 MacOSX13.1 + macos-13 14.3.1 GCC 14.1.0 MacOSX13 MacOSX13.3 + macos-13 *15.0.1 GCC 14.1.0 MacOSX13 MacOSX14.0 MISMATCH FAIL + /Applications/Xcode_15.0.1.app/Contents/Developer/Platforms/MacOSX.platform/ + Developer/SDKs/MacOSX.sdk/usr/include/dispatch/queue.h:70:1: error: type defa + ults to 'int' in declaration of 'DISPATCH_DECL_FACTORY_CLASS_SWIFT' [-Wimplic + it-int] + macos-13 15.1 GCC 14.1.0 MacOSX13 MacOSX14.2 MISMATCH FAIL + /Applications/Xcode_15.1.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/dispatch/queue.h:70:1: error: type defaul + ts to 'int' in declaration of 'DISPATCH_DECL_FACTORY_CLASS_SWIFT' [-Wimplicit + -int] + macos-13 15.2 GCC 14.1.0 MacOSX13 MacOSX14.2 MISMATCH FAIL + /Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/De + veloper/SDKs/MacOSX.sdk/usr/include/dispatch/queue.h:70:1: error: type defaul + ts to 'int' in declaration of 'DISPATCH_DECL_FACTORY_CLASS_SWIFT' [-Wimplicit + -int] + macos-14 14.3.1 GCC 14.1.0 MacOSX14 MacOSX13.3 MISMATCH + macos-14 *15.0.1 GCC 14.1.0 MacOSX14 MacOSX14.0 + macos-14 15.1 GCC 14.1.0 MacOSX14 MacOSX14.2 + macos-14 15.2 GCC 14.1.0 MacOSX14 MacOSX14.2 + macos-14 15.3 GCC 14.1.0 MacOSX14 MacOSX14.4 + macos-14 15.4 GCC 14.1.0 MacOSX14 MacOSX14.5 + macos-14 16.0 GCC 14.1.0 MacOSX14 MacOSX15.0 MISMATCH FAIL + /opt/homebrew/Cellar/gcc/14.1.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23 + /14/include-fixed/stdio.h:83:8: error: unknown type name 'FILE' + ``` + Source: https://github.com/curl/curl/actions/runs/9883956647/job/27299564218 + + This commit fixes earlier commit + 1e75edd372868048c9f805ac4ca6d2cb5a88ff5a, reverted in + 41a7e0dcc9681afd91e066411bcee4f369c23366, where I cut the commit + message in half by accident. The patch itself is identical. + + Closes #14097 + +- Revert "GHA/macos: improve, fix gcc/llvm, add new test matrix" + + This reverts commit 1e75edd372868048c9f805ac4ca6d2cb5a88ff5a. + + Due to some parts of the commit message missing (my bad.) + +Daniel Stenberg (19 Jul 2024) + +- Revert "lib: send eos flag" + + This reverts commit be93299f10ef0b2bf7fe5c82140120073831867a. + +Viktor Szakats (19 Jul 2024) + +- GHA/windows: use default shell CI feature + + It makes repeating a line in each step unnecessary. + + Closes #14206 + +- GHA/macos: improve, fix gcc/llvm, add new test matrix + + This PR began as an attempt to drop GCC support, after repeated reports + on fallouts when trying to use it on macOS. + + Then it transformed into a 3-week project turning up the issues causing + the fallouts, ending up including llvm and all available Xcode / macOS + SDK, macOS runner image, build tools and compiler vendors and versions. + Accumulating 400 sub-commits. + + I developed and tested all fixes under this PR, then merged them as + separate patches. + + This PR retained CI jobs updates, extensively reworking and extending + them: [1] + + At first it seemed GCC and the Apple SDK is "naturally" growing more + incompatible, as Apple added further non-standard features to their + headers. This is partly true, but reality is more complicated. + + Besides some issues local to curl, there were bugs in Apple SDK + headers, Homebrew GCC builds, feature missing in the old llvm version + pre-installed on GitHub CI runner images, and subtle incompatibilities + between GCC and llvm/clang when handling language extensions. + + Resulting compiler errors seldom pointed to a useful direction, and + internet search was silent about these issues too. Thus, I had to peel + them off layer by layer, using trial and error, and by recognizing + patterns of failures accross 150-200 builds combinations. Exposing + configure logs, and curl_config.h in the CI logs helped too. + + 1. GCC header compatibility layer ("hack" as GCC calls it) + + The toughest issue is GCC's built-in compatibility layer: + https://github.com/gcc-mirror/gcc/tree/master/fixincludes + + This patch layer is further patched by a "Darwin compatibility" project + applied on top by Homebrew GCC via: + https://github.com/iains/gcc-12-branch + https://github.com/iains/gcc-13-branch + https://github.com/iains/gcc-14-branch + + The hack layer is designed in a way that breaks more builds than it + fixes, esp. in context of GHA runners. The idea is to build GCC + specifically for the SDK for the target macOS version. The problem with + this approach is that the Xcode + SDK installed on the local/CI machine + often does not match with the SDK used on while building GCC on + Homebrew's build machines. In these cases the GCC compatibility layer + turns into an "uncompatibility" layer and consistently breaks builds. + curl cannot offer a fix for this, because the solution (I found) is to + patch the toolchain on the local machine. I implemented this for our CI + builds and curl-for-win. In other case the user must do this patching + manually, or choose a compatible GCC + Xcode/SDK combination. + + An upstream fix doesn't seem trivial either, because the issue is + ingrained in the compatibility layer's design. Offering an `-fapplesdk` + (or recognizing `-target`) option and/or fixing them within the compiler + would seem like a more robust option, and also how mainline llvm solves + this. + + Here's a table summarizing the GCC + SDK combinations and curl build + failures: [2] + + More info: https://github.com/curl/curl/issues/10356#issuecomment-2222734103 + + db135f8d7207b20d531e7e2100a49f3e16bdcfab #14119 macos: add workaround for gcc + , non-c-ares, IPv6, compile error + Ref: https://github.com/curl/curl-for-win/commit/e2db3c475f5981352e6e6a79854a + 255805b28deb + Ref: https://github.com/curl/curl-for-win/commit/f5c58d7fef78e972be33ca2355dc + b42ba56622a6 + + 2. Homebrew GCC's `availability` extension + + A recent minor Homebrew GCC upgrade caused major breakage. The "Darwin + compatibility" patch applied to GCC implemented the `availability` + compiler attribute in GCC. Apple SDK detected this and enabled using + them, but as it turns out GCC accepts compiler attributes with slightly + different rules than llvm/clang, and how the Apple SDK uses them, + breaking builds. + + Affected Homebrew GCC versions are: 12.4.0, 13.3.0 and 14.1.0. + + Possibly tracked here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108796 + More info: https://github.com/llvm/llvm-project/issues/81767 + + Commit implementing the `availability` macro: + gcc-12: https://github.com/iains/gcc-12-branch/commit/fd5530b7cb0012bf4faeddd + 45e13054a1dfa6783 + gcc-13: https://github.com/iains/gcc-13-branch/commit/cb7e4eca68cfc4763474e2e + b0935a844458842a8 + gcc-14: https://github.com/iains/gcc-14-branch/commit/ff62a108865a6403f501738 + 0d7018250c1d3306f + + That applied to Homebrew GCC (12.4.0): + https://github.com/Homebrew/homebrew-core/commit/b904223d9893f62bec2a8f7483bf + 5992747fc6c7#diff-89dd0b4176eca7fcc24b591943509bf8a8d6ea904d71e5dfcd6b78fed62 + fc574R44-R48 + + Ref: #13700 + More info: https://github.com/curl/curl/pull/14091#issuecomment-2222703468 + + e91fcbac7d86292858718a0bfebad57978761af4 #14155 macos: undo `availability` ma + cro enabled by Homebrew gcc + + 3. Proprietary Apple SDK macros + + Apple SDK expects certain macros predefined by the compiler. Missing + them may causes odd issues. Mainline llvm is keeping up with Apple + clang, but it needs a fresh version, while the one installed on GitHub + runners is old (v15). I patched these in `lib/curl_setup.h`. + + baa3270846b2a7307cbd0dd5c02c4e5f00e388dd #14134 build: fix llvm 16 or older + + Xcode 15 or newer, and gcc + + 4. Apple SDK header bug + + Without certain predefined macros, SDK headers can take a codepath where + it mis-defines its own `TARGET_OS_OSX` macro, which make it break its + own headers later. I patched it in `lib/curl_setup.h`. + + ff784af461175584c73e7e2b65af00b1a5a6f67f #14159 build: fix llvm 17 and older + + macOS SDK 14.4 and newer + + 5. `TargetConditionals.h` requires `sys/types.h` + + Fixed in curl. It caused feature-detection failurs with autotools, and + could break builds in certain configurations. + + e1f6192939c9c5ab2310b60bedf4c07d635193f6 #14130 configure: fix `SystemConfigu + ration` detection + + 6. Differences between autotools and CMake compiler options + + Fixed it by syncing compiler warning options. + + 59cadacfcc1d39472245979cdbd614c7a9af6f0d #14128 build: sync warning options b + etween autotools, cmake & compilers + + 7. Differences between autotools and CMake dependency detection + + Fixed it by improving detection of libidn2, with some more fixes + pending for the next feature window. + + f43adc2c4978f7f82a359e89186e58a31d17b0ad #14137 cmake: detect `libidn2` also + via `pkg-config` + Ref: #14136 cmake: detect `nghttp2` via `pkg-config`, enable by default + + 8. libidn2 detection bug with CMake + + Fixed the root cause and also the trigger in the CI config. + + 764fbabf6ed4c1d36c0ab2033ac8df52d9923cd7 #14175 cmake: fix builds with detect + ed libidn2 lib but undetected header + + 9. Suppressed compiler warnings inside Apple-specific curl code + + Fixed these warnings, which allowed to stop silencing them. + + b05dc7eb3592305de9fa85640767f3dd2a8d4c93 #14122 sectransp: fix `HAVE_BUILTIN_ + AVAILABLE` checks to not emit warnings + 5fa534b0dacdc120aaab0766047e0ecac37be4b3 #14162 sectransp: fix clang compiler + warnings, stop silencing them + + 10. CMake mis-detecting a CA bundle path on macOS + + d2ef6255f4a040397d2f40ab7cbf65a203201cd9 #14182 cmake: sync CA bundle/path de + tection with autotools + + 11. Failure to build tests with LibreSSL or wolfSSL with CMake + + Fixed by dropping unnecessary includes, makign test builds dependent + on dependency headers. + + 3765d75ce47b66289f946382b649d0e99389dc77 #14172 cmake: fix building `unit1600 + ` due to missing `ssl/openssl.h` + + 12. curl tests with CMake + + curl's CMake was missing bits for running the C preprocessor accurately. + It made tests 1119 and 1167 fail. I implemented the missing bits. + + efc2c5184d008fe2e5910fd03263e1ab0331d4e6 #14124 tests: include current direct + ory when running test Perl commands + c09db8b51b88ee6ad55bd637dcb4b47678e30906 #14129 cmake: create `configurehelp. + pm` like autotools does + 67cc1e3400b77536a3ca529c986247e1ef985e6e #14125 test1119: adapt for `.md` inp + ut + + 13. GCC missing `__builtin_available()` support + + curl source code assumes this is available to enable certain codepaths. + It's also intermixed with monotonic timer support. + + 14. Monotonic timer support with GCC + + Detected by GCC, while it probably shouldn't be. llvm/clang detects it + depending on target OS version. I've been playing with this, but so far + without a conclusion or fix. + + 15. Runtime/test failures with GCC + + I couldn't find the reason for most of this. A bunch of RTSP tests fail + with GCC. SecureTransport + HTTP/2 is failing a bunch of tests. With + OpenSSL it fails two of those. SecureTransport builds also fail one DoH + test. + + 16. Runtime/test failure in llvm/clang + + AppleIDN support received a fix with two more remaining. + + fd0250869f7837e4a48d7e6f54cc0801ad3820e8 #14179 #14176 IDN: fix ß with Apple + IDN + + 17. Other issues found and fixed while working on this: + + 2c15aa5765900d4351e733671a1c8c3785beee1a GHA/macos: delete misplaced ` + CFLAGS`, drop redundant CMake option + 80fb7c0bef209735ab352bf4afa31193a7bc65f1 #14126 configure: limit `SystemConfi + guration` test to non-c-ares, IPv6 builds + cfd6f43d6ca7e57670b422bab7bbf10221a2cf3e #14127 build: tidy up `__builtin_ava + ilable` feature checks (Apple) + bae555359979016999a9425a2d489f219a78abdd #14174 runtests: show name and keywo + rds for failed tests in summary + 09cdf7e5315711dea4ce7dcf5d99a4d41e7f658b #14178 cmake: delete unused `HAVE_LI + BSSH2`, `HAVE_LIBSOCKET` macros + d3595c74fab829f07ef44da1b7fc2f5668767020 #14186 configure: CA bundle/path det + ection fixes + 58772b0e082eda333e0a5fc8fb0bc7f17a3cd99c #14187 runtests: set `SOURCE_DATE_EP + OCH` to fix failing around midnight + 18f1cd7a77c4beecfd977d43f55634eb593ac99e #14183 tests: sync feature names wit + h `curl -V` + 4c22d97be786ed801e050da6872dd3143d6d0a59 #14181 build: use `#error` instead o + f invalid syntax + + Pending merge: + +Daniel Stenberg (19 Jul 2024) + +- RELEASE-NOTES: synced + +Stefan Eissing (18 Jul 2024) + +- lib: send eos flag + + Adds a `bool eos` flag to send methods to indicate that the data is the + last chunk the invovled transfer wants to send to the server. + + This will help protocol filters like HTTP/2 and 3 to forward the + stream's EOF flag and also allow to EAGAIN such calls when buffers are + not yet fully flushed. + + Closes #14220 + +Bhanu Prakash (18 Jul 2024) + +- mbedtls: correct the error message for cert blob parsing failure + + Closes #14224 + +Daniel Stenberg (18 Jul 2024) + +- curldown: make 'added-in:' a mandatory header field + + - generate AVAILABILITY manpage sections automatically - for consistent + wording + + - allows us to double-check against other documumentation (symbols-in-version + s + etc) + + - enables proper automation/scripting based on this data + + - lots of them were wrong or missing in the manpages + + - several of them repeated (sometimes mismatching) backend support info + + Add test 1488 to verify "added-in" version numbers against + symbols-in-versions. + + Closes #14217 + +Stefan Eissing (18 Jul 2024) + +- doh: fix cleanup + + When removing an easy handle that had DoH sub-easy handles going, those + were not removed from the multi handle. Their memory was reclaimed on + curl_easy_cleanup() of the owning handle, but multi still had them in + their list. + + Add `Curl_doh_close()` and `Curl_doh_cleanup()` as common point for + handling the DoH resource management. Use the `multi` present in the doh + handles (if so), for removal, as the `data->multi` might already have + been NULLed at this time. + + Reported-by: 罗朝辉 + Fixes #14207 + Closes #14212 + +Daniel Stenberg (18 Jul 2024) + +- tests/scripts: call it 'manpage' (single word) + + Mostly in comments + + Closes #14216 + +Alex Snast (18 Jul 2024) + +- http/3: resume upload on ack if we have more data to send + + Currently we're waiting for sendbuf_len_in_flight to hit zero before + resuming upload which means we're blocking and waiting for _all_ acks to + arrive before sending more data. This causes significant delays especially + when ack delay is used on the server side. + + The fix addresses several issues in h3 over ngtcp2: + - On ack we now call nghttp3_conn_resume_stream() when we have more + data to send. + - upload_left was incorrectly computed on CF_CTRL_DATA_DONE_SEND as + we need to subtract the ammount of data we have in flight. + - Remove upload_blocked_len as we Curl_bufq_write call will do the + right thing when called from cf_ngtcp2_send. + + Fixes #14198 + Closes #14209 + +Daniel Stenberg (18 Jul 2024) + +- idn: make macidn fail before trying conversion if name too long + + - double the max name length to 512 bytes + + Closes #14215 + +z2_ (18 Jul 2024) + +- idn: tweak buffer use when converting with macidn + + Closes #14215 + +Orgad Shaneh (18 Jul 2024) + +- lib: add failure reason on bind errors + + Closes #14221 + +Stefan Eissing (18 Jul 2024) + +- pytests: scorecard upload tests + + - add upload tests to scorecard, invoke with + > python3 tests/http/scorecard.py -u h1|h2|h3 + - add a reverse proxy setup from Caddy to httpd for + upload tests since Caddy does not have other PUT/POST handling + - add caddy tests in test_08 for POST/PUT + - increase read buffer in mod_curltest for larger reads + + Closes #14208 + +Viktor Szakats (18 Jul 2024) + +- runtests: fix newline glitch in FAIL details + + Follow-up to bae555359979016999a9425a2d489f219a78abdd #14174 + +- runtests: show name and keywords for failed tests in summary + + Useful to see what the numbers listed in the `TESTFAIL:` and `IGNORED:` + lines mean. Also list test keywords to help catching failure patterns. + + Example: + ``` + FAIL 1034: 'HTTP over proxy with malformatted IDN host name' HTTP, HTTP GET, + HTTP proxy, IDN, FAILURE, config file + FAIL 1035: 'HTTP over proxy with too long IDN host name' HTTP, HTTP GET, HTTP + proxy, IDN, FAILURE + + TESTFAIL: These test cases failed: 1034 1035 + ``` + + Closes #14174 + +Tal Regev (16 Jul 2024) + +- GHA/windows: add MSVC wolfSSL job with test + + Fix the file of wolfssl.c because of this warning/error: + ``` + curl\lib\vtls\wolfssl.c(1017,42): error C2220: the following warning is treat + ed as an error [curl\bld\lib\libcurl_object.vcxproj] + curl\lib\vtls\wolfssl.c(1017,42): warning C4267: 'function': conversion from + 'size_t' to 'unsigned long', possible loss of data [curl\bld\lib\libcurl_obje + ct.vcxproj] + ``` + + `size_t` in MSVC is different. Change it to `unsigned long` because + `wolfSSL_ERR_error_string_n` last argument is defined as + `unsigned long`. + + Closes #14193 + +Viktor Szakats (16 Jul 2024) + +- cmake: delete unused `HAVE_LIBSSH2`, `HAVE_LIBSOCKET` macros + + - `HAVE_LIBSSH2`: unused in source. Not defined in CMake. + + - `HAVE_LIBSOCKET`: unused in source. Used internally in CMake. + + autotools sets them implicitly, so add them to the flag comparison + ignore-list. + + Closes #14178 + +- cmake: create `configurehelp.pm` like autotools does + + Required by tests 1119 and 1167 to run a C preprocessor. + + Tested OK: https://github.com/curl/curl/actions/runs/9915343826 + + Besides Apple, it also supports any gcc and clang builds, and MSVC. + For other platforms, it defaults to `cpp` (like autotools). + + Follow-up to efc2c5184d008fe2e5910fd03263e1ab0331d4e6 #14124 + Cherry-picked from #14097 + Closes #14129 + +- cmake: sync CA bundle/path detection with autotools + + - skip the entire CA logic if no selected TLS backend support CA + certs/bundles. + Follow-up to 082bb41311a832ae1b83bb8fe1dfdefcf4e68ea5 #2545 + + - sync bundle path detection logic with `./configure`. + + - fix to not auto-detect CA bundle/path on Windows. + + - fix to reflect that BearSSL has CA bundle support. + + - show the detected bundle path (as with the cert bundle). + + - tidy up CMake syntax, fix typos in comments. + + Closes #14182 + +- configure: CA bundle/path detection fixes + + - fix to not auto-detect CA bundle/path on Windows. + + - two checks missed BearSSL, but they were only run for supported + TLS backends anyway. Delete these redundant checks. + + - fix typos in a comment nearby. + + Follow-up to 082bb41311a832ae1b83bb8fe1dfdefcf4e68ea5 #2545 + Closes #14186 + +- runtests: set `SOURCE_DATE_EPOCH` to fix failing around midnight + + To make sure that `managen` called by test 1706 uses the same date as + the test expects in the `%DATE` macro. + + Before this patch when tests started running before UTC midnight and + reached test 1706 after, these dates were different and the test failed. + + Follow-up to 0e73b69b3dd6d174226c60406d3c4266754d70f8 + Fixes #14173 + Closes #14187 + +- GHA/windows: verify 1448 2046 2047 in IDN Unicode jobs + + These IDN tests pass with Unicode and fail without. + + Follow-up to cb22cfca69bded45bf7f9c72c8e6764990490f11 #14077 + Closes #14188 + +- tests: sync feature names with `curl -V` + + Some feature names used in tests had minor differences compared to + the well-known ones from `curl -V`. This patch syncs them to make test + results easier to grok. + + Closes #14183 + +Stefan Eissing (15 Jul 2024) + +- sendf: fix CRLF conversion of input + + When CRLF line end conversion was enabled (--crlf), input after the last + newline in the upload buffer was not sent, if the buffer contained a + newline. + + Reported-by: vuonganh1993 on github + Fixes #14165 + Closes #14169 + +- test2600: disable on win32 + + - disbable this test on WIN32 platforms. It uses the file describtor '1' + as valid socket without events. Not portable. + - reduce trace output somewhat on other runs + + Fixes #14177 + Reported-by: Viktor Szakats + Closes #14191 + +- smtp: for starttls, do full upgrade + + - make sure the TLS handshake after a successful STARTTLS command is + fully done before further sending/receiving on the connection. + + Reported-by: tomy2105 on github + Fixes #14166 + Closes #14190 + +Daniel Stenberg (14 Jul 2024) + +- RELEASE-NOTES: synced + +Viktor Szakats (14 Jul 2024) + +- build: use `#error` instead of invalid syntax + + It reduces configure log noise. + + Follow-up to 20c1b2d75ee38189ffa75d21ed04108e1e0630ae #13287 + Closes #14181 + +Daniel Stenberg (14 Jul 2024) + +- libcurl-docs: make option lists alpha-sorted + + The man pages for curl_easy_getinfo, curl_easy_setopt and + curl_multi_setopt now feature the lists of options alphabetically + sorted. Test 1139 verify that they are. + + The curl_multi_setopt page also got brief explanations of the listed + options. + + Closes #14156 + +Christian Schmitz (14 Jul 2024) + +- IDN: fix ß with AppleIDN + + Add flags UIDNA_NONTRANSITIONAL_TO_ASCII and + UIDNA_NONTRANSITIONAL_TO_UNICODE to encode ß correctly. + + It fixes test 165. + + Reported-by: Viktor Szakats + Bug: #14176 + Closes #14179 + +Viktor Szakats (14 Jul 2024) + +- cmake: fix builds with detected libidn2 lib but undetected header + + It caused IDN to appear in `curl-config`, `libidn2` referenced from + `libcurl.pc`, fail to fallback to `pkg-config` detection. But libidn2 + not actually used. + + It came up in macOS CI builds after enabling cmake build tests. It + remained hidden for a while due to setting `-DUSE_APPLE_IDN=ON`. + + (The half-detection of Homebrew libidn2 was the result of configuring + with `-DCMAKE_EXE_LINKER_FLAGS=-L$(brew --prefix)/lib`, to fix + linking GnuTLS that needs the `nettle` lib from the brew prefix.) + + ``` + FAIL 1014: [Compare curl --version with curl-config --features] curl-config + ``` + Ref: https://github.com/curl/curl/actions/runs/9919357748/job/27405080722 + + Cherry-picked from #14097 + Closes #14175 + +- cmake: fix building `unit1600` due to missing `ssl/openssl.h` + + In specific builds configs, cmake failed to build test `unit1600`, + due missing an OpenSSL (or wolfSSL) header. + + The test code relies on `lib/curl_ntlm_core.h`, which in turn included + TLS library headers. But, dependency header directories are not setup + in cmake for tests, because they should not normally be needed. + + The issue was hidden in most builds because TLS headers are usually + found under the system prefix. One counterexample is macOS + Homebrew + LibreSSL builds, where OpenSSL is purposefully unlinked from there to + avoid a mixup with LibreSSL that resides under its own prefix. It was + also hidden in autotools, possibly because it sets up header directories + globally, tests included. + + The actual bug however is that `lib/curl_ntlm_core.h` should not include + TLS headers. None of its internal users need it, and `curl_ntlm_core.c` + included them already directly. + + Fix it by deleting the TLS header includes from this internal header. + + Fixes: + ``` + In file included from curl/tests/unit/unit1600.c:27: + curl/lib/curl_ntlm_core.h:32:12: fatal error: 'openssl/ssl.h' file not found + # include + ^~~~~~~~~~~~~~~ + ``` + Ref: https://github.com/curl/curl/actions/runs/9912684737/job/27388041520#ste + p:12:1694 + + Follow-up to 48eb71ade41d4b37f416b643063cab846ac027a2 #10322 + Cherry-picked from #14097 + Closes #14172 + +- sectransp: fix clang compiler warnings, stop silencing them + + Fix `-Wpointer-bool-conversion` warnings with the method suggested by + both Apple clang and mainline llvm. This was already tried and dropped + in #1705 (in year 2017), but the issue reported there no longer + replicates. + + Verified with Apple clang 14, llvm 15, llvm 18 and gcc 11, 14 that the + generated objects are bit by bit identical before and after this patch. + + Also: + - stop silencing `-Wtautological-pointer-compare`. This warning don't + seem to be appearing anymore (with or without this patch), at least + with the tested compilers and SDKs (clang 13.1.6-16.0.0beta, llvm 15, + 18, gcc 11, 14) and minimum macOS target of 10.8. Older targets fail + to build curl with SecureTransport. + + - silence `-Wunreachable-code` for clang only. Previously I applied it + also to GCC, by mistake. + Ref: https://github.com/curl/curl/pull/12331/commits/8d7172d20a48ebc6c1b1d9 + 4a76e2c5fb19dd9bfa + + Apple clang `-Wpointer-bool-conversion`: + ``` + curl/lib/vtls/sectransp.c:1103:6: error: address of function 'SSLCreateContex + t' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion] + if(SSLCreateContext) { /* use the newer API if available */ + ~~ ^~~~~~~~~~~~~~~~ + curl/lib/vtls/sectransp.c:1103:6: note: prefix with the address-of operator t + o silence this warning + if(SSLCreateContext) { /* use the newer API if available */ + ^ + & + ``` + Ref: https://github.com/curl/curl/actions/runs/9819538439/job/27113201384#ste + p:8:382 + + llvm `-Wpointer-bool-conversion`: + ``` + curl/lib/vtls/sectransp.c:2663:8: error: address of function 'SSLCreateContex + t' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion] + if(SSLCreateContext) + ~~ ^~~~~~~~~~~~~~~~ + curl/lib/vtls/sectransp.c:2663:8: note: prefix with the address-of operator t + o silence this warning + if(SSLCreateContext) + ^ + & + ``` + Ref: https://github.com/curl/curl/actions/runs/9819538439/job/27113200291#ste + p:8:417 + + gcc still needs `-Waddress` suppressed to avoid these: + ``` + curl/lib/vtls/n/sectransp.c: In function 'getsubject': + curl/lib/vtls/n/sectransp.c:379:6: warning: the address of 'SecCertificateCop + yLongDescription' will always evaluate as 'true' [-Waddress] + 379 | if(&SecCertificateCopyLongDescription) + | ^ + [...] + ``` + + Follow-up to 59cadacfcc1d39472245979cdbd614c7a9af6f0d #14128 + Follow-up to af271ce9b9717ba289417e9cbb7f278c2a12f959 #1722 + Follow-up to 2b7ce3f56dfede107113c6de7d0ca457109d3eda #1706 + Cherry-picked from #14097 + Closes #14162 + +- CI/circleci: config tidy-ups, bump up test parallelism + + - bump parallel test for Linux jobs. + Credit-to: Dan Fandrich + Cherry-picked from #11510 + - bump parallel test for macOS jobs. + - drop no longer necessary `-Wno-vla` option. + - fold long lines. + - drop `--enable-maintainer-mode` `./configure` option. + - replace a hard-coded prefix with `brew --prefix`. + - update documentation link. + - move `--enable-debug` in front. + - tidy up quotes. + + Closes #14171 + +- GHA/windows: re-add gsasl to MSVC jobs + + Now that the package reached the CI runner image. + + Follow-up to f99c08dba40307c07341013ff5f71fa8e3464ffc #14090 + Follow-up to e26cbe20cbedbea0ca743dd33880517309315cb2 #13979 + + Closes #14170 + +- tidy-up: adjust casing of project names + + Mostly TLS/SSH project name. + + Closes #14160 + +Daniel Stenberg (12 Jul 2024) + +- ISSUE_TEMPLATE/docs: correct the field identifiers + +Stephen Farrell (12 Jul 2024) + +- doh: fix leak and zero-length HTTPS RR crash + + This PR fixes a leak and a crash that can happen when curl encounters + bad HTTPS RR values in DNS. We're starting to do better testing of that + kind of thing and e.g. have published bad HTTPS RR values at + dodgy.test.defo.ie. + + Closes #14151 + +Daniel Stenberg (12 Jul 2024) + +- curl_global_init.md: polish the thread-safe wording + + Since this has been thread-safe for two years now, few users actually + are hurt by the previous unsafe ways. + + Closes #14158 + +Viktor Szakats (12 Jul 2024) + +- GHA: FreeBSD 14.1, actions bump + + - bump FreeBSD to 14.1 + + - update cross-platform-actions/action action to v0.25.0 + + Closes #14157 + Closes #14164 + +- build: fix llvm 17 and older + macOS SDK 14.4 and newer + + Fixup faulty target macro initialization in macOS SDK since v14.4 (as of + 15.0 beta). The SDK target detection in `TargetConditionals.h` correctly + detects macOS, but fails to set the macro's old name `TARGET_OS_OSX`, + then continues to set it to a default value of 0. Other parts of the SDK + still rely on the old name, and with this inconsistency our builds fail + due to missing declarations. It happens when using mainline llvm older + than v18. Later versions fixed it by predefining these target macros, + avoiding the faulty dynamic detection. gcc is not affected (for now) + because it lacks the necessary dynamic detection features, so the SDK + falls back to a codepath that sets both the old and new macro to 1. + + Also move the `TargetConditionals.h` include to the top of to make sure + including it also for c-ares builds, combined with SecureTransport or + other curl features that may call use an Apple SDK. + + Before this patch, affected build combinations (e.g. in GHA runners, + llvm@15 + Xcode 15.3, 15.4, 16.0 with their default SDKs + + SecureTransport) fail with: + ``` + error: use of undeclared identifier 'noErr' + or 'SecCertificateCopyLongDescription' + or 'SecItemImportExportKeyParameters' + or 'SecExternalFormat' + or 'SecExternalItemType' + or 'SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION' + ``` + + Example: + ``` + curl/lib/vtls/sectransp.c:311:18: error: use of undeclared identifier 'noErr' + OSStatus rtn = noErr; + ^ + curl/lib/vtls/sectransp.c:379:7: error: use of undeclared identifier 'SecCert + ificateCopyLongDescription' + if(&SecCertificateCopyLongDescription) + ^ + curl/lib/vtls/sectransp.c:381:7: error: call to undeclared function 'SecCerti + ficateCopyLongDescription'; ISO C99 and later do not support implicit functio + n declarations [-Werror,-Wimplicit-function-declaration] + SecCertificateCopyLongDescription(NULL, cert, NULL); + ^ + curl/lib/vtls/sectransp.c:380:25: error: incompatible integer to pointer conv + ersion assigning to 'CFStringRef' (aka 'const struct __CFString *') from 'int + ' [-Wint-conversion] + server_cert_summary = + ^ + [...] + ``` + Ref: https://github.com/curl/curl/actions/runs/9893867519/job/27330135969#ste + p:10:22 + + llvm v18 patches implementing the predefined macros: + https://github.com/llvm/llvm-project/pull/74676 + https://github.com/llvm/llvm-project/commit/6e1f19168bca7e3bd4eefda50ba03eac8 + 441dbbf + https://github.com/llvm/llvm-project/pull/82833 + https://github.com/llvm/llvm-project/commit/e5ed7b6e2fd368b722b6359556cd01258 + 81e7638 + + Cherry-picked from #14097 + Closes #14159 + +- macos: undo `availability` macro enabled by Homebrew gcc + + Homebrew gcc builds starting with 12.4.0, 13.3.0 and 14.1.0 enabled + the `availability` attribute. + + This broke builds because the way the Apple SDK uses attributes (when + available) are incompatible with how gcc accepts them. Causing these + errors: + ``` + error: attributes should be specified before the declarator in a function d + efinition + error: expected ',' or '}' before + ``` + + Upstream commits implementing the `availability` macro: + gcc-12: https://github.com/iains/gcc-12-branch/commit/fd5530b7cb0012bf4faeddd + 45e13054a1dfa6783 + gcc-13: https://github.com/iains/gcc-13-branch/commit/cb7e4eca68cfc4763474e2e + b0935a844458842a8 + gcc-14: https://github.com/iains/gcc-14-branch/commit/ff62a108865a6403f501738 + 0d7018250c1d3306f + + The project above is a Darwin gcc compatibility pack, that is applied + to Homebrew gcc builds. + + This patch works by redefining the `availability` macro to an invalid + value, making `__has_attribute(availability)` checks fail, stopping + Apple SDK from inserting the incompatible attributes. + + It also replaces the previous, local workaround for `lib/macos.c`. + + Example with gcc 12.4.0 with macOS SDK 14.0 (Xcode 15.0.1): + ``` + In file included from /MacOSX14.0.sdk/System/Library/Frameworks/ + CoreFoundation.framework/Headers/CoreFoundation.h:54, + from /MacOSX14.0.sdk/System/Library/Frameworks/ + SystemConfiguration.framework/Headers/SCDynamicStoreCopySpecific.h:30, + from /Users/runner/work/curl/curl/lib/macos.c:33, + from /Users/runner/work/curl/curl/build/lib/CMakeFiles/libcu + rl_shared.dir/Unity/unity_0_c.c:244: + /MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framewo + rk/Headers/CFUserNotification.h:126:1: error: attributes should be specified + before the declarator in a function definition + 126 | CF_INLINE CFOptionFlags CFUserNotificationCheckBoxChecked(CFIndex i) + API_AVAILABLE(macos(10.0)) API_UNAVAILABLE(ios, watchos, tvos) {return ((CFOp + tionFlags)(1UL << (8 + i)));} + | ^~~~~~~~~ + ``` + Ref: https://github.com/curl/curl/actions/runs/9787982387/job/27025351601?pr= + 14096#step:7:18 + + The gcc vs. llvm/clang incompatibility possibly tracked here upstream: + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108796 + More info: + https://github.com/llvm/llvm-project/issues/81767 + https://github.com/gcc-mirror/gcc/commit/8433baadec88e5f31fa141b6d78094e912 + 56079d + https://discourse.llvm.org/t/changing-attribute-ast-printing-location-for-g + cc-compatibility/73215 + https://reviews.llvm.org/D159362 + + Follow-up to db135f8d7207b20d531e7e2100a49f3e16bdcfab #14119 + Ref: https://github.com/curl/curl/pull/14091#issuecomment-2222703468 + Fixes #13700 + Cherry-picked from #14097 + Closes #14155 + +Daniel Stenberg (11 Jul 2024) + +- ISSUE_TEMPLATE/docs: add a separate GitHub issue template for documentation + + As such problems don't really fit the code related template + + Closes #14161 + +Dan Fandrich (11 Jul 2024) + +- DISTROS: add AlmaLinux package source link + +Viktor Szakats (11 Jul 2024) + +- GHA/windows: ignore FTP test results for old-mingw-w64 [ci skip] + + Missed from previous commit. They are flaky here as well. + + Follow-up to 0b81eccd22fb915aa6b679c0fd23a8a89332dc9e + +Daniel Stenberg (11 Jul 2024) + +- libcurl-easy.md: now *more* than 300 options + + it previously said "almost 300". + + Also cleaned up the language somewhat. + + Closes #14153 + +Martin Peck (10 Jul 2024) + +- MANUAL.md: wrap two example urls that overrun styling + + Closes #14149 + +renovate[bot] (10 Jul 2024) + +- GHA: update wolfSSL and mod_h2 + + - wolfSSL/wolfssl to v5.7.2 + - icing/mod_h2 to v2.0.29 + + Closes #14131 + Closes #14148 + +Dominik Piątkowski (10 Jul 2024) + +- docs: start markdown headers with capital letter where applicable + + Closes #14115 + +CMD (10 Jul 2024) + +- hostip: skip error check for infallible function call + + Closes #14147 + +Daniel Stenberg (10 Jul 2024) + +- cf-socket: remove two "useless" assignments + + 'nread' is already -1, no need to assign it again + + Pointed out by CodeSonar + + Closes #14145 + +Viktor Szakats (10 Jul 2024) + +- cmake: detect `libidn2` also via `pkg-config` + + Also: + - GHA/non-native: install `pkg-config` to detect libidn2 with cmake + on NetBSD and FreeBSD. + - GHA/non-native: tidy-up `curl --version` command if here. + + Cherry-picked from #14097 + Closes #14137 + +- build: fix llvm 16 or older + Xcode 15 or newer, and gcc + + Xcode v15 (2023) or newer requires the built-in macro + `__ENVIRONMENT_OS_VERSION_MIN_REQUIRED__`. This macro is missing from + mainline llvm versions released earlier. llvm v17 introduced it here: + https://github.com/llvm/llvm-project/commit/c8e2dd8c6f490b68e41fe663b44535a8a + 21dfeab + + This patch defines the missing macro when the necessary conditions + align, by using the value via the macro's old name. + + The issue affected SecureTransport builds: The SecureTransport code, + `lib/md4.c` and `lib/md5.c`. + + Existing gcc versions (as of v14) also don't define this macro, so apply + the patch to it as well. Even though gcc is incompatible in other ways, + so this isn't fixing an actual curl build case that I could find yet. + + GHA macOS runner images have llvm v15 pre-installed, which broke builds + when building with an affected Xcode: + ``` + curl/lib/md4.c:80:14: error: '__ENVIRONMENT_OS_VERSION_MIN_REQUIRED__' is not + defined, evaluates to 0 [-Werror,-Wundef] + (__MAC_OS_X_VERSION_MIN_REQUIRED < 101500)) || \ + ^ + /Applications/Xcode_15.1.app/Contents/Developer/Platforms/MacOSX.platform/Dev + eloper/SDKs/MacOSX14.2.sdk/usr/include/AvailabilityInternal.h:40:53: note: ex + panded from macro '__MAC_OS_X_VERSION_MIN_REQUIRED' + #define __MAC_OS_X_VERSION_MIN_REQUIRED __ENVIRONMENT_OS_VERSION_ + MIN_REQUIRED__ + ^ + In file included from curl/build/lib/CMakeFiles/libcurl_shared.dir/Unity/unit + y_0_c.c:250: + curl/lib/md5.c:75:14: error: '__ENVIRONMENT_OS_VERSION_MIN_REQUIRED__' is not + defined, evaluates to 0 [-Werror,-Wundef] + (__MAC_OS_X_VERSION_MIN_REQUIRED < 101500)) || \ + ^ + /Applications/Xcode_15.1.app/Contents/Developer/Platforms/MacOSX.platform/Dev + eloper/SDKs/MacOSX14.2.sdk/usr/include/AvailabilityInternal.h:40:53: note: ex + panded from macro '__MAC_OS_X_VERSION_MIN_REQUIRED' + #define __MAC_OS_X_VERSION_MIN_REQUIRED __ENVIRONMENT_OS_VERSION_ + MIN_REQUIRED__ + ^ + 2 errors generated. + ``` + Ref: https://github.com/curl/curl/actions/runs/9811974634/job/27095218578#ste + p:4:20 + + Cherry-picked from #14097 + Closes #14134 + +- build: tidy up `__builtin_available` feature checks (Apple) + + - sync detection snippet between autotools and cmake + It wasn't causing issues, but it's useful to avoid unnecessary + differences while debugging. + + - cmake: limit check to `APPLE`. + + Ref: b05dc7eb3592305de9fa85640767f3dd2a8d4c93 #14122 + Cherry-picked from #14097 + Closes #14127 + +- configure: limit `SystemConfiguration` test to non-c-ares, IPv6 builds + + The framework this check detects is necessary for the function + `SCDynamicStoreCopyProxies()` used in `lib/macos.c`. Non-c-ares, + IPv6-enabled builds touch this codepath. + + Limit the feature check for builds that actually need it. + + It brings this in sync with CMake which already worked this way. + + Cherry-picked from #14097 + Closes #14126 + +- configure: fix `SystemConfiguration` detection + + Before this patch, `SystemConfiguration` detection failed due to this + error when compiling the detection snippet: + ``` + /Applications/Xcode_15.3.app/Contents/Developer/Platforms/MacOSX.platform/Dev + eloper/SDKs/MacOSX.sdk/usr/include/TargetConditionals.h:140:50: error: missin + g binary operator before token "(" + 140 | #if !defined(__has_extension) || !__has_extension(define_target_os_ma + cros) + | ^ + ``` + Ref: https://github.com/curl/curl/actions/runs/9821817534/job/27117929218#ste + p:6:1079 + + It occured with gcc-11 when combined with macOS SDK 14.4 and 14.5 + (default SDKs in Xcode 15.3 and 15.4 respectively). It did not happen + with earlier releases. + + Despite the failure in `./configure`, `lib/macos.c` compiled with + Apple's `TargetConditionals.h` just fine. + + Turns out that including the `sys/types.h` header before the SDK + header fixes the error and makes the detection snippet compile. + + Cherry-picked from #14097 + Closes #14130 + +- build: sync warning options between autotools, cmake & compilers + + - cmake: enable Apple-specific `-Werror=partial-availability` to match + autotools. + + - autotools: enable `-pedantic-errors` with llvm/clang to match gcc and + CMake. + + - autotools: enable `-Werror-implicit-function-declaration` for + llvm/clang to match gcc. + + - cmake: enable `-Werror-implicit-function-declaration` to match + autotools. + + - move `-Wpointer-bool-conversion` from autotools to the local file + (`sectransp.c`) it was meant to apply. This way it applies to all + build methods. + + - autotoos: show `CURL_CFLAG_EXTRAS` in the `./configure` summary. + (it may contain `-Werror` and/or `-pedentic-errors`.) + + Cherry-picked from #14097 + Closes #14128 + +- CI: simplify running curl with DLLs + + - update `PATH` instead of copying DLLs around. + - drop redundant `export` from `export PATH`. + - delete ending pathseps. + + Closes #14143 + +Alex Snast (9 Jul 2024) + +- wolfssl: use larger error buffer when formatting errors + + Currently we're using WOLFSSL_MAX_ERROR_SZ to define the error buffer + size, this value is user defined which means it can be overwritten with + -DWOLFSSL_MAX_ERROR_SZ=512 when building wolfssl and this overwrite is + not exported to the users of wolfssl. + + Instead of relying on WOLFSSL_MAX_ERROR_SZ we'll just use a 256 bytes + error buffer and use wolfSSL_ERR_error_string_n to fill it thus dropping + the dependency on WOLFSSL_MAX_ERROR_SZ altogether. + + Closes #14114 + +Viktor Szakats (9 Jul 2024) + +- CI: bump FreeBSD Python packages + + Closes #14141 + +- GHA/curl-for-win: don't run if only another CI was changed + + Closes #14142 + +Daniel Stenberg (9 Jul 2024) + +- RELEASE-NOTES: synced + +Stefan Eissing (9 Jul 2024) + +- vtls: replace addsessionid with set_sessionid + + - deduplicate the code in many tls backends that check + for an existing id and delete it before adding the new one + - rename ssl_primary_config's `sessionid` bool to `cache_session` + + Closes #14121 + +Daniel Stenberg (9 Jul 2024) + +- test1175: scan libcurl-errors.md, not the generated .3 version + + Closes #14133 + +- test1139: scan .md files instead of .3 ones + + As they are the canonical sources. + + It still uses the curl.1 for command line option info. + + Closes #14132 + +Stefan Eissing (9 Jul 2024) + +- cf-socket: remove obsolete recvbuf + + - recvbuf was never enabled, remove all its code + - remove `fdsave`ing the socket as that is not longer needed + + Closes #14138 + +Viktor Szakats (9 Jul 2024) + +- test1119: adapt for `.md` input + + Replace logic dealing with `.3` files to handle the Markdown syntax. + + Follow-up to eefcc1bda4bccd800f5a56a0fe17a2f44a96e88b #12730 + Cherry-picked from #14097 + Closes #14125 + +- tests: include current directory when running test Perl commands + + Necessary to find generated files in the out-of-tree build directory. + E.g. `tests/configurehelp.pm`, for tests 1119 and 1167. + + Before this patch macOS autotools builds were failing these two tests + due to falling back to the default preprocessor (`cpp`) instead of + the actual one configured. Then `cpp` failing to compile Apple SDK + headers referenced by curl headers. + + Cherry-picked from #14097 + Closes #14124 + +- configure: sort feature list, lowercase protocols, use backticks + + - sort features case-insensitively to match `curl -V` and cmake. + `sort -f` is POSIX, but check if it's available anyway. + + - make protocols lowercase to match `curl -V` and cmake. + + - replace two outlier `$()` with backticks. + + Closes #14117 + +Yedaya Katsman (8 Jul 2024) + +- variable.md: make example use expand + + I used double quotes since it seemed required for powershell, so this + example works in both (ba)sh and powershell as well as cmd.exe. + + Closes #14118 + +Andy Reitz (8 Jul 2024) + +- GIT-INFO.md: remove version requirements + + Keep them in docs/INTERNALS.md + + Bump lowest perl to 5.8 + + Closes #14112 + +Viktor Szakats (8 Jul 2024) + +- sectransp: fix `HAVE_BUILTIN_AVAILABLE` checks to not emit warnings + + `HAVE_BUILTIN_AVAILABLE` is a curl macro set via autotools and cmake. + Like other `HAVE_`s it signals availability if defined. + + SecureTransport code was specifically looking for the value 1, which + triggered compiler warnings when the feature was not present. + + Replace the existing workaround of locally suppressing the compiler + warning with using `defined()`. + + autotools: + ``` + 767 | #if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAILAB + LE == 1 + | ^~~~~~~~~~~~~~~~~~ + ~~~~ + ../../lib/vtls/sectransp.c: In function 'sectransp_connect_step1': + ../../lib/vtls/sectransp.c:1140:52: error: "HAVE_BUILTIN_AVAILABLE" is not de + fined, evaluates to 0 [-Werror=undef] + 1140 | #if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAIL + ABLE == 1 + | ^~~~~~~~~~~~~~~~~~ + ~~~~ + ../../lib/vtls/sectransp.c:1240:52: error: "HAVE_BUILTIN_AVAILABLE" is not de + fined, evaluates to 0 [-Werror=undef] + 1240 | #if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAIL + ABLE == 1 + | ^~~~~~~~~~~~~~~~~~ + ~~~~ + ../../lib/vtls/sectransp.c: In function 'sectransp_connect_step2': + ``` + Ref: https://github.com/curl/curl/actions/runs/9815428701/job/27104448045#ste + p:6:499 + + cmake gcc: + ``` + 1140 | #if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAIL + ABLE == 1 + | ^~~~~~~~~~~~~~~~~~ + ~~~~ + /Users/runner/work/curl/curl/lib/vtls/sectransp.c:1240:52: error: "HAVE_BUILT + IN_AVAILABLE" is not defined, evaluates to 0 [-Werror=undef] + 1240 | #if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAIL + ABLE == 1 + | ^~~~~~~~~~~~~~~~~~ + ~~~~ + /Users/runner/work/curl/curl/lib/vtls/sectransp.c: In function 'sectransp_con + nect_step2': + /Users/runner/work/curl/curl/lib/vtls/sectransp.c:2231:51: error: "HAVE_BUILT + IN_AVAILABLE" is not defined, evaluates to 0 [-Werror=undef] + 2231 | #if(CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAILA + BLE == 1 + | ^~~~~~~~~~~~~~~~~~~ + ~~~ + ``` + Ref: https://github.com/curl/curl/actions/runs/9815428701/job/27104445425#ste + p:8:355 + + Cherry-picked from #14097 + Closes #14122 + +- examples: suppress deprecation warnings locally + + Simplify making clean builds by silencing deprecation warnings inside + the example code where these may occur. + + Drop related build tweaks/comments from GHA jobs. + + Example warning: + ``` + curl/docs/examples/postit2-formadd.c:65:16: error: 'CURLFORM_COPYNAME' is dep + recated: since 7.56.0. Use curl_mime_name() [-Werror=deprecated-declarations] + 65 | CURLFORM_COPYNAME, "sendfile", + | ^~~~~~~~~~~~~~~~~ + ``` + Ref: https://github.com/curl/curl/actions/runs/9841099503/job/27166970904#ste + p:10:829 + + Closes #14123 + +- GHA/macos: bump parallel tests to -j5 + + Credit-to: Dan Fandrich + Cherry-picked from #11510 #14097 + +- GHA/windows: usability improvements + + - move `curl --version` into separate step. + + - move configure log to separate step. Run on success, too. + + - add step with `curl_config.h` dump (full and brief/sorted). + + - make `autoreconf` a separate step. + + - add each job configuration a short name. + + - shorten job names. + Dedupe/drop redundant info, introduce abbreviations: + AM = autotools, CM = CMake, U = Unicode, R = Release, not -> `!`, etc. + Instead of mentioning `debug`, mentioned when it's not. + + - simplify `PATH` forming for MSVC jobs. + It's sufficient to add the release binary directory of vcpkg, the debug one + is redundant. + Follow-up to e26cbe20cbedbea0ca743dd33880517309315cb2 #13979 + + - other minor tidy-ups. + + Closes #14116 + +- GHA/macos: delete misplaced `CFLAGS`, drop redundant CMake option + + With macOS there is a long-term struggle with deprecation warnings. + In curl they occur with LDAP, SecureTransport and in docs/examples. + + There are three ways to fix them: + - by CFLAGS `-Wno-deprecated-declarations` as a workaround. + - by CFLAGS `-mmacosx-version-min` set to a version where the the + feature was not deprecated. + - by CMake option `-DCMAKE_OSX_DEPLOYMENT_TARGET=`. + + In GHA CMake jobs, all three were used, and `-mmacosx-version-min` was + set in a bogus way. Delete that bogus option, and delete the lone, + redundant CMake option too. + + In a future commit I might replace the suppression option to properly + setting the target OS. + + Follow-up to dfdd978f7c60224dffe2aac25b436dc0a5cd0186 #13491 + Cherry-picked from #14097 + +- macos: add workaround for gcc, non-c-ares, IPv6, compile error + + Apple macOS SDK 13.0 and later are increasingly incompatible with gcc, + which started causing CI errors with the 20240701.9 revision of the + `macos-latest` (= `macos-14-arm64`) runner image. + + This error is happening inside an Apple SDK header. We use the header + for calling a function in a resolver-related hack, in non-c-ares, IPv6 + builds. You can avoid the problem by using c-ares or disabling IPv6 + (or using clang, llvm, or a compatible gcc + SDK combination). + + This patch fixes affected builds by declaring the ncessary framework + function manually, and not including the problematic header. + + This workaround is ugly, doesn't cover all combinations, and fragile. + + Other options are to disable this resolver-related hack for GCC, or to + replace it with a solution that doesn't rely on Apple SDK. + + If you are aware of a stable fix or workaround, let us know. + + gcc 12.4.0 + macOS SDK 14.0 (Xcode 15.0.1) error example: + ``` + In file included from /Applications/Xcode.app/Contents/Developer/Platforms/Ma + cOSX.platform/Developer/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/CoreFou + ndation.framework/Headers/CoreFoundation.h:54, + from /Applications/Xcode.app/Contents/Developer/Platforms/Ma + cOSX.platform/Developer/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/SystemC + onfiguration.framework/Headers/SCDynamicStoreCopySpecific.h:30, + from /Users/runner/work/curl/curl/lib/macos.c:33, + from /Users/runner/work/curl/curl/build/lib/CMakeFiles/libcu + rl_shared.dir/Unity/unity_0_c.c:244: + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develope + r/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Head + ers/CFUserNotification.h:126:1: error: attributes should be specified before + the declarator in a function definition + 126 | CF_INLINE CFOptionFlags CFUserNotificationCheckBoxChecked(CFIndex i) + API_AVAILABLE(macos(10.0)) API_UNAVAILABLE(ios, watchos, tvos) {return ((CFOp + tionFlags)(1UL << (8 + i)));} + | ^~~~~~~~~ + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develope + r/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Head + ers/CFUserNotification.h:127:1: error: attributes should be specified before + the declarator in a function definition + 127 | CF_INLINE CFOptionFlags CFUserNotificationSecureTextField(CFIndex i) + API_AVAILABLE(macos(10.0)) API_UNAVAILABLE(ios, watchos, tvos) {return ((CFOp + tionFlags)(1UL << (16 + i)));} + | ^~~~~~~~~ + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develope + r/SDKs/MacOSX14.0.sdk/System/Library/Frameworks/CoreFoundation.framework/Head + ers/CFUserNotification.h:128:1: error: attributes should be specified before + the declarator in a function definition + 128 | CF_INLINE CFOptionFlags CFUserNotificationPopUpSelection(CFIndex n) A + PI_AVAILABLE(macos(10.0)) API_UNAVAILABLE(ios, watchos, tvos) {return ((CFOpt + ionFlags)(n << 24));} + | ^~~~~~~~~ + ``` + Ref: https://github.com/curl/curl/actions/runs/9787982387/job/27025351601?pr= + 14096#step:7:18 + + The exact conditions are fuzzy. Oddly enough gcc 12.3.0 and the SDK + same as above are _compatible_: + https://github.com/curl/curl/actions/runs/9791701214/job/27036037162 + + Also notice that similar errors can also happen in SecureTransport + builds, due to the SDK headers required. + + Ref: https://github.com/curl/curl/pull/14097#issuecomment-2208639046 + Ref: https://github.com/curl/curl/pull/14091#issuecomment-2205870854 + Cherry-picked from #14097 + Closes #14119 + +- cmake: feature casing fix and tidy-ups + + - fix casing of a feature (`Unicode`) in the feature list. + - sort TLS backends case-insensitively. + - sync feature/protocol list heading with `curl -V` and autotools. + + Closes #14120 + +- GHA: ignore FTP test result in Windows jobs + + They are flaky. + + E.g.: + - old-mingw-w64 7.3.0: 2001, 2039, 2083 + - msvc: 1501, 593 (multiple) + + Ref: https://github.com/curl/curl/pull/13599#issuecomment-2119372376 + Cherry-picked from #14116 + +- GHA: improve vcpkg cache, add BoringSSL ECH and LibreSSL MSVC jobs + + - cache on a per-package basis. + Replace manual caching with a built-in solution. It shares cached + package builds between jobs, e.g. libssh2 only builds once + per platform (instead of once per job). Individual packages are built + as needed (not the whole per-job tree). It also fixes the duplicate + cache entry issues. + Ref: https://learn.microsoft.com/en-us/vcpkg/consume/binary-caching-github- + actions-cache + Follow-up to e26cbe20cbedbea0ca743dd33880517309315cb2 #13979 + Follow-up to cb22cfca69bded45bf7f9c72c8e6764990490f11 #14077 + + - add BoringSSL job with ECH enabled. The first such job in the curl CI. + + - add LibreSSL job. + + - use vcpkg pre-installed on the runner image, instead of rolling our + own. This is quicker, simpler and more robust. + Follow-up to e26cbe20cbedbea0ca743dd33880517309315cb2 #13979 + + - show pre-installed vcpkg and ports version. + + - drop `gsasl` dependency till it reaches the pre-installed vcpkg ports. + + - re-add `find .` to see the binaries generated. + + - simplify setting up `PATH`. + + - exclude failing tests for any job enabling WinIDN. + + - drop collecting and uploading log archives. We already dump CMake + logs, and our build doesn't use Ninja. Rest of files weren't generated + by the curl build. We don't aim to debug vcpkg package builds. + + Closes #14090 + +Tal Regev (7 Jul 2024) + +- GHA: add MSVC UWP job, expand jobs with more options + + - add new dependencies: brotli, libpsl (requires libicu2) and gsasl. + + - enable WinIDN in a job. Exclude failing tests. + + - add UWP job and fix the build logic to support it. + + - increase timeouts to build the new dependencies. + + Assisted-by: Viktor Szakats + Closes #14077 + +Dan Fandrich (6 Jul 2024) + +- tests: fix sshd UserKnownHostsFile path for MinGW/Cygwin + + This is the same thing as the previous commit fd194f46 but on the next + line. + + Follow-up to 70d2fca2 + + Ref: #10818 + +- tests: fix sshd IdentityFile path for MinGW/Cygwin + + This was missed during some refactoring more than a year ago and is + causing a warning "Use of uninitialized value $path in pattern match". + + Follow-up to 70d2fca2 + + Ref: #10818 + Closes #14113 + +Viktor Szakats (7 Jul 2024) + +- build: add Debug, TrackMemory, ECH to feature list + + Also: + + - remove stray `ECH` and `HTTPSRR` from cmake protocol list. + + - stop excluding `Debug` and `TrackMemory` in `test1013.pl`. + + - configure: delete `CURL_CHECK_CURLDEBUG` check. + Ref: 065047dc62cba3efde597fa5420d112fc2f4c500 + This check was effectively doing nothing, except disabling + `--enable-curldebug` in `curl-config` for + Cygwin/MSYS/cegcc/OS2/AIX targets with c-ares enabled. + + Closes #14096 + +Dan Fandrich (5 Jul 2024) + +- CI: bump the libc6 on the linux-old build + + This contains some security fixes for nscd. + +Viktor Szakats (6 Jul 2024) + +- reuse: fix typo in comment + + Follow-up to 9104bad82004d908e1fe66a425f8ca78f975045d #14107 + +Dan Fandrich (5 Jul 2024) + +- CI: Fix typo in comment + +- curl: follow-up to fix categories in --help + + The commit 6483813b was missing changes necessitated by 2abfc75 that + causes a crash. Also, use ARRAYSIZE() for cleaner code. + + Follow-up to 6483813b + + Ref #14055 + +- curl: list categories in --help + + This eliminates the need to run an extra help subcommand to get the + possible categories, reducing the friction in getting relevant help. The + help wording was also slightly tweaked for grammatical accuracy. + + Closes #14055 + +Daniel Stenberg (5 Jul 2024) + +- RELEASE-NOTES: synced + +renovate[bot] (5 Jul 2024) + +- GHA: update actions/upload-artifact and actions/download-artifact + + update actions/upload-artifact digest to 0b2256b + update actions/download-artifact digest to fa0a91b + + Closes #14111 + Closes #14110 + +Max Mehl (5 Jul 2024) + +- reuse: switch to REUSE 3.2 and REUSE.toml + + - remove scripts/copyright.pl + + Closes #14107 + +Yedaya Katsman (5 Jul 2024) + +- curl: move more options to deprecated category + + --no-npn, --sslv2, --sslv3 + + Closes #14109 + +Stefan Eissing (5 Jul 2024) + +- multi: pollset assertion only when IP connected + + Give warning for an empty pollset only when the connection has at least + IP connectivity. There are cases where the connect in QUIC makes another + attempt on a timeout and no socket will be available during that. + + Closes #14108 + +Daniel Stenberg (5 Jul 2024) + +- cmdline-opts: category cleanup + + Option cleanups: + + --get is not upload + --form* are post + - added several options into ldap, smtp, imap and pop3 + - shortened the category descriptions in the list + + category curl fixes: + + --create-dirs removed from 'curl' + --ftp-create-dirs removed from 'curl' + --netrc moved to 'auth' from 'curl' + --netrc-file moved to 'auth' from 'curl' + --netrc-optional moved to 'auth' from 'curl' + --no-buffer moved to 'output' from 'curl' + --no-clobber removed from 'curl' + --output removed from 'curl' + --output-dir removed from 'curl' + --remove-on-error removed from 'curl' + + Add a "global" category: + + - Made all "global" options set this category + + Add a "deprecated" category: + + - Moved the deprecated options to it (maybe they should not be in any + category long term) + + Add a 'timeout' category + + - Put a number of appropriate options in it + + Add an 'ldap' category + + - Put the LDAP related option in there + + Remove categories "ECH" and "ipfs" + + - They should not be categories. Had only one single option each. + + Remove category "misc" + + - It should not be a category as it is impossible to know when to browse + it. + + --use-ascii moved to ftp and output + --xattr moved to output + --service-name moved to auth + + Managen fixes: + + - errors if an option is given a category name that is not already setup + for in code + + - verifies that options set `scope: global` also is put in category + `global´ + + Closes #14101 + +Stefan Eissing (5 Jul 2024) + +- GHA: configure OpenSSL's libdir as 'lib' only + + Also mention in HTTP3.md + + OpenSSL has a bug that messes the config `--libdir=path` to become the + wrong path in its pkgconfig files. If we just pass `--libdir=lib` it + should avoid this. + + Ref: #14099 + See also: https://github.com/openssl/openssl/issues/23569 + + Closes #14102 + +Daniel Stenberg (5 Jul 2024) + +- tool_operate: simplify return code handling from url_proto() + + The additional checks were superfluous as it would only ever return + error if one of those protocols were set. Also: a returned error + *should* mean get out of there, without having to check more conditions. + + Closes #14104 + +- tool_operate: check for --disable case *sensitively* + + curl command line options are specified with the correct casing or they + don't match + + Closes #14103 + +Stefan Eissing (4 Jul 2024) + +- transfer: avoid polling socket every transfer loop + + Improve download performance, minimal effort. + + Do not poll the socket for pending data every transfer loop iteration. + This gives 10-20% performance gains on large HTTP/1.1 downloads (on my + machine). + + Closes #14098 + +Viktor Szakats (4 Jul 2024) + +- tests: delete `CharConv` remains + + Closes #14100 + +- GHA: bump macOS CMake job parallelism to 4 (nproc+1) [ci skip] + + To match autotools ones and the rest of workflows. + + Follow-up to 464282ddfb214917be3d143c035f178f3b77f209 #13807 + +Yedaya Katsman (4 Jul 2024) + +- help: add flags to output and ssh categories + + - Add --output, --remove-on-error, --output-dir and --created-dirs to + the output help category + + - Add --hostpubmd5, --hostpubsha256, --insecure (-k), and --pubkey to + the ssh help category + + Closes #14076 + +Stefan Eissing (4 Jul 2024) + +- TODO: remove item about 'SSL_peak' + + GnuTLS todo item about using an equivalent of `SSL_peak()`, which + nicely escaped the word checks, is no longer relevant. + + We do not use `SSL_peek()` anymore since connection filters were + introduced. + + Closes #14091 + +renovate[bot] (4 Jul 2024) + +- GHA: update dependency gnutls/gnutls to v3.8.6 + + Closes #14094 + +- GHA: update fsfe/reuse-action action to v4 + + Closes #14095 + +Viktor Szakats (3 Jul 2024) + +- GHA: Windows job exclusions tweaks + + - disable SMTP tests in MSYS2/mingw-w64 and MSVC jobs. + On the suspicion of sometimes hanging: + https://github.com/curl/curl/actions/runs/9346162475/job/25720437944?pr=138 + 55#step:14:2838 + https://github.com/curl/curl/actions/runs/9758011305/job/26931678639?pr=140 + 84#step:14:2834 + https://github.com/curl/curl/actions/runs/9774468536/job/26982805294#step:1 + 1:4731 + + - run TFTP, MQTT, WebSockets tests in MSYS2/msys jobs again. + + - switch hanging old-mingw-w64 7.3.0 job to Release (from Debug). + Guessing here, 9.5.0 is more solid, and one difference is + Debug/Release mode. Let's match 7.3.0 with that and see how it changes + hangs and flakiness. + The other difference is Unicode ON in 7.3.0. Flaky 6.3.0 was also + Debug, with Unicode OFF: + 217878bade884202ee5fb2e80186c5fd130392e8 #13566. + (Unicode unlikely to play a role here IMO.) + If 7.3.0 keeps hanging / remains flaky I'll consider disabling its + test runs. + + - opt-out from vcpkg telemetry. + + Ref: https://github.com/curl/curl/pull/13599#issuecomment-2119372376 + Closes #14085 + +renovate[bot] (3 Jul 2024) + +- Dockerfile: update debian:bookworm-slim to 39868a6 + + Closes #14083 + +Daniel Stenberg (3 Jul 2024) + +- FEATURES.md: refresh + + - added lots of missing stuff + - rearranged a little + - remove all footnotes + + Closes #14086 + +- RELEASE-NOTES: synced + +- curl_easy_perform.md: call it network transfer, not file transfer + +Viktor Szakats (2 Jul 2024) + +- winbuild: MS-DOS batch tidy-ups + + - prefer `.bat` extension over `.cmd` for MS-DOS batch, which also + avoids confusion with OS/400 `.cmd` files. + - cleanup `echo` quotes, drop them consistently. + - delete empty output line from one of the error branches. + - prefer lowercase commands like the rest of MS-DOS batches. + - delete a contraction. + - drop backticks from error message. + - use `nmake.exe` consistently. + - use equal/not-equal operator style consistently. + - inline a single-line `if` branch. + - delete exceptions and rules dealing with Windows `.cmd` extension. + + Closes #14084 + +Stefan Eissing (2 Jul 2024) + +- multi: fix pollset during RESOLVING phase + + - add a DEBUGASSERT for when a transfer's pollset should not be empty. + - move write unpausing from transfer loop into curl_easy_pause. This + make sure that the url_updatesocket() finds the correct state when + updating socket events. + - fix HTTP/2 proxy during connect phase to set sockets correctly + - fix test2600 to simulate a socket set + - move write unpausing from transfer loop into curl_easy_pause. This + make sure that the url_updatesocket() finds the correct state when + updating socket events. + - waiting for the resolver to deliver might not involve any sockets to + wait for. Do not generate a warning. + + Fixes #14047 + Closes #14074 + +Daniel Stenberg (2 Jul 2024) + +- cmdline-opts: shorten six help texts + + o --location-trusted + o --next + o --parallel-immmediate + o --pinnedpubkey + o --proxy-pass + o --proxy-ssl-allow-beast + + Closes #14075 + +- managen: fix removing backticks from subtitles + + It erroneously removed them from the wrong variable. + + Closes #14081 + +Viktor Szakats (2 Jul 2024) + +- cmake: show protocols, then features + + To match the order used by `curl -V` and `./configure`. + + Closes #14082 + +- cmdline-docs: fix `--proxy-ca-native` example + tidy-ups + + Also: + - fix an indentation. + - fix capitalized option in comment. + + Closes #14078 + +- cmake: sync protocol/feature list with `curl -V` output + + - sort features case-insensitively. + Requires CMake v3.13.0. + Follow-up to 0f26abeef1dd1d1a02f8e12dbc3d51e73e9d2e9c #14063 + + - convert protocol list to lowercase. + But leave it uppercase in `curl-config`. + + Closes #14066 + +- GHA/badwords.yml: fixup indent for yamllint [ci skip] + +renovate[bot] (1 Jul 2024) + +- GHA: update dependency awslabs/aws-lc to v1.31.0 + + Closes #14080 + +Daniel Stenberg (1 Jul 2024) + +- GHA/badwords.yml: check source code wording + + Closes #14073 + +- code: language cleanup in comments + + Based on the standards and guidelines we use for our documentation. + + - expand contractions (they're => they are etc) + - host name = > hostname + - file name => filename + - user name = username + - man page => manpage + - run-time => runtime + - set-up => setup + - back-end => backend + - a HTTP => an HTTP + - Two spaces after a period => one space after period + + Closes #14073 + +Yedaya Katsman (1 Jul 2024) + +- docs: add RELEASE-TOOLS.md.dist to .gitignore + + Closes #14079 + +Viktor Szakats (1 Jul 2024) + +- libcurl.pc: add more `Requires.private`/`Requires` dependencies + + - add `libmsh3` reference from cmake and autotools. + + - add `mit-krb5-gssapi` reference from cmake. + + It leaves GSS not set from autotools. The handling of heimdal in cmake + is fuzzy, that's probably missing too. + + Follow-up to f057de5a1a950a90d1920021db152a4b695f1a8a #13911 + Closes #14072 + +- cmake: improve wolfSSL detection + + - support detecting wolfSSL via pkg-config (like autotools.) + + - detect wolfSSL version. + + - detect `HAVE_WOLFSSL_DES_ECB_ENCRYPT`. + (needs e.g. `--enable-curl` when building wolfSSL) + + - detect `HAVE_WOLFSSL_FULL_BIO` and enable HTTPS-proxy feature. + (needs e.g. `--enable-opensslall` when building wolfSSL) + + - fix to show `HTTPS-proxy` in cmake feature list. + Ref: 55807e6c056f27846d70cec70ee6ac3f0e5b3bbe #9962 + + - fix to show `NTLM` in cmake feature list. + + - fix to show `smb` and `smbs` in cmake protocol list. + + - add wolfSSL CMake job to GHA (for macOS). + + - fix mqtt and wolfSSL symbol clash. + ``` + ./curl/lib/mqtt.c: In function 'mqtt_doing': + ./curl/lib/mqtt.c:746:17: error: declaration of 'byte' shadows a global dec + laration [-Werror=shadow] + 746 | unsigned char byte; + | ^~~~ + /opt/homebrew/Cellar/wolfssl/5.7.0_1/include/wolfssl/wolfcrypt/types.h:85:3 + 6: note: shadowed declaration is here + 85 | typedef unsigned char byte; + | ^~~~ + ``` + + - format `FindWolfSSL.cmake` closer to neighbours. + + Closes #14064 + +Daniel Stenberg (1 Jul 2024) + +- curl_url_set: elaborate on scheme guessing + + Explain a little more and refer to the CURLU_NO_GUESS_SCHEME flag + for getting scheme or URL. + + Closes #14071 + +- docs: misc language polish + + - CURLINFO_FILETIME*: improve language + - add '32bit' and '64bit' as bad words, use 32-bit and 64-bit + - mksymbolsmanpage.pl: avoid "will" + + Closes #14070 + +- curl_easy_escape: elaborate a little on encoding a URL + + Closes #14069 + +Viktor Szakats (1 Jul 2024) + +- cmake: fix feature and protocol lists for SecureTransport + + NTLM was missing from the features list, and SMB/SMBS from + the protocols list in SecureTransport builds. + + Follow-up to 76a9c3c4be10b3d4d379d5b23ca76806bbae536a #3619 + + Reported-by: Tal Regev + Bug: https://github.com/curl/curl/pull/13963#issuecomment-2178791390 + Closes #14065 + +Daniel Stenberg (1 Jul 2024) + +- curl_str[n]equal.md: tidy up text to make them stand-alone + + Previously this was one single manpage for two functions but as they are + two separate ones since a while back, they should each clearly document + their single specific functions. + + Follow-up to eefcc1bda4bc + + Closes #14068 + +- RELEASE-NOTES: synced + +Tal Regev (30 Jun 2024) + +- GHA: use vcpkg to install packages for MSVC jobs + + - enable new dependencies for existing jobs. + + - add cache for vcpkg packages. + + - tidy-up CMake options and environment for vcpkg. + + Closes #13979 + +Daniel Stenberg (30 Jun 2024) + +- curl_mprintf.md: add missing comma + +- CURLOPT_TLSAUTH_PASSWORD/USERNAME.md: language fixups + + - relies *on* TLS SRP + - *for* the specific TLS backends + + Closes #14061 + +- docs/libcurl: polish the single-line descriptions + + - use imperative form + - use lowercase + - no period + - unify some phrases + - fix curl_multi_socket and curl_multi_socket_all to keep their own + descriptions + + Closes #14062 + +Viktor Szakats (30 Jun 2024) + +- cmake: alpha-sort feature list + + Like autotools does. + + Closes #14063 + +renovate[bot] (29 Jun 2024) + +- GHA: update github/codeql-action digest to b611370 + + Closes #14058 + +Tatsuhiro Tsujikawa (29 Jun 2024) + +- vquic: fix UDP_GRO struct cmsghdr data type + + The data type for UDP_GRO in struct cmsghdr is int. Limit the usage of + UDP_GRO to linux only because it is not portable. + + Closes #14056 + +Sertonix (29 Jun 2024) + +- mk-ca-bundle.pl: delay 'curl -V' execution until it is needed + + Avoid an `Can't exec "curl"` message when curl is not actually needed. + + Closes #14060 + +Daniel Stenberg (29 Jun 2024) + +- src/Makefile.am: remove SUBDIRS assignment + + It was once used to continue into ../docs but is just leftovers now. + + Closes #14054 + +z2_ (28 Jun 2024) + +- x509asn1: remove superfluous free() + +Stefan Eissing (28 Jun 2024) + +- ngtcp2+quictls: fix cert-status use + + - add test for --cert-status on all http versions + + Reported-by: Dexter Gerig + Fixes #14049 + Closes #14050 + +Daniel Stenberg (28 Jun 2024) + +- RELEASE-PROCEDURE.md: update release date + +- managen: insert final .fi for files ending with a quote + + When an individual file ended with a quote (typically an example), the + render function would return without ending the quote correctly with a + ".fi" (fill in) in the manpage output. + + This made the additional text provided below to render wrongly. + + Closes #14048 + +Junho Choi (28 Jun 2024) + +- quic: update to quiche 0.22.0 + + quiche 0.22.0 will set SONAME in libquiche.so (libquiche.so.0) for + linux/BSDs. Install a symlink with SONAME. + + Closes #14030 + Closes #14046 + +Daniel Stenberg (28 Jun 2024) + +- managen: introduce "Multi: per-URL" + + For -O, -o and -T that are used once per specified URL. + + Closes #14045 + +- quiche: fix operand of ‘?:’ changes signedness + + ... from ‘int’ to ‘curl_uint64_t’ + + Closes #14041 + +- GHA: add --enable-werror to the quiche job + + Closes #14041 + +- KNOWN_BUGS: three new bugs + + These have lingered in the issue tracker for a long time without action. + We don't expect any fixes in the near term either. Move them to the + KNOWN_BUGS document. + + Closes #12177 + Closes #12171 + Closes #13350 + + Closes #14042 + +Viktor Szakats (27 Jun 2024) + +- CI: add whitespace checker + + Fix issues detected. + + Also: + + - One of the `.vc` files used LF EOLs, while the other didn't. + Make that one also use LF EOLs, as this is apparently supported by + `nmake`. + + - Drop `.dsw` and `.btn` types from `.gitattributes`. + The repository doesn't use them. + + - Sync section order with the rest of files in + `tests/certs/EdelCurlRoot-ca.prm`. + + - Indent/align `.prm` and `.pem` files. + + - Delete dummy `[something]` section from `.prm` and `.pem` files. + + Mental note: + MSVC `.sln` files seem to accept spaces for indentation and also support + LF line-endings. I cannot test this and I don't know what's more + convenient when updating them, so left them as-is, with specific + exclusions. + + Closes #14031 + +- CI: fix typo in job name + + Closes #14040 + +Stefan Eissing (27 Jun 2024) + +- tests/httpd: adjust ReadBufferSize for better performance + + - list httpd and caddy versions in scorecard run + + Closes #14039 + +Daniel Stenberg (27 Jun 2024) + +- runtests: fix %VERNUM + + It needs to be set to the leading digits and dots only, so that the + `-[date]` suffix strings are not included, as those used in the daily + snapshots. + + Fixes #14035 + Reported-by: Marcel Raad + Closes #14036 + +Philip Heiduck (27 Jun 2024) + +- CI/synopsis.yml: run on `.md` files + + Reported-by: Viktor Szakats + Fixes #14032 + Closes #14037 + +Daniel Stenberg (27 Jun 2024) + +- verify-synopsis.pl: work with .md files + + Ref: #14037 + Closes #14038 + +- conncache: done always evaluates to false + + Follow-up to c9b95c0bb30f88bf00e1ac + + Spotted by CodeSonar + + Reviewed-by: Stefan Eissing + Closes #14034 + +- lib: add a few DEBUGASSERT(data) to aid code analyzers + + ... where 'data' is assumed to always work. + + Closes #14033 + +- RELEASE-NOTES: synced + +Viktor Szakats (26 Jun 2024) + +- tidy-up: use `/usr/bin/env perl` shebang + + Most Perl scripts already used it. Sync up the few outliers. + + Closes #14029 + +Stefan Eissing (26 Jun 2024) + +- quic: openssl quic, cmake and doc version update to 3.3.0 + + Closes #14028 + +- http/3: add shutdown support + + - openssl-quic shutdown handling + - ngtcp2 shutdown handling + - quiche shutdown handling + - add test_19_06 for verfication + + Reported-by: Dexter Gerig + Closes #14027 + Fixes #14022 + +Daniel Stenberg (26 Jun 2024) + +- tests: verify managen + + 1705: verifies the manpage output + + 1706: verifies the ascii output + + Closes #14025 + +- runtests: support %DATE for YYYY-MM-DD of right now + +- runtests: support %VERNUM + + For the plain version number of the built curl without -DEV etc. Only + digits and dots. + +- managen: only output .RE for manpage output + + For ascii they are just rubbish. + + Closes #14025 + +Tatsuhiro Tsujikawa (26 Jun 2024) + +- quic: enable UDP GRO + + Closes #14012 + +Stefan Eissing (26 Jun 2024) + +- quic: require at least OpenSSL 3.3 for QUIC + + - when checking for QUIC support in OpenSSL, also check + for it being at least 3.3.0 + - remove workarounds for features buggy or missing in 3.2 + + Closes #14026 + +Daniel Stenberg (26 Jun 2024) + +- FILEFORMAT.md: mentioned for "client" + + They can be used to create more files. + + Closes #14024 + +Marcel Raad (26 Jun 2024) + +- system_win32: add missing curl.h include + + It's required for `CURLcode`. + + Closes https://github.com/curl/curl/pull/14019 + +Daniel Stenberg (26 Jun 2024) + +- TODO: specify which response codes that make -f/--fail return error + + Suggestion from the user survey 2024 + + Closes #14020 + +Stefan Eissing (26 Jun 2024) + +- lib: graceful connection shutdown + + When libcurl discards a connection there are two phases this may go + through: "shutdown" and "closing". If a connection is aborted, the + shutdown phase is skipped and it is closed right away. + + The connection filters attached to the connection implement the phases + in their `do_shutdown()` and `do_close()` callbacks. Filters carry now a + `shutdown` flags next to `connected` to keep track of the shutdown + operation. + + Filters are shut down from top to bottom. If a filter is not connected, + its shutdown is skipped. Notable filters that *do* something during + shutdown are HTTP/2 and TLS. HTTP/2 sends the GOAWAY frame. TLS sends + its close notify and expects to receive a close notify from the server. + + As sends and receives may EAGAIN on the network, a shutdown is often not + successful right away and needs to poll the connection's socket(s). To + facilitate this, such connections are placed on a new shutdown list + inside the connection cache. + + Since managing this list requires the cooperation of a multi handle, + only the connection cache belonging to a multi handle is used. If a + connection was in another cache when being discarded, it is removed + there and added to the multi's cache. If no multi handle is available at + that time, the connection is shutdown and closed in a one-time, + best-effort attempt. + + When a multi handle is destroyed, all connection still on the shutdown + list are discarded with a final shutdown attempt and close. In curl + debug builds, the environment variable `CURL_GRACEFUL_SHUTDOWN` can be + set to make this graceful with a timeout in milliseconds given by the + variable. + + The shutdown list is limited to the max number of connections configured + for a multi cache. Set via CURLMOPT_MAX_TOTAL_CONNECTIONS. When the + limit is reached, the oldest connection on the shutdown list is + discarded. + + - In multi_wait() and multi_waitfds(), collect all connection caches + involved (each transfer might carry its own) into a temporary list. + Let each connection cache on the list contribute sockets and + POLLIN/OUT events it's connections are waiting for. + + - in multi_perform() collect the connection caches the same way and let + them peform their maintenance. This will make another non-blocking + attempt to shutdown all connections on its shutdown list. + + - for event based multis (multi->socket_cb set), add the sockets and + their poll events via the callback. When `multi_socket()` is invoked + for a socket not known by an active transfer, forward this to the + multi's cache for processing. On closing a connection, remove its + socket(s) via the callback. + + TLS connection filters MUST NOT send close nofity messages in their + `do_close()` implementation. The reason is that a TLS close notify + signals a success. When a connection is aborted and skips its shutdown + phase, the server needs to see a missing close notify to detect + something has gone wrong. + + A graceful shutdown of FTP's data connection is performed implicitly + before regarding the upload/download as complete and continuing on the + control connection. For FTP without TLS, there is just the socket close + happening. But with TLS, the sent/received close notify signals that the + transfer is complete and healthy. Servers like `vsftpd` verify that and + reject uploads without a TLS close notify. + + - added test_19_* for shutdown related tests + - test_19_01 and test_19_02 test for TCP RST packets + which happen without a graceful shutdown and should + no longer appear otherwise. + - add test_19_03 for handling shutdowns by the server + - add test_19_04 for handling shutdowns by curl + - add test_19_05 for event based shutdowny by server + - add test_30_06/07 and test_31_06/07 for shutdown checks + on FTP up- and downloads. + + Closes #13976 + +Daniel Stenberg (25 Jun 2024) + +- managen: fix blank line detection + + Follow-up to d14a53eea7b87 which ruined the output somewhat. + + Closes #14017 + +- managen: output tabs for each 8 leading spaces + + This replacing of eight leading spaces into tabs was already done for + the embedded uncompressed version in tool_hugehelp.c so it does not save + anything there. But the gzip compressed version ends up almost 2K + smaller. + + The output in a terminal should be identical. + + Before using TABs: + + curl.txt 282492 bytes + curl.txt.gz 73261 bytes + + With this change applied: + + curl.txt 249382 bytes + curl.txt.gz 71470 bytes + + Closes #14016 + +- managen: error on trailing blank lines in input files + + Ref: #14014 + Closes #14015 + +Viktor Szakats (25 Jun 2024) + +- tidy-up: more whitespace + + Closes #14014 + +Stefan Eissing (25 Jun 2024) + +- multi: multi_getsock(), check correct socket + + - in phase CONNECTING/TUNNELING/PROTOCONNECT, retrieve + the socket from the connection filters and do not rely + on `conn->sockfd` being already set by the transfer. + - this applies to the default behaviour, a protocol handler + may override this via its callbacks. + - add a warning message in multi_getsock() when the transfer + is expected to have something in its pollset, but instead + it is empty. + + Reported-by: saurabhsingh-dev on github + Fixes #13998 + Closes #14011 + +Daniel Stenberg (25 Jun 2024) + +- managen: fix each options footer to end with newline + + A previous change sometimes made a command line option's description not + end with a newline immediately before the next command line. + + Also widened the lines to wrap on column 79 instead of 78. + + Closes #14010 + +Alex Snast (25 Jun 2024) + +- wolfssl: assume key_file equal to clientcert in the absence of key_file + + When user sets CURLOPT_SSLCERT but leaves CURLOPT_SSLKEY unset assume + the path passed in CURLOPT_SSLCERT holds the ssl key which is what we do + in openssl implementation. + + Fixes #14007 + Closes #14008 + +Viktor Szakats (24 Jun 2024) + +- autotools: fix pkg-config names (zstd, ngtcp2*) + + Also verified that all names now match up with CMake. + + Follow-up to f057de5a1a950a90d1920021db152a4b695f1a8a #13911 + Follow-up to eeab0ea7aa19af61af881e8a0bf9ff1f2e28ef79 #13994 + Reported-by: 李四 + Fixes #14005 + Closes #14006 + +- tidy-up: whitespace [ci skip] + +Daniel Stenberg (24 Jun 2024) + +- cmdline-docs: "added in" cleanups + + - markup fixes + - remove some mentions of < 7.60.0 changes + + Closes #14003 + +- RELEASE-NOTES: synced + +- managen: "added in" fixes + + - up the limit: remove all mentions of 7.60 or earlier from manpage + 7.60 is 6 years old now. + - warn on "broken" added in lines, as they avoid detection + - fixup added in markup in a few curldown files + + Closes #14002 + +Matt Jolly (24 Jun 2024) + +- configure: fix pkg-config library name 'libnghttp3' + + Closes #13994 + +Daniel Stenberg (24 Jun 2024) + +- managen: cleanups to generate nicer-looking output + + - output "see also" last + - when there are multiple mutex items, use commas between all of them + except the last. + - call them mututally exclusive WITH not TO other options. + - remove trailing space from added in, add newline prefix + - smoother language for requires + + Closes #14001 + +- configure: require a QUIC library if nghttp3 is used + + Instead of just silently disabling HTTP/3. + + Reported-by: Matt Jolly + Fixes #13995 + Closes #13999 + +- docs/cmdline-opts: remove two superfluous "Added in" mentions + + The key "added in" phrase for the option itself is added automatically. + + Closes #14000 + +- cookie-jar.md: see also --junk-session-cookies + + Closes #13996 + +- runtests: support crlf="yes" for the section + +- TODO: -h option + + Support "curl -h --insecure" etc to output the manpage section for the + --insecure command line option in the terminal. Should be possible to + work with either long or short versions of command line options. + + Closes #13990 + +- trace-ascii.md: mention "%" for stderr + + Closes #13991 + +- connect-to.md: expand with examples + + - add referer from the resolve section to connect-to if user wants + wildcard for the port number + + Closes #13989 + +- TODO: connect to multiple IPs in parallel + + Closes #13986 + +- dump-header.md: mention minus for stdout + + Closes #13985 + +- CURLOPT_RESOLVE.md: mention hostname can be wildcard ('*') + + Closes #13983 + +Andy Pan (22 Jun 2024) + +- cf-socket: optimize curlx_nonblock() and check its return error + + Reviewed-by: Stefan Eissing + Closes #13942 + +z2_ (22 Jun 2024) + +- x509asn1: prevent NULL dereference + + Closes #13978 + +Daniel Stenberg (19 Jun 2024) + +- unit2604: use 'unitfail' instead of 'error' variable + + Since the framework is already returning that variable by default. + Avoids a warning for unreachable code. + + Reported-by: Tal Regev + Fixes #13967 + Closes #13973 + +- KNOWN_BUGS: TFTP tests fail on OpenBSD + + Closes #13623 + Closes #13975 + +- VULN-DISCLOSURE-POLICY: NULL dereferences and crashes + + If a malicious server can trigger a NULL dereference in curl or + otherwise cause curl to crash (and nothing worse), chances are big that + we do not consider that a security problem. + + Closes #13974 + +- RELEASE-NOTES: synced + +Sergey Markelov (19 Jun 2024) + +- mbedtls: support CURLOPT_CERTINFO + + Closes #13113 + +Daniel Stenberg (19 Jun 2024) + +- x509asn1: ASN1tostr() should fail when 'constructed' is set + + This is a regression from my refactor in 623c3a8fa0bdb (#12808) + + Follow-up to 623c3a8fa0bdb2751f14b37417 + + Closes #13972 + +- x509asn1: remove two static variables + + cnOID and sanOID were not used outside of the OID table anyway + + Closes #13971 + +brian m. carlson (18 Jun 2024) + +- TODO: TLS channel binding + + Closes #13483 + +Tal Regev (17 Jun 2024) + +- cmake: add CURL_USE_GSASL option with detection + CI test + + Reviewed-by: Viktor Szakats + Closes #13948 + +Daniel Stenberg (16 Jun 2024) + +- x509asn1: make Curl_extract_certinfo store error message + + To help us all better understand where the error actually comes from. + + Ref: #13958 + Closes #13959 + +Viktor Szakats (15 Jun 2024) + +- appveyor: dump build logs on failure in VS2008 jobs + + This seems to be the only way to see what actual toolchain commands were + run, and with what arguments. + + Without `dos2unix`, `cat` output comes out empty. + + Closes #13957 + +- cmake: fix quotes when appending multiple options (SecureTransport) + + Copied from a vcpkg distro patch: + https://github.com/microsoft/vcpkg/blob/02745e0f4749d1f51d2025824209408f5a6c3 + 614/ports/curl/dependencies.patch#L43C38-L44 + + Ref: https://github.com/microsoft/vcpkg/pull/38847 + Ref: https://github.com/microsoft/vcpkg/commit/795f2f137e6cf6d985fcc927bffcaf + 9c0a96e4ac + Ref: https://github.com/microsoft/vcpkg/pull/38847/commits/36f0c917de5319e953 + 61451fc0aef0698b264874#diff-ab5c23e5dc5df412539cc93e24b37abbc588e1918236f8abc + 019d676b270c85fR39 (sub-commit) + + Authored-by: Kai Pastor + Closes #13953 + +Daniel Stenberg (15 Jun 2024) + +- CURLOPT_NETRC.md: clarify what it does on Windows + + Closes #13956 + +- KNOWN_BUGS: "HTTP/2 + TLS spends a lot of time in recv" + + Closes #13416 + Closes #13955 + +- RELEASE-NOTES: synced + +Yedaya Katsman (14 Jun 2024) + +- examples: add missing binaries to .gitignore + + They were showing as changed when built. Add them sorted alphabetically, + while also moving a few more entries to sorted order. + + Closes #13952 + +- docs: reference non deprecated libcurl options + + There are a places where man pages reference deprecated CURLOPT options, + where it doesn't make sense, replace them with the reccomended + replacement option. + + also remove reference to the removed mesalink TLS backend + + Closes #13951 + +Daniel Stenberg (14 Jun 2024) + +- gnutls: pass in SNI name, not hostname when checking cert + + The function we use is called 'gnutls_x509_crt_check_hostname()' but if + we pass in the hostname with a trailing dot, the check fails. If we pass + in the SNI name, which cannot have a trailing dot, it succeeds for + https://pyropus.ca./ + + I consider this as a flaw in GnuTLS and have submitted this issue + upstream: + + https://gitlab.com/gnutls/gnutls/-/issues/1548 + + In order to work with old and existing GnuTLS versions, we still need + this change no matter how they view the issue or might change it in the + future. + + Fixes #13428 + Reported-by: Ryan Carsten Schmidt + Closes #13949 + +- BINDINGS: update java link to one that exists + + The previous java binding seems to have vanished. Link to one that still + exists. + + Bug: https://github.com/curl/everything-curl/issues/456 + Reported-by: Jiang Wenjian + Closes #13950 + +renovate[bot] (14 Jun 2024) + +- GHA: update pinned actions + + - github/codeql-action digest to 23acc5c + - actions/checkout digest to 692973e + - rojopolis/spellcheck-github-actions digest to d354a4d + + Closes #13935 + Closes #13945 + Closes #13946 + +Jay Satiro (14 Jun 2024) + +- tool_cb_hdr: allow etag and content-disposition for 3xx reply + + - Parse etag and content-disposition headers for 3xx replies. + + For example, a server may send a content-disposition filename header + with a redirect reply (3xx) but not with the final response (2xx). + Without this change curl would ignore the server's specified filename + and continue to use the filename extracted from the user-specified URL. + + Prior to this change, 75d79a4 had limited etag and content-disposition + to 2xx replies only. + + Tests-by: Daniel Stenberg + + Reported-by: Morgan Willcock + Fixes https://github.com/curl/curl/issues/13302 + Closes #13484 + +Daniel Stenberg (13 Jun 2024) + +- transfer: set CSELECT_IN if there is data pending + + When aborting the transfer loop early, like when there is rate limiting + in effect, there might be buffered data already read off the socket so + the socket might not signal reability. Therefore we must set the + CSELECT_IN manually if data_pending_() suggests there might be more data + to get. This is particularly noticeable with SSH when the underlying + library has drained the socket and holds pending data in its buffer. + + Reported-by: alervd on github + Fixes #13695 + Closes #13943 + +Viktor Szakats (13 Jun 2024) + +- cmake: enable SOVERSION for Cygwin and `CMAKE_DLL_NAME_WITH_SOVERSION` + + - enable SOVERSION when `CMAKE_DLL_NAME_WITH_SOVERSION=ON` is set. + Ref: https://cmake.org/cmake/help/v3.27/variable/CMAKE_DLL_NAME_WITH_SOVERS + ION.html + Use: https://github.com/search?q=-DCMAKE_DLL_NAME_WITH_SOVERSION&type=code + + - enable SOVERSION for Cygwin builds by default. + + Ref: #13936 + Ref: #13944 + Closes #13898 + +- cmake: allow SOVERSION override with `CURL_LIBCURL_SOVERSION` + + Allow overriding SOVERSION with the new CMake option: + `CURL_LIBCURL_SOVERSION=ON/OFF` + + For certain target platforms the shared libcurl library filename + contains the SOVERSION. This new option allows to enable/disable + this behavior manually. If set, it takes precedence over the default + setting. + + Ref: #13898 + Closes #13944 + +renovate[bot] (13 Jun 2024) + +- Dockerfile: update debian:bookworm-slim to 84d83b2 + + Closes #13934 + +Daniel Stenberg (13 Jun 2024) + +- configure: use AC_MSG_WARN for TLS/experimental warning texts + + - no longer warns for mbedtls + - warns for each item on individual lines + - no longer shows irrelevant TLS libraries when multiple are selected + - removes ech repetition + + Closes #13941 + +- GHA: detect and warn for more English contractions + + As we try to avoid them in curl documentation + + Closes #13940 + +Stefan Eissing (13 Jun 2024) + +- transfer: do not use EXPIRE_NOW while blocked + + - When a transfer sets `data->state.select_bits`, it is + scheduled for rerun with EXPIRE_NOW. If such a transfer + is blocked (due to PAUSE, for example), this will lead to + a busy loop. + - multi.c: check for transfer block + - sendf.*: add Curl_xfer_is_blocked() + - sendf.*: add client reader `is_paused()` callback + - implement is_paused()` callback where needed + + Closes #13908 + +renovate[bot] (13 Jun 2024) + +- ci: update dependency ngtcp2/ngtcp2 to v1.6.0 + + Closes #13939 + +- ci: update ngtcp2/nghttp3 to v1.4.0 + + Closes #13938 + +Viktor Szakats (13 Jun 2024) + +- cmake: stop setting SOVERSION for the static lib target + + Also move the logic closer to its use and related tidy-ups. + + Cherry-picked from #13898 + Closes #13936 + +Patrick Monnerat (13 Jun 2024) + +- os400: make it compilable again + + A newly introduced use of getsockname() in the cli tool makes it require + the ascii wrapper module, which is not available outside of the library: + as the tool only uses the address family field (binary), disable + wrappers outside of libcurl. + + Fix setsockopt() parameter type mismatch using a (void *) cast. + + Sync ILE/RPG binding. + + Closes #13930 + +Viktor Szakats (13 Jun 2024) + +- libcurl.pc: add `Requires.private`, `Requires` for static linking + + - cmake: populate for dependencies. + - autotools: populate for dependencies. + (including mbedtls, though the script does not detect + mbedtls through pkgconfig. mbedtls 3.6.0 now supports it.) + + Skip dealing with gssapi in this patch. + + Fixes #864 + Closes #13911 + +- cmake: bring `curl-config.cmake` closer to `FindCURL` + + Set `CURL_LIBRARIES` and `CURL_INCLUDE_DIRS` variables + for compatibility with CMake's `FindCURL.cmake`: + https://github.com/Kitware/CMake/blob/b411d0146c2e06acfb0c823bb039e99f0191b61 + 1/Modules/FindCURL.cmake#L209 + + For dependent projects, CMake's suggestion is to replace + `CURL_LIBRARIES` with `CURL::libcurl`, and drop `CURL_INCLUDE_DIRS`. + + Reported-by: Aurélien Pierre + Ref: https://curl.se/mail/lib-2024-06/0014.html + Ref: https://gitlab.kitware.com/cmake/cmake/-/issues/24580 + Closes #13897 + +Daniel Stenberg (13 Jun 2024) + +- tool_getparam: fix the bsearch call for ip-tos names + + Follow-up to 3c20ae08b9591 + Reported-by: Samuel Chiang + Fixes #13932 + Closes #13933 + +- request: change the struct field bodywrites to a bool, only for hyper + + Only hyper needs to know this, and it can use it as a boolean. + + Closes #13928 + +Andy Pan (12 Jun 2024) + +- test: fix CURLOPT_TCP_KEEPCNT typo + + Follow up to b77d627d242 + + Closes #13931 + +Daniel Stenberg (12 Jun 2024) + +- http: remove "struct HTTP" + + It is not actually used anymore and only contained a dummy struct field. + Remove all traces and uses of it. + + Closes #13927 + +- cd2nroff: convert two warnings to errors + + Since the warnings tend to get missed too easily and these are problems + we rather want addressed than letting slide. + + Closes #13929 + +- urlapi: use a correct value for CURLU_NO_GUESS_SCHEME + + It was mistakenly set to the same value as CURLU_GET_EMPTY uses. + + Reported-by: Patrick Monnerat + Bug: https://github.com/curl/curl/commit/655d44d139489625e77cf6790d36 + Closes #13926 + +- file: separate fake headers and body with a stand-alone CRLF + + Instead of bolting on the extra CRLF to the final header - as that makes + the behavior inconsistent and not as documented. The final CRLF is now + also made unconditional, just like it is for HTTP. + + Reported-by: dogma + Bug: https://curl.se/mail/lib-2024-06/0033.html + Closes #13925 + +- RELEASE-NOTES: synced + +Andy Pan (12 Jun 2024) + +- tcpkeepalive: add CURLOPT_TCP_KEEPCNT and --keepalive-cnt + + Closes #13885 + +Daniel Stenberg (12 Jun 2024) + +- TODO: make it "Add missing features to TLS backends" + + ... instead of just mentioning CA caching. + + Closes #13924 + +Orgad Shaneh (11 Jun 2024) + +- curl: support VLAN Priority: --vlan-priority + + Add --vlan-priority option to the command line tool for setting VLAN + priority. + + Closes #13907 + +RainRat (11 Jun 2024) + +- misc: fix typos + + Closes #13923 + +Daniel Stenberg (11 Jun 2024) + +- CURLOPT_ECH.md: remove repeated 'if' + + Closes #13922 + +- vms: fixed language in comment + + It started with me fixing a repeated "are are" but the wording was + incomprehensible so I tried to untangle it. + + Closes #13921 + +Stefan Eissing (11 Jun 2024) + +- lib: xfer_setup and non-blocking shutdown + + - clarify Curl_xfer_setup() with RECV/SEND flags and different calls for + which socket they operate on. Add a shutdown flag for secondary + sockets + - change Curl_xfer_setup() calls to new functions + - implement non-blocking connection shutdown at the end of receiving or + sending a transfer + + Closes #13913 + +Daniel Stenberg (11 Jun 2024) + +- test1486: verify that write-out.md and tool_writeout.c are in sync + + - also verify alphabetialal order in the source + - add two missing variables to write-out.md + + Closes #13920 + +Viktor Szakats (11 Jun 2024) + +- GHA: add cmake MSYS2 native job + + curl, libcurl, examples, build-only. + + To compare build behaviour with autotools. + + Closes #13917 + +Daniel Stenberg (11 Jun 2024) + +- openssl: shortcut store_expired for negative timeouts + + Avoid some unnecessary computation if the timeout is negative. + + Spotted by CodeSonar + Closes #13919 + +- RELEASE-NOTES: synced + +- curl: support -w '%{num_retries} + + Suggested-by: Jay Guerette + Ref: https://github.com/curl/curl/discussions/13901 + Closes #13910 + +Guilherme Puida (11 Jun 2024) + +- pytest: include testenv/vsftpd.py in dist tarball + + Closes #13918 + +Viktor Szakats (11 Jun 2024) + +- DISTROS: add MSYS2 (native) links + + Also rename existing 'MSYS2' to 'MSYS2 (mingw-w64)'. + + Closes #13915 + +Daniel Stenberg (10 Jun 2024) + +- tool_writeout: get certinfo only when needing it + + Removes a fairly expensive libcurl call when not necessary + + Closes #13914 + +- tool_writeout: bsearch the variable name + + As the list of variable names grows, doing a simple loop to find the + name get increasingly worse. This switches to a bsearch. + + Also: do a case sensitive check for the variable name. The names have + not been documented to be case insensitive and there is no point in + having them so. + + Closes #13914 + +Stefan Eissing (10 Jun 2024) + +- multi: prepare multi_wait() for future shutdown usage + + - new struct curl_pollfds and struct curl_waitfds + - add structs and methods to init/add/cleanup an array of pollfd and + struct curl_waitfd. Use in multi_wait() and multi_waitfds() to + populate the sets for polling. + - place USE_WINSOCK WSAEventSelect() setting into a separate loop over + all collected pfds + + Closes #13900 + +- connection: shutdown TLS (for FTP) better + + This adds connection shutdown infrastructure and first use for FTP. FTP + data connections, when not encountering an error, are now shut down in a + blocking way with a 2sec timeout. + + - add cfilter `Curl_cft_shutdown` callback + - keep a shutdown start timestamp and timeout at connectdata + - provide shutdown timeout default and member in + `data->set.shutdowntimeout`. + - provide methods for starting, interrogating and clearing + shutdown timers + - provide `Curl_conn_shutdown_blocking()` to shutdown the + `sockindex` filter chain in a blocking way. Use that in FTP. + - add `Curl_conn_cf_poll()` to wait for socket events during + shutdown of a connection filter chain. + This gets the monitoring sockets and events via the filters + "adjust_pollset()" methods. This gives correct behaviour when + shutting down a TLS connection through a HTTP/2 proxy. + - Implement shutdown for all socket filters + - for HTTP/2 and h2 proxying to send GOAWAY + - for TLS backends to the best of their capabilities + - for tcp socket filter to make a final, nonblocking + receive to avoid unwanted RST states + - add shutdown forwarding to happy eyeballers and + https connect ballers when applicable. + + Closes #13904 + +Daniel Stenberg (7 Jun 2024) + +- CURLOPT_CONNECTTIMEOUT*: clarify, document the milliseond version + + Provide an explanation in the CURLOPT_CONNECTTIMEOUT_MS page instead of + just referring to the non-MS version. + + Closes #13905 + +- cmdline-opts: tidy up --ip-tos and --mptcp + + To make them render nicer in the manpage and minor polish. + + Closes #13906 + +- RELEASE-NOTES: synced + +Dorian Craps (7 Jun 2024) + +- curl: (on linux) add MPTCP support + + Multipath TCP (MPTCP), standardized in RFC8684 [1], is a TCP extension + that enables a TCP connection to use different paths. + + Multipath TCP has been used for several use cases. On smartphones, MPTCP + enables seamless handovers between cellular and Wi-Fi networks while + preserving established connections. This use-case is what pushed Apple + to use MPTCP since 2013 in multiple applications [2]. On dual-stack + hosts, Multipath TCP enables the TCP connection to automatically use the + best performing path, either IPv4 or IPv6. If one path fails, MPTCP + automatically uses the other path. + + To benefit from MPTCP, both the client and the server have to support + it. Multipath TCP is a backward-compatible TCP extension that is enabled + by default on recent Linux distributions (Debian, Ubuntu, Redhat, ...). + Multipath TCP is included in the Linux kernel since version 5.6 [3]. To + use it on Linux, an application must explicitly enable it when creating + the socket. No need to change anything else in the application. + + This attached patch adds an --mptcp option which allows the creation of + an MPTCP socket instead of TCP on Linux. If Multipath TCP is not + supported on the system, an error will be reported. It is important to + note that if the end server doesn't support MPTCP, the connection will + continue after a seamless fallback to TCP. + + Link: https://www.rfc-editor.org/rfc/rfc8684.html [1] + Link: https://www.tessares.net/apples-mptcp-story-so-far/ [2] + Link: https://www.mptcp.dev [3] + Co-developed-by: Dorian Craps (@CrapsDorian) + Co-developed-by: Olivier Bonaventure (@obonaventure) + Co-developed-by: Matthieu Baerts (@matttbe) + Signed-off-by: Dorian Craps + + Closes #13278 + +Orgad Shaneh (7 Jun 2024) + +- curl: support IP Type of Service / Traffic Class: --ip-tos + + Add --ip-tos option to the command line tool for setting TOS for IPv4 or + Traffic Class for IPv6. + + Closes #13606 + +Andy Pan (7 Jun 2024) + +- socketpair: provide `Curl_socketpair` only when `!CURL_DISABLE_SOCKETPAIR` + + Ref: https://curl.se/dev/log.cgi?id=20240605035856-3529577 + + Reported-by: Marcel Raad + Closes #13888 + +Daniel Stenberg (7 Jun 2024) + +- noproxy: test bad ipv6 net size first + + No need to parse anything if the size is out of range. + + Added some tests to this effect to test 1614. + + Closes #13902 + +- managen: warn on excessively long help texts + + Help texts at 49 characters or longer get a warning displayed because + they make --help output uglier and we should make an effort to keep the + help texts short and succinct. + + The warning is only for display, it does not break the build. That is + left for the future if necessary. + + I picked 49 because the longest current text is 48. + + Closes #13895 + +Viktor Szakats (5 Jun 2024) + +- lib: tidy up types and casts + + Cherry-picked from #13489 + Closes #13862 + +Daniel Stenberg (5 Jun 2024) + +- cmdline-opts/ech.md: shorten the help text + + To make --help look sensible again + + Closes #13894 + +- cmdline-opts/_PROTOCOLS.md: mention WS(S) + + Closes #13891 + +Viktor Szakats (5 Jun 2024) + +- GHA: disable TFTP and WebSockets tests in old-mingw-w64 + + Follow-up to 03bd16e5339b069aa9409b75fcab2b21fd3a4b16 #13860 + Follow-up to def7d05382743ea7aa1d356d1e41dcb22ecdd4d7 + +Daniel Stenberg (5 Jun 2024) + +- cmdline-opts/fail.md: expand and clarify + + Closes #13890 + +- doh-insecure.md: expand + + Closes #13889 + +- cmdline: expand proxy option explanations + + - do less references to other options + - provide more specific text about proxies + - added more see-also references + + Closes #13887 + +- cmdline-opts: expand the parallel explanations + + Closes #13886 + +- RELEASE-NOTES: synced + +Stefan Eissing (5 Jun 2024) + +- vtls: new io_need flags for poll handling + + - decouple need to recv/send from negotiation state, we need + this later in shutdown handling as well + - move ssl enums from urldata.h to vtls_int.h + - implement use of `connssl->io_need` in vtls.c. and all backends + + Closes #13879 + +Daniel Stenberg (5 Jun 2024) + +- cfilters: make Curl_conn_connect always assign 'done' + + It could return error without assigning it, and we have a caller in + multi.c that assumes it gets set. + + Spotted by CodeSonar + Closes #13884 + +- CURLOPT_INTERFACE.md: quote the less-than and larger-than + + Fixes the warnings shown on stderr. + + Follow-up from 3060557af702dd5 + + Closes #13883 + +- cmdline-opts/interface.md: expand the documentation + + Explain the syntax it supports. + + Closes #13882 + +- url: allow DoH transfers to override max connection limit + + When reaching the set maximum limit of allowed connections, allow a new + connection anyway if the transfer is created for the (internal) purpose + of doing a DoH name resolve. Otherwise, unrelated "normal" transfers can + starve out new DoH requests making it impossible to name resolve for new + transfers. + + Bug: https://curl.se/mail/lib-2024-06/0001.html + Reported-by: kartatz + Closes #13880 + +Viktor Szakats (5 Jun 2024) + +- windows: fix UWP builds, add GHA job + + Add new job to test building for UWP (aka `CURL_WINDOWS_APP`). + + Fix fallouts when building for UWP: + - rand: do not use `BCryptGenRandom()`. + - cmake: disable using win32 LDAP. + - cmake: disable telnet. + - version_win32: fix code before declaration. + - schannel: disable `HAS_MANUAL_VERIFY_API`. + - schannel: disable `SSLSUPP_PINNEDPUBKEY` + and make `schannel_checksum()` a stub. + Ref: e178fbd40a896f2098278ae61e1166c88e7b31d0 #1429 + - schannel: make `cert_get_name_string()` a failing stub. + - system_win32: make `Curl_win32_impersonating()` a failing stub. + - system_win32: try to fix `Curl_win32_init()` (untested). + - threads: fix to use `CreateThread()`. + - src: disable searching `PATH` for the CA bundle. + - src: disable bold text support and capability detection. + - src: disable `getfiletime()`/`setfiletime()`. + - tests: make `win32_load_system_library()` a failing stub. + - tests/server/util: make it compile. + - tests/server/sockfilt: make it compile. + - tests/lib3026: fix to use `CreateThread()`. + + See individual commits for build error details. + + Some of these fixes may have better solutions, and some may not work + as expected. The goal of this patch is to make curl build for UWP. + + Closes #13870 + +Orgad Shaneh (4 Jun 2024) + +- socket: support binding to interface *AND* IP + + Introduce new notation for CURLOPT_INTERFACE / --interface: + ifhost!! + + Binding to an interface doesn't set the address, and an interface can + have multiple addresses. + + When binding to an address (without interface), the kernel is free to + choose the route, and it can route through any device that can access + the target address, not necessarily the one with the chosen address. + + Moreover, it is possible for different interfaces to have the same IP + address, on which case we need to provide a way to be more specific. + + Factor out the parsing part of interface option, and add unit tests: + 1663. + + Closes #13719 + +Andy Pan (4 Jun 2024) + +- socketpair: add `eventfd` and use `SOCK_NONBLOCK` for `socketpair()` + + Currently, we use `pipe` for `wakeup_create`, which requires ***two*** + file descriptors. Furthermore, given its complexity inside, `pipe` is a + bit heavyweight for just a simple event wait/notify mechanism. + + `eventfd` would be a more suitable solution for this kind of scenario, + kernel also advocates for developers to use `eventfd` instead of `pipe` + in some simple use cases: + + Applications can use an eventfd file descriptor instead of a pipe + (see pipe(2) in all cases where a pipe is used simply to signal + events. The kernel overhead of an eventfd file descriptor is much + lower than that of a pipe, and only one file descriptor is required + (versus the two required for a pipe). + + This change adds the new backend of `eventfd` for `wakeup_create` and + uses it where available, eliminating the overhead of `pipe`. Also, it + optimizes the `wakeup_create` to eliminate the system calls that make + file descriptors non-blocking by moving the logic of setting + non-blocking flags on file descriptors to `socketpair.c` and using + `SOCK_NONBLOCK` for `socketpair(2)`, `EFD_NONBLOCK` for `eventfd(2)`. + + Ref: + https://man7.org/linux/man-pages/man7/pipe.7.html + https://man7.org/linux/man-pages/man2/eventfd.2.html + https://man7.org/linux/man-pages/man2/socketpair.2.html + https://www.gnu.org/software/gnulib/manual/html_node/eventfd.html + + Closes #13874 + +renovate[bot] (4 Jun 2024) + +- ci: update github/codeql-action digest to 2e230e8 + + Closes #13881 + +Jay Satiro (4 Jun 2024) + +- examples/threaded-ssl: remove locking callback code + + - Remove the locking callback code that demonstrates how to meet + requirements of threading libraries (mainly OpenSSL). + + Locking callback code has not been needed for many years. According to + the documentation for OpenSSL and GnuTLS they are thread-safe by design, + assuming support for the underlying OS threading API is built-in. + + Ref: https://github.com/curl/curl/pull/13850#issuecomment-2143538458 + + Closes https://github.com/curl/curl/pull/13851 + +Viktor Szakats (4 Jun 2024) + +- tests: delete redundant `!MSDOS` guard + + This fix was supposed to be committed earlier, but ended up missing from + the final commit. + + Follow-up to e9a7d4a1c8377dbcf9a2d94365f60e3e5dff48f8 #12376 + Closes #13878 + +- lib: fix thread entry point to return `DWORD` on WinCE + + We already do this in `tests/server/util.c`: + https://github.com/curl/curl/blob/97e5e37cc8269660bc5d4a1936f10f2390b97c5a/te + sts/server/util.c#L604-L606 + and in `sockfilt.c`, `lib3026.c`. + + Before this patch it returned `unsigned int`. + + Closes #13877 + +Andy Pan (4 Jun 2024) + +- socket: use SOCK_NONBLOCK to eliminate extra system call + + Every time function `cf_socket_open()` is called to create a socket, + `curlx_nonblock()` is called to make that socket non-blocking. And + `curlx_nonblock()` will cost us 1 or 2 system calls (2 for `fcntl()`, 1 + for `ioctl()`, etc.), meanwhile, tucking `SOCK_NONBLOCK` and + `SOCK_CLOEXEC` into the `type` argument for `socket()` is widely + supported across UNIX-like OS: Linux, *BSD, Solaris, etc. With that + ability, we can save 1 or 2 system calls on each socket. + + Another change in this PR is to eliminate the redundant + `curlx_nonblock()` call on the socket in `cf_udp_setup_quic()` as that + socket created by `cf_socket_open()` is already non-blocking. + + Ref: + https://man7.org/linux/man-pages/man2/socket.2.html + https://man.freebsd.org/cgi/man.cgi?socket(2) + https://man.dragonflybsd.org/?command=socket§ion=2 + https://man.netbsd.org/socket.2 + https://man.openbsd.org/socket + https://docs.oracle.com/cd/E88353_01/html/E37843/socket-3c.html + https://illumos.org/man/3SOCKET/socket + ... + + Closes #13855 + +Viktor Szakats (4 Jun 2024) + +- GHA: show cmake error log in Windows and non-native workflows + + CMake configure doesn't fail often, but when it does, it helps to see + its `CMakeFiles/CMakeConfigureLog.yaml` output. This file is present + since CMake v3.26: + https://cmake.org/cmake/help/v3.26/manual/cmake-configure-log.7.html + + (Older CMake versions save similar contend to + `CMakeFiles\CMakeOutput.log` and + `CMakeFiles\CMakeError.log`. This patch doesn't deal with that because + the workflows touched are all running a newer CMake.) + + After this patch, we dump the content if cmake fails. Syncing this with + autotools, where we already did that. + + Closes #13872 + +- GHA: switch a Windows job to UCRT (gcc) + + Cherry-picked from #13870 + +- curl-config: revert to backticks to support old target envs + + Make an exception for `curl-config` because this script that may be + running on any target system, including old ones, e.g. SunOS 5.10. + + Reported-by: Alejandro R. Sedeño + Ref: https://github.com/curl/curl/pull/13307#issuecomment-2146427358 + Follow-up to fa69b41c7790fab86fd363242c81d8ef2e89e183 #13307 + Closes #13871 + +Stefan Eissing (4 Jun 2024) + +- mbedtls: v3.6.0 workarounds + + - add special sauce to disable unwanted peer verification by mbedtls + when negotiating TLS v1.3 + - add special sauce for MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET + return code on *writing* TLS data. We assume the data had not been + written and EAGAIN. + - return correct Curl error code when peer verification failed. + - disable test_08_05 with 50 HTTP/1.1 connections, as mbedtls reports a + memory allocation failed during handshake. + - bump CI mbedtls version to 3.6.0 + + Fixes #13653 + Closes #13838 + +- gnutls: support CA caching + + - similar to openssl, use a shared 'credentials' instance + among TLS connections with a plain configuration. + - different to openssl, a connection with a client certificate + is not eligible to sharing. + - document CURLOPT_CA_CACHE_TIMEOUT in man page + + Closes #13795 + +Dan Fandrich (3 Jun 2024) + +- tests: don't log buffer length in throwing away message + + It's not available at that point, and it will be written in the + non-error case right afterward. + +- tests: log "Throwing away" messages before throwing away + + In case the read that follows hangs we'll get a clue as to what it was + doing. + +- CI: reduce memory request for FreeBSD builds + + Also, add a comment with link to the Cirrus credit page since it's not + easy to find otherwise. + +Andy Pan (3 Jun 2024) + +- tcpkeepalive: support setting TCP keep-alive parameters on Solaris <11.4 + + Solaris didn't support TCP_KEEPIDLE and TCP_KEEPINTVL until 11.4, + before that it use TCP_KEEPALIVE_THRESHOLD and TCP_KEEPALIVE_ABORT_THRESHOLD + as the substitute. Therefore, for Solaris <11.4 we need to use this substitut + e + for setting TCP keep-alive parameters. + + Ref: + https://docs.oracle.com/cd/E86824_01/html/E54777/tcp-7p.html + https://docs.oracle.com/cd/E88353_01/html/E37851/tcp-4p.html + + Closes #13864 + +Daniel Stenberg (3 Jun 2024) + +- KNOWN_BUGS: quiche: QUIC connection is draining + + Closes #12037 + Closes #13867 + +- KNOWN_BUGS: aws-sigv4 has problems with particular URLs + + Closes #13058 + Closes #13866 + +- KNOWN_BUGS: aws-sigv4 does not handle multipart/form-data correctly + + Closes #13351 + Closes #13866 + +- RELEASE-NOTES: synced + +Viktor Szakats (3 Jun 2024) + +- GHA: fix old mingw-w64 32-bit job + + This toolchain resides in the `mingw32` directory. Make sure to + configure `PATH` accordingly. + + Before this patch, it pointed to a non-existing `mingw64` directory, + making the job use the wrong compiler (gcc 12, 64-bit). + + Follow-up to e838b341a08b44d4a8486fb0d3f15d12fc794c62 #12927 + Closes #13863 + +Daniel Stenberg (2 Jun 2024) + +- tool_cb_hdr: return error for failed header writes + + By checking that fflush() works. + + Reported-by: Sebastian Andersson + Fixes #13836 + Closes #13859 + +Viktor Szakats (2 Jun 2024) + +- GHA: bump all build jobs to nproc+1 + + - bump rest of the workflows (windows, macos, distrocheck). + + - non-native virtualized envs have 2 CPUs, bump down accordingly. + (for `vmactions/omnios-vm` it's just a guess.) + + - bump all to nproc + 1. + + Follow-up to e838b341a08b44d4a8486fb0d3f15d12fc794c62 #12927 + Closes #13807 + +- GHA: disable MQTT and WebSocket tests in Windows jobs + + Trying to figure out which category is causing the remaining hangs. + + Follow-up to def7d05382743ea7aa1d356d1e41dcb22ecdd4d7 + Closes #13860 + +- lib/v*: tidy up types and casts + + Also add a couple of negative checks. + + Cherry-picked from #13489 + Closes #13622 + +- GHA: fix caching old mingw-w64 toolchains in the Windows workflow + + - stop altering the `PATH` via `GITHUB_ENV`. This confused the + `actions/cache` post-job, which needs to run in the exact same + environment as its pre-job, to have a consistent cache entry "version" + hash. Altering the `PATH` via `GITHUB_ENV` spills into the the + post-job and breaks this hash. GHA doesn't reset the env automatically + and I have not found a way to do it manually. + + - add double-quotes where missing. + + - move cache directory under `USERPROFILE` to not rely on absolute + paths. + + - make cache directory flatter and versionless. + + Follow-up to 0914d8aadddac0d1459673d5b7f77e8f3378b22b #13759 + Closes #13856 + +renovate[bot] (2 Jun 2024) + +- ci: pin actions/github-script action to 60a0d83 + + Closes #13846 + +Bo Anderson (2 Jun 2024) + +- x509asn1: add some common ECDSA OIDs + + Closes #13857 + +renovate[bot] (2 Jun 2024) + +- ci: update rojopolis/spellcheck-github-actions digest to e36f662 + + Closes #13852 + +Bo Anderson (2 Jun 2024) + +- x509asn1: fallback to dotted OID representation + + Reported-by: Luke Hamburg + Fixes #13845 + Closes #13858 + +Lee Li (2 Jun 2024) + +- request.md: language fix + + improved for better readability and correctness + + Closes #13854 + +Christian Schmitz (2 Jun 2024) + +- vtls: deprioritize Secure Transport + + Moved Secure Transport behind OpenSSL, so we can build CURL with both + and prefer using OpenSSL over Secure Transport by default. + + Closes #13547 + +Daniel Stenberg (1 Jun 2024) + +- urlapi: add CURLU_NO_GUESS_SCHEME + + Used for extracting: + + - when used asking for a scheme, it will return CURLUE_NO_SCHEME if the + stored information was a guess + + - when used asking for a URL, the URL is returned without a scheme, like + when previously given to the URL parser when it was asked to guess + + - as soon as the scheme is set explicitly, it is no longer internally + marked as guessed + + The idea being: + + 1. allow a user to figure out if a URL's scheme was set as a result of + guessing + + 2. extract the URL without a guessed scheme + + 3. this makes it work similar to how we already deal with port numbers + + Extend test 1560 to verify. + + Closes #13616 + +- wolfssl: support CA caching + + As a bonus, add SSLSUPP_CA_CACHE to let TLS backends signal its support + for this so that *setopt() return error if there is no support. + + Closes #13786 + +Andy Pan (1 Jun 2024) + +- socket: change TCP keepalive from ms to seconds on DragonFly BSD + + DragonFly BSD changed the time unit for TCP keep-alive from milliseconds + to seconds since v5.8, thus setting the keepalive options with + milliseconds with curl/libcurl will result in unexpected behaviors on + DragonFlyBSD 5.8+ + + Distinguish the DragonFly BSD versions and use the proper time units + accordingly. + + Ref: + https://lists.dragonflybsd.org/pipermail/commits/2019-July/719125.html + https://github.com/DragonFlyBSD/DragonFlyBSD/blob/965b380e960908836b97aa034 + fa2753091e0172e/sys/sys/param.h#L207 + + Fixes #13847 + Closes #13848 + +Daniel Stenberg (1 Jun 2024) + +- curlver.h: aiming for 8.9.0 + +- noproxy: patterns need to be comma separated + + or they will not parse correctly. + + Mentioned in DEPRECATED since Janurary 2023 (in 7ad8a7ba9ebdedc). + + Closes #13789 + +Jan Venekamp (1 Jun 2024) + +- sectransp: remove large cipher table + + Previously a large table of ciphers was used to determine the default + ciphers and to lookup manually selected ciphers names. + + With the lookup of the manually selected cipher names moved to + Curl_cipher_suite_walk_str() the large table is no longer needed for + that purpose. + + The list of manually selected cipher can now be intersected with the + ciphers supported by Secure Transport (SSLGetSupportedCiphers()), + instead of using the fixed table for that. + + The other use of the table was to filter the list of all supported + ciphers offered by Secure Transport to create a list of ciphers to + use by default, excluding ciphers in the table marked as weak. + + Instead of using a complement based approach (exclude weak), switch + to using an intersection with a smaller list of ciphers deemed + appropriate. + + Closes #13823 + +Tatsuhiro Tsujikawa (1 Jun 2024) + +- GHA: unify http3 workflows into one + + This commit unifies the following http3 workflows into http3-linux.yml: + + - ngtcp2-linux.yml + - osslq-linux.yml + - quiche-linux.yml + + The idea is better use of the build cache. Previously, they + independently create caches with the same key. Some of the caches + include source code and intermediate object files, which makes cache + quite large. In this commit, only built artifacts are cached, which + drastically reduces the cache size. OpenSSL v3, mod_h2 and quiche caches + still include all stuff, but they are left for the later improvement. + Because the contents of the cache have been changed, the cache keys are + also changed to include the word "http3". + + Closes #13841 + +Stephen Farrell (1 Jun 2024) + +- openSSL: fix hostname handling when using ECH + + Reported-by: vvb2060 + Fixes #13818 + Closes #13822 + +renovate[bot] (1 Jun 2024) + +- ci: update github/codeql-action digest to f079b84 + + Closes #13837 + +Daniel Stenberg (1 Jun 2024) + +- RELEASE-NOTES: synced + +- curl_multi_poll.md: expand the example with an custom file descriptor + + Closes #13842 + +Christian Heusel (1 Jun 2024) + +- DISTROS: add a link to the list archive + + Related to https://github.com/curl/curl/discussions/13833 + + Signed-off-by: Christian Heusel + Closes #13843 + +Matt Jolly (31 May 2024) + +- autoconf: remove 'deeper' checks for `AC_CHECK_FUNCS` + + The net effect of the deeper checks is to raise implicit function decls + on modern compilers. + + These checks appear to have been added ~20 years ago, relating to an + unverifiable claim about HP-UX. Autoconf support for the platform has + grown in leaps and bounds since. + + It didn't cause a real problem here, but when investigating a FP this + came up. No evidence has been identified that this was actually broken + in the past, and there is no evidence that this is necessary now. + + `-Werror=implicit-function-declarations` is enabled for both checks; + without a working prototype they will both fail regardless. In the + second case there will in fact never be a working prototype and + therefore it will always fail unconditionally. + + `AC_CHECK_FUNCS` does effectively the same thing as the removed checks, + except it actually defines a dummy prototype to see if it links. + + If `AC_CHECK_FUNCS` is broken on a given platform we have bigger + problems than trying to build cURL. This should also be faster. + + Bug: https://bugs.gentoo.org/932827 + Reviewed-By: Eli Schwartz + Closes #13830 + +Jay Satiro (30 May 2024) + +- cf-socket: improve SO_SNDBUF update for Winsock + + - Rename: Curl_sndbufset => Curl_sndbuf_init + + - Rename: win_update_buffer_size => win_update_sndbuf_size + + - Save the last set SO_SNDBUF size to compare against so that we can + avoid setsockopt calls every second. + + This is a follow-up to 0b520e12 which moved the SO_SNDBUF update check + into cf-socket. This change improves it further by making the function + names easier to understand and reducing the amount of setsockopt calls. + + Closes https://github.com/curl/curl/pull/13827 + +Viktor Szakats (30 May 2024) + +- tidy-up: use consistent casing for Windows directories + + C:\Windows\System32 + + Closes #13832 + +- GHA: use ubuntu-latest with OmniOS job + + It's the same as ubuntu-22.04. + + Also update OmniOS package search link. + + Closes #13831 + +Ayesh Karunaratne (30 May 2024) + +- GHA: adjust parallel job counts + + Adjusts the `make -j` flag to match the latest GitHub-hosted runner + hardware specs[^1]: + + - `ubuntu-latest` on 4 CPU cores + - `macos-latest` on 3 CPU cores + + The processor count is ideally obtained from `nproc`, but setting env + vars from the current CI yaml files is not possible because they expect + literal strings. + + [^1]: https://docs.github.com/en/actions/using-github-hosted-runners/about-gi + thub-hosted-runners/about-github-hosted-runners#standard-github-hosted-runner + s-for-public-repositories + + Closes #12927 + +pszlazak (30 May 2024) + +- get.d: clarify the explanation + + Closes #13706 + +Daniel Stenberg (30 May 2024) + +- curl_url_set.md: libcurl only parses :// URLs + + Make it clearer in the documentation. + + Closes #13821 + +Stefan Eissing (30 May 2024) + +- multi: fix multi_wait() timeout handling + + - determine the actual poll timeout *after* all sockets + have been collected. Protocols and connection filters may + install new timeouts during collection. + - add debug logging to test1533 where the mistake was noticed + + Reported-by: Matt Jolly + Fixes #13782 + Closes #13825 + +Viktor Szakats (29 May 2024) + +- lib: prefer `var = time(NULL)` over `time(&var)` + + Following up on previous occurrences showing up as gcc warnings, replace + the remaining `time(&var)` calls with `var = time(NULL)`, though these + aren't specifically causing compiler warnings. These are in the TFTP + client code (`lib/tftp.c`), except one which is in a debug branch in + `lib/http_aws_sigv4.c`. + + What's unexplainable is that this patch seems to mitigate TFTP tests + often hanging or going into an infinite loop on GHA windows workflows + with MSYS2, mingw-w64 and MSVC (Cygwin is unaffected): + https://github.com/curl/curl/pull/13599#issuecomment-2119372376 + TFTP hangs did not entirely disappear though, so could be unrelated. + + `time()` docs: + https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/time-time32 + -time64 + https://manpages.debian.org/bookworm/manpages-dev/time.2.en.html + + Follow-up to 58ca0a2f0743a586716ca357c382b29e3f08db69 #13800 + Follow-up to d0728c9109629ee82b855b350a4c3f1f52ee61df #13643 + Closes #13815 + +Stefan Eissing (29 May 2024) + +- winsock: move SO_SNDBUF update into cf-socket + + - Move the code that updates the SO_SNDBUF size for Windows to + cf_socket_send. + + Prior to this change the code was in readwrite_upload but the socket + filter is the more appropriate place because it applies to all sends. + + Background: + + For Windows users SO_SNDBUF (the total per-socket buffer size reserved + by Winsock for sends) is updated dynamically by libcurl during the + transfer. This is because Windows does not do it automatically for + non-blocking sockets and without it the performance of large transfers + may suffer. + + Closes https://github.com/curl/curl/pull/13763 + +Jan Venekamp (29 May 2024) + +- sectransp: use common code for cipher suite lookup + + Take advantage of the Curl_cipher_suite_walk_str() and + Curl_cipher_suite_get_str() functions introduced in commit fba9afe. + + Closes #13521 + +Matthias Gatto (29 May 2024) + +- aws-sigv4: url encode the canonical path + + Refactors canon_query, so it could use the encoding part of the function + to use it in the path. + + As the path doesn't encode '/', but encode '=', I had to add some + conditions to know If I was doing the query or path encoding. + + Also, instead of adding a `bool in_path` variable, I use `bool + *found_equals` to know if the function was called for the query or path, + as found_equals is used only in query_encoding. + + Test 472 verifies. + + Reported-by: Alexander Shtuchkin + Fixes #13754 + Closes #13814 + + Signed-off-by: Matthias Gatto + +Daniel Stenberg (29 May 2024) + +- cd2nroff: use an empty "##" to signal end of .IP sequence + + Like when we list a series of options and then want to add "normal" text + again afterwards. + + Without this, the indentation level wrongly continues even after the + final "##" header, making following text wrongly appear to belong to the + header above. + + Adjusted several curldown files to use this. + + Fixes #13803 + Reported-by: Jay Satiro + Closes #13806 + +vvb2060 (28 May 2024) + +- openssl: fix %-specifier in infof() call + + Closes #13816 + +Daniel Stenberg (28 May 2024) + +- curl: make warnings and other messages aware of terminal width + + This removes unnecessary line wraps when the terminal is wider than 79 + columns and it also makes messages look better in narrower terminals. + + The get_terminal_columns() function is not split out into its own source + file. + + Suggested-by: Elliott Balsley + Fixes #13804 + Closes #13808 + +Viktor Szakats (28 May 2024) + +- GHA: enable tests 1139, 1177, 1477 on Windows + + These exclusions came from the AppVeyor CI config, but they do pass now + and they are static tests with no flakiness risk. + + Follow-up to 0914d8aadddac0d1459673d5b7f77e8f3378b22b #13759 + Closes #13817 + +Dan Fandrich (28 May 2024) + +- CI: Improve labeler tag detection + + Also, simplify patterns with a single glob. + +Viktor Szakats (28 May 2024) + +- GHA: disable TFTP tests in Windows jobs + + Shot in the dark trying to find out which tests are + hanging / going to an infinite loop. + + The ones failing after 45 minutes (mingw-w64) or 30 minutes (MSVC). + + Ref: https://github.com/curl/curl/pull/13599#issuecomment-2119372376 + +renovate[bot] (28 May 2024) + +- ci: update vmactions/omnios-vm digest to a61ca1e + + Closes #13801 + +Daniel Stenberg (28 May 2024) + +- openssl/gnutls: rectify the TLS version checks for QUIC + + The versions check wrongly complained and return error if the *minimum* + version was set to something less than 1.3. QUIC is always TLS 1.3, but + that means minimum 1.2 is still fine to ask for. + + This also renames the local variable to make the mistake harder to make + in the future. + + Regression shipped in 8.8.0 + + Follow-up to 3210101088dfa3d6a125 + + Reported-by: fds242 on github + Fixes #13799 + Closes #13802 + +Stefan Eissing (28 May 2024) + +- gnutls: improve TLS shutdown + + local ftp upload tests sometimes failed with an invalid TLS record being + reported by gnutls. vsftp did log that the shutdown was not regarded as + clean, failing the control connection thereafter. + + These changes make test_31_05 work reliable locally. + + - on closing the SSL filter, shutdown READ *and* WRITE + - on closing, try a receive after shutdown is sent + - convert to DEBUGF to CURL_TRC_CF + + Closes #13790 + +Daniel Stenberg (28 May 2024) + +- RELEASE-NOTES: synced + +- tests: run with "--trace-config all" to provide even more info + + in case of problems. + + Closes #13791 + +Viktor Szakats (28 May 2024) + +- build: untangle `CURLDEBUG` and `DEBUGBUILD` macros + + `CURLDEBUG` is meant to enable memory tracking, but in a bunch of cases, + it was protecting debug features that were supposed to be guarded with + `DEBUGBUILD`. + + Replace these uses with `DEBUGBUILD`. + + This leaves `CURLDEBUG` uses solely for its intended purpose: to enable + the memory tracking debug feature. + + Also: + - autotools: rely on `DEBUGBUILD` to enable `checksrc`. + Instead of `CURLDEBUG`, which worked in most cases because debug + builds enable `CURLDEBUG` by default, but it's not accurate. + - include `lib/easyif.h` instead of keeping a copy of a declaration. + - add CI test jobs for the build issues discovered. + + Ref: https://github.com/curl/curl/pull/13694#issuecomment-2120311894 + Closes #13718 + +- examples: delete unused includes + + Delete a bunch of unnecessary-looking headers from some examples. This + is known to be tricky on AIX (perhaps also in other less-tested envs). + + Let me know if any of this looks incorrect or outright fails on some + systems. + + Follow-up to d4b85890555388bec212b75f47a5c1a48705b156 #13771 + Closes #13785 + +- appveyor: fixup job name [ci skip] + + Follow-up to fc8e0dee3045658f293452121f5290d81ba3aa1e #13694 + +- cmake: fix `-Wredundant-decls` in unity/mingw-w64/gcc/curldebug/DLL builds + + It affected cmake-unity shared-curltool curldebug mingw-w64 gcc builds + when building the `testdeps` target. + + Apply the solution already used in `lib/base64.c` and `lib/dynbuf.c` + to fix it. + + Also update an existing GHA CI job to test the issue fixed. + + ``` + In file included from curl/lib/version_win32.c:35, + from curl/_bld/src/CMakeFiles/curl.dir/Unity/unity_0_c.c:145 + : + curl/lib/memdebug.h:52:14: error: redundant redeclaration of 'curl_dbg_logfil + e' [-Werror=redundant-decls] + 52 | extern FILE *curl_dbg_logfile; + | ^~~~~~~~~~~~~~~~ + In file included from curl/src/slist_wc.c:32, + from curl/_bld/src/CMakeFiles/curl.dir/Unity/unity_0_c.c:4: + curl/lib/memdebug.h:52:14: note: previous declaration of 'curl_dbg_logfile' w + ith type 'FILE *' {aka 'struct _iobuf *'} + 52 | extern FILE *curl_dbg_logfile; + | ^~~~~~~~~~~~~~~~ + curl/lib/memdebug.h:55:44: error: redundant redeclaration of 'curl_dbg_malloc + ' [-Werror=redundant-decls] + 55 | CURL_EXTERN ALLOC_FUNC ALLOC_SIZE(1) void *curl_dbg_malloc(size_t siz + e, + | ^~~~~~~~~~~~~~~ + curl/lib/memdebug.h:55:44: note: previous declaration of 'curl_dbg_malloc' wi + th type 'void *(size_t, int, const char *)' {aka 'void *(long long unsigned + int, int, const char *)'} + 55 | CURL_EXTERN ALLOC_FUNC ALLOC_SIZE(1) void *curl_dbg_malloc(size_t siz + e, + | ^~~~~~~~~~~~~~~ + [...] + curl/lib/memdebug.h:110:17: error: redundant redeclaration of 'curl_dbg_fclos + e' [-Werror=redundant-decls] + 110 | CURL_EXTERN int curl_dbg_fclose(FILE *file, int line, const char *sou + rce); + | ^~~~~~~~~~~~~~~ + curl/lib/memdebug.h:110:17: note: previous declaration of 'curl_dbg_fclose' w + ith type 'int(FILE *, int, const char *)' {aka 'int(struct _iobuf *, int, c + onst char *)'} + 110 | CURL_EXTERN int curl_dbg_fclose(FILE *file, int line, const char *sou + rce); + | ^~~~~~~~~~~~~~~ + ``` + Ref: https://ci.appveyor.com/project/curlorg/curl/builds/49840554/job/a4aoet1 + 7e9qnqx1a#L362 + + After: https://ci.appveyor.com/project/curlorg/curl/builds/49843735/job/hbo2u + ah2vj0ns523 + + Ref: #13689 (CI testing this PR with `DEBUGBUILD`/`CURLDEBUG`/shared-static c + ombinations) + Depends-on: #13694 + Depends-on: #13800 + Closes #13705 + +- lib: fix gcc warning in certain debug builds + + ``` + curl/lib/http_aws_sigv4.c:536:10: error: 'clock' may be used uninitialized [- + Werror=maybe-uninitialized] + 536 | time_t clock; + | ^~~~~ + ``` + Ref: https://github.com/curl/curl/actions/runs/9158755123/job/25177765000#ste + p:13:79 + + Cherry-picked from #13718 + Closes #13800 + +- cmake: always build unit tests with the `testdeps` target + + Before this patch, the `testdeps` build target required `-DCURLDEBUG` + be set either via `ENABLE_DEBUG=ON` or `ENABLE_CURLDEBUG=ON` to build + the curl unit tests. + + After fixing build issues in #13694, we can drop this requirement and + build unit tests unconditionally. + + Depends-on: #13694 + Depends-on: #13697 (fix unit test issue revealed by Old Linux CI job) + Follow-up to 39e7c22bb459c2e818f079984989a26a09741860 #11446 + Closes #13698 + +- CI: disable dependency tracking in most autotools builds + + For better build performance. Dependency tracking causes a build + overhead while compiling to help a subsequent build, but in CI there is + never one and the extra work is discarded. + + Closes #13794 + +- build: untangle `UNITTESTS` and `DEBUGBUILD` macros + + - fix `DEBUGBUILD` guards that should be `UNITTESTS`, in libcurl code + used by unit tests. + - fix guards for libcurl functions used in unit tests only. + - sync `UNITTEST` attribute between declarations and definitions. + - drop `DEBUGBUILD` guard from test `unit2600`. + - fix guards for libcurl HSTS code used by both a unit test (`unit1660`) + and `test0446`. + - update an existing AppVeyor CI job to test the issues fixed. + + This fixes building tests with `CURLDEBUG` enabled but `DEBUGBUILD` + disabled. This can happen when building tests with CMake with + `ENABLE_DEBUG=ON` in Release config, or with `ENABLE_CURLDEBUG=ON` + and _without_ `ENABLE_DEBUG=ON`. Possibly also with autotools + when using `--enable-curldebug` without `--enable-debug`. + + Test results: + - before: + https://ci.appveyor.com/project/curlorg/curl/builds/49835609 + https://ci.appveyor.com/project/curlorg/curl/builds/49898529/job/k8qpbs8idb + y70smw + https://github.com/curl/curl/actions/runs/9259078835/job/25470318167?pr=137 + 98#step:13:821 + - after: https://ci.appveyor.com/project/curlorg/curl/builds/49839255 + (the two failures are unrelated, subject to PR #13705) + + Ref: #13592 (issue discovery) + Ref: #13689 (CI testing this PR with `DEBUGBUILD`/`CURLDEBUG` combinations) + Closes #13694 + +- GHA: ignore flaky MQTT and FTP test results [ci skip] + + MQTT / OmniOS: + ``` + TESTFAIL: These test cases failed: 1190 1198 3017 + ``` + Ref: https://github.com/curl/curl/actions/runs/9258522297/job/25468730731?pr= + 13694#step:3:10251 + + MQTT / OmniOS: + ``` + TESTFAIL: These test cases failed: 1194 2200 2203 2205 + ``` + Ref: https://github.com/curl/curl/actions/runs/9150523540/job/25155409832#ste + p:3:10233 + + FTP / OmniOS: + ``` + TESTFAIL: These test cases failed: 1096 + ``` + Ref: https://github.com/curl/curl/actions/runs/9150702711/job/25155793948#ste + p:3:10247 + + FTP / OmniOS: + ``` + TESTFAIL: These test cases failed: 381 + ``` + Ref: https://github.com/curl/curl/actions/runs/9163863822/job/25193897640#ste + p:3:10230 + + FTP / OmniOS: + ``` + TESTFAIL: These test cases failed: 340 + ``` + Ref: https://github.com/curl/curl/actions/runs/9233804752/job/25406671742?pr= + 13771#step:3:10245 + + Ref: https://github.com/curl/curl/pull/13583#issuecomment-2119376898 + +- CI: tidy up skipping tests build/run in Windows jobs + + Simplify controlling whether to build and/run tests in a CI job. + + Apply the TFLAGS='skipall' (do not build nor run tests) or + 'skiprun' (build, but do not run) method already used with old-mingw-w64 + and msvc jobs to existing Windows jobs in GHA and AppVeyor. + + Also: + - add Cygwin/cmake test build and run steps while here. + - replace `DISABLED_TESTS` with `TFLAGS` in AppVeyor. + + Closes #13796 + +- cmake: use `APPLE` instead of `CMAKE_SYSTEM_NAME` string + + Follow-up to a86254b39307af1a53735b065a382567805cd9b8 #12515 + Closes #13713 + +- cmake: whitespace, formatting/tidy-up in comments + + Also correct casing in a few option descriptions. + + Closes #13711 + +- cmake: allow `ENABLE_CURLDEBUG=OFF` with `ENABLE_DEBUG=ON` + + Before this patch, `ENABLE_CURLDEBUG` (memory tracking) was + unconditionally enabled when `ENABLE_DEBUGBUILD` was set. This made + testing some build configurations complicated. To fix it, this patch + makes `ENABLE_CURLDEBUG` to receive the value of `ENABLE_DEBUG` by + default, while allowing free override by the user. + + This allows to use the config: + `ENABLE_DEBUGBUILD=ON ENABLE_CURLDEBUG=OFF` + to enable debug features, without also enabling memory tracking. + + This is important because some other build methods allow to set one of + these features but not the other. This patch allows to test any + combination with CMake. + + This makes it unnecessary to use the workaround of passing + `-DDEBUGBUILD` via `CMAKE_C_FLAGS`. Which has the disadvantage that our + CMake logic cannot easily detect it, e.g. for disabling symbol hiding on + Windows for `ENABLE_DEBUG`/`DEBUGBUILD` builds. + + Cherry-picked from #13718 + Closes #13792 + +- cmake: `ENABLE_DEBUG=ON` to always set `-DDEBUGBUILD` + + Before this patch `ENABLE_DEBUG=ON` always enabled the TrackMemory + (aka `ENABLE_CURLDEBUG=ON`) feature, but required the `Debug` CMake + configration to actually enable curl debug features + (aka `-DDEBUGBUILD`). + + Curl debug features do not require compiling with C debug options. This + also made enabling debug features unintuitive and complicated to use. + Due to other issues (subject to PR #13694) it also caused an error in + default (and `Release`/`MinSizeRel`/`RelWithDebInfo`) configs, when + building the `testdeps` target: + ``` + ld: CMakeFiles/unit1395.dir/unit1395.c.o: in function `test': + unit1395.c:(.text+0x1a0): undefined reference to `dedotdotify' + ``` + Ref: https://github.com/curl/curl/actions/runs/9037287098/job/24835990826#ste + p:3:2483 + + Fix it by always defining `DEBUGBUILD` when setting `ENABLE_DEBUG=ON`. + Decoupling this option from the selected CMake configuration. + + Note that after this patch `ENABLE_DEBUG=ON` unconditionally enables + curl debug features. These features are insecure and unsuited for + production. Make sure to omit this option when building for production + in default, `Release` (and other not-`Debug`) modes. + + Also delete a workaround no longer necessary in GHA CI jobs. + + Ref: 1a62b6e68c08c7e471ff22dd92932aba7e026817 (2015-03-03) + Ref: #13583 + Closes #13592 + +- GHA: add autotools mingw-64, build-only job + + Cherry-picked from #13718 + Closes #13793 + +- GHA: add three MSVC jobs + + Continuing the theme, add 3 MSVC jobs with tests, matching + configurations used on AppVeyor. MSVC versions are identical: + 19.39.33523.0 + Windows SDK 10.0.22621.0. + + Also enable websockets, and build examples. Tests are run in parallel + (`-j14`), with improved performance. + + Job performance: + ``` + AppVeyor GHA + w/examples + -------- ---------- + CMake, VS2022, Debug, x64, Schannel, Static, Unicode 38m 4s 11m57s + CMake, VS2022, Debug, x64, no SSL, Static 35m15s 12m 6s + CMake, VS2022, Debug, x64, no SSL, Static, HTTP only 25m25s 10m36s + ``` + Based on these runs: + https://ci.appveyor.com/project/curlorg/curl/builds/49884748 + https://github.com/curl/curl/actions/runs/9229448468 + + This is the first time examples are built in CI with MSVC: Fix all + warnings and errors that came up via + d4b85890555388bec212b75f47a5c1a48705b156 #13771. + + Closes #13766 + +- GHA: add three old (gcc 6, 7, 9) mingw-w64 jobs + + Re-implement old mingw-w64 jobs in GHA. This allows to use the latest + Windows runners, replacing Windows Server 2012 R2 (gcc 6) and Windows + Server 2016 (gcc 7, 9) with Windows Server 2022. + + GHA runners are also significantly faster, and allow running tests in + parallel (`-j14`). It also offloads 3 more long-running jobs from + AppVeyor CI. + + These jobs download (then cache) the mingw-w64 packages from their + original location, which allows flexibility in choosing which versions + and flavours (win32/POSIX, SEH/DWARF, 64/32-bit) we want to test in CI. + The new jobs use these distros: + - https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20 + Win64/Personal%20Builds/mingw-builds/ (for gcc 7, same as on AppVeyor) + - https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20 + Win32/Personal%20Builds/mingw-builds/ (for gcc 6, same as on AppVeyor) + - https://winlibs.com/ (for gcc 9) + + I matched existing AppVeyor job configs, with these differences: + - gcc 6.4.0 instead of 6.3.0. + (same distro as on AppVeyor, but the latest bugfix release) + - gcc 9.5.0 instead of 9.1.0 and a different (but compatible) binary distro. + (in AppVeyor this relies on an old MSYS2 pre-installed on the runner) + - using win32 builds instead of posix for gcc 6.4.0 and 7.3.0. + - websockets enabled. + - always build examples. + - always build tests (this wasn't done for 6.4.0 with AppVeyor CI). + + I did not replicate existing test exclusions, and oddly enough the few + failures (so far) were different from MSYS2 jobs and also from their + AppVeyor CI counterparts. + + Also: + - delete redundant (default) `-u` option from `cygpath` calls. + - allow matrix options to override default ones in CMake. + - detect and use Windows-supplied curl for `TFLAGS` `-ac` option. + (it's available in modern runners.) + - delete the 3 AppVeyor CI jobs now replicated in GHA. + - appveyor: prefer `SYSTEMROOT` over `WINDIR`. + - tidy-up quotes. + + Job performance: + ``` + AppVeyor GH + A + w/ + examples + w/ + tests + -------- -- + -------- + CMake, mingw-w64, gcc 6, Debug, x86, Schannel, Static, no-unity 1m25s 8 + m50s + CMake, mingw-w64, gcc 7, Debug, x64, Schannel, Static, Unicode 31m45s 9 + m39s + CMake, mingw-w64, gcc 9, Debug, x64, Schannel, Static 28m25s 13 + m38s + ``` + Based on these runs: + https://ci.appveyor.com/project/curlorg/curl/builds/49880799 + https://github.com/curl/curl/actions/runs/9218292508 + + Notice that building examples and tests is time consuming. + + We can tweak any build parameter as necessary to make them more useful + and/or without clogging the job queue or introducing flakiness. + + Closes #13759 + +Daniel Stenberg (27 May 2024) + +- TODO: remove some old, clarify, add something + + Closes #13788 + +- TODO: Add "Share CA cache" + "CA caching to more TLS backends" + + Closes #13787 + +Viktor Szakats (26 May 2024) + +- runtests: sort test IDs in summary lines + + Changing this output: + ``` + TESTFAIL: These test cases failed: 2301 2303 2302 2307 + ``` + Ref: https://github.com/curl/curl/actions/runs/9228638364/job/25393106631#ste + p:6:21181 + + To: + ``` + TESTFAIL: These test cases failed: 2301 2302 2303 2307 + ``` + + Cherry-picked from #13766 + Closes #13774 + +- examples: fix compiling with MSVC + + - `websocket.c`: use `Sleep()` on Windows. + `sleep()` and `unistd.h` are not available in MSVC. + + - `http2-upload.c`: use local `gettimeofday()` implementation when + compiled with MSVC. + (Alternate solution is to disable the trace function for MSVC.) + Public domain code copied and adapted from libssh2: + https://github.com/libssh2/libssh2/blob/e973493f992313b3be73f51d3f7ca6d52e2 + 88558/src/misc.c#L719-L743 + + - silence compiler warning for deprecated `inet_addr()`. + Also drop duplicate winsock2 include. + ``` + curl\docs\examples\externalsocket.c(125,32): error C2220: the following war + ning is treated as an error [curl\bld\docs\examples\curl-example-externalsock + et.vcxproj] + curl\docs\examples\externalsocket.c(125,32): warning C4996: 'inet_addr': Us + e inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS + to disable deprecated API warnings [curl\bld\docs\examples\curl-example-e + ``` + Ref: https://github.com/curl/curl/actions/runs/9227337318/job/25389073450#s + tep:4:95 + + - silence an MSVC compiler warning. This is in conflict with `checksrc` + rules, so silence the rule in favour of the warning-free C syntax. + ``` + curl\docs\examples\multi-legacy.c(152,1): error C2220: the following warnin + g is treated as an error [curl\bld\docs\examples\curl-example-multi-legacy.vc + xproj] + curl\docs\examples\multi-legacy.c(152,1): warning C4706: assignment within + conditional expression [curl\bld\docs\examples\curl-example-multi-legacy.vcxp + roj] + ``` + Ref: https://github.com/curl/curl/actions/runs/9227337318/job/25389073450#s + tep:4:226 + + - do not use `sys/time.h` and `unistd.h` in Windows builds. + Some of these includes look unnecessary. Subject to another PR. + + Cherry-picked from #13766 + Closes #13771 + +Jonathan Matthews (26 May 2024) + +- docs/cmdline-opts: fix mail-auth example TLD typo + + Closes: #13784 + Reviewed-by: Daniel Gustafsson + +Daniel Stenberg (26 May 2024) + +- libssh: remove CURLOPT_SSL_VERIFYHOST check + + It was never meant for SSH: it should rely on the knownhosts file (if + set) in the same way libssh2 already does. + + Reported-by: James Abbatiello + Fixes #13767 + Closes #13781 + +Stefan Eissing (26 May 2024) + +- multi: add multi->proto_hash, a key-value store for protocol data + + - add `Curl_hash_add2()` that passes a destructor function for + the element added. Call element destructor instead of hash + destructor if present. + - multi: add `proto_hash` for protocol related information, + remove `struct multi_ssl_backend_data`. + - openssl: use multi->proto_hash to keep x509 shared store + - schannel: use multi->proto_hash to keep x509 shared store + - vtls: remove Curl_free_multi_ssl_backend_data() and its + equivalents in the TLS backends + + Closes #13345 + +Jan Venekamp (25 May 2024) + +- tests: add pytest for --ciphers and --tls13-ciphers options + + Closes #13530 + +Orgad Shaneh (25 May 2024) + +- tool_operate: avoid explicitly setting verifypeer to 1 + + Also for the proxy verison. It is the default, just like verifyhost, + since a long time. + + Closes #13704 + +- tests: extend user/password parsing test1620 + + Closes #13756 + +Alejandro R. Sedeño (25 May 2024) + +- configure: use `$EGREP` in place of `grep -E` + + `$EGREP` is set based on an earlier test in configure so that we can + work with systems that have `egrep` and a `grep` that does not support + `-E`. + + Closes #13780 + +renovate[bot] (25 May 2024) + +- ci: update dependency awslabs/aws-lc to v1.28.0 + + Closes #13770 + +Jan Venekamp (25 May 2024) + +- tests: test_17_ssl_use.py clarify mbedtls TLSv1.3 support + + Closes #13779 + +Stefan Eissing (25 May 2024) + +- http: write last header line late + + - HEADERFUNCTIONS might inspect response properties like + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T on seeing the last header line. If + the line is being written before this is initialized, values are not + available. + + - write the last header line late when analyzing a HTTP response so that + all information is available at the time of the writing. + + - add test1485 to verify that CURLINFO_CONTENT_LENGTH_DOWNLOAD_T works + on seeing the last header. + + Fixes #13752 + Reported-by: Harry Sintonen + Closes #13757 + +Dan Fandrich (24 May 2024) + +- tests: use exec when spawning nghttpx + + This stops keeping perl and shell processes around that are no longer + needed, plus it eliminates an unneeded shell message when the server is + later terminated. + + Closes #13772 + +Viktor Szakats (24 May 2024) + +- GHA: ignore flaky test 3017 (MQTT) on OpenBSD + + ``` + TESTFAIL: These test cases failed: 3017 + ``` + Ref: https://github.com/curl/curl/actions/runs/9223543272/job/25376999226?pr= + 13759#step:3:16326 + Ref: https://github.com/curl/curl/actions/runs/9230183764/job/25397883193?pr= + 13766#step:3:16345 + + Ref: https://github.com/curl/curl/pull/13583#issuecomment-2119376898 + +Joseph Chen (24 May 2024) + +- build: add more supported attributes to the IAR compiler + + Closes #13744 + +Viktor Szakats (24 May 2024) + +- cmake: fix test 1013 with websockets enabled and no TLS + + test 1013 is 'Compare curl --version with curl-config --protocols'. + + Ref: https://github.com/curl/curl/actions/runs/9228363859/job/25392251955 + + Closes #13769 + +- GHA: stop deleting curl in non-native workflows + + We do it in Cirrus CI, but for some platforms it's not possible to + delete it and tests work anyway. + + The test runner also runs `../src/curl` by default, which is always the + one freshly built. The runner may also need the system curl to talk to + APIs when needed. + + Also: + - stop setting `CURL` env. This isn't picked up by the runners, + and works out of the box anyway. + - quote an option just in case. + + Follow-up to 90e644f944969bb11c6448bf50c6d441b5c0b1e6 #13583 + Closes #13765 + +Jay Satiro (24 May 2024) + +- openssl: stop duplicate ssl key logging for legacy OpenSSL + + - Don't call the keylog function if it has already logged the key. + + For old OpenSSL versions and its forks that do not have support for + OpenSSL's keylog callback, libcurl has its own legacy key logging + function that logs the TLS 1.2 (and earlier) key (client random + master + key) on a single line. + + Prior to this change, since e7de80e8 (precedes 8.8.0), the legacy key + logging function could write the same key line more than once (usually + twice) due to some incorrect logic. + + Closes https://github.com/curl/curl/pull/13683 + +Stefan Eissing (24 May 2024) + +- transfer: remove curl_upload_refill_watermark, no longer used + + the define applied to upload buffers which we removed + + Closes #13764 + +Daniel Stenberg (24 May 2024) + +- RELEASE-NOTES: synced + +Viktor Szakats (24 May 2024) + +- cmake: fix brotli lib order + + Fix root cause that caused missing symbols when linking brotli + statically with e.g. binutils `ld` (and any other "picky" linker, + or "traditional" linker as CMake now calls them). + + Also drop existing workaround that added brotli libs twice to the lib + list. + + ``` + x86_64-w64-mingw32-ld: .../curl/brotli/_bld/usr/lib/libbrotlidec.a(decode.c.o + bj):decode.c:(.text$ProcessCommands[ProcessCommands]+0xbb5): undefined refere + nce to `BrotliTransformDictionaryWord' + x86_64-w64-mingw32-ld: .../curl/brotli/_bld/usr/lib/libbrotlidec.a(decode.c.o + bj):decode.c:(.text$SafeProcessCommands[SafeProcessCommands]+0xe8a): undefine + d reference to `BrotliTransformDictionaryWord' + x86_64-w64-mingw32-ld: .../curl/brotli/_bld/usr/lib/libbrotlidec.a(decode.c.o + bj):decode.c:(.rdata$.refptr._kBrotliContextLookupTable[.refptr._kBrotliConte + xtLookupTable]+0x0): undefined reference to `_kBrotliContextLookupTable' + x86_64-w64-mingw32-ld: .../curl/brotli/_bld/usr/lib/libbrotlidec.a(decode.c.o + bj):decode.c:(.rdata$.refptr._kBrotliPrefixCodeRanges[.refptr._kBrotliPrefixC + odeRanges]+0x0): undefined reference to `_kBrotliPrefixCodeRanges' + x86_64-w64-mingw32-ld: .../curl/brotli/_bld/usr/lib/libbrotlidec.a(state.c.ob + j):state.c:(.text$BrotliDecoderStateInit[BrotliDecoderStateInit]+0x21): undef + ined reference to `BrotliDefaultAllocFunc' + x86_64-w64-mingw32-ld: .../curl/brotli/_bld/usr/lib/libbrotlidec.a(state.c.ob + j):state.c:(.text$BrotliDecoderStateInit[BrotliDecoderStateInit]+0x2f): undef + ined reference to `BrotliDefaultFreeFunc' + x86_64-w64-mingw32-ld: .../curl/brotli/_bld/usr/lib/libbrotlidec.a(state.c.ob + j):state.c:(.text$BrotliDecoderStateInit[BrotliDecoderStateInit]+0x10e): unde + fined reference to `BrotliSharedDictionaryCreateInstance' + x86_64-w64-mingw32-ld: .../curl/brotli/_bld/usr/lib/libbrotlidec.a(state.c.ob + j):state.c:(.text$BrotliDecoderStateCleanup[BrotliDecoderStateCleanup]+0xf4): + undefined reference to `BrotliSharedDictionaryDestroyInstance' + collect2: error: ld returned 1 exit status + ``` + + Breakage reproducible with curl-for-win config "`win-gcc`" and deleting + the `LDFLAGS+=' -Wl,--start-group'` line from its `curl.sh` script. + (Above line still required for some non-brotli cases, e.g. libssh2 and + zlib.) + + Assisted-by: Kai Pastor + Ref: https://github.com/curl/curl/pull/10857#discussion_r1611714989 + Follow-up to 1e3319a167d2f32d295603167486e9e88af9bb4e #10857 + Closes #13761 + +Pavel Pavlov (24 May 2024) + +- cmake: fix building in unity mode + + - Fix sha256 and sha512 duplicate macro names (eg function-like macro Ch + is now Sha256_Ch and Sha512_Ch). + + - Avoid defining short defines like R, S. (eg S is now Sha256_S). + + Closes https://github.com/curl/curl/pull/13751 + +Jay Satiro (24 May 2024) + +- winbuild: remove outdated WIN32 defines + + - Remove all instances in the makefile of compiler option /DWIN32. + + This is a follow-up to e9a7d4a1 which replaced all defined(WIN32) checks + with defined(_WIN32) in the codebase, since only the latter is + automatically defined by all compilers for Windows builds. + + Bug: https://github.com/curl/curl/pull/13739#issuecomment-2123937859 + Reported-by: Viktor Szakats + + Closes https://github.com/curl/curl/pull/13742 + +renovate[bot] (24 May 2024) + +- ci: update github/codeql-action digest to 9fdb3e4 + + Closes #13726 + +Pavel Pavlov (23 May 2024) + +- asyn-thread: avoid using GetAddrInfoExW with impersonation + + Multiple reports suggest that GetAddrInfoExW fails when impersonation is + used. This PR checks if thread is impersonating and avoids using + GetAddrInfoExW api. + + Reported-by: Keerthi Timmaraju + Assisted-by: edmcln on github + Fixes #13612 + Closes #13738 + +Stefan Eissing (23 May 2024) + +- transfer: conn close on paused upload + + - add 2 variations on test_07_42 which PAUSEs uploads + and response connections terminating either right away + or after the 100-continue response + - when detecting the connection being closed in transfer.c + readwrite_data(), clear ALL send bits in data->req.keepon. + It no longer makes send to wait for a KEEP_SEND_PAUSE or HOLD. + - in the protocol client writer add the check for incomplete + response bodies. When an EOS is seen and the length is known, + check that and fail if bytes are missing. + + Reported-by: Sergey Bronnikov + Fixes #13740 + Closes #13750 + +- CI GHA: add vsftpd to ngtcp2-linux runs + + - not using HTTP/3, but gnutls does not seem to run + somewhere else right now + + Closes #13760 + +Orgad Shaneh (23 May 2024) + +- GHA: increase timeout for Cygwin autotools build tests step + + Apparently 10 minutes are not (always) enough: + https://github.com/curl/curl/actions/runs/9197003907/job/25296439556#step:8:1 + 936 + + Closes #13753 + +Stefan Eissing (22 May 2024) + +- mbedtls: send close-notify on close + + - send the TLS close notify message when cloding down + the mbedtls connection filter + - this is a "least" effort version and, as other TLS filters, + is lacking a graceful send/receive/timeout for a really + clean shutdown. + + Closes #13745 + +- mbedtls: check version for cipher id + + mbedtls_ssl_get_ciphersuite_id_from_ssl() seems to have been added in + mbedtls 3.2.0. Check for that version. + + Closes #13749 + +Viktor Szakats (22 May 2024) + +- cmake: fix building with both md4 and md5 in unity mode + + Macro and static function names were colliding between + `lib/md4.c` and + `lib/md5.c`. + + Fix it by namespacing these symbols. + + Seen with a basic macOS build using these options: + `-DCMAKE_UNITY_BUILD=ON -DCURL_USE_SECTRANSP=ON` + + Closes #13737 + +Daniel Stenberg (22 May 2024) + +- docs/Makefile.am: make curl-config.1 install + + on "make install" like it should + + Follow-up to 60971d665b9b1df87082 + + Closes #13741 + +dependabot[bot] (22 May 2024) + +- GHA: bump actions/checkout from 4.1.4 to 4.1.6 + + Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.4 to 4 + .1.6. + - [Release notes](https://github.com/actions/checkout/releases) + - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) + - [Commits](https://github.com/actions/checkout/compare/0ad4b8fadaa221de15dce + c353f45205ec38ea70b...a5ac7e51b41094c92402da3b24376905380afc29) + + --- + updated-dependencies: + - dependency-name: actions/checkout + dependency-type: direct:production + update-type: version-update:semver-patch + ... + + Signed-off-by: dependabot[bot] + + Closes #13720 + +Stefan Eissing (22 May 2024) + +- pytest: add ftp upload tests + + - refs #13556 + - allow anon uploads on vsftpd test server + - add test_30_05 for plain upload of 1k, 100k, 1m + - add test_31_05 for SSL upload of 1k, 100k, 1m + - verify file size and contents + + Closes #13734 + +- test: add test1546, chunked not last transfer encoding + + with more than one transfer-encoding, 'chunked' must be the last added + to the writer stack (and therefore the first to decode). RFC 9112, ch. + 6.1. + + Closes #13736 + +- test: add test1484, for HEAD with content + + - test HEAD request with 'Transfer-Encoding:chunked' and + non-encoded response content + - verifies #13725 + + Closes #13735 + +Daniel Stenberg (22 May 2024) + +- RELEASE-NOTES: synced + + bump to 8.8.1 for now + +Viktor Szakats (22 May 2024) + +- (lib)curl.rc: set debug flag also for `CURLDEBUG` and `UNITTESTS` + + These macros also enable debug features in both libcurl and curl. + Enable `VS_FF_DEBUG` version resource flag when they are set. + + Closes #13730 + +Jay Satiro (22 May 2024) + +- winbuild: fix PE version info debug flag + + - Only set PE file flag VS_FF_DEBUG if curl.exe and libcurl.dll were + built with winbuild option DEBUG=yes which builds with debug info. + + VS_FF_DEBUG is a PE flag (Portable Executable file flag - dll, exe, etc) + that indicates the file contains or was built with debug info. + + Prior to this change when winbuild was used to build curl, curl.exe + and libcurl.dll always had VS_FF_DEBUG set, regardless of build option + DEBUG=yes/no, due to some bad logic. + + Closes https://github.com/curl/curl/pull/13739 + +Version 8.8.0 (22 May 2024) + +Daniel Stenberg (22 May 2024) + +- RELEASE-NOTES: synced + +- THANKS: add contributors from 8.8.0 + +Nathan Moinvaziri (21 May 2024) + +- url: remove duplicate call to Curl_conncache_remove_conn when pruning + + - remove unnecessary prunedead struct from prune_dead_connections + - rename extract_if_dead to prune_if_dead for clarity + + Closes #13710 + +Joseph Chen (21 May 2024) + +- curl_setup.h: add support for IAR compiler + + Closes #13728 + +Stephen Farrell (21 May 2024) + +- docs/ECH: typo/clarification + + Closes #13727 + +Viktor Szakats (21 May 2024) + +- hash: delete unused debug function + + It had no use in the curl codebase and was also protected by the macro + `AGGRESSIVE_TEST` (renamed in 2020), also with no local reference. + + Added in ca6e77083768858aa34207f8c5dce38b3c05336d (2002-11-11) + + Closes #13729 + +Stefan Eissing (21 May 2024) + +- content_encoding: reject transfer-encoding after chunked + + reject a response that applies a transfer-encoding after a 'chunked' + encoding. RFC 9112 ch. 6.1 required chunked to be the final encoding. + + Closes #13733 + +- http: HEAD response body tolerance + + - as reported in #13725, some servers wrongly send body bytes in + responses to a HEAD request. This used to be tolerated in curl + 8.4 and before and leads to failed transfers in newer versions. + - restore previous behaviour for HTTP/1.1 and HTTP/2: + * 1.1: do not add 'Transfer-Encoding' writers from HEAD + responses. RFC 9112 says they do not apply. + * 2: when the transfer expects 'no_body', to not report stream + resets as error when all response headers have been received. + + Reported-by: Jeroen Ooms + Fixes #13725 + Closes #13732 + +Viktor Szakats (20 May 2024) + +- tests: fix TFTP test 2305 on Windows + + Ref: #13692 + Closes #13724 + +Jay Satiro (20 May 2024) + +- openssl: revert keylog_callback support for LibreSSL + + - Revert to the legacy TLS 1.2 key logging code for LibreSSL. + + - Document SSLKEYLOGFILE for LibreSSL is TLS 1.2 max. + + Prior to this change if the user specified a filename in the + SSLKEYLOGFILE environment variable and was using LibreSSL 3.5.0+ then + an empty file would be created and no keys would be logged. + + This is effectively a revert of e43474b4 which changed openssl.c to use + SSL_CTX_set_keylog_callback for LibreSSL 3.5.0+. Unfortunately LibreSSL + added that function only as a stub that doesn't actually do anything. + + Reported-by: Gonçalo Carvalho + + Fixes https://github.com/curl/curl/issues/13672 + Closes https://github.com/curl/curl/pull/13682 + +renovate[bot] (19 May 2024) + +- GHA: pin dependencies + + Closes #13712 + +Viktor Szakats (19 May 2024) + +- appveyor: drop unnecessary `--clean-first` cmake option + + In CI all machines are fresh on startup, making the `clean` operation + unnecessary. This can save some time/energy for each job run. + + Closes #13707 + +- cmake: merge two `if(BUILD_TESTING)` branches + + Closes #13708 + +Tatsuhiro Tsujikawa (19 May 2024) + +- GHA: bump nghttp2 to v1.62.1 + + Use gcc-12 explicitly to compile C++20 source files. + + Closes #13702 + +Viktor Szakats (19 May 2024) + +- GHA: add NetBSD, OpenBSD, FreeBSD/arm64 and OmniOS jobs + + Add these jobs to GHA: + - NetBSD, cmake-unity, clang, OpenSSL, x86_64, with tests, w/o python, + no parallelism (was flaky sometimes) + - OpenBSD, cmake-unity, clang, LibreSSL, x86_64, with tests, + with python, -j8, TFTP results ignored due to #13623. + - FreeBSD, cmake-unity and autotools, clang, OpenSSL, arm64 + (Tests disabled for arm64, because they are slow. It's available for + x86_64 with python, -j12.) + Configuration matches our existing Cirrus CI one. + - OmniOS, autotools, gcc, OpenSSL, x86_64, with tests, -j12. + + All build with websockets and examples. + + Closes #13583 + +- GHA: disable TFTP test on native Windows + + Some TFTP tests seem to enter into a loop and maybe hang? + + E.g. 1007, 1009, 1238 + + Try fixing it by skipping all TFTP tests. + + Ref: https://github.com/curl/curl/actions/runs/9141987545/job/25137038249?pr= + 13698 + + Also drop mingw-w64 test exclusions copy-pasted from MSYS jobs. + + Possibly related: cffbcc3110c1eda2e333f9cfe2e269154618793a #5364 + + Close #13699 + +renovate[bot] (18 May 2024) + +- GHA: pin dependencies + + Closes #13691 + +Viktor Szakats (18 May 2024) + +- cmake: do not pass linker flags to the static library tool + + Do not add linker flags to the global CMake static library tool (aka + "static linker") (e.g. `ar`) flags list. They don't mix well. This was + only done after successfully detecting GSSAPI. + + Linker flags seen on Old Linux CI: + ``` + -- |GSS_LINKER_FLAGS|-Wl,--enable-new-dtags -Wl,-rpath -Wl,/usr/lib/x86_64-li + nux-gnu/heimdal| + -- |CMAKE_STATIC_LINKER_FLAGS| -Wl,--enable-new-dtags -Wl,-rpath -Wl,/usr/lib + /x86_64-linux-gnu/heimdal| + ``` + Ref: https://github.com/curl/curl/actions/runs/9138988036/job/25130791712#ste + p:6:85 + + Causing: + ``` + /usr/bin/ar qc libcurltool.a -Wl,--enable-new-dtags -Wl,-rpath -Wl,/usr/lib/ + x86_64-linux-gnu/heimdal + CMakeFiles/curltool.dir/slist_wc.c.o CMakeFiles/curltool.dir/tool_binmode.c + .o CMakeFiles/curltool.dir/tool_bname.c.o + [...] + CMakeFiles/curltool.dir/tool_writeout_json.c.o CMakeFiles/curltool.dir/tool + _xattr.c.o CMakeFiles/curltool.dir/var.c.o + CMakeFiles/curltool.dir/__/lib/base64.c.o CMakeFiles/curltool.dir/__/lib/dy + nbuf.c.o + /usr/bin/ar: invalid option -- 'W' + Usage: /usr/bin/ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--pl + ugin ] [member-name] [count] archive-file file... + /usr/bin/ar -M [now - c->timestamp; + | ^~~ + curl/lib/hostip.c: In function 'Curl_hostcache_prune': + curl/lib/hostip.c:241:10: note: 'now' was declared here + 241 | time_t now; + | ^~~ + In function 'hostcache_timestamp_remove', + inlined from 'fetch_addr' at curl/lib/hostip.c:310:8: + curl/lib/hostip.c:205:23: error: 'user.now' may be used uninitialized [-Werro + r=maybe-uninitialized] + 205 | time_t age = prune->now - c->timestamp; + | ~~~~~^~~~~ + curl/lib/hostip.c: In function 'fetch_addr': + curl/lib/hostip.c:304:33: note: 'user' declared here + 304 | struct hostcache_prune_data user; + | ^~~~ + In file included from curl/_bld/lib/CMakeFiles/libcurl_object.dir/Unity/unity + _0_c.c:40: + curl/lib/cf-socket.c: In function 'cf_socket_send': + curl/lib/cf-socket.c:1294:10: error: 'c' may be used uninitialized [-Werror=m + aybe-uninitialized] + 1294 | if(c >= ((100-ctx->wblock_percent)*256/100)) { + | ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + curl/lib/cf-socket.c:1292:19: note: 'c' was declared here + 1292 | unsigned char c; + | ^ + In file included from curl/_bld/lib/CMakeFiles/libcurl_object.dir/Unity/unity + _0_c.c:364: + In function 'tftp_state_timeout', + inlined from 'tftp_multi_statemach' at curl/lib/tftp.c:1230:27: + curl/lib/tftp.c:1208:5: error: 'current' may be used uninitialized [-Werror=m + aybe-uninitialized] + 1208 | if(current > state->rx_time + state->retry_time) { + | ^ + curl/lib/tftp.c: In function 'tftp_multi_statemach': + curl/lib/tftp.c:1192:10: note: 'current' was declared here + 1192 | time_t current; + | ^~~~~~~ + ``` + Ref: https://ci.appveyor.com/project/curlorg/curl/builds/49792835/job/91c8dj5 + qb36spfe0#L112 + Ref: https://github.com/curl/curl/actions/runs/9082968838/job/24960616145#ste + p:12:62 + + Ref: #13592 + Closes #13643 + +Andrew (16 May 2024) + +- wakeup_create: use FD_CLOEXEC/SOCK_CLOEXEC + + for `pipe()`/`socketpair()` + + Fixes #13618 + Closes #13625 + +Stefan Eissing (16 May 2024) + +- rustls: fix partial send handling + + When TLS bytes could not completely sent off, the amount of plain bytes + already added to rustls were forgotten. This lead to send those byte + duplicate, corrupting the request send to the server. + + Closes #13676 + +- pytest: add DELETE tests, check server version + + - add tests for DELETE working + - check apache version in keepalive test + - fix some comments + + Closes #13679 + +Juliusz Sosinowicz (16 May 2024) + +- vquic-tls: use correct cert name check API for wolfSSL + + wolfSSL_X509_check_host checks the peer name against the alt names and + the common name. + + Fixes #13487 + Closes #13680 + +Viktor Szakats (16 May 2024) + +- cmake: initialize `BUILD_TESTING` before first use + + Before this patch `BUILD_TESTING` was used once, then initialized, then + used again. This caused the `curlu` library not being built when relying + on an implicit `BUILD_TESTING=ON` setting, and ending up with a link + error when building the `testdeps` target. + + It did not cause issues when `BUILD_TESTING` was explicitly set. + + Move the initialization before the first use to fix it. + + Regression from aace27b0965c10394544d1dacc9c2cb2fe0de3d3 #12287 + Closes #13668 + +Daniel Stenberg (16 May 2024) + +- libtest: 2308 verifies CURLE_WRITE_ERROR after write callback error + + Verifies that the issue in #13669 actually is fixed. This return code is + what the CURLOPT_WRITEFUNCTION manpage documents should be returned. + + This code is mostly from the + Source-written-by: Trumeet on github + Closes #13671 + +Antoine Bollengier (16 May 2024) + +- socketpair: fix compilation when USE_UNIX_SOCKETS is not defined + + Closes #13666 + +Stefan Eissing (16 May 2024) + +- rustsls: fix error code on receive + + - use CURLE_RECV_ERROR instead of CURLE_READ_ERROR when receiving + data fails. + + Closes #13670 + +Max Dymond (16 May 2024) + +- ci: disable Renovate dashboard + + The Renovate dashboard insists on an open issue, + which is a problem. Disable the dashboard. Status + can still be seen at https://developer.mend.io/github/curl/curl. + + Fixes #13630 + Closes #13673 + +Daniel Stenberg (16 May 2024) + +- RELEASE-NOTES: synced + +renovate[bot] (16 May 2024) + +- GHA: update awslabs/aws-lc to v1.27.0 + + Closes #13667 + +Daniel Stenberg (15 May 2024) + +- curl_easy_pause.md: use correct defines in example + + Spotted-by: Harry Sintonen + Closes #13664 + +Viktor Szakats (15 May 2024) + +- appveyor: more tidy-ups + + - use `--disable` when calling `curl --version`. Just in case. + + - use single-quotes for a constant. + + Closes #13662 + +- reuse: migrate standalone license file to dep5 + + Follow-up to 73a36021207284ad2b4340ffde34a51b0ba4d47a + Closes #13660 + +- appveyor: guard against crash-build with VS2008 + + The combination of `-DDEBUGBUILD`, a shared `curl.exe`, and the VS2008 + compiler creates a `curl.exe` segfaulting on startup: + + ``` + + _bld/src/curl.exe --version + ./appveyor.sh: line 122: 793 Segmentation fault "${curl}" --version + Command exited with code 139 + ``` + Ref: https://ci.appveyor.com/project/curlorg/curl/builds/49817266/job/651iy6q + n1e238pqj#L191 + + Add job that triggers the issue and add the necessary logic to skip + running the affected `curl.exe`. + + Ref: #13592 + Closes #13654 + +renovate[bot] (15 May 2024) + +- GHA: pin dependencies + + Closes #13628 + +Orgad Shaneh (15 May 2024) + +- socket: remove redundant call to getsockname + + The result "add" is unused. + + Closes #13655 + +renovate[bot] (15 May 2024) + +- CI: renovate updates + + - GHA: update actions/checkout action to v4 + - GHA: update wolfSSL/wolfssh to v1.4.17 + - GHA: update wolfSSL/wolfssl to v5.7.0 + - Update the regex config in renovate.json + + Closes #13632 + Closes #13641 + Closes #13658 + Closes #13659 + +Max Dymond (15 May 2024) + +- ci: fix renovate config for WolfSSL/WolfSSH tagging scheme + + WolfSSL/WolfSSH use a different versioning scheme; + stable builds end with `-stable`. Renovate requires + some extra configuration to extract the version + from these types of tags. + + Closes #13644 + +- ci: set semantic type as CI and include digests as CI operations + + Replace "chore" with "ci" for renovate's semantic + type, and include digests with "pin" and + "pinDigest" as ci operations. + + Closes #13644 + +Daniel Stenberg (15 May 2024) + +- DEPRECATE.md: TLS libraries without 1.3 support + + curl drops support for TLS libraries without TLS 1.3 capability after + May 2025. + + It requires that a curl build using the library should be able to + negotiate and use TLS 1.3, or else it is not good enough. We support a + vast amount of other TLS libraries that are likely to satisfy users + better. + + Closes #13544 + +- Revert "ci: update nghttp2/nghttp2 to v1.62.0" + + This reverts commit 14f2c767555b7598d7783ccd9093670b84d28488. + + We need to also upgrade the C++ compiler for that bump to work. + + Closes #13656 + +renovate[bot] (15 May 2024) + +- Dockerfile: update debian digest to 911821c + + Closes #13629 + +- ci: update gnutls/gnutls to v3.8.5 + + Closes #13640 + +- ci: update awslabs/aws-lc to v1.26.0 + + Closes #13647 + +- ci: update cloudflare/quiche to v0.21.0 + + Closes #13648 + +- ci: update libressl-portable/portable to v3.9.2 + + Closes #13649 + +- ci: update nghttp2/nghttp2 to v1.62.0 + + Closes #13650 + +- ci: update ngtcp2/nghttp3 to v1.3.0 + + Closes #13651 + +- ci: update ngtcp2/ngtcp2 to v1.5.0 + + Closes #13652 + +Max Dymond (14 May 2024) + +- ci: handle git submodules for mbedTLS + +- ci: reconfigure renovate + + - set prefix for github actions updates to be gha: + - set prefix for other renovate actions to be ci: + - disable debian updates in linux-old.yml + +Viktor Szakats (14 May 2024) + +- tidy-up: whitespace [ci skip] + +- warnless: delete orphan declarations + + Follow-up to 358f7e757781857c4b498a68634726609fa3884a #11932 + Closes #13639 + +Daniel Stenberg (14 May 2024) + +- BUG-BOUNTY.md: clarify the third party situation + + We do not pay bounties for problems in other libraries. + + Closes #13560 + +Stefan Eissing (14 May 2024) + +- http tests: in CI skip test_02_23* for quiche + + For unknown reasons, these tests fail in CI often, but run fine locally. + Skip them in CI to avoid unrelated PRs to have failures. + + Closes #13638 + +Daniel Gustafsson (14 May 2024) + +- hsts: explicitly skip blank lines + + Keep blank lines or lines containing only whitespace to make it all + the way to the more expensive sscanf call in hsts_add. + + Closes: #13603 + Reviewed-by: Daniel Stenberg + +- autotools: Only probe for SGI MIPS compilers on IRIX + + MIPSPro and the predecessor compiler which was part of the IDO (IRIS + Development Option) were only ever shipped on the SGI IRIX operating + system (with MIPSPro on 6.0+ which was released in 1994). Limit the + autoconf check to IRIX when probing for these compilers to save some + cycles on other platforms. + + Closes: #13611 + Reviewed-by: Daniel Stenberg + +Viktor Szakats (14 May 2024) + +- tests: fix test 1167 to skip digit-only symbols + + This avoids mistaking symbols with their numeric value when using + certain C preprocessors which output these numeric values at the + beginning of the line as part of an expression. + + Seen on OpenBSD 7.5 + clang. + + Example `test1167.pl -v` output, before this patch: + ``` + Source: cpp /home/runner/work/curl/curl/tests/../include/curl/curl.h + Symbol: 20000 + Line #3835: 20000 + 142, + [...] + Bad symbols in public header files: + 20000 + [...] + ``` + Ref: https://github.com/curl/curl/actions/runs/9069136530/job/24918015357#ste + p:3:7513 + + Ref: #13583 + Closes #13634 + +Daniel Stenberg (14 May 2024) + +- lib: call Curl_strntolower instead of doing crafted loops + + Closes #13627 + +- setopt: acknowledge errors proper for CURLOPT_COOKIEJAR + + Error out on error, do not continue. + + Closes #13624 + +- vtls: remove duplicate assign + + Curl_ssl_peer_cleanup() already clears the ->sni field, no point in + assigning it again. + + Spotted by CodeSonar + + Closes #13626 + +Max Dymond (13 May 2024) + +- Group all non-major updates together to reduce PR spam + +- Add the remainder of the workflows + +- Add some basic versioning for some workflows to check whether this is detecte + d properly + +renovate[bot] (13 May 2024) + +- Add renovate.json + +Daniel Stenberg (13 May 2024) + +- vauth: make two functions void that always just returned OK + + Removes the need to check return values when they can never fail. + + Pointed out by CodeSonar + + Closes #13621 + +- setopt: remove check for 'option' that is always true + + - make sure that passing in option set to NULL clears the fields + correctly + + - remove the weird second take if Curl_parse_login_details() returns + error + + Follow-up to 7333faf00bf25db7cd1e0012d6b140 + + Spotted by CodeSonar + + Closes #13619 + +Viktor Szakats (13 May 2024) + +- tests: tidy up types in server code + + Cherry-picked from #13489 + Closes #13610 + +Daniel Stenberg (13 May 2024) + +- setopt: make the setstropt_userpwd args compulsory + + They were always used so no point in allowing them to be optional. + + follow-up to 0e37b42dc956bd8a + + Closes #13608 + Reviewed-by: Daniel Gustafsson + +- RELEASE-NOTES: synced + +Daniel Gustafsson (13 May 2024) + +- websocket: Avoid memory leak in error path + + In the errorpath for randstr being too long to copy into the buffer + we leak the randstr when returning CURLE_FAILED_INIT. Fix by using + an explicit free on randstr in the errorpath. + + Closes: #13602 + Reviewed-by: Daniel Stenberg + +- hsts: Remove single-use single-line function + + The hsts_entry() function contains of a single line and is only + used in a single place in the code, so move the allocation into + hsts_create instead to improve code readability. C code usually + don't use the factory abstraction for object creation, and this + small example wasn't following our usual code style. + + Closes: #13604 + Reviewed-by: Daniel Stenberg + +Viktor Szakats (12 May 2024) + +- lib: bump hash sizes to `size_t` + + Follow-up to cc907e80a2498c0599253271a6f657f614b52a4e #13502 + Cherry-picked from #13489 + Closes #13601 + +- tests: make the unit test result type `CURLcode` + + Before this patch, the result code was a mixture of `int` and + `CURLcode`. + + Also adjust casts and fix a couple of minor issues found along the way. + + Cherry-picked from #13489 + Closes #13600 + +- appveyor: tidy-ups + + - delete a duplicate line. + - simplify a `make` call. + - merge two `if` branches. + - reorder autotools options for clarity. + - add `--enable-warnings` where missing (it's also the default.) + - add empty lines to YAML for readability. + - use lowercase install prefix/directory. + + Closes #13598 + +Daniel Stenberg (12 May 2024) + +- docs/cmdline-opts: mention STARTTLS for --ssl and --ssl-reqd + + ... since users might look for those terms in the manpage. + + Closes #13590 + +- setopt: warn on Curl_set*opt() uses not using the return value + + And switch the invokes that would "set" NULL to instead just plainly + free the pointer, as those were otherwise the invokes that would ignore + the return code. And possibly confuse static code analyzers. + + Closes #13591 + +Orgad Shaneh (12 May 2024) + +- autotools: delete unused functions + + Closes #13605 + +Viktor Szakats (11 May 2024) + +- examples: fix/silence `-Wsign-conversion` + + - extend `FD_SET()` hack to all platforms (was only Cygwin). + Warnings may also happen in other envs, e.g. OmniOS. + Ref: https://github.com/libssh2/libssh2/actions/runs/8854199687/job/2431676 + 2831#step:3:2021 + + - tidy-up `CURLcode` vs `int` use. + + - cast an unsigned to `long` before passing to `curl_easy_setopt()`. + + Cherry-picked from #13489 + Follow-up to 3829759bd042c03225ae862062560f568ba1a231 #12489 + Closes #13501 + +Orgad Shaneh (11 May 2024) + +- cmake: fix `HAVE_IOCTLSOCKET_FIONBIO` test with gcc 14 + + The function signature has had u_long flags since ever. This is how it + is defined in the documentation, and implemented in MinGW. + + The code that uses ioctlsocket in nonblock.c also has unsigned long. + + Error: + CurlTests.c:275:41: error: passing argument 3 of 'ioctlsocket' from incompati + ble pointer type [-Wincompatible-pointer-types] + 275 | if(0 != ioctlsocket(0, FIONBIO, &flags)) + | ^~~~~~ + | | + | int * + In file included from CurlTests.c:266: + /opt/mxe/usr/i686-w64-mingw32.static/include/winsock2.h:1007:76: note: expect + ed 'u_long *' {aka 'long unsigned int *'} but argument is of type 'int *' + 1007 | WINSOCK_API_LINKAGE int WSAAPI ioctlsocket(SOCKET s,__LONG32 cmd,u_ + long *argp); + | ~~ + ~~~~~~^~~~ + + Closes #13578 + +Jay Satiro (10 May 2024) + +- ftp: fix build for CURL_DISABLE_VERBOSE_STRINGS + + This is a follow-up to b7c7dffe which changed the FTP state change + verbose debug text (aka infof) to tracing debug text (aka trc). + + Prior to this change if libcurl was without DEBUGBUILD and built with + CURL_DISABLE_VERBOSE_STRINGS (ie --disable-verbose) the build would + error. + + Caught by Circle CI job openssl-no-verbose. + +- lib: clear the easy handle's saved errno before transfer + + - Clear data->state.os_errno before transfer. + + - Explain the change in behavior in the CURLINFO_OS_ERRNO doc. + + - Add to the CURLINFO_OS_ERRNO doc the list of libcurl network-related + errors that may cause the errno to be saved. + + data->state.os_errno is saved before libcurl returns a network-related + failure such as connection failure. It is accessible to the user via + CURLINFO_OS_ERRNO so they can get more information about the failure. + + Prior to this change it wasn't cleared before transfer, so if a user + retrieved the saved errno it could be from a previous transfer. That is + because an errno is not always saved for network-related errors. + + Closes https://github.com/curl/curl/pull/13574 + +Stefan Eissing (10 May 2024) + +- ftp: add tracing support + + - add `Curl_trc_feat_ftp` for tracing via trace config + - add macro CURL_TRC_FTP(data, fmt, ...) + - replace DEBUGF(infof()) statements in ftp.c by CURL_TRC_FTP() + - always trace FTP connection state + + Closes #13580 + +Daniel Stenberg (10 May 2024) + +- http: remove redundant check + + Spotted by CodeSonar + + Closes #13582 + +Viktor Szakats (10 May 2024) + +- ldap: fix unused variables (seen on OmniOS) + + ``` + ../../lib/ldap.c: In function 'ldap_do': + ../../lib/ldap.c:380:11: error: unused variable 'ldap_ca' [-Werror=unused-v + ariable] + 380 | char *ldap_ca = conn->ssl_config.CAfile; + | ^~~~~~~ + ../../lib/ldap.c:379:9: error: unused variable 'ldap_option' [-Werror=unuse + d-variable] + 379 | int ldap_option; + | ^~~~~~~~~~~ + ``` + Ref: https://github.com/curl/curl/actions/runs/9033564377/job/24824192730#ste + p:3:6059 + + Ref: #13583 + Closes #13588 + +Daniel Stenberg (10 May 2024) + +- url: make parse_login_details use memdup0 + + Also make the user and password arguments mandatory, since all code + paths in libcurl used them anyway. + + Adapted unit test case 1620 to the new rules. + + Closes #13584 + +Orgad Shaneh (10 May 2024) + +- digest: replace strcpy for empty string with simple assignment + + Closes #13586 + +Viktor Szakats (10 May 2024) + +- autotools: fix `HAVE_IOCTLSOCKET_FIONBIO` test for gcc 14 + + ``` + conftest.c:152:41: error: passing argument 3 of 'ioctlsocket' from incompatib + le pointer type [-Wincompatible-pointer-types] + 152 | if(0 != ioctlsocket(0, FIONBIO, &flags)) + | ^~~~~~ + | | + | int * + ``` + + Reported-by: LigH + Fixes #13579 + Closes #13587 + +- CI: ignore test 286 on Appveyor gcc 7 build + + Disabled earlier for gcc 9 builds. gcc 7 uses the same runner and + prone to similar intermittent failures. + + Follow-up to f1e05a6e6e7225fa09952abb2c935ae1abe44f45 #12106 #12040 + Closes #13575 + +Daniel Stenberg (10 May 2024) + +- cf-socket: don't try getting local IP without socket + + In cf_tcp_connect(), it might fail and not get a socket assigned to + ctx->sock but set_local_ip() is still called which would make + getsockname() get invoked with a negative file desriptor and fail. + + By adding this check, set_local_ip() will now instead blank out the + fields correctly. + + Spotted by CodeSonar + + Closes #13577 + +- tool_getparam: remove two redundant conditions + + When getstr() does not return error, it returns a valid pointer. + + Spotted by CodeSonar + + Closes #13576 + +Stefan Eissing (10 May 2024) + +- quiche: trust its timeout handling + + - set the idle timeout transport parameter + in milliseconds as documented by quiche + - do not calculate the idle timeout, rely on + quiche handling it + + Closes #13581 + +Daniel Stenberg (10 May 2024) + +- dmaketgz: accept a SOURCE_DATE_EPOCH as an second argument + + to make it easier to reproduce a tarball + + Closes #13573 + +- RELEASE-NOTES: synced + +Stefan Eissing (10 May 2024) + +- h3/ngtcp2: improve error handling + + - identify ngtcp2 and nghttp3 error codes that are fatal + - close quic connection on fatal errors + - refuse further filter operations once connection is closed + - confusion about the nghttp3 API. We should close the QUIC stream on + cancel and not use the nghttp3 calls intended to be invoked when the + QUIC stream was closed by the peer. + + Closes #13562 + +Jay Satiro (10 May 2024) + +- docs: fix some CURLINFO examples + + - improve getinfo result check for example sections: + CURLINFO_ACTIVESOCKET, CURLINFO_LASTSOCKET, CURLINFO_SSL_VERIFYRESULT, + CURLINFO_PROXY_SSL_VERIFYRESULT + + - fix getinfo result check for example sections: + CURLINFO_NUM_CONNECTS, CURLINFO_OS_ERRNO + + - fix verify result check for example sections: + CURLINFO_PROXY_SSL_VERIFYRESULT + + Bug: https://github.com/curl/curl/discussions/13557#discussion-6625507 + Reported-by: farazrbx@users.noreply.github.com + + Closes https://github.com/curl/curl/pull/13559 + +Daniel Stenberg (9 May 2024) + +- KNOWN_BUGS: gssapi library name + version is missing in curl_version_info() + + Closes #13492 + Closes #13570 + +- krb5: use dynbuf + + Closes #13568 + +- managen: fix the option sort order + + ... it used to strip off the .d file extension to sort correctly but + ever since the extension changed to .md the operation failed and the + sort got wrong. + + Follow-up to 2494b8dd5175cee7f2e + + Closes #13567 + +Stefan Eissing (8 May 2024) + +- GHA: repair the linux-old job + + package libc6_2.28-10+deb10u2_amd64.deb changed to + libc6_2.28-10+deb10u3_amd64.deb + + Closes #13564 + +Viktor Szakats (8 May 2024) + +- appveyor: make gcc 6 mingw64 job build-only + + This job has proven to be the flakiest of all, and it's also the oldest + Windows runner we had tests running on: 'Visual Studio 2015', that is + running on Windows Server 2012 R2: + https://www.appveyor.com/docs/windows-images-software/ + + Turn off tests on this job to help stabilizing CI runs. + + This was also one of the slowest running job amongst the AppVeyor CI ones. + + Flakiness data: + https://testclutch.curl.se/static/reports/summary.html + Entries: + Appveyor / CMake, mingw-w64, gcc 6, Debug, x86, Schannel, Static, no-unity + (curl) [current] + Appveyor / CMake, mingw-w64, gcc 6, Debug, x86, Schannel, Static (curl) [fo + rmer] + + Closes #13566 + +Stefan Eissing (8 May 2024) + +- unit2604: use alloc instead of overlong string const + + Closes #13563 + +Daniel Gustafsson (8 May 2024) + +- bufq: remove duplicate word in comment + + Inspired by 13552. + + Closes: #13554 + Reviewed-by: Daniel Stenberg + +Viktor Szakats (8 May 2024) + +- lib/cf-h1-proxy: silence compiler warnings (gcc 14) + + They came up ealier with gcc 12 (Windows), but apparently gcc 14 is + still reporting them, also under Linux. + + ``` + /home/runner/work/curl-for-win/curl-for-win/curl/lib/cf-h1-proxy.c: In functi + on 'cf_h1_proxy_close': + /home/runner/work/curl-for-win/curl-for-win/curl/lib/cf-h1-proxy.c:1060:17: w + arning: null pointer dereference [-Wnull-dereference] + 1060 | cf->connected = FALSE; + /home/runner/work/curl-for-win/curl-for-win/curl/lib/cf-h1-proxy.c:1061:8: wa + rning: null pointer dereference [-Wnull-dereference] + 1061 | if(cf->ctx) { + | ~~^~~~~ + In function 'tunnel_free', + inlined from 'cf_h1_proxy_destroy' at /home/runner/work/curl-for-win/curl + -for-win/curl/lib/cf-h1-proxy.c:1053:3: + /home/runner/work/curl-for-win/curl-for-win/curl/lib/cf-h1-proxy.c:198:27: wa + rning: null pointer dereference [-Wnull-dereference] + 198 | struct h1_tunnel_state *ts = cf->ctx; + | ^~ + ``` + Ref: https://github.com/curl/curl-for-win/actions/runs/8985369476/job/2467921 + 9528#step:3:6320 + + Fixes #13237 + Closes #13555 + +Michał Antoniak (8 May 2024) + +- mbedtls: support TLS 1.3 + + Closes #13539 + +Daniel Stenberg (8 May 2024) + +- version: use msnprintf instead of strncpy + + - to ensure a terminating null byte + - to avoid zero-padding the target + + debug code only + + Closes #13549 + +- curl_path: make Curl_get_pathname use dynbuf + + ... instead of malloc and memcpy + + - unit test 2604 verifies Curl_get_pathname() + + Closes #13550 + +- lib: make protocol handlers store scheme name lowercase + + - saves a lowercase operation when the "[scheme]_proxy" name is + generated + - appears less "shouting" + - update test 970, 972, 1438 and 1536 + + Closes #13553 + +- lib: remove two instances of "only only" messages + + Fixes #13551 + Reported-by: Lucas Nussbaum + Closes #13552 + +Pavel Pavlov (7 May 2024) + +- asyn-thread: fix curl_global_cleanup crash in Windows + + - Make sure that asynchronous resolves handled by Winsock are stopped + before WSACleanup is called. + + This is implemented by ensuring that when Curl_resolver_kill is called + (eg via multi_done) it will cancel the Winsock asynchronous resolve and + wait for the cancellation to complete. Winsock runs the asynchronous + completion routine immediately when a resolve is canceled. + + Prior to this change it was possible that during curl_global_cleanup + "a DNS resolver thread created by GetAddrInfoExW did not terminate yet, + however curl is already shutting down, deinitializing Winsock with + WSACleanup() leading to an access violation." + + Background: + + If libcurl is built with the asynchronous threaded resolver option for + Windows then it resolves in one of two ways. For Windows 8.1 and later, + libcurl resolves by using the Winsock asynchronous resolver which does + its own thread management. For older versions of Windows, libcurl + resolves by creating a separate thread that calls getaddrinfo. This + change only affects the former and it's already handled for the latter. + + Reported-by: Ch40zz@users.noreply.github.com + + Fixes https://github.com/curl/curl/issues/13509 + Closes https://github.com/curl/curl/pull/13518 + +Jay Satiro (7 May 2024) + +- asyn-thread: fix Curl_thread_create result check + + - Compare to curl_thread_t_null instead of 0 for error. + + Currently for both supported thread libraries (pthreads and Windows) + curl_thread_t_null is defined as 0. However, the pattern throughout the + code is to check against curl_thread_t_null and not 0 since for + posterity some thread library may not use 0 for error. + + Closes https://github.com/curl/curl/pull/13542 + +- curl_multibyte: remove access() function wrapper for Windows + + - Remove curlx_win32_access() which was a wrapper to use access() in + Windows. + + This is a follow-up to 602fc213, one of two commits which removed + access() calls from the codebase and banned use of the function. + + Closes https://github.com/curl/curl/pull/13529 + +Daniel Gustafsson (6 May 2024) + +- tls: Remove EXAMPLEs from deprecated options + + CURLOPT_EGDSOCKET and CURLOPT_RANDOM_FILE are both completely dead + so remove their example sections since the code there is useless. + There is still a way to inject a random file for OpenSSL older than + 1.1.0 but it's not what the example showed (and it's not even done + with this option) so we refrain from documenting it here. + + Closes: #13540 + Reviewed-by: Daniel Stenberg + +- tests: Only require EXAMPLE for non-deprecated options + + Manpages which document deprecated CURLOPT_ or CURLINFO_ are not + required to have an EXAMPLE section since they might effectively + be dead no-ops which we don't want to trick users into believing + they can use by copying example code. + + Closes: #13540 + Reviewed-by: Daniel Stenberg + +Daniel Stenberg (6 May 2024) + +- EXPERIMENTAL: add graduation requirements for each feature + + Starting now, experimental features should have a set of documentated + requirements of what is needed for the feature to graduate. + + This adds requirements to all existing experiments. + + Closes #13541 + +Ivan (6 May 2024) + +- misc: fix typos, quoting and spelling + + Fix wording of comments, and misquotings where `' is markdown parsed + where it shouldn't be, and remove a misspelled preprocessor comment + which really isn't needed (and removing it makes it match surrounding + code better). + + Closes: #13538 + Reviewed-by: Daniel Gustafsson + +Daniel Gustafsson (6 May 2024) + +- tests: Mark tftpd timer function as noreturn + + This avoids the below compiler warning: + + tftpd.c:280:1: warning: function 'timer' could be declared with + attribute 'noreturn' [-Wmissing-noreturn] + + Closes: #13534 + Reviewed-by: Daniel Stenberg + +- doh: Remove unused function prototype + + Closes: #13536 + Reviewed-by: Daniel Stenberg + +Daniel Stenberg (6 May 2024) + +- doh: cleanups in ECH related functions + + - make local_decode_rdata_name use dynbuf instead of calloc + memcpy + - avoid extra memdup in local_decode_rdata_alpn + - no need to if() before free() + - use memdup instead of calloc + memcpy in Curl_doh_decode_httpsrr + + Reviewed-by: Stephen Farrell + Closes #13526 + +Viktor Szakats (5 May 2024) + +- libssh2: delete redundant feature guard + + Delete `HAVE_LIBSSH2_VERSION` (equivalent to + `LIBSSH2_VERSION_NUM` > 0x010100) guard surrounding + a `LIBSSH2_VERSION_NUM` > 0x010B00 one. + + Reviewed-by: Daniel Gustafsson + Closes #13537 + +Jan Venekamp (5 May 2024) + +- tool_cfgable: free {proxy_}cipher13_list on exit + + Author: Jan Venekamp + Reviewed-by: Daniel Gustafsson + Closes: #13531 + +RainRat (4 May 2024) + +- doh: Fix typo in comment + + Closes: #13504 + Author: RainRat on Github + Reviewed-by: Daniel Stenberg + Reviewed-by: Daniel Gustafsson + +Christian Schmitz (4 May 2024) + +- dynbuf: Fix returncode on memory error + + Curl_dyn_vaddf should return a proper error code in case allocating + memory failed. + + Closes: #13533 + Author: Christian Schmitz + Reviewed-by: Daniel Gustafsson + +Daniel Stenberg (3 May 2024) + +- RELEASE-NOTES: synced + +Jan Venekamp (2 May 2024) + +- bearssl: use common code for cipher suite lookup + + Take advantage of the Curl_cipher_suite_walk_str() and + Curl_cipher_suite_get_str() functions introduced in commit fba9afeb. + + This also fixes CURLOPT_SSL_CIPHER_LIST not working at all for bearssl + due to commit ff74cef5. + + Closes #13464 + +Daniel Stenberg (2 May 2024) + +- curl.h: change CURL_SSLVERSION_* from enum to defines + + C++20 and later compilers emit a deprecation warning if values from two + different enums are combined with a bitwise operation the way the + CURL_SSLVERSION_* values were previously created. + + Reported-by: Michael Kaufmann + Fixes #13510 + Closes #13511 + +- configure: error on missing perl if docs or manual is enabled + + Fixes #13508 + Reported-by: Harmen Stoppels + Closes #13514 + +- tool_cb_rea: limit rate unpause for -T . uploads + + To avoid getting stuck in a busy-loop when nothing is read from stdin, + this function now checks the call rate and might enforce a short sleep + when called repeatedly without uploading anything. It is a crude + work-around to avoid a 100% busy CPU. + + Reported-by: magisterquis on hackerone + Fixes #13174 + Closes #13506 + +Viktor Szakats (1 May 2024) + +- appveyor: enable websockets for VS2017 jobs + + Follow-up to eb4fe6c6340c3d5b0c347c6e30be004d4f9117d7 #13232 + Closes #13513 + +Daniel Stenberg (30 Apr 2024) + +- if2ip: make the buf_size arg a size_t + + sizes should be size_t + + Ref: #13489 + Closes #13505 + +- cf-https-connect: use timeouts as unsigned ints + + To match the type used in 'set.happy_eyeballs_timeout'. + + Ref: #13489 + Closes #13503 + +- hash: change 'slots' to size_t from int + + - an unsigned type makes more sense + - size_t seems suitable + - on 64 bit args, the struct alignment makes the new Curl_hash remain + the same size + + Closes #13502 + +Viktor Szakats (30 Apr 2024) + +- libssh2: replace `access()` with `stat()` + + Prefer `stat()` to verify the presence of key files. + + This drops the last uses of `access()` in the codebase, which was + reported to cause issues in some cases. + + Also add `access()` to the list of banned functions in checksrc. + + Ref: https://github.com/curl/curl/pull/13412#issuecomment-2065505415 + Ref: https://github.com/curl/curl/pull/13482#issuecomment-2078980522 + Ref: #13497 + Co-authored-by: Jay Satiro + Closes #13498 + +Daniel Stenberg (30 Apr 2024) + +- multi: remove useless assignment + + Spotted by CodeSonar + + Closes #13500 + +- RELEASE-NOTES: synced + +fuzzard (29 Apr 2024) + +- cmake: FindNGHTTP2 add static lib name to find_library call + + Add the static library name, nghttp2_static as a name to search. + + This provides cmake parity with the winbuild Makefile.vc allowing + the cmake build to find and allow the link to static nghttp2 library. + +Viktor Szakats (29 Apr 2024) + +- DISTROS: add patch and issues link for curl-for-win + + curl-for-win sometimes includes curl patches that were already merged in + master, but not yet part of a stable release. + + Also include the Issues link. Build-specific issues are handled there. + + Ref: #13493 + Closes #13499 + +Daniel Stenberg (29 Apr 2024) + +- mime: avoid using access() + + If stat() fails, there is no point in calling access() + + Also: return error immediately if the stat() fails. + + Ref: #13482 + Closes #13497 + +Stefan Eissing (29 Apr 2024) + +- tests: add SNI and peer name checks + + - connect to DNS names with trailing dot + - connect to DNS names with double trailing dot + - rustls, always give `peer->hostname` and let it + figure out SNI itself + - add SNI tests for ip address and localhost + - document in code and TODO that QUIC with ngtcp2+wolfssl + does not do proper peer verification of the certificate + - mbedtls, skip tests with ip address verification as not + supported by the library + + Closes #13486 + +Daniel Stenberg (29 Apr 2024) + +- curl_getdate.md: document two-digit year handling + + Mentioned-by: Paul Gilmartin + Ref: https://curl.se/mail/archive-2024-04/0014.html + Closes #13494 + +Viktor Szakats (29 Apr 2024) + +- cmake: add `BUILD_EXAMPLES` option to build examples + + You can enable it with `-DBUILD_EXAMPLES=ON`. + + To match autotools' `make examples` feature. + Windows (static) builds not tested. + + Also enable examples in a pair of CI jobs. + + Apply related updates to the macOS CI workflow: + - drop unused `CXX` envs. + - drop no longer needed `-Wno-error=undef -Wno-error=conversion` flags. + - pass `-Wno-deprecated-declarations` to GCC too (for `BUILD_EXAMPLES`). + - document why `-Wno-deprecated-declarations` is necessary. + + Closes #13491 + +Stefan Eissing (26 Apr 2024) + +- http3: quiche+ngtcp2 improvements + + - quiche: error transfers that try to receive on a closed + or draining connection + - ngtcp2: use callback for extending max bidi streams. This + allows more precise calculation of MAX_CONCURRENT as we + only can start a new stream when the server acknowledges + the close - not when we locally have closed it. + - remove a fprintf() from h2-download client to avoid excess + log files on tests timing out. + + Closes #13475 + +- vtls: TLS session storage overhaul + + - add session with destructor callback + - remove vtls `session_free` method + - let `Curl_ssl_addsessionid()` take ownership + of session object, freeing it also on failures + - change tls backend use + - test_17, add tests for SSL session resumption + + Closes #13386 + +- multi: multi_wait improvements + + - only call `multi_getsock()` once for all transfers + - realloc pollset array on demand + - fold repeated sockets + + Closes #13150 + +Philip Heiduck (25 Apr 2024) + +- ci: remove microsoft-prod.list + + This is added by default, and it is often broken, but we don't need + anything from it. + + Closes #13473 + +Evgeny Grin (Karlson2k) (25 Apr 2024) + +- curl_setup.h: detect 'inline' support + + Closes #13355 + +Daniel Stenberg (25 Apr 2024) + +- multi: avoid memory-leak risk + + 'newurl' is allocated in some conditions and used in a few scenarios, + but there were theoretical combinations in which it would not get freed. + Move the free to happen unconditionally. Never triggered by tests, but + spotted by Coverity. + + Closes #13471 + +Johann Sebastian Schicho (25 Apr 2024) + +- sendf: Curl_cwriter_write: remove comment disallowing zero length writes + + They are needed to pass CLIENTWRITE_EOS. + + Closes #13477 + +Stefan Eissing (25 Apr 2024) + +- CI: macos fixes for new ARM GHA images + + - based on #13478 with additions from #13476 + - make homebrew install path flexible + - fix OpenSSL pkgconfig files libdir + - add path to --with-libssh2 target + - disable gcc securetransport due to linker + errors (missing symbols), probably because + the os version is no longer low enough + + Assisted-by: Viktor Szakats + + Closes #13479 + +- content_encoding: ignore duplicate chunked encoding + + - ignore duplicate "chunked" transfer-encodings from + a server to accomodate for broken implementations + - add test1482 and test1483 + + Reported-by: Mel Zuser + Fixes #13451 + Closes #13461 + +Daniel Stenberg (25 Apr 2024) + +- tool: move tool_ftruncate64 to tool_util.c + + ... and the prototype to tool_setup.h, to make them both available more + widely and accurately. + + Follow-up to 00bef95946d3511 + + Fixes #13458 + Closes #13459 + +Viktor Szakats (24 Apr 2024) + +- lib: silence `-Wsign-conversion` in base64, strcase, mprintf + + Closes #13467 + +- CI: retain failure code after `./configure` with Circle CI + + Suggested-by: Dan Fandrich + Follow-up to 43299e93c06b96fea8a8dc9b1c2e49c82bc21801 #13462 + Follow-up to d7332e3e46c3ef401b34e6a1a129eb4dd846c452 #12635 + Closes #13468 + +Daniel Stenberg (24 Apr 2024) + +- RELEASE-NOTES: synced + +Jan Venekamp (24 Apr 2024) + +- mbedTLS: implement CURLOPT_SSL_CIPHER_LIST option + + Use a lookup list to set the cipher suites, allowing the + ciphers to be set by either openssl or IANA names. + + To keep the binary size of the lookup list down we compress + each entry in the cipher list down to 2 + 6 bytes using the + C preprocessor. + + Closes #13442 + +Viktor Szakats (24 Apr 2024) + +- CI: show more failed `config.log` on Circle CI + + Show last 1000 lines of `config.log` if `./configure` fails. This was + already done for one job, this patch extends it to all. + + Ref: #13438 + Closes #13462 + +Daniel Stenberg (24 Apr 2024) + +- telnet: check return code from fileno() + + and return error if necessary + + Spotted by CodeSonar + + Closes #13457 + +Viktor Szakats (24 Apr 2024) + +- tls: fix SecureTransport + BearSSL cmake unity builds + + Avoid clashing static function names by namespacing them. + + Pointed-out-by: Jan Venekamp + Ref: https://github.com/curl/curl/pull/13442#discussion_r1576350700 + Closes #13450 + +Jay Satiro (24 Apr 2024) + +- dllmain: Call OpenSSL thread cleanup for Windows and Cygwin + + - Call OPENSSL_thread_stop on thread termination (DLL_THREAD_DETACH) + to prevent a memory leak in case OpenSSL is linked statically. + + - Warn in libcurl-thread.3 that if OpenSSL is linked statically then it + may require thread cleanup. + + OpenSSL may need per-thread cleanup to stop a memory leak. For Windows + and Cygwin if libcurl was built as a DLL then we can do that for the + user by calling OPENSSL_thread_stop on thread termination. However, if + libcurl was built statically then we do not have notification of thread + termination and cannot do that for the user. + + Also, there are several other unusual cases where it may be necessary + for the user to call OPENSSL_thread_stop, so in the libcurl-thread + warning I added a link to the OpenSSL documentation. + + Co-authored-by: Viktor Szakats + + Reported-by: southernedge@users.noreply.github.com + Reported-by: zmcx16@users.noreply.github.com + + Ref: https://www.openssl.org/docs/man3.0/man3/OPENSSL_thread_stop.html#NOTES + + Fixes https://github.com/curl/curl/issues/12327 + Closes https://github.com/curl/curl/pull/12408 + +Jan Venekamp (24 Apr 2024) + +- rustls: remove incorrect SSLSUPP_TLS13_CIPHERSUITES flag + + The rustls backend advertises SSLSUPP_TLS13_CIPHERSUITES, but + the code does not actually seem to support it (yet?). Removed + the flag and corrected documentation. + + Closes #13452 + +Stefan Eissing (24 Apr 2024) + +- quiche: expire all active transfers on connection close + + - when a connection close is detected, all ongoing transfers + need to expire bc no more POLL events are likely to happen + for them. + + Fixes #13439 + Reported-by: Jay Satiro + Closes #13447 + +Dan Fandrich (23 Apr 2024) + +- tests: fix feature case in test1481 + + This test was being skipped everywhere because the feature never + matched. + + Closes #13445 + +Gusted (23 Apr 2024) + +- tool_operate: don't truncate the etag save file by default + + This fixes a regression of 75d79a4486b279100209ddf8c7fdb12955fb66e9. The + code in tool-operate truncated the etag save file, under the assumption + that the file would be written with a new etag value. However since + 75d79a4486b279100209ddf8c7fdb12955fb66e9 that might not be the case + anymore and could result in the file being truncated when --etag-compare + and --etag-save was used and that the etag value matched with what the + server responded. Instead the truncation should not be done when a new + etag value should be written. + + Test 3204 was added to verify that the file with the etag value doesn't + change the contents when used by --etag-compare and --etage-save and + that value matches with what the server returns on a non 2xx response. + + Closes #13432 + +Abdullah Alyan (22 Apr 2024) + +- tests: enable test 1117 for hyper + + Closes #13436 + +Daniel Stenberg (22 Apr 2024) + +- sendf: useless assignment in cr_lc_read() + + Spotted by CodeSonar + + Closes #13437 + +- tool_paramhlp: remove duplicate assign + + Spotted by CodeSonar + + Closes #13433 + +- transfer: remove useless assignment + + in Curl_xfer_recv_resp + + Spotted by CodeSonar + + Closes #13435 + +- http: acknowledge a returned error code + + ... and do not overwrite it with a new value that could then hide the + problem. + + Spotted by CodeSonar + + Closes #13434 + +- tool_operate: init vars unconditionally in post_per_transfer + + In case of (the unlikely) early return, they could otherwise remain + uninitialized + + Spotted by CodeSonar + + Closes #13430 + +- RELEASE-NOTES: synced + +- urlapi: allow setting port number zero + + Also set and check errno when strtoul() parsing numbers for better error + checking. + + Updated test 1560 + + Closes #13427 + +- http_aws_sigv4: remove useless assignment + + This code assigned the variable the same value it already had + + Spotted by CodeSonar + + Closes #13426 + +- file: remove useless assignment + + This code assigned the variable the same value it already had. + + Spotted by CodeSonar + + Closes #13425 + +- test2406: verify -f with HTTP/2 + +Stefan Eissing (19 Apr 2024) + +- http2 + ngtcp2: pass CURLcode errors from callbacks + + - errors returned by Curl_xfer_write_resp() and the header variant are + not errors in the protocol. The result needs to be returned on the + next recv() from the protocol filter. + + - make xfer write errors for response data cause the stream to be + cancelled + + - added pytest test_02_14 and test_02_15 to verify that also for + parallel processing + + Reported-by: Laramie Leavitt + Fixes #13411 + Closes #13424 + +Daniel Stenberg (19 Apr 2024) + +- request: make Curl_req_init return void + + Since it could not return error and therefore this change removes dead + code for the caller. + + Spotted by CodeSonar. + + Closes #13423 + +- multi: remove the unused Curl_preconnect function + + The implementation has been removed, no point in keeping it around. + + Follow-up to 476adfeac019ed + + Closes #13422 + +- Curl_creader_read: init two variables to avoid using them uninited + + Spotted by CodeSonar + + Closes #13419 + +- http: reject HTTP major version switch mid connection + + A connection that has seen an HTTP major version now refuses any other + major HTTP version in future responses. Previously, a HTTP/1.x + connection would just silently accept HTTP/2 or HTTP/3 in the status + lines as long as it had support for those built-in. It would then just + lead to confusion and badness. + + Indirectly Spotted by CodeSonar which identified a duplicate assignment + in this function. + + Add test 471 to verify + + Closes #13421 + +- mqtt: when Curl_xfer_recv returns error, don't use nread + + A returned error code makes other return value unreliable, and in this + case potentially uninitialized. On error, do not read other return + values like the nread counter. + + Spotted by CodeSonar + + Closes #13418 + +- ftp: fix socket leak on rare error + + In the function AcceptServerConnect() the newly created socket would + leak if Curl_conn_tcp_accepted_set() returns error. Which basically + should never happen. + + Spotted by CodeSonar. + + Closes #13417 + +- urlapi: remove unused flags argument from Curl_url_set_authority + + The function is only called from a single place (for HTTP/2 server push) + so might as well just assume this fixed option every time. + + Closes #13409 + +- github/ISSUE_TEMPLATE: tweak the commericual support text + +- github/ISSUE_TEMPLATE: link the GitHub discussions too + + ... and move the feature request line to the bottom. + +- curl_url_get.md: clarify queries and fragments and CURLU_GET_EMPTY + + Follow-up to 3eac21d86bc5 + + Closes #13407 + +Stefan Eissing (18 Apr 2024) + +- tests: check caddy server version to match test expectations + + - new caddy servers no longer return 200 on POSTs, but 405 + as they should + + Closes #13405 + +Daniel Stenberg (18 Apr 2024) + +- curl_url_set.md: extended + + Closes #13404 + +- urlapi: add CURLU_GET_EMPTY for empty queries and fragments + + By default the API inhibits empty queries and fragments extracted. + Unless this new flag is set. + + This also makes the behavior more consistent: without it set, zero + length queries and fragments are considered not present in the URL. With + the flag set, they are returned as a zero length strings if they were in + fact present in the URL. + + This applies when extracting the individual query and fragment + components and for the full URL. + + Closes #13396 + +- RELEASE-NOTES: synced + +- lib1560: test with leading zeroes and more IPv4 versions + + Inspired by WHATWG URL Spec test inputs + + Closes #13400 + +Christian Schmitz (17 Apr 2024) + +- smtp: result of Curl_bufq_cread was not used + + return the result back to the caller. + + Closes #13398 + +Daniel Stenberg (17 Apr 2024) + +- urlapi: fix relative redirects to fragment-only + + Using the URL API for a redirect URL when the redirected-to string + starts with a hash, ie is only a fragment, the API would produce the + wrong final URL. + + Adjusted test 1560 to test for several new redirect cases. + + Closes #13394 + +Jiwoo Park (17 Apr 2024) + +- url: fix use of an uninitialized variable + + Closes #13399 + +Patrick Monnerat (17 Apr 2024) + +- os400: sync with latest changes + + - Conversion support for new version info character field rtmp_version. + - New ILE/RPG declarations. + + Closes #13402 + +Daniel Stenberg (17 Apr 2024) + +- ngtcp2: fix macro use + + macro "H3_STREAM_CTX" requires 2 arguments, but only 1 given + + Follow-up to c6655f7029ec5c128561e3ecf1f93db3ed0432a4 + + Closes #13401 + +Christian Schmitz (17 Apr 2024) + +- sendf: fix two typos in comments + + The parameters are named data, not date. + + Closes #13393 + +- lib: silence warnings on comma misuse + + Building curl with -Wcomma, I see warnings about "possible misuse of + comma operator here" and moving fields assignment out of the for() fixes + it. + + Closes #13392 + +Stefan Eissing (17 Apr 2024) + +- http/2, http/3: decouple stream state from easy handle + + - add `Curl_hash_offt` as hashmap between a `curl_off_t` and + an object. Use this in h2+h3 connection filters to associate + `data->id` with the internal stream state. + - changed implementations of all affected connection filters + - removed `h2_ctx*` and `h3_ctx*` from `struct HTTP` and thus + the easy handle + - solves the problem of attaching "foreign protocol" easy handles + during connection shutdown + + Test 1616 verifies the new hash functions. + + Closes #13204 + +Daniel Stenberg (17 Apr 2024) + +- ROADMAP: remove completed entries, mention websocket + +- THANKS-filter: name fixes + +Christian Schmitz (17 Apr 2024) + +- winbuild: add ENABLE_WEBSOCKETS option + + Closes #13232 + +Daniel Stenberg (17 Apr 2024) + +- dmaketgz: compacter + + Removes the need for disabling shellcheck warnings. + + Follow-up to d28f74913c2 + Proposed-by: Viktor Szakats + Closes #13391 + +Dan Fandrich (16 Apr 2024) + +- tests: Fix uninitialized value warning + + The check for an option must be predicated on options existing at all. + + Follow-up to f7cc9e91 + +Christian Schmitz (17 Apr 2024) + +- idn: add native AppleIDN (icucore) support for macOS/iOS + + I implemented the IDN functions for macOS and iOS using Unicode + libraries coming with macOS and iOS. + + Builds and runs here on macOS 14.2.1. Also verified to load and + run on older macOS version 10.13. + + Build requires macOS SDK 13 or equivalent. + + Set `-DUSE_APPLE_IDN=ON` CMake option to enable it. + With autotools and other build tools, set these manual options: + ``` + CPPFLAGS=-DUSE_APPLE_IDN + LIBS=-licucore + ``` + + Completes TODO 1.6. + + TODO: add autotools option and feature-detection. + + Refs: #5330 #5371 + Co-authored-by: Viktor Szakats + Closes #13246 + +Stefan Eissing (16 Apr 2024) + +- http3: extend download abort tests, fixes in ngtcp2 + + - fix flow handling in ngtcp2 to ACK data on streams + we abort ourself. + - extend test_02_23* cases to also run for h3 + - skip test_02_23* for OpenSSL QUIC as it gets stalled + on progressing the connection + + Closes #13374 + +Daniel Stenberg (16 Apr 2024) + +- tests: add -q as first option when invoking curl for tests + + To reduce the risk that the user running the tests has a .curlrc present + that messes things up. + + Support 'option="no-q"' for the tag to switch it off on demand. + Use this new feature in test 433 and 436. + + Ref: #13284 + Closes #13387 + +- dmaketgz: release tarball generation using docker + + For easier reproducibility. + + Mention using this script in RELEASE-PROCEDURE + + Closes #13388 + +Viktor Szakats (16 Apr 2024) + +- cmake: update ECH code and minor fixups + + - `openssl_check_symbol_exists()` expects a 4th argument now. + Follow-up to edc2702a1fe3a4a5386ffd9aa4f240f0c0197fa2 #13373 + + - minor comment/script touch-ups. + Follow-up to a362962b7289ec02b412890c9515657cf0ed50ac #11922 + + - fix indentation. + + Closes #13383 + +- tests: fix shellcheck issues in `ech_tests.sh` + + Add double-quotes where missing. + + Follow-up to a362962b7289ec02b412890c9515657cf0ed50ac #11922 + Closes #13382 + +- dist: add ECH files to tarball + + Also sort `EXTRA_DIST` list in `tests/Makefile.am` and make it diffable. + + Follow-up to a362962b7289ec02b412890c9515657cf0ed50ac #11922 + Closes #13381 + +- openvms: look for `USE_IPV6` in `config.h` (was: `ENABLE_IPV6`) + + The OpenVMS script `config_h.com` is parsing the config header + generated by autotools. Let's make it look for the macro name we now + use universally across the codebase. + + Follow-up to e411c98f702f0fb38dceec95e7507ef15a00d12c #13349 + Closes #13360 + +daniel-j-h (16 Apr 2024) + +- Dockerfile: for release automation and reproducibility + + Closes #13250 + +Stefan Eissing (16 Apr 2024) + +- cw-out: improved error handling + + - remember error encountered in invoking write callback and always fail + afterwards without further invokes + + - check behaviour in test_02_17 with h2-pausing client + + Reported-by: Pavel Kropachev + Fixes #13337 + Closes #13340 + +Daniel Stenberg (16 Apr 2024) + +- version: add "ECH" as a feature + + If available + + Follow-up to a362962b7 + Closes #13378 + +- CURLOPT_ECH: polish + + - remove the pointer to build instructions, it won't work in manpages + - add see-also + - minor white space edits + + Closes #13379 + +Viktor Szakats (16 Apr 2024) + +- tidy-up: whitespace [ci skip] + +- mbedtls: fix building with v3 in CMake Unity mode + + Before this patch the internal feature detection macro + `HAS_MBEDTLS_RESULT_CODE_BASED_FUNCTIONS` was defined in three files, + with an incomplete logic in one of them. In Unity mode that spilled + into another source file and broke the build. + + Closes #13377 + +- cmake: add librtmp/rtmpdump option and detection + + Add CMake option `USE_LIBRTMP`. Disabled by default. + + This library requires OpenSSL TLS-backend when linked statically. + + Follow-up to 6eb9e65781fa1fd8a0bcfe0715187a3a35f09ae4 #13364 + Closes #13373 + +Stephen Farrell (16 Apr 2024) + +- TLS: add support for ECH (Encrypted Client Hello) + + An EXPERIMENTAL feature used with CURLOPT_ECH and --ech. + + Closes #11922 + +Daniel Stenberg (15 Apr 2024) + +- RELEASE-NOTES: synced + +- multi: introduce SETUP state for better timeouts + + Since we can go to the CONNECT state from PENDING, potentially multiple + times for a single transfer, this change introdues a SETUP state that + happens before CONNECT when doing a new transfer. + + Now, doing a redirect on a handle goes back to SETUP (not CONNECT like + before) and we initilize the connect timeout etc in SETUP. Previously, + we would do it in CONNECT but that would make it unreliable in cases + where a transfer goes in and out between CONNECT and PENDING multiple + times. + + SETUP is transient, so the handle never actually stays in that state. + + Additionally: take care of timeouts of PENDING transfers in + curl_multi_perform() + + Ref: #13227 + Closes #13371 + +Tal Regev (15 Apr 2024) + +- cmake: forward `USE_LIBRTMP` option to C + + Define in C `USE_LIBRTMP` if user requested it from cmake. + + Closes #13364 + +Daniel Stenberg (15 Apr 2024) + +- curl_version_info: provide librtmp version + + Ref: https://github.com/curl/curl/pull/13364#issuecomment-2054151942 + Reported-by: talregev on github + Closes #13368 + +blankie (15 Apr 2024) + +- docs: clarify CURLOPT_MAXFILESIZE and CURLOPT_MAXFILESIZE_LARGE + + The bounds of the size parameter were not specified, and nor was it + specified how to disable the maximum file size check. + + The documentation also incorrectly stated that CURLOPT_MAXFILESIZE + always returns CURLE_OK and that CURLOPT_MAXFILESIZE_LARGE only returns + CURLE_OK or CURLE_UNKNOWN_OPTION. + + It also did not mention what the default value is, which is zero. This + commit updates the documentation to make note of all these things. + + Closes #13372 + +Patrick Monnerat (15 Apr 2024) + +- OS400: post-shellcheck changes adjustments + + Build scripts must be executed by the os/400 shell (sh), not bash which + is a PASE program. + + Shell function get_make_vars() escaping reworked to match $() subcommand + construct. + + Follow-up to 8a622baf9e9233241bbe93d6599c99cb46478614 + Closes #13366 + +Viktor Szakats (15 Apr 2024) + +- OS400: tidy-up + + Drop/fixup mods trying to make some syntax highlighters happier. + + Follow-up to 8a622baf9e9233241bbe93d6599c99cb46478614 #13309 + Closes #13362 + +Daniel Stenberg (15 Apr 2024) + +- multi: timeout handles even without connection + + When there is a "change" in a multi handle and pending handles are moved + back to the main list to be retested if they can proceed further (for + example a previous transfer completed or a connection has a confirmed + multiplexed state), the timeout check in multi_runsingle() would not + trigger because it required an established connection. + + This could make a pending tranfer go back to pending state even though + it had been "in progress" for a longer time than permitted. By removing + the requirement for an associated connection, the timeout check will be + done proper even for transfers that has not yet been assigned one. + + Ref #13227 + Reported-by: Rahul Krishna M + Closes #13276 + +Patrick Monnerat (15 Apr 2024) + +- mprintf: check fputc error rather than matching returned character + + OS/400 ascii fputc wrapper deviates from the posix standard by the + fact that it returns the ebcdic encoding of the original ascii + character. Testing for a matching value for success will then always + fail. + + This commit replaces the chariacter comparison by an explicit error + return check. + + Follow-up to ef2cf58 + Closes #13367 + +Viktor Szakats (14 Apr 2024) + +- ci: add CMake build variation, fixup libssh detection in `linux-old` + + To test without c-ares and hit `easy_lock.h` on an old system. Use this + new build step to introduce small variations, and also test libssh2. + + Also add workaround to existing job to enable libssh. (CMake's generic + auto-detection doesn't seem to work here.): + ``` + CMake Warning at CMakeLists.txt:908 (find_package): + Could not find a package configuration file provided by "libssh" with any + of the following names: + + libsshConfig.cmake + libssh-config.cmake + ``` + Ref: https://github.com/curl/curl/actions/runs/8661316091/job/23750974358#ste + p:5:69 + + Closes #13361 + +- lib: merge `ENABLE_QUIC` C macro into `USE_HTTP3` + + Before this patch `lib/curl_setup.h` defined these two macros right + next to each other, then the source code used them interchangeably. + + After this patch, `USE_HTTP3` guards all HTTP/3 / QUIC features. + (Like `USE_HTTP2` does for HTTP/2.) `ENABLE_QUIC` is no longer used. + + This patch doesn't change the way HTTP/3 is enabled via autotools + or CMake. Builders who enabled HTTP/3 manually by defining both of + these macros via `CPPFLAGS` can now delete `-DENABLE_QUIC`. + + Closes #13352 + +- build: prefer `USE_IPV6` macro internally (was: `ENABLE_IPV6`) + + Before this patch, two macros were used to guard IPv6 features in curl + sources: `ENABLE_IPV6` and `USE_IPV6`. This patch makes the source use + the latter for consistency with other similar switches. + + `-DENABLE_IPV6` remains accepted for compatibility as a synonym for + `-DUSE_IPV6`, when passed to the compiler. + + `ENABLE_IPV6` also remains the name of the CMake and `Makefile.vc` + options to control this feature. + + Closes #13349 + +Dan Fandrich (12 Apr 2024) + +- DISTROS: mark rolling release distros + + These are ones that are unlikely to have back-ported curl patches. + + Closes #13353 + +Daniel Stenberg (12 Apr 2024) + +- mbedtls: cut off trailing newlines from debug logs + + To avoid double newlines in the output. + + Reported-by: Gisle Vanem + Fixes #13321 + Closes #13356 + +- RELEASE-NOTES: synced + +Stefan Eissing (12 Apr 2024) + +- CURLINFO_REQUEST_SIZE: fixed, add tests for transfer infos reported + + - tests for 'size_request' and other stats reported, for + presence and consistency + + Reported-by: Jonatan Vela + Fixes #13269 + Closes #13275 + +Viktor Szakats (11 Apr 2024) + +- dist: add files missing from release tarball + + Closes #13346 + +- ci: parallelize more, tidy up cmake commands (distcheck, macos) + + Also enable `-DCURL_WERROR=ON` in the Linux cmake build test. + + Closes #13343 + +Toon Claes (11 Apr 2024) + +- docs: add CURLOPT_NOPROGRESS to CURLOPT_XFERINFOFUNCTION example + + It's important to set `CURLOPT_NOPROGRESS` to `0` if you want your + transfer callback function, set by `CURLOPT_XFERINFOFUNCTION`, getting + called. To emphasize this to the users, add this to the code example. + + Closes #13348 + +RainRat (11 Apr 2024) + +- misc: fix typos + + Closes #13344 + +Colin Leroy-Mira (11 Apr 2024) + +- file: add support for getting basic directory listings + + Not supported on Windows (yet) + + Closes #13137 + +Viktor Szakats (11 Apr 2024) + +- ci: add curl-for-win builds: Linux MUSL, macOS, Windows + + Linux MUSL (llvm/clang), macOS Apple clang, Windows (llvm/clang). + + Configured with HTTP/2 and HTTP/3 and other dependencies (the default + curl-for-win) for a comprehensive build test. + + ``` + curl 8.8.0-DEV (x86_64-unknown-linux-musl) libcurl/8.8.0-DEV LibreSSL/3.9.1 z + lib/1.3.1 brotli/1.1.0 zstd/1.5.6 libpsl/0.21.5 libssh2/1.11.0 nghttp2/1.61.0 + ngtcp2/1.4.0 nghttp3/1.2.0 + Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns + mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss + Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTP3 HTTPS-proxy IPv6 Largefil + e libz NTLM PSL SSL threadsafe UnixSockets zstd + + curl 8.8.0-DEV (x86_64-apple-darwin) libcurl/8.8.0-DEV LibreSSL/3.9.1 zlib/1. + 3.1 brotli/1.1.0 zstd/1.5.6 libpsl/0.21.5 libssh2/1.11.0 nghttp2/1.61.0 ngtcp + 2/1.4.0 nghttp3/1.2.0 + Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns + ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws w + ss + Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTP3 HTTPS-proxy IPv6 Largefil + e libz NTLM PSL SSL threadsafe UnixSockets zstd + + curl 8.8.0-DEV (x86_64-w64-mingw32) libcurl/8.8.0-DEV LibreSSL/3.9.1 zlib/1.3 + .1 brotli/1.1.0 zstd/1.5.6 WinIDN libpsl/0.21.5 libssh2/1.11.0 nghttp2/1.61.0 + ngtcp2/1.4.0 nghttp3/1.2.0 + Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns + ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws w + ss + Features: alt-svc AsynchDNS brotli HSTS HTTP2 HTTP3 HTTPS-proxy IDN IPv6 Kerb + eros Largefile libz NTLM PSL SPNEGO SSL SSPI threadsafe UnixSockets zstd + ``` + + Limited to x64, because for build testing the additional CPUs don't add + much value compared to the extra build time. They can be enabled easily + if deemed useful. + + To the extent of curl-for-win configuration options, it's trivial to add + further build combinations. + + Closes #13335 + +- OS400: fix shellcheck warnings in scripts + + - use `$()` instead of backticks, and re-arrange double-quotes inside. + - add missing `|| exit 1` to `cd` calls. (could be dropped by using `set -eu` + .) + - add `-n` to a few `if`s. + - shorten redirections by using `{} >` (as shellcheck recommended). + - silence warnings where variables were detected as unused (SC2034). + - a couple misc updates to silence warnings. + - switch to bash shebang for `-ot` feature. + - split two lines to unbreak syntax highlighting in my editor. (`$(expr \`, ` + $(dirname \`) + + Also enable CI checks for OS/400 shell scripts. + + Ref: #13307 + Closes #13309 + +Stefan Eissing (11 Apr 2024) + +- lib: add Curl_xfer_write_resp_hd + + Add method in protocol handlers to allow writing of a single, + 0-terminated header line. Avoids parsing and copying these lines. + + Closes #13165 + +- llist: add Curl_llist_append() + + - use for better readability in all places where the "insert_next" + actually performs an append to the list + - add some tests in unit1300 + + Closes #13336 + +- gnutls: lazy init the trust settings + + - delay loading of trust anchors and CRLs after the ClientHello + has been sent off + - add tracing to IO operations + - on IO errors, return the CURLcode of the underlying filter + + Closes #13339 + +Marcel Raad (10 Apr 2024) + +- http_negotiate: fix `CURL_DISABLE_PROXY` build + + `proxyuserpwd` was removed from `dynamically_allocated_data` in commit + f46385d36df. + + Closes https://github.com/curl/curl/pull/13334 + +Viktor Szakats (10 Apr 2024) + +- quic: fixup duplicate static function name (for cmake unity) + + Visible in daily curl-for-win builds: + https://github.com/curl/curl-for-win/actions/runs/8621925870 + + ``` + lib/vquic/curl_ngtcp2.c:1916:12: error: redefinition of 'ossl_new_session_cb' + static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid) + ^ + lib/vtls/openssl.c:2978:12: note: previous definition is here + static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid) + ^ + ``` + https://github.com/curl/curl-for-win/actions/runs/8621925870/job/23631885439# + step:3:6965 + + Follow-up to 3210101088dfa3d6a125d213226b092f2f866722 #13172 + Closes #13332 + +- appveyor: make VS2010 job build-only, enable Schannel, fix compiler warnings + + Tests were consistently flaky for a while. + + Also fix compiler warnings in `CertOpenStore()` calls for old MSVC compilers: + ``` + C:/projects/curl/lib/vtls/schannel.c(688): + warning C4306: 'type cast' : conversion from 'int' to 'LPCSTR' of greater s + ize + C:/projects/curl/lib/vtls/schannel_verify.c(642): + warning C4306: 'type cast' : conversion from 'int' to 'LPCSTR' of greater s + ize + ``` + Ref: https://ci.appveyor.com/project/curlorg/curl/builds/49580310/job/ywu2y44 + kymgc0nif#L106 + + Closes #13330 + +Daniel Stenberg (10 Apr 2024) + +- projects: drop MSVC project files for recent versions + + We encourage users to generate visual studio project files using CMake. + + We keep project files in git for ancient visual studio versions that + cmake cannot generate files for, but we no longer ship the project files + in the tarballs. + + appveyor: switch VisualStudioSolution job to VC12 (Visual Studio 2013) + + Co-Authored-by: Viktor Szakats + Co-Authored-by: Jay Satiro + + Closes #13311 + +Viktor Szakats (9 Apr 2024) + +- cmake: use namespaced custom target names + + Rename custom target to namespaced (unique) names to avoid colliding + with 3rd-party projects (e.g. libzip) built together with curl. + + Reported-by: hammlee96 on github + Fixes #13324 + Closes #13326 + +- appveyor: re-enable OpenSSL 3, bump to 3.2.1 + + Ref: b62454a875d70f93ab5347c050903596feb45a23 #13266 + Closes #13329 + +Stefan Eissing (9 Apr 2024) + +- CI: upgrade openssl version to 3.3.0 for openssl-quic + + Closes #13328 + +Daniel Stenberg (9 Apr 2024) + +- RELEASE-NOTES: synced + + Bump to 8.8.0-DEV + +- curl_multi_waitfds.md: add protocol mention + + Follow-up to 02beac6bb6b + +Dmitry Karpov (9 Apr 2024) + +- lib: add curl_multi_waitfds + + New function call, similar to curl_multi_fdset() + + Closes #13135 + +Viktor Szakats (9 Apr 2024) + +- dist: verify tarball reproducibility in CI + + Closes #13327 + +Stefan Eissing (9 Apr 2024) + +- tests: stabilitze test_02_23* + + - h2-download now always opens the output file on first write callback + invocation, if it will pause the transfer or not. + - Checks on output files then does not depend on the amount of data curl + has collected for the first write. + + Closes #13323 + +- tls: fix compile issues on old-linux CI + + Follow-up to 3210101088dfa + Closes #13325 + +Viktor Szakats (9 Apr 2024) + +- dist: add reproducible dir entries to tarballs + + In the initial implementation of reproducible tarballs, they were + missing directory entries, while .zip archives had them. It meant + that on extracting the tarball, on-disk directory entries got the + current timestamp. + + This patch fixes this by including directory entries in the tarball, + with reproducible timestamps. It also moves sorting inside tar, + to ensure reproducible directory entry timestamps on extract + (without the need of `--delay-directory-restore` option, when + extracting with GNU tar. BSD tar got that right by default.) + + GNU tar 1.28 (2014-07-28) introduced `--sort=`. + + Ref: https://github.com/curl/curl/pull/13299#discussion_r1555957350 + Follow-up to 860cd5fc2dc8e165fadd2c19a9b7c73b3ae5069d #13299 + Closes #13322 + +Stefan Eissing (9 Apr 2024) + +- tls: use shared init code for TCP+QUIC + + Closes #13172 + +Daniel Stenberg (9 Apr 2024) + +- .mailmap: update Gisle's preferred email + +Jan Macku (9 Apr 2024) + +- doc: pytest `--repeat` -> `--count` + + Pytest doesn't have a `--repeat` option, but it does have a `--count` + option. + + ``` + --count=COUNT Number of times to repeat each test + ``` + + Closes #13218 + +Daniel Stenberg (9 Apr 2024) + +- src/Makefile.am: access curl.txt using a relative path, not abs + + ... to make it work when mounted using different mount points. Like when + generated/used inside and outside of a docker image. + + Closes #13320 + +- build: remove MacOSX-Framework script + + I don't think this is much used these days. + + Also remove the libcurl.plist file used (only) by this script + + Closes #13313 + +- release-tools.sh: store the timestamp and release tag too + + When maketgz invokes this script to generate the docs/RELEASE-TOOLS.md + file that gets bundled in the release, it now also passes on the exact + timestamp and version number so that those details also get mentioned in + the document. They will help users reproduce an identical tarball. + + Closes #13319 + +Viktor Szakats (8 Apr 2024) + +- GHA: disable permissions where missing + + Reviewed-by: Daniel Stenberg + Closes #13306 + +Stefan Eissing (8 Apr 2024) + +- CI: update component versions + + - ngtcp2: v1.4.0 + - nghttp3: v1.2.0 + - nghttp2: v1.61.0 + - mod_h2: v2.0.27 + + Closes #13316 + +Jérôme Leclercq (8 Apr 2024) + +- CMake: check fseeko after detecting HAVE_FILE_OFFSET_BITS + + Closes #13264 + +Stefan Eissing (8 Apr 2024) + +- http2: emit RST when client write fails + + - When the writing of response data fails, reset the stream + and do not return a callback error to nghttp2. That would + be a fatal error for the connection and harm other requests. + - add test cases for various abort scenarios + + Reported-by: Konstantin Kuzov + Fixes #13292 + Closes #13298 + +Kailun Qin (8 Apr 2024) + +- mbedtls: call mbedtls_ssl_setup() after RNG callback is set + + Since mbedTLS v3.6.0, the RNG check added in ssl_conf_check() will fail + if no RNG is provided when calling mbedtls_ssl_setup(). + + Therefore, mbedtls_ssl_conf_rng() needs to be called before the SSL + context is passed to mbedtls_ssl_setup(). + + Ref: https://github.com/Mbed-TLS/mbedtls/commit/b422cab052b51ec84758638d6783d + 6ba4fc60613 + + Signed-off-by: Kailun Qin + Closes #13314 + +Daniel Stenberg (8 Apr 2024) + +- NTLM_WB: drop support + + The feature has not worked for months and has been marked as DEPRECATED + for six+ months. + + Closes #13249 + +- curl_trc: fix build error when lacking verbose messages + + Follow-up from 0b28ece657b2273 + Closes #13312 + +Viktor Szakats (8 Apr 2024) + +- contrithanks: honor `CURLWWW` variable + + Reviewed-by: Daniel Stenberg + Closes #13315 + +- GHA: add shellcheck job and fix warnings, shell tidy-ups + + Reviewed-by: Daniel Stenberg + Closes #13307 + +- dist: do not require Perl in `maketgz` + + Perl remains required for the tarball build process. + + Follow-up to 860cd5fc2dc8e165fadd2c19a9b7c73b3ae5069d #13299 + + Reviewed-by: Daniel Stenberg + Closes #13310 + +Daniel Stenberg (8 Apr 2024) + +- RELEASE-NOTES: synced + +- docs/cmdline-opts: invoke managen using a relative path + + ... no need to use an absolute path, that makes the build unncessarily + fail if invoked using a different mount point. managen now takes options + to find the input files. + + Update test1478 to provide the dir arguments to managen + + Closes #13281 + +- GHA: add valgrind to a wolfSSL build + + Closes #13274 + +Viktor Szakats (7 Apr 2024) + +- dist: `set -eu`, fix shellcheck, make reproducible and smaller tarballs + + - set bash `-eu` and fix fallouts. + - fix shellcheck warnings. + - set and use `SOURCE_DATE_EPOCH` for reproducibility. + Authored-by: Daniel J. H. + Ref: #13280 + - set `TZ=UTC` and `LC_ALL=C` for reproducibility. + - make file timestamps in tarball/zip reproducible. + - make directory timestamps in zip reproducible. + - make timestamps of tarballs/zip reproducible. + - make file order in tarball/zip reproducible. + - omit extra file metadata from zip for reproducibility. + - use maximum zip compression. + - use POSIX `ustar` tarball format to avoid supply chain vulnerability: + https://seclists.org/oss-sec/2021/q4/0 + - make uid/gid in tarball reproducible. + - omit owner user/group names from tarball for reproducibility and privacy. + - omit current timestamp from .gz header for reproducibility. + - display SHA-256 hashes of produced tarballs/zip. + - fix whitespace. + + `.tar.gz` also became smaller in the process: 4,462,311 -> 4,148,249 bytes (8 + .7.1) + + Requires GNU tar, GNU date, `sha256sum`. + + Reviewed-by: Daniel Stenberg + Ref: #13250 + Closes #13299 + +Gisle Vanem (7 Apr 2024) + +- tests/http: fix compiler warning + + - Init result code variable to fix clang warning that it may be used + uninitialized. + + Fixes https://github.com/curl/curl/issues/13301 + Closes https://github.com/curl/curl/pull/13304 + +Stefan Eissing (6 Apr 2024) + +- vquic: use new curl_int64_t type + + - add curl_int64_t signed 64-bit type for lib use + + - define CURL_PRId64, CURL_PRIu64 format ids + + - use curl_int64_t in vquic + + curl_int64_t signed complements the existing curl_uint64_t unsigned. + + Note that `curl_int64_t` and `int64_t` are assignable from each other + but not identical. Some platforms with 64 long type defint int64_t as + "long long" (staring at macOS) which messes up things like pointers and + format identifiers. + + Closes https://github.com/curl/curl/pull/13293 + +Jay Satiro (5 Apr 2024) + +- lib: use multi instead of multi_easy for the active multi + + - Use data->multi and not data->multi_easy to refer to the active multi. + + The easy handle's active multi is always data->multi. + + This is a follow up to 757dfdf which changed curl so that an easy handle + used with the easy interface and then multi interface cannot have two + different multi handles associated with it at the same time + (data->multi_easy from the easy interface and data->multi from the multi + interface). + + Closes https://github.com/curl/curl/pull/12665 + +Viktor Szakats (5 Apr 2024) + +- tidy-up: whitespace [ci skip] + +Daniel Stenberg (5 Apr 2024) + +- makefile: remove the sorting from the vc-ide action + + This target generates the MSVC project files. This change removes the + extra sorting and instead makes the script use the order of the files as + listed in the variables - which are mostly sorted anyway. + + This is an attempt to make the project file generation more easily + reproducible. + + Ref: #13250 + Closes #13294 + +Gisle Vanem (5 Apr 2024) + +- bearssl: fix compiler warnings + + "variables may be uninitialized when used" + + Fixes #13290 + Closes #13297 + +Daniel Stenberg (5 Apr 2024) + +- DISTROS: Cygwin updates + + Brought-by: Brian Inglis + Fixes #13258 + Co-authored-by: Viktor Szakats + Closes #13279 + +Stefan Eissing (5 Apr 2024) + +- lib: add trace support for client reads and writes + + - add `CURL_TRC_READ()` and `CURL_TRC_WRITE()` + - use in generic client writers and readers, as well + as http headers, chunking and websockets + + Closes #13223 + +Michał Antoniak (5 Apr 2024) + +- urldata: remove fields not used depending on used features + + Reduced size of dynamically_allocated_data structure. + + Reduced number of stored values in enum dupstring and enum dupblob. This + affects the reduced array placed in the UserDefined structure. + + Closes #13188 + +Viktor Szakats (5 Apr 2024) + +- cmake: enable `-pedantic-errors` for clang when `CURL_WERROR=ON` + + clang doesn't have the issues of GCC and old CMake versions. + + Note: This introduces asymmetry with autotools, which only enables + this for GCC. + + Reviewed-by: Daniel Stenberg + Closes #13286 + +- cmake: fix `CURL_WERROR=ON` for old CMake and use it in GHA/linux-old + + - cmake: fix `-pedantic-errors` for old CMake with `CURL_WERROR=ON` set. + + `-pedantic-errors` option throws a warning with GCC (all versions) and + makes `check_symbol_exists()` fail in CMake versions older than + v3.23.0 (2022-03-29), when CMake introduced a workaround: + + https://gitlab.kitware.com/cmake/cmake/-/issues/13208 + https://gitlab.kitware.com/cmake/cmake/-/commit/eeb45401163d831b8c841ef6eba + 81466b4067b68 + https://gitlab.kitware.com/cmake/cmake/-/commit/1ab7c3cd28b27ca162c4559e102 + 6e5cad1898ade + + Follow-up to 3829759bd042c03225ae862062560f568ba1a231 #12489 + + - set `CURL_WERROR=ON` for the `linux-old` job in CI. + + Closes #13282 + +- lib: use `#error` instead of invalid syntax in `curl_setup_once.h` + + Reviewed-by: Daniel Stenberg + Closes #13287 + +Daniel Stenberg (5 Apr 2024) + +- GHA: on macOS remove $HOME/.curlrc + + A recent image upgrade added a $HOME/.curlrc by default using --ipv4. + + Ref: https://github.com/actions/runner-images/pull/9586 + Fixes #13284 + Closes #13285 + +Viktor Szakats (4 Apr 2024) + +- cmake: fixup `DEPENDS` filename + + Fixing: + ``` + make[2]: Circular docs/curl-config.1 <- docs/curl-config.1 dependency dropped + . + make[2]: Circular docs/mk-ca-bundle.1 <- docs/mk-ca-bundle.1 dependency dropp + ed. + ``` + Ref: https://github.com/curl/curl/actions/runs/8559617487/job/23456740844?pr= + 13282#step:6:18 + + Follow-up to 5023ffad2c27d4b916ddb91800f99ecc5d3aad07 #13197 + Closes #13283 + +- GHA: enable unity mode for cmake jobs + tidy-ups + + Unity mode is not supported by CMake v3.7.2 used in linux-old, but + enable it anyway for consistency and to kick in automatically once + migrating to a newer old Linux in the future. + + Also: + - replace `CMAKE_COMPILE_WARNING_AS_ERROR` with `CURL_WERROR`. + - delete default build option `PICKY_COMPILER=ON`. + + Closes #13277 + +Dan Fandrich (4 Apr 2024) + +- CI: Add CI build on Debian stretch to test old support + + This version still has ELTS support and contains some old versions of + key components like cmake to help prevent us from breaking that support. + + Closes #13029 + +Stefan Eissing (4 Apr 2024) + +- request: paused upload on completed download, assess connection + + A transfer with a completed download that is still uploading needs to + check the connection state when it is PAUSEd, since connection + close/errors would otherwise go unnoticed. + + Reported-by: Sergey Bronnikov + Fixes #13260 + Closes #13271 + +Daniel Stenberg (4 Apr 2024) + +- url: do not URL decode proxy crendentials + + The two options CURLOPT_PROXYUSERNAME and CURLOPT_PROXYPASSWORD set the + actual names as-is, not URL encoded. + + Modified test 503 to use percent-encoded strings in the credential + strings that should be passed on as-is. + + Reported-by: Sergey Ogryzkov + Fixes #13265 + Closes #13270 + +Viktor Szakats (4 Apr 2024) + +- appveyor: enable cmake unity mode by default + + Leave one non-unity cmake job. This makes the jobs finish slightly + quicker, while giving more coverage for unity issues. + + Before: + https://ci.appveyor.com/project/curlorg/curl/builds/49496977 + https://ci.appveyor.com/project/curlorg/curl/builds/49500372 + After: + https://ci.appveyor.com/project/curlorg/curl/builds/49500338 + + Also fixup unrelated whitespace. + + Reviewed-by: Daniel Stenberg + Closes #13217 + +Daniel Stenberg (4 Apr 2024) + +- RELEASE-NOTES: synced + +Viktor Szakats (4 Apr 2024) + +- cmake: speed up libcurl doc building again + + This time limit the number of files per command to avoid exceeding + limitations of certain OS/shell envs. + + Such known env is Windows with the `cmd.exe` shell, which features an + 8K command-line length limit to this day. + + Allowlisting `UNIX` to have no limit and using a limit of 200 for other + envs to be safe. If there is a way to detect `cmd.exe` and/or we know + which precise envs are sensitive to this, we can tweak these conditions + further. + + Even with the low limit, this patch reduces external commands by 200x, + making builds much faster. + + Ref: #12762 2620aa930bc73af1e4c70b10e3125b957b96ecfb (initial) + Ref: #13047 f03c85635f35269f1f45b983bf216624f541760a (revert) + + Reviewed-by: Daniel Stenberg + Closes #13207 + +- cmake: tidy-up to use `WORKING_DIRECTORY` + + Reviewed-by: Daniel Stenberg + Closes #13206 + +- cmake: generate misc manpages and install `mk-ca-bundle.pl` + + - install `mk-ca-bundle.pl` like autotools does. + + - generate and install `mk-ca-bundle.1` and `curl-config.1` like + autotools. This fixes tests 1140 and 1173. + + Reported-by: Dan Fandrich + Fixes #13194 + + - add option `BUILD_MISC_DOCS` to control building the above two + manpages. Enabled by default. + + - appveyor: stop disabling tests 1140 and 1173. + + Reviewed-by: Daniel Stenberg + Closes #13197 + +Fabian Keil (4 Apr 2024) + +- wolfssl: plug memory leak in wolfssl_connect_step2() + + Fixes: + + test 2034...[simple HTTPS GET with DER public key pinning] + ==61829== 22,610 (3,744 direct, 18,866 indirect) bytes in 1 blocks are d + efinitely lost in loss record 51 of 54 + ==61829== at 0x484BB74: malloc (vg_replace_malloc.c:446) + ==61829== by 0x4B53A80: wolfSSL_Malloc (memory.c:344) + ==61829== by 0x4C1C8E1: wolfSSL_X509_new (x509.c:5326) + ==61829== by 0x4C3977D: d2i_X509orX509REQ (x509.c:3628) + ==61829== by 0x4C1D1F4: wolfSSL_X509_d2i (x509.c:3664) + ==61829== by 0x4C1C37B: wolfSSL_X509_dup (x509.c:13425) + ==61829== by 0x4C197DB: wolfSSL_get_peer_certificate (ssl.c:18765) + ==61829== by 0x33297C: wolfssl_connect_step2 (wolfssl.c:875) + ==61829== by 0x331669: wolfssl_connect_common (wolfssl.c:1287) + ==61829== by 0x3303E9: wolfssl_connect_nonblocking (wolfssl.c:1319) + ==61829== by 0x32FE89: ssl_connect_nonblocking (vtls.c:510) + ==61829== by 0x32DBE5: ssl_cf_connect (vtls.c:1679) + ==61829== by 0x27ABD7: Curl_conn_cf_connect (cfilters.c:307) + ==61829== by 0x27D9CF: cf_setup_connect (connect.c:1199) + ==61829== by 0x27ABD7: Curl_conn_cf_connect (cfilters.c:307) + ==61829== by 0x283CEA: cf_hc_baller_connect (cf-https-connect.c:135) + + Closes #13272 + +Viktor Szakats (3 Apr 2024) + +- appveyor: OpenSSL 3 no longer found by CMake, revert to 1.1.1 + + OpenSSL moved directories, and bumped versions in AppVeyor CI. + + Downgrading is not an ideal solution, but however trivial the solution + may be, I failed to come with anything that made CMake recognize either + OpenSSL 3.1 or 3.2. + + Possibly caused by: + https://github.com/appveyor/build-images/commit/702e8cdca01f28f6a40687783f493 + c786cebbe2c + https://github.com/appveyor/build-images/pull/149 + + Closes #13266 + +hongfei.li (3 Apr 2024) + +- winbuild: use $(RC) correctly + + Cloes #13267 + +Daniel Stenberg (3 Apr 2024) + +- dist: remove the curl-config.1 from the tarball + + The markdown file is already there and the .1 file gets generated in the + build. + + Ref: #13250 + Closes #13268 + +- curl_global_trace.md: shorten the description + + Closes #13263 + +- test1901: verify chunked POST from callback with CURLOPT_POSTFIELDSIZE set + + Follow-up to 721941aadf4ad + + Ref: #13257 + Closes #13262 + +Stefan Eissing (2 Apr 2024) + +- http: with chunked POST forced, disable length check on read callback + + - when an application forces HTTP/1.1 chunked transfer encoding + by setting the corresponding header and instructs curl to use + the CURLOPT_READFUNCTION, disregard any POST length information. + - this establishes backward compatibility with previous curl versions + + Applications are encouraged to not force "chunked", but rather + set length information for a POST. By setting -1, curl will + auto-select chunked on HTTP/1.1 and work properly on other HTTP + versions. + + Reported-by: Jeff King + Fixes #13229 + Closes #13257 + +Jay Satiro (1 Apr 2024) + +- INSTALL-CMAKE.md: explain `cmake -G ` + + - Explain that CMake's -G option can be used to specify which build + system to generate files for. + + Example: cmake ../curl -G "MinGW Makefiles" + + Ref: https://github.com/curl/curl/pull/12224#issuecomment-2026813645 + + Closes https://github.com/curl/curl/pull/13244 + +Daniel Stenberg (1 Apr 2024) + +- libcurl-opts: mention pipelining less + + libcurl has not supported HTTP pipelining since many years. Remove a few + (more) mentions of the feature. + + Closes #13254 + +Daniel McCarney (31 Mar 2024) + +- m4: reposition USE_RUSTLS="yes" for pkg-config + + It's necessary to set this var to "yes" _after_ AC_DEFINE and AC_SUBST + in order for a later `test` to pass so that `check_for_ca_bundle=1` ends + up being set. This is in turn required for the default CA certificate + bundle to be set when building w/ rustls & pkg-config. + + Reported-by: Matt Jolly + Fixes #13248 + Closes #13251 + +Daniel Stenberg (31 Mar 2024) + +- maketgz: put docs/RELEASE-TOOL.md into the tarball + + Generated with scripts/release-tools.sh + + The script lists the exact Debian package names and version numbers for + the tools that are used to generate the tarball. + + Closes #13239 + +- cd2nroff/manage: use UTC when SOURCE_DATE_EPOCH is set + + Make them independent of the TZ setting. Also set a date string like + YYYY-MM-DD to avoid a local month name in the date. + + Reported-by: Carlos Henrique Lima Melara + Fixes #13242 + Closes #13243 + +- RELEASE-NOTES: synced + +- docs/MAIL-ETIQUETTE: convert to markdown + + To render nicer. To get spellchecked. + + Closes #13247 + +- reuse: add copyright + license info to individual docs/*.md files + + Instead of use 'docs/*.md' in dep5. For clarity and avoiding a wide- + matching wildcard. + + + Remove mention of old files from .reuse/dep5 + + add info to .github/dependabot.yml + + make scripts/copyright.pl warn on non-matching patterns + + Closes #13245 + +- test470: warn about unicode quote character read from config file + + Idea-by: Emanuele Torre + +- test469: verify warning when argument has unicode quote + +- tool_getparam: output warning for leading unicode quote character + + ... in the option argument. + + Typically this is a mistake done when copying example command lines from + online documentation using the wrong quote character. + + Presumably there are also other potential quote characters that might be + used, and this check is done without even knowing that unicode is used! + + Reported-by: Sanjay Pujare + Fixes #13214 + Closes #13215 + +- tool: follow-up getenv fix + + Remove a double free. Change the IPFS env use to a plain getenv() simply + because coverity gets confused. + + Follow-up to 9126b141c9398fe + Closes #13241 + +- idn: make Curl_idnconvert_hostname() use Curl_idn_decode() + + In the name of less code duplication + + Closes #13236 + +- curl-confopts.m4: define CARES_NO_DEPRECATED when c-ares is used + + Starting in 1.28.0 c-ares added deprecation warnings for some API calls + libcurl uses. + + Closes #13240 + +- vquic: use CURL_FORMAT_CURL_OFF_T for 64 bit printf output + + Reported-by: Keitagit-kun on github + Fixes #13224 + Closes #13231 + +- openldap: create ldap URLs correctly for IPv6 addresses + + Reported-by: Sergio Durigan Junior + Fixes #13228 + Closes #13235 + +- curl: use curl_getenv instead of the curlx_ version + + The curlx one was once introduced when we still considered dropping the + libcurl function at some point. To reduce confusion and to make it + easier to understand when curl_free() should be used, use the actual + libcurl function call directly instead. + + Closes #13230 + +Evgeny Grin (Karlson2k) (30 Mar 2024) + +- curl_sha512_256: do not use workaround for NetBSD when not needed + + Assisted-by: riastradh on github + Assisted-by: Michael Kaufmann + Closes #13225 + +Matt Jolly (30 Mar 2024) + +- m4: fix rustls pkg-config codepath + + The previous pkg-config code would successfully detect rustls but did + not set all appropriate variables and call the right macros to properly + configure cURL. + + Reported-by: kpcyrd on github + Fixes #13200 + Closes #13202 + +Daniel McCarney (30 Mar 2024) + +- deps: update librustls 0.12.0 -> 0.13.0 + + This commit updates the optional rustls-ffi librustls dependency from + 0.12.0 to 0.13.0. This version is based on the latest available rustls + release (0.23.4). + + The breaking API changes from 0.12.0 to 0.13.0 are in API surface unused + by curl, so this is an in-place update without any code changes. + + The `RUSTLS.md` documentation is updated to reflect the new version in + use, and to clarify that `cbindgen` isn't required to build `librustls` + - it's only used by developers to update the vendored `rustls.h` header + file maintained upstream. + + Closes #13238 + +Daniel Stenberg (28 Mar 2024) + +- RELEASE-NOTES: synced + +- tool_xattr: "guess" URL scheme if none is provided + + ... when figuring out the source URL to store. + + Reported-by: Dagfinn Ilmari Mannsåker + Fixes #13205 + Closes #13221 + +- tool_xattr: in debug builds, act normally if CURL_FAKE_XATTR is not set + + Closes #13220 + +Stefan Eissing (28 Mar 2024) + +- content_encoding: brotli and others, pass through 0-length writes + + - curl's transfer handling may write 0-length chunks at the end of the + download with an EOS flag. (HTTP/2 does this commonly) + + - content encoders need to pass-through such a write and not count this + as error in case they are finished decoding + + Fixes #13209 + Fixes #13212 + Closes #13219 + +Tobias Stoeckmann (28 Mar 2024) + +- libssh2: set length to 0 if strdup failed + + Internally, libssh2 dereferences the NULL pointer if length is non-zero. + The callback function cannot return the error condition, so at least + prevent subsequent crash. + + Closes #13213 + +Daniel Stenberg (28 Mar 2024) + +- RELEASE-PROCEDURE: mention an initial working build + + This is the step that was not done and caused the 8.7.0 mishap (it + lacked the correctly generated hugehelp file). + + Remove the mention of the copyright script as this is verified by a CI + job these days: the REUSE one. + + Closes #13216 + +Paul Howarth (28 Mar 2024) + +- curl_sha512_255: fix detection of OpenSSL 1.1.1 or later + + Use the same OPENSSL_VERSION_NUMBER comparison as in lib/vtls/openssl.c. + + Closes #13208 + +Robert Moreton (28 Mar 2024) + +- cf-socket: remove references to l_ip, l_port + + Fixes #13210 + Closes #13211 + +Daniel Stenberg (28 Mar 2024) + +- openssl: do not set SSL_MODE_RELEASE_BUFFERS + + While it might save some memory, it causes OpenSSL to instead do a huge + amount of allocations. + + Ref: #13136 + Closes #13203 + +- curl: make --help adapt to the terminal width + + Instead of assuming and working with 80 colums, try figuring out what + width is actually used. + + Ref: #13141 + + Closes #13171 + +- RELEASE-NOTES: synced + + and bump to 8.7.2 for now + +- configure: make --disable-docs imply --disable-manual + + Because when the docs is not built, the necesary curl.txt file is not + present so then the manual cannot get built. + + Reported-by: Harry Sintonen + Closes #13191 + +Chris Webb (27 Mar 2024) + +- cmdline-docs: fix make install with configure --disable-docs + + make -C docs/cmdline-opts install depends on all-am, which in turn + depends on $(MANS), unconditionally defined to be $(man_MANS). + + As with CLEANFILES, only add curl.1 to man_MANS when BUILD_DOCS is true + so we don't try to build curl.1 unnecessarily. + + Closes #13198 + +Version 8.7.1 (27 Mar 2024) + +Daniel Stenberg (27 Mar 2024) + +- RELEASE-PROCEDURE: remove old release dates, add new pending ones + +Version 8.7.0 (27 Mar 2024) + +Daniel Stenberg (27 Mar 2024) + +- RELEASE-NOTES: synced + + curl 8.7.0 release + +- THANKS: new contributors from the 8.7.0 release + +- CURLOPT_POSTFIELDS.md: used for MQTT as well + + Closes #13189 + +- http: remove stale comment about rewindbeforesend + + ... because that struct field exists no more. + + Follow-up to 14bcea074a782272. + + Closes #13187 + +- DISTROS: add document with distro pointers + + Lots of organizations distribute curl packages to end users. This is a + collection of pointers to where to learn more about curl on and with + each distro. + + Assisted-by: Alan Coopersmith + Assisted-by: Andrew Kaster + Assisted-by: Andy Fiddaman + Assisted-by: Arjan van de Ven + Assisted-by: Brian Clemens + Assisted-by: chrysos349 on github + Assisted-by: Dan Fandrich + Assisted-by: Dan McDonald + Assisted-by: Gaelan Steele + Assisted-by: graywolf on github + Assisted-by: Jan Macku + Assisted-by: John Marshall + Assisted-by: Jonathan Perkin + Assisted-by: Kevin Daudt + Assisted-by: Marcus Müller + Assisted-by: Michał Górny + Assisted-by: Outvi V + Assisted-by: Ross Burton + Assisted-by: Sean Molenaar + Assisted-by: Till Wegmüller + Assisted-by: Viktor Szakats + Assisted-by: Winni Neessen + + Closes #13178 + +Fabian Keil (25 Mar 2024) + +- wolfSSL: do not call the stub function wolfSSL_BIO_set_init() + + Calling the function isn't necessary and causes the build + to fail when wolfSSL has been compiled with NO_WOLFSSL_STUB: + + Making all in opts + CCLD curl + ld: error: undefined symbol: wolfSSL_BIO_set_init + >>> referenced by wolfssl.c:235 (vtls/wolfssl.c:235) + >>> libcurl_la-wolfssl.o:(wolfssl_bio_cf_create) in archiv + e ../lib/.libs/libcurl.a + cc: error: linker command failed with exit code 1 (use -v to see invocat + ion) + *** Error code 1 + + Closes #13164 + +Daniel Stenberg (25 Mar 2024) + +- cmdline-opts: shorter help texts + + In an effort to increase the readability of the "--help all" output on + narrow (80 column) terminals. + + Co-authored-by: Jay Satiro + + Closes #13169 + +Matt Jolly (25 Mar 2024) + +- curl-rustls.m4: add pkg-config support to rustls detection + + Based on the existing openssl pkg-config detection, this commit tries to + use pkg-config to find `rustls` then falls back to the current approach + if that fails. + + We use the following logic: + + - if no path is provided, just use pkg-config, if it's not there we have + a problem! + - if a path is provided, try pkg-config + + if pkg-config fails, try and find rustls directly + + Closes #13179 + +Mohammadreza Hendiani (25 Mar 2024) + +- TODO: update 13.11 with more information + + Closes #13173 + +Daniel Stenberg (23 Mar 2024) + +- docs/libcurl: generate PROTOCOLS from meta-data + + Remove the PROTOCOLS section from the source files completely and + instead generate them based on the header data in the curldown files. + + It also generates TLS backend information for options marked for TLS as + protocol. + + Closes #13175 + +- CURLMOPT_MAX*: mention what happens if changed mid-transfer + + For CURLMOPT_MAXCONNECTS and CURLMOPT_MAX_HOST_CONNECTIONS + + Ref: #13158 + Closes #13176 + +- docs/libcurl: add TLS backend info for all TLS options + + All man pages that are listed to be for TLS now must also specify + exactly what TLS backends the option works for, or use All if they all + work. + + cd2nroff makes sure this is done and that the listed backends exist. + + Closes #13168 + +- docs/libcurl: cleanups + + - CURLINFO_TLS_SESSION.md: remove mention of NSS + - CURLINFO_TLS_SSL_PTR.md: remove NSS leftover + - CURLOPT_CAINFO.md: drop mention of backends not supporting this + - CURLOPT_CAPATH.md: wolfSSL also supports this + + Closes #13166 + +- docs: make each libcurl man specify protocol(s) + + The mandatory header now has a mandatory list of protocols for which the + manpage is relevant. + + Most man pages already has a "PROTOCOLS" section, but this introduces a + stricter way to specify the relevant protocols. + + cd2nroff verifies that at least one protocol is mentioned (which can be + `*`). + + This information is not used just yet, but A) the PROTOCOLS section can + now instead get generated and get a unified wording across all manpages + and B) this allows us to more reliably filter/search for protocol + specific manpages/options. + + Closes #13166 + +Stefan Eissing (21 Mar 2024) + +- http2, http3: only return CURLE_PARTIAL_FILE when bytes were received + + - should resolve spurious pytest failures when stream were reset + right after response header were received + + Clsoes #13151 + +- http: separate response parsing from response action + + - move code that triggers on end-of-response into separate function from + parsing + - simplify some headp/headerlen usage + - add `httpversion` to SingleRequest to indicate the version of the + current response + + Closes #13134 + +Daniel Stenberg (21 Mar 2024) + +- http2: remove the third (unused) argument from http2_data_done() + + Closes #13154 + +- RELEASE-NOTES: synced + +Evgeny Grin (Karlson2k) (21 Mar 2024) + +- RELEASE-NOTES: corrected + + Corrected link for item 118 + + Closes #13157 + +Daniel Stenberg (19 Mar 2024) + +- CURLOPT_INTERFACE.md: remove spurious amp, add see-also + + Closes #13149 + +Stefan Eissing (19 Mar 2024) + +- http: improve response header handling, save cpu cycles + + Saving some cpu cycles in http response header processing: + - pass the length of the header line along + - use string constant sizeof() instead of strlen() + - check line length if prefix is possible + - switch on first header char to limit checks + + Closes #13143 + +Daniel Stenberg (19 Mar 2024) + +- tool_getparam: accept a blank -w "" + + Added test 468 to verify. + + Regression from 07bcae89d5d00 (shipped in 8.6.0) + Reported-by: Thomas Pyle + Fixes #13144 + Closes #13145 + +Evgeny Grin (Karlson2k) (18 Mar 2024) + +- curl_sha512_256: work around a NetBSD bug + + Based on Michael Kaufmann analysis and suggestion + + Closes #13133 + +Stefan Eissing (18 Mar 2024) + +- http: expect 100 rework + + Move all handling of HTTP's `Expect: 100-continue` feature into a client + reader. Add sending flag `KEEP_SEND_TIMED` that triggers transfer + sending on general events like a timer. + + HTTP installs a `CURL_CR_PROTOCOL` reader when announcing `Expect: + 100-continue`. That reader works as follows: + + - on first invocation, records time, starts the `EXPIRE_100_TIMEOUT` + timer, disables `KEEP_SEND`, enables `KEEP_SEND_TIMER` and returns 0, + eos=FALSE like a paused upload. + + - on subsequent invocation it checks if the timer has expired. If so, it + enables `KEEP_SEND` and switches to passing through reads to the + underlying readers. + + Transfer handling's `readwrite()` will be invoked when a timer expires + (like `EXPIRE_100_TIMEOUT`) or when data from the server arrives. Seeing + `KEEP_SEND_TIMER`, it will try to upload more data, which triggers + reading from the client readers again. Which then may lead to a new + pausing or cause the upload to start. + + Flags and timestamps connected to this have been moved from + `SingleRequest` into the reader's context. + + Closes #13110 + +- mbedtls: fix pytest for newer versions + + Fix the expectations in pytest for newer versions of mbedtls + + Closes #13132 + +Daniel Stenberg (15 Mar 2024) + +- ipv6.md: mention IPv4 mapped addresses + + Reported-by: Josh Soref + Assisted-by: Jay Satiro + Fixes #13112 + Closes #13131 + +Stefan Eissing (15 Mar 2024) + +- http: revisit http_perhapsrewind() + + - use facilities provided by client readers better + - work also for non-uploading requests like GET/HEAD + - update documentation + + Closes #13117 + +- test 1541: verify getinfo values on first header callback + + Reported-by: chensong1211 on github + Ref: #13125 + Closes #13128 + +- TLS: start shutdown only when peer did not already close + + - When curl sees a TCP close from the peer, do not start a TLS shutdown. + TLS shutdown is a handshake and if the peer already closed the + connection, it is not interested in participating. + + Reported-by: dfdity on github + Assisted-by: Jiří Bok + Assisted-by: Pēteris Caune + Fixes #10290 + Closes #13087 + +Daniel Stenberg (14 Mar 2024) + +- RELEASE-NOTES: synced + +- curl: make --libcurl output better CURLOPT_*SSLVERSION + + The option is really two enums ORed together, so it needs special + attention to make the code output nice. + + Added test 1481 to verify. Both the server and the proxy versions. + + Reported-by: Boris Verkhovskiy + Fixes #13127 + Closes #13129 + +- GHA/linux: add sysctl trick to work-around GitHub runner issue + + The GitHub image runner update from 20240304.1.0 to 20240310.1 + introduces a problem for clang-14. The issue is caused by + incompatibility between llvm 14 provided in ubuntu-22.04 image and the + much newer kernel configured with high-entropy ASLR. + + As a work-around, we issue a sysctl command to lower the entropy and get + clang-14 to work again. + + URL: https://github.com/actions/runner-images/issues/9491 + + Closes #13124 + +- SPONSORS: describe the basics + + Closes #13119 + +- GOVERNANCE: document the core team + + Closes #13118 + +Jay Satiro (13 Mar 2024) + +- vquic-tls: fix the error code returned for bad CA file + + - Return CURLE_SSL_CACERT_BADFILE if wolfSSL encounters a problem + reading the cert file or path. + + This is a follow-up to the parent commit aedbbdf1. + + Reported-by: Karthikdasari0423@users.noreply.github.com + + Fixes https://github.com/curl/curl/issues/13115 + +Daniel Stenberg (12 Mar 2024) + +- vquic-tls: return appropirate errors on wolfSSL errors + + Reported-by: Dexter Gerig + Closes #13107 + +Viktor Szakats (12 Mar 2024) + +- tidy-up: one comment and EOF newlines + + Reviewed-by: Daniel Stenberg + Closes #13108 + +Daniel Stenberg (12 Mar 2024) + +- cmdline-opts: language cleanups + + Use imperative mood consistently for the first sentence describing an + option. + + "Set this" instead "tell curl to set" or "this sets..." + + Plus some extra cleanups and rephrasing. + + Closes #13106 + +- managen: remove space before protocols + + For options that are listed for specific protocols, the protocols (shown + first within parentheses) are now output without the leading space in the + manpage output. + + Closes #13105 + +Jay Satiro (12 Mar 2024) + +- mbedtls: properly cleanup the thread-shared entropy + + - Store the state of the thread-shared entropy for global init/cleanup. + + - Use curl's thread support of mbedtls for all Windows builds instead of + just when the threaded resolver is used via USE_THREADS_WIN32. + + Prior to this change on global cleanup curl builds that have curl thread + support for mbedtls freed the entropy (8b1d2298) but failed to mark that + it had been freed, which caused problems on subsequent init + transfer. + + Bug: https://github.com/curl/curl/discussions/11919#discussioncomment-8687105 + Reported-by: awesomekosm@users.noreply.github.com + + Closes https://github.com/curl/curl/pull/13071 + +Daniel Stenberg (12 Mar 2024) + +- tool_getparam: handle non-existing (out of range) short-options + + ... correctly, even when they follow an existing one without a space in + between. + + Verify with test 467 + + Follow-up to 07dd60c05b + Reported-by: Geeknik Labs + Fixes #13101 + Closes #13102 + +Stefan Eissing (11 Mar 2024) + +- lib: move 'done' parameter to SingleRequests + + A transfer may do several `SingleRequest`s for its success. This happens + regularly for authentication, follows and retries on failed connections. + The "readwrite()" calls and functions connected to those carried a `bool + *done` parameter to indicate that the current `SingleRequest` is over. + This may happen before `upload_done` or `download_done` bits of + `SingleRequest` are set. + + The problem with that is now `write_resp()` protocol handlers are + invoked in places where the `bool *done` cannot be passed up to the + caller. Instead of being a bool in the call chain, it needs to become a + member of `SingleRequest`, reflecting its state. + + This removes the `bool *done` parameter and adds the `done` bit to + `SingleRequest` instead. It adds `Curl_req_soft_reset()` for using a + `SingleRequest` in a follow up, clearing `done` and other + flags/counters. + + Closes #13096 + +- request: clarify message when request has been sent off + + Change the "uploaded and fine" message for requests without a body + + Reported-by: Karthikdasari0423 on github + Fixes #13093 + Closes #13095 + +Daniel Stenberg (11 Mar 2024) + +- RELEASE-NOTES: synced + +Stefan Eissing (9 Mar 2024) + +- lib: keep conn IP information together + + new struct ip_quadruple for holding local/remote addr+port + + - used in data->info and conn and cf-socket.c + - copy back and forth complete struct + - add 'secondary' to conn + - use secondary in reporting success for ftp 2nd connection + + Reported-by: DasKutti on github + Fixes #13084 + Closes #13090 + +Daniel Stenberg (8 Mar 2024) + +- scripts/managen: the new name and home for the manpage generator + + It was previously docs/cmdline-opts/gen.pl + + Closes #13089 + +- VULN-DISCLOSURE-POLICY.md: update detail about CVE requests + + curl is a CNA now + + Closes #13088 + +Stefan Eissing (8 Mar 2024) + +- lib: client reader polish + + - seek_func/seek_client, use transfer values only + - remove copies held in `struct connectdata`, use only + ever `data->set.seek_func` + - resolves possible issues in multiuse connections + - new mime post reader eliminates need to ever overwriting this + + - websockets, remove empty Curl_ws_done() function + + Closes #13079 + +Marcel Raad (8 Mar 2024) + +- lib1598: fix `CURLOPT_POSTFIELDSIZE` usage + + It requires a `long` argument. + + Closes https://github.com/curl/curl/pull/13085 + +Daniel Stenberg (8 Mar 2024) + +- docs/cmdline-opts: drop the curl.1 from the dist tarball + + Since it is no longer needed for building tool_hugehelp.c and all the + docs is available in readable markdown format in the tarball, the peeps + that don't want to build the manpage still do good. + + Removing it also fixes the complexity of out-of-tree builds when the + curl.1 exists in the source tree. + +- test1140/1173: extend wildcards to find curl.1 + + ... in its new build path. + + Also update the test scripts to be more precise in error messages to + help us understand CI errors better. + + Follow-up to f03c85635f35269f1 + Ref: #13029 + Closes #13083 + +- http2: minor tweaks to optimize two struct sizes + + - use BIT() instead of bool + - place the struct fields in (roughly) size order + + Closes #13082 + +- buildconf.bat: remove outdated groff/nroff use + + - don't try to generate the real hugehelp file, because it requires + curl.txt which needs a build + - don't attempt to do anything in a c-ares subdirectory + + Follow-up to f03c85635f35269 + Closes #13078 + +- http2: memory errors in the push callbacks are fatal + + Use the correct nghttp2 error code accordingly. + + Closes #13081 + +Viktor Szakats (7 Mar 2024) + +- mkhelp: rename variable to fix compiler warnings + + ``` + src\tool_operate.c(541,33): warning C4459: declaration of 'm' hides global de + claration [_bld\src\curl.vcxproj] + _bld\src\tool_hugehelp.c(8,27): + see declaration of 'm' + src\tool_paramhlp.c(307,14): warning C4459: declaration of 'm' hides global d + eclaration [_bld\src\curl.vcxproj] + src\tool_progress.c(118,16): warning C4459: declaration of 'm' hides global d + eclaration [_bld\src\curl.vcxproj] + src\tool_writeout.c(288,31): warning C4459: declaration of 'm' hides global d + eclaration [_bld\src\curl.vcxproj] + ``` + Ref: https://ci.appveyor.com/project/curlorg/curl/builds/49348159/job/51ee75c + d2n0wj6lc#L614 + + Reviewed-by: Daniel Stenberg + Closes #13077 + +Daniel Stenberg (7 Mar 2024) + +- KNOWN_BUGS: POP3 issue when reading small chunks + + Closes #12063 + +- RELEASE-NOTES: synced + +Robert Moreton (7 Mar 2024) + +- asyn-ares: fix data race warning + + - Store the c-ares version during global init. + + Prior to this change several threads could write the same data to a + static int variable at the same time. Though in practice it's not a + problem ThreadSanitizer may warn. + + Reported-by: Nikita Taranov + Assisted-by: Jay Satiro + + Fixes #13065 + Closes #13000 + +Stefan Eissing (7 Mar 2024) + +- hyper: implement unpausing via client reader + + Just a tidy up to contain 'ifdef' pollution of common + code parts with implementation specifics. + + - remove the ifdef hyper unpausing in easy.c + - add hyper client reader for CURL_CR_PROTOCOL phase + that implements the unpause method for calling + the hyper waker if it is set + + Closes #13075 + +- ngtcp2: no recvbuf for stream + + - write response data directly to the transfer via + `Curl_xfer_write_resp()` like we do in HTTP/2. + + Closes #13073 + +- docs/cmdline-opts/.gitignore: ignore curl.txt + + Closes #13076 + +Evgeny Grin (Karlson2k) (7 Mar 2024) + +- sha512_256: add support for GnuTLS and OpenSSL + + This is a follow-up for PR #12897. + + Add support for SHA-512/256 digest calculation by TLS backends. + Currently only OpenSSL and GnuTLS (actually, nettle) support + SHA-512/256. + + Closes #13070 + +- digest: add check for hashing error + + Closes #13072 + +Viktor Szakats (7 Mar 2024) + +- cmake: enable `ENABLE_CURL_MANUAL` by default + + Meaning `curl.1` and `src/tool_hugehelp.c` are built by default, + and `--manual` in curl tool is also enabled by default. + + This syncs behaviour with autotools. + + For a reproducible `curl.1`, `SOURCE_DATE_EPOCH` needs to be set + to a consistent date, e.g. the timestamp of `CHANGES`. + + A pre-built manual (e.g. the one distributed in the official source + tarball) will be ignored and rebuilt after this patch, unless + explicitly disabling this option. + + Fixes #13028 + Closes #13069 + +Stefan Eissing (7 Mar 2024) + +- http2: push headers better cleanup + + - provide common cleanup method for push headers + + Closes #13054 + +Daniel Stenberg (7 Mar 2024) + +- GIT-INFO: convert to markdown + + Closes #13074 + +Richard Levitte (7 Mar 2024) + +- cmake: fix libcurl.pc and curl-config library specifications + + Letting CMake figure out where libraries are located gives you full + paths. When generating libcurl.pc and curl-config, getting libraries as + full paths is unusual when one expects to get a list of -l. + + To meet expectations, an effort is made to convert the full paths into + -l, possibly with -L before it. + + Fixes #6169 + Fixes #12748 + Closes #12930 + +Daniel Stenberg (7 Mar 2024) + +- test463: HTTP with -d @file with file containing CR, LF and null byte + +- paramhlp: fix CRLF-stripping files with "-d @file" + + All CR and LF bytes should be stripped, as documented, and all other + bytes are inluded in the data. Starting now, it also excludes null bytes + as they would otherwise also cut the data short. + + Reported-by: Simon K + Fixes #13063 + Closes #13064 + +Viktor Szakats (7 Mar 2024) + +- cmake: fix `CURL_WINDOWS_SSPI=ON` with Schannel disabled + + Prior to this change `CURL_WINDOWS_SSPI` was accidentally forced `OFF` + when building without the Schannel TLS backend. + + This in turn may have caused Kerberos, SPNEGO and SSPI features + disappearing even with `CURL_WINDOWS_SSPI=ON` set. + + This patch fixes it by using the `CURL_USE_SCHANNEL` setting as a + default for `CURL_WINDOWS_SSPI`, but allowing a manual override. + + Also update the option text to better tell its purpose. + + Thanks-to: Andreas Loew + Reviewed-by: Daniel Stenberg + Ref: #13056 + Closes #13061 + +Jay Satiro (6 Mar 2024) + +- KNOWN_BUGS: FTPS server compatibility on Windows with Schannel + + - Remove "2.12 FTPS with Schannel times out file list operation" + + - Remove "7.12 FTPS directory listing hangs on Windows with Schannel" + + - Add "7.12 FTPS server compatibility on Windows with Schannel" + + This change adds a more generic bug description that explains FTPS with + the latest curl and Schannel is not widely used and may have more bugs + than other TLS backends. + + The two removed FTPS Schannel bugs can't be reproduced any longer and + were likely fixed by 24d6c288. + + Ref: https://github.com/curl/curl/issues/5284 + Ref: https://github.com/curl/curl/issues/9161 + Ref: https://github.com/curl/curl/issues/12894 + + Closes https://github.com/curl/curl/pull/13032 + +- trace-config.md: remove the mutexed options list + + - Remove the rendered manpage message that says: + "[--trace-config] is mutually exclusive to --trace and -v, --verbose". + + Actually it can be used with either of those options, which are mutually + exclusive to each other but not to --trace-config. + + Ref: https://curl.se/docs/manpage.html#--trace-config + + Closes https://github.com/curl/curl/pull/13031 + +Daniel Stenberg (6 Mar 2024) + +- mkhelp: simplify the generated hugehelp program + + Use a plain array and puts() every line, also allows us to provide the + strings without ending newlines. + + - merge blank lines into the next one as a prefixed newline. + - turn eight consecutive spaces into a tab (since they can only be on the + left side of text) + - the newly generated tool_hugehelp is 3K lines shorter and 50K smaller + - modifies the top logo layout a little by reducing the indent + + Closes #13047 + +- docs: ascii version of manpage without nroff + + Create ASCII version of manpage without nroff + + - build src/tool_hugegelp.c from the ascii manpage + - move the the manpage and the ascii version build to docs/cmdline-opts + - remove all use of nroff from the build process + - should make the build entirely reproducible (by avoiding nroff) + + - partly reverts 2620aa9 to build libcurl option man pages one by one + in cmake because the appveyor builds got all crazy until I did + + The ASCII version of the manpage + + - is built with gen.pl, just like the manpage is + - has a right-justified column making the appearance similar to the previous + version + - uses a 4-space indent per level (instead of the old version's 7) + - does not do hyphenation of words (which nroff does) + + History + + We first made the curl build use nroff for building the hugehelp file in + December 1998, for curl 5.2. + + Closes #13047 + +Stefan Eissing (6 Mar 2024) + +- lib: add `void *ctx` to reader/writer instances + + - `struct Curl_cwriter` and `struct Curl_creader` now carry a + `void *ctx` member that points to the instance as allocated. + - using `r->ctx` and `w->ctx` as pointer to the instance specific + struct that has been allocated + + Reported-by: Rudi Heitbaum + Fixes #13035 + Closes #13059 + +- http: fix dead code in setting post client reader + + - postsize was always 0, thus the check's else never happened + after the mime client reader was introduced + + Follow-up to 0ba47146f7ff3d + Closes #13060 + +- http2: fix push discard + + - fix logic in discarding a failed pushed stream so that + stream context is properly cleaned up + + Closes #13055 + +- transfer.c: break receive loop in speed limited transfers + + - the change breaks looping in transfer.c receive for transfers that are + speed limited on having gotten *some* bytes. + - the overall speed limit timing is done in multi.c + + Reported-by: Dmitry Karpov + Bug: https://curl.se/mail/lib-2024-03/0001.html + Closes #13050 + +- mime: add client reader + + Add `mime` client reader. Encapsulates reading from mime parts, getting + their length, rewinding and unpausing. + + - remove special mime handling from sendf.c and easy.c + - add general "unpause" method to client readers + - use new reader in http/imap/smtp + - make some mime functions static that are now only used internally + + In addition: + - remove flag 'forbidchunk' as no longer needed + + Closes #13039 + +Daniel Stenberg (5 Mar 2024) + +- RELEASE-NOTES: synced + +- TODO: remove "build HTTP/3 with OpenSSL and nghttp3 using cmake" + + Follow-up to 8e741644a229c37 + +Tal Regev (5 Mar 2024) + +- cmake: add USE_OPENSSL_QUIC support + + Closes #13034 + +Stefan Eissing (5 Mar 2024) + +- TIMER_STARTTRANSFER: set the same for everyone + + - set TIMER_STARTTRANSFER on seeing the first response bytes + in the download client writer, not coming from a CONNECT + - initialized the timer the same way for all protocols + - remove explicit setting of TIMER_STARTTRANSFER in file.c + and c-hyper.c + + Closes #13052 + +Michael Kaufmann (5 Mar 2024) + +- http: better error message for HTTP/1.x response without status line + + If a response without a status line is received, and the connection is + known to use HTTP/1.x (not HTTP/0.9), report the error "Invalid status + line" instead of "Received HTTP/0.9 when not allowed". + + Closes #13045 + +Viktor Szakats (5 Mar 2024) + +- KNOWN_BUGS: fix typo + + Reviewed-by: Daniel Stenberg + Closes #13051 + +Sebastian Neubauer (5 Mar 2024) + +- smpt: fix starttls + + In cases where the connection was fast, curl sometimes failed to open a + connection. This fixes a regression of c2d973627bab12abc5486a3f3. + + The regression triggered in these steps: + + 1. Create an smtp connection + 2. Use STARTTLS + 3. Receive the response + 4. We are inside the loop in `smtp_statemachine`, calling + `smtp_state_starttls_resp` + 5. In the good flow, we exit the loop, re-enter `smtp_statemachine` and + run `smtp_perform_upgrade_tls` at the start of the function. + + In the bad flow, we stay in the while loop, calling + `Curl_pp_readresp`, which reads part of the TLS handshake and things + go wrong. + + The reason is that `Curl_pp_moredata` changed behavior and always + returns `true`, so we stay in the loop in `smtp_statemachine`. With a + slow connection `Curl_pp_readresp` cannot read new data and returns + `CURL_AGAIN`, so we leave the loop and re-enter `smtp_statemachine`. + + With a fast connection, `Curl_pp_readresp` reads new data from the tcp + connection, which is part of the TLS handshake. + + The fix is in `Curl_pp_moredata`, which needs to take the final line + into account and return `false` if only the final line is stored. + + Closes #13048 + +Stefan Eissing (5 Mar 2024) + +- lib: enhance client reader resume + rewind + + - update client reader documentation + - client reader, add rewind capabilities + - tell creader to rewind on next start + - Curl_client_reset() will keep reader for future rewind if requested + - add Curl_client_cleanup() for freeing all resources independent of + rewinds + - add Curl_client_start() to trigger rewinds + - move rewind code from multi.c to sendf.c and make part of + "cr-in"'s implementation + - http, move the "resume_from" handling into the client readers + - the setup of a HTTP request is reshuffled to follow: + * determine method, target, auth negotiation + * install the client reader(s) for the request, including crlf + conversions and "chunked" encoding + * apply ranges to client reader + * concat request headers, upgrades, cookies, etc. + * complete request by determining Content-Length of installed + readers in combination with method + * send + - add methods for client readers to + * return the overall length they will generate (or -1 when unknown) + * return the amount of data on the CLIENT level, so that + expect-100 can decide if it want to apply itself + * set a "resume_from" offset or fail if unsupported + - struct HTTP has become largely empty now + - rename `Client_reader_*` to `Curl_creader_*` + + Closes #13026 + +Viktor Szakats (5 Mar 2024) + +- openssl-quic: fix BIO leak and Windows warning + + Caused by an accidentally duplicated line in + d6825df334def106f735ce7e0c1a2ea87bddffb0. + + ``` + .../lib/vquic/curl_osslq.c:1095:30: warning: implicit conversion loses intege + r precision: 'curl_socket_t' (aka 'unsigned long long') to 'int' [-Wshorten-6 + 4-to-32] + 1095 | bio = BIO_new_dgram(ctx->q.sockfd, BIO_NOCLOSE); + | ~~~~~~~~~~~~~ ~~~~~~~^~~~~~ + 1 warning and 2 errors generated. + ``` + + Reviewed-by: Stefan Eissing + Closes #13043 + +- openssl-quic: fix unity build, casing, indentation + + - rename static functions to avoid duplicate symbols in unity mode. + - windows -> Windows/window in error message and comment. + - fix indentation. + + Reviewed-by: Stefan Eissing + Closes #13044 + +Daniel Stenberg (5 Mar 2024) + +- gen.pl: make the "manpageification" faster + + The function that replaces occurances of "--longoption" with "-Z, + --longoption" etc with the proper highlight applied, no longer loops + over the options. + + Closes #13041 + +- CONTRIBUTE: update the section on documentation format + + ... since most of it is markdown now. + + Closes #13046 + +- smtp: free a temp resource + + The returned address needs to be freed. + + Follow-up to e3905de8196d67b89df1602feb84c1f993211b20 + Spotted by Coverity + + Closes #13038 + +- _VARIABLES.md: improve the description + + Closes #13040 + +dependabot[bot] (4 Mar 2024) + +- build(deps): bump fsfe/reuse-action from 2 to 3 + + Bumps [fsfe/reuse-action](https://github.com/fsfe/reuse-action) from 2 to 3. + - [Release notes](https://github.com/fsfe/reuse-action/releases) + - [Commits](https://github.com/fsfe/reuse-action/compare/v2...v3) + + --- + updated-dependencies: + - dependency-name: fsfe/reuse-action + dependency-type: direct:production + update-type: version-update:semver-major + ... + + Signed-off-by: dependabot[bot] + +Stefan Eissing (4 Mar 2024) + +- pytest: adapt to API change + + - pytest has changed the signature of the hook pytest_report_header() + for some obscure reason and that change landed in our CI now + + - remove the changed param that we never used anyway + + Closes #13037 + +Daniel Stenberg (4 Mar 2024) + +- cookie: if psl fails, reject the cookie + + A libpsl install without data and no built-in database is now considered + bad enough to reject all cookies since they cannot be checked. It is + somewhat of a user error, but still. + + Reported-by: Dan Fandrich + Closes #13033 + +Stefan Eissing (4 Mar 2024) + +- lib: further send/upload handling polish + + - Move all the "upload_done" handling to request.c + + - add possibility to abort sending of a request + - add `Curl_req_done_sending()` for checks + - transfer.c: readwrite_upload() now clean + + - removing data->state.ulbuf and data->req.upload_fromhere + + - as well as data->req.upload_present + - set data->req.upload_done on having read all from + the client and completely flushed the send buffer + + - tftp, remove setting of data->req.upload_fromhere + + - serves no purpose as `upload_present` is not set + and the data itself is directly `sendto()` anyway + + - smtp, make upload EOB conversion a client reader + - xfer_ulbuf addition + + - add xfer_ulbuf for borrowing, similar to xfer_buf + - use in file upload + - use in c-hyper body sending + + - h1-proxy, remove init of data->state.uilbuf that is never used + - smb, add own send_buf instead of using data->state.ulbuf + + Closes #13010 + +Daniel Stenberg (4 Mar 2024) + +- RELEASE-NOTES: synced + +kpcyrd (3 Mar 2024) + +- rustls: fix two warnings related to number types + + Reported-by: Gisle Vanem + Follow-up to #12989 + Closes #13017 + +Stefan Eissing (3 Mar 2024) + +- bufq: writing into a softlimit queue cannot be partial + + - when unable to obtain a new chunk on a softlimit bufq, + this is an allocation error and needs to be reported as + such. + - writes into a soflimit bufq never must be partial success + + Reported-by: Dan Fandrich + Fixes #13020 + Closes #13023 + +Dan Fandrich (2 Mar 2024) + +- configure: Don't build shell completions when disabled + + With the recent changes to completion file building, the files were + built always and only installation was selectively disabled. Now, when + they are disabled they aren't even built, avoiding a build-time error in + environments where it's not possible to run the curl binary that was + just created (e.g. if library paths were not set up correctly). + + Follow-up to 0f7aba83c + + Reported-by: av223119 on github + Fixes #13027 + Closes #13030 + +Jay Satiro (2 Mar 2024) + +- cmdline-opts/_EXITCODES: sync with libcurl-errors + + - Add error code 100 (CURLE_TOO_LARGE) to the list of error codes that + can be returned by the curl tool. + + Closes https://github.com/curl/curl/pull/13015 + +Stefan Eissing (1 Mar 2024) + +- hyper: disable test1598 due to lack of trailer support + + Follow-up to 50838095 + + Closes #13016 + +Dan Fandrich (1 Mar 2024) + +- ftp: Mark a const buffer as const + +- appveyor: Properly skip if only CircleCI is changed + +- docs: Update minimal binary size in INSTALL.md + + Include more options to reduce binary size. + +- configure: Don't make shell completions without perl + + The code that attempted to skip building the shell completions didn't + work properly and tried to build them even if perl wasn't available. + This step, as well as the install step, is now properly skipped without + perl. + + Follow-up to 89733e2dd + + Closes #13022 + +RainRat (1 Mar 2024) + +- misc: Fix typos in docs and lib + + This fixes miscellaneous typos and duplicated words in the docs, lib + and test comments and a few user facing errorstrings. + + Author: RainRat on Github + Reviewed-by: Daniel Gustafsson + Reviewed-by: Dan Fandrich + Closes: #13019 + +Dan Fandrich (29 Feb 2024) + +- configure: build & install shell completions when enabled + + The --with-fish-functions-dir and --with-zsh-functions-dir options + currently have no effect on a normal build because the scripts/ directory + where they're used is not built. Add scripts/ to a normal build and + change the completion options to default to off to preserve the existing + behaviour. + + Closes: #12906 + +- github/labeler: improve the match patterns + +Stefan Eissing (28 Feb 2024) + +- tests: add test1598 for POST with trailers + + - test POST fields with trailers and chunked encoding + + Ref: #12938 + Closes #13009 + +Daniel Stenberg (28 Feb 2024) + +- cmdline-opts/_VERSION: provide %VERSION correctly + + ... so that it does not get included verbatim in the output. Fixes a + regression shipped in 8.6.0. + + Also fix a format mistake in form.md + + Closes #13008 + +Stefan Eissing (28 Feb 2024) + +- lib: Curl_read/Curl_write clarifications + + - replace `Curl_read()`, `Curl_write()` and `Curl_nwrite()` to + clarify when and at what level they operate + - send/recv of transfer related data is now done via + `Curl_xfer_send()/Curl_xfer_recv()` which no longer has + socket/socketindex as parameter. It decides on the transfer + setup of `conn->sockfd` and `conn->writesockfd` on which + connection filter chain to operate. + - send/recv on a specific connection filter chain is done via + `Curl_conn_send()/Curl_conn_recv()` which get the socket index + as parameter. + - rename `Curl_setup_transfer()` to `Curl_xfer_setup()` for + naming consistency + - clarify that the special CURLE_AGAIN hangling to return + `CURLE_OK` with length 0 only applies to `Curl_xfer_send()` + and CURLE_AGAIN is returned by all other send() variants. + - fix a bug in websocket `curl_ws_recv()` that mixed up data + when it arrived in more than a single chunk (to be made + into a sperate PR, also) + + Added as documented [in + CLIENT-READER.md](https://github.com/curl/curl/blob/5b1f31dfbab8aef467c419c68 + aa06dc738cb75d4/docs/CLIENT-READERS.md). + + - old `Curl_buffer_send()` completely replaced by new `Curl_req_send()` + - old `Curl_fillreadbuffer()` replaced with `Curl_client_read()` + - HTTP chunked uploads are now formatted in a client reader added when + needed. + - FTP line-end conversions are done in a client reader added when + needed. + - when sending requests headers, remaining buffer space is filled with + body data for sending in "one go". This is independent of the request + body size. Resolves #12938 as now small and large requests have the + same code path. + + Changes done to test cases: + + - test513: now fails before sending request headers as this initial + "client read" triggers the setup fault. Behaves now the same as in + hyper build + - test547, test555, test1620: fix the length check in the lib code to + only fail for reads *smaller* than expected. This was a bug in the + test code that never triggered in the old implementation. + + Closes #12969 + +Daniel Gustafsson (28 Feb 2024) + +- curldown: Fix email address in Copyright + + The curldown conversion accidentally replaced daniel@haxx.se with + just daniel.se. This reverts back to the proper email address in + the curldown docs as well as in a few other stray places where it + was incorrect (while unrelated to curldown). + + Reviewed-by: Daniel Stenberg + Closes: #12997 + +Daniel Stenberg (28 Feb 2024) + +- getparam: make --ftp-ssl work again + + Follow-up to 9e4e527 which accidentally broke it + + Reported-by: Jordan Brown + Fixes #13006 + Closes #13007 + +- KNOWN_BUGS: IMAPS connection fails with rustls error + + Closes #10457 + +- KNOWN_BUGS: FTPS upload, FileZilla, GnuTLS and close_notify + + Closes #11383 + +- KNOWN_BUGS: Implicit FTPS upload timeout + + Closes #11720 + +- KNOWN_BUGS: HTTP/2 prior knowledge over proxy + + Closes #12641 + +- TODO: build HTTP/3 with OpenSSL and nghttp3 using cmake + + Closes #12988 + +- TODO: Select signature algorithms + + Closes #12982 + +- examples: use present tense in comments + + remove "will" and some other word fixes + + Closes #13003 + +- docs: more language cleanups + + - present tense + - avoid bad words + + Closes #13003 + +Daniel Gustafsson (27 Feb 2024) + +- setopt: Fix disabling all protocols + + When disabling all protocols without enabling any, the resulting + set of allowed protocols remained the default set. Clearing the + allowed set before inspecting the passed value from --proto make + the set empty even in the errorpath of no protocols enabled. + + Co-authored-by: Dan Fandrich + Reported-by: Dan Fandrich + Reviewed-by: Daniel Stenberg + Closes: #13004 + +Andreas Kiefer (27 Feb 2024) + +- fopen: fix narrowing conversion warning on 32-bit Android + + This was fixed in commit 06dc599405f, but came back in commit + 03cb1ff4d62. + + 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, but only for + 32-bit Android builds, because other architectures and platforms are + not affected. + + 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/12998 + +Stefan Eissing (27 Feb 2024) + +- lib: Curl_read/Curl_write clarifications + + - replace `Curl_read()`, `Curl_write()` and `Curl_nwrite()` to + clarify when and at what level they operate + - send/recv of transfer related data is now done via + `Curl_xfer_send()/Curl_xfer_recv()` which no longer has + socket/socketindex as parameter. It decides on the transfer + setup of `conn->sockfd` and `conn->writesockfd` on which + connection filter chain to operate. + - send/recv on a specific connection filter chain is done via + `Curl_conn_send()/Curl_conn_recv()` which get the socket index + as parameter. + - rename `Curl_setup_transfer()` to `Curl_xfer_setup()` for + naming consistency + - clarify that the special CURLE_AGAIN hangling to return + `CURLE_OK` with length 0 only applies to `Curl_xfer_send()` + and CURLE_AGAIN is returned by all other send() variants. + - fix a bug in websocket `curl_ws_recv()` that mixed up data + when it arrived in more than a single chunk + + The method for sending not just raw bytes, but bytes that are either + "headers" or "body". The send abstraction stack, to to bottom, now is: + + * `Curl_req_send()`: has parameter to indicate amount of header bytes, + buffers all data. + * `Curl_xfer_send()`: knows on which socket index to send, returns + amount of bytes sent. + * `Curl_conn_send()`: called with socket index, returns amount of bytes + sent. + + In addition there is `Curl_req_flush()` for writing out all buffered + bytes. + + `Curl_req_send()` is active for requests without body, + `Curl_buffer_send()` still being used for others. This is because the + special quirks need to be addressed in future parts: + + * `expect-100` handling + * `Curl_fillreadbuffer()` needs to add directly to the new + `data->req.sendbuf` + * special body handlings, like `chunked` encodings and line end + conversions will be moved into something like a Client Reader. + + In functions of the pattern `CURLcode xxx_send(..., ssize_t *written)`, + replace the `ssize_t` with a `size_t`. It makes no sense to allow for negativ + e + values as the returned `CURLcode` already specifies error conditions. This + allows easier handling of lengths without casting. + + Closes #12964 + +Daniel Stenberg (27 Feb 2024) + +- multi: make add_handle free any multi_easy + + If the easy handle that is being added to a multi handle has previously + been used for curl_easy_perform(), there is a private multi handle here + that we can kill off. While it flushes some caches etc for the easy + handle would it be used for an easy interface transfer again after being + used in the multi stack, this cleanup simplifies behavior and uses less + memory. + + Closes #12992 + +- docs: use present tense + + avoid "will", detect "will" as a bad word in the CI + + Also line wrapped a bunch of paragraphs + + Closes #13001 + +- CURLOPT_SSL_CTX_FUNCTION.md: no promises of lifetime after return + + ... and cleanup other language. + + Closes #12999 + +Stefan Eissing (27 Feb 2024) + +- lib: send rework + + Curl_read/Curl_write clarifications + + - replace `Curl_read()`, `Curl_write()` and `Curl_nwrite()` to 1clarify + when and at what level they operate + + - send/recv of transfer related data is now done via + `Curl_xfer_send()/Curl_xfer_recv()` which no longer has + socket/socketindex as parameter. It decides on the transfer setup of + `conn->sockfd` and `conn->writesockfd` on which connection filter + chain to operate. + + - send/recv on a specific connection filter chain is done via + `Curl_conn_send()/Curl_conn_recv()` which get the socket index as + parameter. + + - rename `Curl_setup_transfer()` to `Curl_xfer_setup()` for naming + consistency + + - clarify that the special CURLE_AGAIN handling to return `CURLE_OK` + with length 0 only applies to `Curl_xfer_send()` and CURLE_AGAIN is + returned by all other send() variants. + + SingleRequest reshuffling + + - move functions into request.[ch] + - differentiate between reset and free + - add Curl_req_done() to perform last actions + - add a send `bufq` to SingleRequest for future use in keeping upload data + + Closes #12963 + +Daniel Stenberg (26 Feb 2024) + +- RELEASE-NOTES: synced + +- http_chunks: remove unused 'endptr' variable + + Closes #12996 + +Louis Solofrizzo (26 Feb 2024) + +- lib: initialize output pointers to NULL before calling strto[ff,l,ul] + + In order to make MSAN happy: + + ==2200945==WARNING: MemorySanitizer: use-of-uninitialized-value + #0 0x596f3b3ed246 in curlx_strtoofft [...]/libcurl/src/lib/strtoofft.c:23 + 9:11 + #1 0x596f3b402156 in Curl_httpchunk_read [...]/libcurl/src/lib/http_chunk + s.c:149:12 + #2 0x596f3b348550 in readwrite_data [...]/libcurl/src/lib/transfer.c:607: + 11 + [...] + + ==2202041==WARNING: MemorySanitizer: use-of-uninitialized-value + #0 0x5a3fab66a72a in Curl_parse_port [...]/libcurl/src/lib/urlapi.c:547:8 + #1 0x5a3fab650645 in parse_authority [...]/libcurl/src/lib/urlapi.c:796:1 + 2 + #2 0x5a3fab6740f6 in parseurl [...]/libcurl/src/lib/urlapi.c:1176:16 + #3 0x5a3fab664fc5 in parseurl_and_replace [...]/libcurl/src/lib/urlapi.c: + 1342:12 + [...] + + ==2202320==WARNING: MemorySanitizer: use-of-uninitialized-value + #0 0x569076a0d6b0 in ipv4_normalize [...]/libcurl/src/lib/urlapi.c:683:12 + #1 0x5690769f2820 in parse_authority [...]/libcurl/src/lib/urlapi.c:803:1 + 0 + #2 0x569076a160f6 in parseurl [...]/libcurl/src/lib/urlapi.c:1176:16 + #3 0x569076a06fc5 in parseurl_and_replace [...]/libcurl/src/lib/urlapi.c: + 1342:12 + [...] + + Signed-off-by: Louis Solofrizzo + Closes #12995 + +Stefan Eissing (26 Feb 2024) + +- lib: move client writer into own source + + Refactoring of the client writer that passes the data to the + client/application's callback functions. + + - split out into own source cw-out.[ch] from sendf.c + + - move tempwrite and tempcount from data->state into the context of the + client writer + + - redesign the 3 tempwrite dynbufs as a linked list of dynbufs. On + paused transfers, this allows to "record" interleaved HEADER/BODY + chunks to be "played back" in the same order on unpausing. + + - keep the overall size limit of all buffered data to DYN_PAUSE_BUFFER. + On exceeding that, return CURLE_TOO_LARGE instead of + CURLE_OUT_OF_MEMORY as before. + + - add method to be called when a transfer is DONE to allow writing of + any data still buffered + + - when paused, record HEADER writes exactly as they come for later + playback. HEADERs are documented to be written one-by-one. + + Closes #12898 + +- urldata: move authneg bit from conn to Curl_easy + + - from `conn->bits.authneg` to `data->req.authneg` + - this is a property of the request about to be made + and not a property of the connection + - in multiuse connections, transfer could step on each others + toes here potentially. + + Closes #12949 + +- c-hyper: add header collection writer in hyper builds + + Closes #12880 + +- http: move headers collecting to writer + + - add a client writer that does "push" response + headers written to the client if the headers api + is enabled + - remove special handling in sendf.c + - needs to be installed very early on connection + setup to catch CONNECT response headers + + Closes #12880 + +- sendf: Curl_client_write(), make passed in buf const + +Michał Antoniak (26 Feb 2024) + +- lib: remove curl_mimepart object when CURL_DISABLE_MIME + + Remove curl_mimepart object from UserDefined structure when + CURL_DISABLE_MIME flag is active. Reduce size of UserDefined structure. + + Also remove unreachable code: when CURL_DISABLE_MIME is set, httpreq can + never have HTTPREQ_POST_MIME value and the same goes for the + CURL_DISABLE_FORM_API flag and the HTTPREQ_POST_FORM value + + Closes #12948 + +kpcyrd (26 Feb 2024) + +- rustls: make curl compile with 0.12.0 + + Closes #12989 + +Daniel Stenberg (26 Feb 2024) + +- strtoofft: fix the overflow check + + ... to not rely on wrapping, since it is an undefined behavior that is + not what always might happen. This is in our private strtoff() parser + function, used only on platforms without a native version. + + Reported-by: vulnerabilityspotter on hackerone + Closes #12990 + +- libssh/libssh2: return error on too big range + + If trying to get the range 0 - 2^63 and the remote file is 2^63 bytes or + larger. + + Fixes #12983 + Closes #12984 + +Scott Talbert (24 Feb 2024) + +- setopt: fix check for CURLOPT_PROXY_TLSAUTH_TYPE value + + Prior to this change CURLOPT_PROXY_TLSAUTH_TYPE would return + CURLE_BAD_FUNCTION_ARGUMENT on any type other than NULL. Since there is + only one type of TLS auth and it is also the default (SRP) the TLS auth + would work anyway. + + Closes https://github.com/curl/curl/pull/12981 + +Jay Satiro (24 Feb 2024) + +- mprintf: fix format prefix I32/I64 for windows compilers + + - Support I32 & I64 (eg: %I64d) for all Win32 builds. + + Prior to this change mprintf support for the I format prefix, which is a + Microsoft extension, was dependent on the compiler used. + + When Borland compiler support was removed in fd7ef00f the prefix was + then no longer supported for that compiler; however since it's still + possible to build with Borland I'm restoring support for the prefix in + this way. + + Reported-by: Paweł Witas + + Fixes https://github.com/curl/curl/issues/12944 + Closes https://github.com/curl/curl/pull/12950 + +Daniel Stenberg (23 Feb 2024) + +- cd2nroff: gen: make `\>` in input to render as plain '>' in output + + The same (copy and pasted) fix/mistake as in gen.pl + +- gen: make `\>` in input to render as plain '>' in output + + Reported-by: Gisle Vanem + Fixes #12977 + Closes #12978 + +Fabrice Fontaine (23 Feb 2024) + +- configure.ac: find libpsl with pkg-config + + Find libpsl with pkg-config to avoid static build failures. + + Ref: http://autobuild.buildroot.org/results/1fb15e1a99472c403d0d3b1a688902f32 + e78d002 + + Signed-off-by: Fabrice Fontaine + Closes #12947 + +Daniel Stenberg (23 Feb 2024) + +- BUG-BOUNTY.md: clarify that the curl security team decides + + Closes #12975 + +- THANKS: add bug reporter from #740 + + Ref: https://github.com/curl/curl/issues/740 + +Stefan Eissing (22 Feb 2024) + +- multi: fix multi_sock handling of select_bits + + - OR the event bitmask to data->state.select_bits instead of overwriting + them. They are cleared again on use. + + Reported-by: 5533asdg on github + Fixes #12971 + Closes #12972 + +Daniel Stenberg (22 Feb 2024) + +- curlver: bump to 8.7.0 for next release + +- RELEASE-NOTES: synced + +- write-out: add '%{proxy_used}' + + Returns 1 if the previous transfer used a proxy, otherwise 0. Useful to + for example determine if a `NOPROXY` pattern matched the hostname or + not. + + Extended test 970 and 972 + +- CURLINFO_USED_PROXY: return bool whether the proxy was used + + Adds test536 to verify + + Closes #12719 + +- sha512_256: remove the cast macro, minor language/format edits + + Follow-up to cbe41d151d6a100c + + Closes #12966 + +Stefan Eissing (20 Feb 2024) + +- DoH: add trace configuration + + - refs #12397 where it is dicussed how to en-/disable verbose output + of DoH operations + - introducing `struct curl_trc_feat` to track a curl feature for + tracing + - adding `data->state.feat` optionally pointing to the feature a + transfer belongs to + - adding trace functions and verbosity checks on features + - using trace feature in DoH code + - documenting `doh` as feature for `--trace-config` + + Closes #12411 + +- websocket: fix curl_ws_recv() + + - when data arrived in several chunks, the collection into + the passed buffer always started at offset 0, overwriting + the data already there. + + adding test_20_07 to verify fix + + - debug environment var CURL_WS_CHUNK_SIZE can be used to + influence the buffer chunk size used for en-/decoding. + + Closes #12945 + +Evgeny Grin (Karlson2k) (20 Feb 2024) + +- digest: support SHA-512/256 + + Also fix the tests. New implementation tested with GNU libmicrohttpd. + The new numbers in tests are real SHA-512/256 numbers (not just some + random ;) numbers ). + +- tests: add SHA-512/256 unit test + +- SHA-512/256: implement hash algorithm + + Closes #12897 + +- curl_setup.h: add curl_uint64_t internal type + + The unsigned version of curl_off_t basically + +Daniel Stenberg (20 Feb 2024) + +- docs: dist curl*.1 and install without perl + + Drop docs/mk-ca-bundle.1 from the tarball. It can be generated at will. + + Closes #12959 + Fixes #12921 + Reported-by: Michael Forney + +Stefan Eissing (20 Feb 2024) + +- OpenSSL QUIC: adapt to v3.3.x + + - set our idle timeout as transport parameter + - query negotiated idle timeout for connection alive checks + - query number of available bidi streams on a connection + - use write_ex2 with SSL_WRITE_FLAG_CONCLUDE to signal + EOF on last chunk write, so stream close does not + require an additional QUIC packet + + Closes #12933 + +Ramiro Garcia (19 Feb 2024) + +- MANUAL.md: fix typo + + Closes #12965 + +Daniel Stenberg (19 Feb 2024) + +- BINDINGS: add mcurl, the python binding + + Ref: #12956 + Closes #12962 + +- mk-ca-bundle.md: cleanups and polish + + Closes #12958 + +- spellcheck.yml: remove .1/.3 handling, clean all man page .md files + + Since we generate all .1 and .3 files from markdown now, we can limit + the spellcheck to the markdown versions only. + + Closes #12960 + +- libcurl-docs: cleanups + + CURLMOPT_SOCKETDATA.md: fix typo + CURLMOPT_TIMERDATA.md: fix typo + CURLOPT_COOKIELIST.m: quote strings + CURLOPT_PREREQFUNCTION.md: quote variable names + CURLOPT_TCP_NODELAY.md: rephrased to please spell checker + CURLOPT_WILDCARDMATCH.md: rephrased + libcurl-tutorial.md: use correct option name + curl_global_init_mem.md: quote headers + curl_easy_getinfo.md: use correct symbol names in headers + curl_global_trace.md: quote some headers + curl_ws_meta.md: quote struct field names + libcurl-env.md: quote headers + +- cd2nroff: remove backticks from titles + +- RELEASE-NOTES: synced + +Stefan Eissing (18 Feb 2024) + +- http_chunks: fix the accounting of consumed bytes + + Prior to this change chunks were handled correctly although in verbose + mode libcurl could incorrectly warn of "Leftovers after chunking" even + if there were none. + + Reported-by: Michael Kaufmann + + Fixes https://github.com/curl/curl/issues/12937 + Closes https://github.com/curl/curl/pull/12939 + +- file: use xfer buf for file:// transfers + + - For file:// transfers use the multi handle's transfer buffer for + up- and downloads. + + Prior to this change a6c9a33 (precedes 8.6.0) changed the file:// + transfers to use a smaller stack based buffer, and that caused a + significant performance decrease in Windows. + + Bug: https://github.com/curl/curl/issues/12750#issuecomment-1920103086 + Reported-by: edmcln@users.noreply.github.com + + Closes https://github.com/curl/curl/pull/12932 + +Karthikdasari0423 (18 Feb 2024) + +- HTTP3.md: always run nghttp3 submodule init + + - For consistency change all 'build nghttp3' commands to run submodule + init after cloning, even if the branch does not have submodules. + + Follow-up to 5a4b2f93 and 4f794558. + + Closes https://github.com/curl/curl/pull/12928 + +LeeRiva (18 Feb 2024) + +- CURLOPT_POSTQUOTE.md: fix typo + + Closes https://github.com/curl/curl/pull/12926 + +Evgeny Grin (Karlson2k) (18 Feb 2024) + +- checksrc.pl: fix handling .checksrc with CRLF + + - When parsing .checksrc chomp the (CR)LF line ending. + + Prior to this change on Windows checksrc.pl would not process the + symbols in .checksrc properly, since many git repos in Windows use auto + crlf to check out files with CRLF line endings. + + Closes https://github.com/curl/curl/pull/12924 + +Richard Levitte (18 Feb 2024) + +- cmake: fix install for older CMake versions + + - Generate the docs install list by using a foreach loop instead of + LIST:TRANSFORM since older CMake can't handle the latter. + + Reported-by: Dan Fandrich + + Fixes https://github.com/curl/curl/issues/12920 + Closes https://github.com/curl/curl/pull/12922 + +Stefan Eissing (16 Feb 2024) + +- vtls: fix tls proxy peer verification + + - When verifying a proxy certificate for an ip address, use the correct + ip family. + + Prior to this change the "connection" ip family was used, which was not + necessarily the same. + + Reported-by: HsiehYuho@users.noreply.github.com + + Fixes https://github.com/curl/curl/issues/12831 + Closes https://github.com/curl/curl/pull/12931 + +Dan Fandrich (15 Feb 2024) + +- CI: Bump the Circle CI base Ubuntu image to the latest 20.04 + + The previous ones are going to be removed soon, plus the new ones + include all the fixes since then. + +Jay Satiro (13 Feb 2024) + +- transfer: improve Windows SO_SNDBUF update limit + + - Change the 1 second SO_SNDBUF update limit from per transfer to per + connection. + + Prior to this change many transfers over the same connection could cause + many SO_SNDBUF updates made to that connection per second, which was + unnecessary. + + Closes https://github.com/curl/curl/pull/12911 + +- schannel: fix hang on unexpected server close + + - Treat TLS connection close (either due to a close_notify from the + server or just closed due to receiving 0) as pending data. + + This is because in some cases schannel_recv knows the connection is + closed but has to return actual pending data so it can't return 0 or an + error to indicate no more data. In this case schannel_recv must be + called again, which only happens if readwrite_data sees that there is + still pending data. + + Prior to this change if the total size of the body that libcurl expected + to receive from the server was unknown then it was possible under some + network conditions that libcurl would hang waiting to receive more data, + when in fact a close_notify alert indicating no more data would be sent + was already processed. + + Fixes https://github.com/curl/curl/issues/12894 + Closes https://github.com/curl/curl/pull/12910 + +Daniel Stenberg (10 Feb 2024) + +- KNOWN_BUGS: FTP upload fails if remebered dir is deleted + + Closes #12181 + Closes #12923 + +Michał Antoniak (10 Feb 2024) + +- mbedtls: use mbedtls_ssl_conf_{min|max}_tls_version + + ... instead of the deprecated mbedtls_ssl_conf_{min|max}_version + + Closes #12905 + +Dan Fandrich (9 Feb 2024) + +- CI: bump to actions/cache@v4 to avoid warning diff --git a/CMake/CurlSymbolHiding.cmake b/CMake/CurlSymbolHiding.cmake index 8289b4924..07f4fc0b6 100644 --- a/CMake/CurlSymbolHiding.cmake +++ b/CMake/CurlSymbolHiding.cmake @@ -26,9 +26,10 @@ 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. +if(WIN32 AND (ENABLE_DEBUG OR ENABLE_CURLDEBUG)) + # We need to export internal debug functions, + # e.g. curl_easy_perform_ev() or curl_dbg_*(), + # so disable symbol hiding for debug builds and for memory tracking. set(CURL_HIDDEN_SYMBOLS OFF) endif() diff --git a/CMake/CurlTests.c b/CMake/CurlTests.c index 83d743d34..f04abd79b 100644 --- a/CMake/CurlTests.c +++ b/CMake/CurlTests.c @@ -228,7 +228,7 @@ int main(void) #endif int main(void) { - int flags = 0; + unsigned long flags = 0; if(0 != ioctlsocket(0, FIONBIO, &flags)) return 1; ; @@ -380,7 +380,7 @@ int main(void) #ifdef HAVE_BUILTIN_AVAILABLE int main(void) { - if(__builtin_available(macOS 10.12, *)) {} + if(__builtin_available(macOS 10.12, iOS 5.0, *)) {} return 0; } #endif diff --git a/CMake/FindBearSSL.cmake b/CMake/FindBearSSL.cmake index 56a064eac..653ca9dde 100644 --- a/CMake/FindBearSSL.cmake +++ b/CMake/FindBearSSL.cmake @@ -27,6 +27,6 @@ find_library(BEARSSL_LIBRARY bearssl) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(BEARSSL DEFAULT_MSG - BEARSSL_INCLUDE_DIRS BEARSSL_LIBRARY) + BEARSSL_INCLUDE_DIRS BEARSSL_LIBRARY) mark_as_advanced(BEARSSL_INCLUDE_DIRS BEARSSL_LIBRARY) diff --git a/CMake/FindBrotli.cmake b/CMake/FindBrotli.cmake index 11ab7f825..7f316aaa1 100644 --- a/CMake/FindBrotli.cmake +++ b/CMake/FindBrotli.cmake @@ -29,15 +29,15 @@ find_library(BROTLICOMMON_LIBRARY NAMES brotlicommon) find_library(BROTLIDEC_LIBRARY NAMES brotlidec) find_package_handle_standard_args(Brotli - FOUND_VAR - BROTLI_FOUND - REQUIRED_VARS - BROTLIDEC_LIBRARY - BROTLICOMMON_LIBRARY - BROTLI_INCLUDE_DIR - FAIL_MESSAGE - "Could NOT find Brotli" + FOUND_VAR + BROTLI_FOUND + REQUIRED_VARS + BROTLIDEC_LIBRARY + BROTLICOMMON_LIBRARY + BROTLI_INCLUDE_DIR + FAIL_MESSAGE + "Could NOT find Brotli" ) set(BROTLI_INCLUDE_DIRS ${BROTLI_INCLUDE_DIR}) -set(BROTLI_LIBRARIES ${BROTLICOMMON_LIBRARY} ${BROTLIDEC_LIBRARY}) +set(BROTLI_LIBRARIES ${BROTLIDEC_LIBRARY} ${BROTLICOMMON_LIBRARY}) diff --git a/CMake/FindCARES.cmake b/CMake/FindCARES.cmake index fa7589118..e82b1de4a 100644 --- a/CMake/FindCARES.cmake +++ b/CMake/FindCARES.cmake @@ -39,7 +39,7 @@ find_library(CARES_LIBRARY include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CARES - REQUIRED_VARS CARES_LIBRARY CARES_INCLUDE_DIR) + REQUIRED_VARS CARES_LIBRARY CARES_INCLUDE_DIR) mark_as_advanced( CARES_LIBRARY diff --git a/CMake/FindGSS.cmake b/CMake/FindGSS.cmake index b244e610e..9061e6c85 100644 --- a/CMake/FindGSS.cmake +++ b/CMake/FindGSS.cmake @@ -45,8 +45,8 @@ include(CheckIncludeFiles) include(CheckTypeSize) set(_GSS_ROOT_HINTS - "${GSS_ROOT_DIR}" - "$ENV{GSS_ROOT_DIR}" + "${GSS_ROOT_DIR}" + "$ENV{GSS_ROOT_DIR}" ) # try to find library using system pkg-config if user didn't specify root dir @@ -62,30 +62,30 @@ endif() if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approach. find_file(_GSS_CONFIGURE_SCRIPT - NAMES - "krb5-config" - HINTS - ${_GSS_ROOT_HINTS} - PATH_SUFFIXES - bin - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH + NAMES + "krb5-config" + HINTS + ${_GSS_ROOT_HINTS} + PATH_SUFFIXES + bin + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH ) # if not found in user-supplied directories, maybe system knows better find_file(_GSS_CONFIGURE_SCRIPT - NAMES - "krb5-config" - PATH_SUFFIXES - bin + NAMES + "krb5-config" + PATH_SUFFIXES + bin ) if(_GSS_CONFIGURE_SCRIPT) execute_process( - COMMAND ${_GSS_CONFIGURE_SCRIPT} "--cflags" "gssapi" - OUTPUT_VARIABLE _GSS_CFLAGS - RESULT_VARIABLE _GSS_CONFIGURE_FAILED - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND ${_GSS_CONFIGURE_SCRIPT} "--cflags" "gssapi" + OUTPUT_VARIABLE _GSS_CFLAGS + RESULT_VARIABLE _GSS_CONFIGURE_FAILED + OUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS "CFLAGS: ${_GSS_CFLAGS}") if(NOT _GSS_CONFIGURE_FAILED) # 0 means success @@ -105,10 +105,10 @@ if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approac endif() execute_process( - COMMAND ${_GSS_CONFIGURE_SCRIPT} "--libs" "gssapi" - OUTPUT_VARIABLE _GSS_LIB_FLAGS - RESULT_VARIABLE _GSS_CONFIGURE_FAILED - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND ${_GSS_CONFIGURE_SCRIPT} "--libs" "gssapi" + OUTPUT_VARIABLE _GSS_LIB_FLAGS + RESULT_VARIABLE _GSS_CONFIGURE_FAILED + OUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS "LDFLAGS: ${_GSS_LIB_FLAGS}") @@ -132,10 +132,10 @@ if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approac endif() execute_process( - COMMAND ${_GSS_CONFIGURE_SCRIPT} "--version" - OUTPUT_VARIABLE _GSS_VERSION - RESULT_VARIABLE _GSS_CONFIGURE_FAILED - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND ${_GSS_CONFIGURE_SCRIPT} "--version" + OUTPUT_VARIABLE _GSS_VERSION + RESULT_VARIABLE _GSS_CONFIGURE_FAILED + OUTPUT_STRIP_TRAILING_WHITESPACE ) # older versions may not have the "--version" parameter. In this case we just don't care. @@ -144,10 +144,10 @@ if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approac endif() execute_process( - COMMAND ${_GSS_CONFIGURE_SCRIPT} "--vendor" - OUTPUT_VARIABLE _GSS_VENDOR - RESULT_VARIABLE _GSS_CONFIGURE_FAILED - OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND ${_GSS_CONFIGURE_SCRIPT} "--vendor" + OUTPUT_VARIABLE _GSS_VENDOR + RESULT_VARIABLE _GSS_CONFIGURE_FAILED + OUTPUT_STRIP_TRAILING_WHITESPACE ) # older versions may not have the "--vendor" parameter. In this case we just don't care. @@ -164,13 +164,13 @@ if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approac else() # either there is no config script or we are on a platform that doesn't provide one (Windows?) find_path(_GSS_INCLUDE_DIR - NAMES - "gssapi/gssapi.h" - HINTS - ${_GSS_ROOT_HINTS} - PATH_SUFFIXES - include - inc + NAMES + "gssapi/gssapi.h" + HINTS + ${_GSS_ROOT_HINTS} + PATH_SUFFIXES + include + inc ) if(_GSS_INCLUDE_DIR) #jay, we've found something @@ -193,13 +193,13 @@ if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approac else() # I'm not convinced if this is the right way but this is what autotools do at the moment find_path(_GSS_INCLUDE_DIR - NAMES - "gssapi.h" - HINTS - ${_GSS_ROOT_HINTS} - PATH_SUFFIXES - include - inc + NAMES + "gssapi.h" + HINTS + ${_GSS_ROOT_HINTS} + PATH_SUFFIXES + include + inc ) if(_GSS_INCLUDE_DIR) @@ -240,12 +240,12 @@ if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approac endif() find_library(_GSS_LIBRARIES - NAMES - ${_GSS_LIBNAME} - HINTS - ${_GSS_LIBDIR_HINTS} - PATH_SUFFIXES - ${_GSS_LIBDIR_SUFFIXES} + NAMES + ${_GSS_LIBNAME} + HINTS + ${_GSS_LIBDIR_HINTS} + PATH_SUFFIXES + ${_GSS_LIBDIR_SUFFIXES} ) endif() @@ -301,12 +301,12 @@ include(FindPackageHandleStandardArgs) set(_GSS_REQUIRED_VARS GSS_LIBRARIES GSS_FLAVOUR) find_package_handle_standard_args(GSS - REQUIRED_VARS - ${_GSS_REQUIRED_VARS} - VERSION_VAR - GSS_VERSION - FAIL_MESSAGE - "Could NOT find GSS, try to set the path to GSS root folder in the system variable GSS_ROOT_DIR" + REQUIRED_VARS + ${_GSS_REQUIRED_VARS} + VERSION_VAR + GSS_VERSION + FAIL_MESSAGE + "Could NOT find GSS, try to set the path to GSS root folder in the system variable GSS_ROOT_DIR" ) mark_as_advanced(GSS_INCLUDE_DIR GSS_LIBRARIES) diff --git a/CMake/FindLibPSL.cmake b/CMake/FindLibPSL.cmake index e3bd68d1d..9ad4bc639 100644 --- a/CMake/FindLibPSL.cmake +++ b/CMake/FindLibPSL.cmake @@ -39,7 +39,7 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LibPSL - REQUIRED_VARS LIBPSL_LIBRARY LIBPSL_INCLUDE_DIR - VERSION_VAR LIBPSL_VERSION) + REQUIRED_VARS LIBPSL_LIBRARY LIBPSL_INCLUDE_DIR + VERSION_VAR LIBPSL_VERSION) mark_as_advanced(LIBPSL_INCLUDE_DIR LIBPSL_LIBRARY) diff --git a/CMake/FindLibSSH2.cmake b/CMake/FindLibSSH2.cmake index a0c251ae3..3466b6bfc 100644 --- a/CMake/FindLibSSH2.cmake +++ b/CMake/FindLibSSH2.cmake @@ -39,7 +39,7 @@ endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LibSSH2 - REQUIRED_VARS LIBSSH2_LIBRARY LIBSSH2_INCLUDE_DIR - VERSION_VAR LIBSSH2_VERSION) + REQUIRED_VARS LIBSSH2_LIBRARY LIBSSH2_INCLUDE_DIR + VERSION_VAR LIBSSH2_VERSION) mark_as_advanced(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY) diff --git a/CMake/FindMbedTLS.cmake b/CMake/FindMbedTLS.cmake index 814bd97da..7692a2587 100644 --- a/CMake/FindMbedTLS.cmake +++ b/CMake/FindMbedTLS.cmake @@ -31,6 +31,6 @@ set(MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_L include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MbedTLS DEFAULT_MSG - MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) + MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) mark_as_advanced(MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) diff --git a/CMake/FindNGHTTP2.cmake b/CMake/FindNGHTTP2.cmake index 3957646c4..88ac03741 100644 --- a/CMake/FindNGHTTP2.cmake +++ b/CMake/FindNGHTTP2.cmake @@ -25,14 +25,14 @@ include(FindPackageHandleStandardArgs) find_path(NGHTTP2_INCLUDE_DIR "nghttp2/nghttp2.h") -find_library(NGHTTP2_LIBRARY NAMES nghttp2) +find_library(NGHTTP2_LIBRARY NAMES nghttp2 nghttp2_static) find_package_handle_standard_args(NGHTTP2 - FOUND_VAR - NGHTTP2_FOUND - REQUIRED_VARS - NGHTTP2_LIBRARY - NGHTTP2_INCLUDE_DIR + FOUND_VAR + NGHTTP2_FOUND + REQUIRED_VARS + NGHTTP2_LIBRARY + NGHTTP2_INCLUDE_DIR ) set(NGHTTP2_INCLUDE_DIRS ${NGHTTP2_INCLUDE_DIR}) diff --git a/CMake/FindWolfSSL.cmake b/CMake/FindWolfSSL.cmake index d67c0eb24..7336c8f4d 100644 --- a/CMake/FindWolfSSL.cmake +++ b/CMake/FindWolfSSL.cmake @@ -21,16 +21,40 @@ # SPDX-License-Identifier: curl # ########################################################################### -find_path(WolfSSL_INCLUDE_DIR NAMES wolfssl/ssl.h) -find_library(WolfSSL_LIBRARY NAMES wolfssl) -mark_as_advanced(WolfSSL_INCLUDE_DIR WolfSSL_LIBRARY) + +find_package(PkgConfig QUIET) +pkg_check_modules(PC_WOLFSSL QUIET "wolfssl") + +find_path(WolfSSL_INCLUDE_DIR + NAMES "wolfssl/ssl.h" + HINTS ${PC_WOLFSSL_INCLUDE_DIRS} +) + +find_library(WolfSSL_LIBRARY + NAMES "wolfssl" + HINTS ${PC_WOLFSSL_LIBRARY_DIRS} +) + +if(WolfSSL_INCLUDE_DIR) + set(_version_regex "^#define[ \t]+LIBWOLFSSL_VERSION_STRING[ \t]+\"([^\"]+)\".*") + file(STRINGS "${WolfSSL_INCLUDE_DIR}/wolfssl/version.h" + WolfSSL_VERSION REGEX "${_version_regex}") + string(REGEX REPLACE "${_version_regex}" "\\1" + WolfSSL_VERSION "${WolfSSL_VERSION}") + unset(_version_regex) +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(WolfSSL - REQUIRED_VARS WolfSSL_INCLUDE_DIR WolfSSL_LIBRARY - ) + REQUIRED_VARS + WolfSSL_INCLUDE_DIR + WolfSSL_LIBRARY + VERSION_VAR WolfSSL_VERSION +) if(WolfSSL_FOUND) set(WolfSSL_INCLUDE_DIRS ${WolfSSL_INCLUDE_DIR}) - set(WolfSSL_LIBRARIES ${WolfSSL_LIBRARY}) + set(WolfSSL_LIBRARIES ${WolfSSL_LIBRARY}) endif() + +mark_as_advanced(WolfSSL_INCLUDE_DIR WolfSSL_LIBRARY) diff --git a/CMake/OtherTests.cmake b/CMake/OtherTests.cmake index 7701c0ee9..2fddb867c 100644 --- a/CMake/OtherTests.cmake +++ b/CMake/OtherTests.cmake @@ -137,7 +137,7 @@ if(NOT DEFINED HAVE_GETADDRINFO_THREADSAFE) #ifdef h_errno return 0; #else - force compilation error + #error force compilation error #endif }" HAVE_H_ERRNO) @@ -158,7 +158,7 @@ if(NOT DEFINED HAVE_GETADDRINFO_THREADSAFE) #elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700) return 0; #else - force compilation error + #error force compilation error #endif }" HAVE_H_ERRNO_SBS_ISSUE_7) endif() diff --git a/CMake/PickyWarnings.cmake b/CMake/PickyWarnings.cmake index d82bbb1d6..96e45f0e8 100644 --- a/CMake/PickyWarnings.cmake +++ b/CMake/PickyWarnings.cmake @@ -25,10 +25,24 @@ include(CheckCCompilerFlag) unset(WPICKY) -if(CURL_WERROR AND CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) +if(CURL_WERROR AND + ((CMAKE_COMPILER_IS_GNUCC AND + NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0 AND + NOT CMAKE_VERSION VERSION_LESS 3.23.0) OR # check_symbol_exists() incompatible with GCC -pedantic-errors in earlier CMake versions + CMAKE_C_COMPILER_ID MATCHES "Clang")) set(WPICKY "${WPICKY} -pedantic-errors") endif() +if(APPLE AND + (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)) + set(WPICKY "${WPICKY} -Werror=partial-availability") # clang 3.6 appleclang 6.3 +endif() + +if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") + set(WPICKY "${WPICKY} -Werror-implicit-function-declaration") # clang 1.0 gcc 2.95 +endif() + if(PICKY_COMPILER) if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") diff --git a/CMake/Platforms/WindowsCache.cmake b/CMake/Platforms/WindowsCache.cmake index d3391d92f..5346f595e 100644 --- a/CMake/Platforms/WindowsCache.cmake +++ b/CMake/Platforms/WindowsCache.cmake @@ -88,6 +88,7 @@ set(HAVE_GETPWUID_R 0) set(HAVE_STRERROR_R 0) set(HAVE_SIGINTERRUPT 0) set(HAVE_PIPE 0) +set(HAVE_EVENTFD 0) set(HAVE_IF_NAMETOINDEX 0) set(HAVE_GETRLIMIT 0) set(HAVE_SETRLIMIT 0) @@ -121,6 +122,7 @@ 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_EVENTFD_H 0) set(HAVE_SYS_FILIO_H 0) set(HAVE_SYS_WAIT_H 0) set(HAVE_SYS_IOCTL_H 0) @@ -137,6 +139,9 @@ 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_DIRENT_H 0) +set(HAVE_OPENDIR 0) + set(HAVE_FSEEKO 0) set(HAVE__FSEEKI64 1) set(HAVE_SOCKET 1) @@ -168,7 +173,6 @@ 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_STRUCT_SOCKADDR_STORAGE 1) diff --git a/CMake/curl-config.cmake.in b/CMake/curl-config.cmake.in index 9adb96e0a..2ce8625ef 100644 --- a/CMake/curl-config.cmake.in +++ b/CMake/curl-config.cmake.in @@ -38,3 +38,7 @@ check_required_components("@PROJECT_NAME@") if(NOT TARGET @PROJECT_NAME@::libcurl) add_library(@PROJECT_NAME@::libcurl ALIAS @PROJECT_NAME@::@LIB_SELECTED@) endif() + +# For compatibility with CMake's FindCURL.cmake +set(CURL_LIBRARIES @PROJECT_NAME@::libcurl) +set_and_check(CURL_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@") diff --git a/CMakeLists.txt b/CMakeLists.txt index 656aa7c74..580cc4357 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,7 @@ # 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_ECH: ECH API checks for OpenSSL, BoringSSL or wolfSSL # # For each of the above variables, if the variable is DEFINED (either # to ON or OFF), the symbol detection will be skipped. If the @@ -63,13 +64,13 @@ string(REGEX REPLACE "[^0]+0x" "" CURL_VERSION_NUM ${CURL_VERSION_NUM}) # Setup package meta-data -# SET(PACKAGE "curl") +# set(PACKAGE "curl") message(STATUS "curl version=[${CURL_VERSION}]") -# SET(PACKAGE_TARNAME "curl") -# SET(PACKAGE_NAME "curl") -# SET(PACKAGE_VERSION "-") -# SET(PACKAGE_STRING "curl-") -# SET(PACKAGE_BUGREPORT "a suitable curl mailing list => https://curl.se/mail/") +# set(PACKAGE_TARNAME "curl") +# set(PACKAGE_NAME "curl") +# set(PACKAGE_VERSION "-") +# set(PACKAGE_STRING "curl-") +# set(PACKAGE_BUGREPORT "a suitable curl mailing list => https://curl.se/mail/") set(OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}") if(CMAKE_C_COMPILER_TARGET) set(OS "\"${CMAKE_C_COMPILER_TARGET}\"") @@ -109,18 +110,16 @@ endif() option(CURL_LTO "Turn on compiler Link Time Optimizations" OFF) cmake_dependent_option(ENABLE_THREADED_RESOLVER "Set to ON to enable threaded DNS lookup" - ON "NOT ENABLE_ARES" - OFF) - -option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF) -option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF) + ON "NOT ENABLE_ARES" + OFF) include(PickyWarnings) +option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF) +option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" ${ENABLE_DEBUG}) + if(ENABLE_DEBUG) - # DEBUGBUILD will be defined only for Debug builds - set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:DEBUGBUILD>) - set(ENABLE_CURLDEBUG ON) + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS DEBUGBUILD) endif() if(ENABLE_CURLDEBUG) @@ -160,11 +159,13 @@ endif() # initialize CURL_LIBS set(CURL_LIBS "") +set(LIBCURL_PC_REQUIRES_PRIVATE "") if(ENABLE_ARES) set(USE_ARES 1) find_package(CARES REQUIRED) list(APPEND CURL_LIBS ${CARES_LIBRARY}) + list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "libcares") endif() include(CurlSymbolHiding) @@ -277,6 +278,10 @@ if(HTTP_ONLY) set(CURL_DISABLE_TFTP ON) endif() +if(WINDOWS_STORE) + set(CURL_DISABLE_TELNET ON) # telnet code needs fixing to compile for UWP. +endif() + option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON) mark_as_advanced(ENABLE_IPV6) if(ENABLE_IPV6 AND NOT WIN32) @@ -292,7 +297,7 @@ if(ENABLE_IPV6 AND NOT WIN32) CACHE BOOL "Define if you want to enable IPv6 support" FORCE) endif() - if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT ENABLE_ARES) + if(APPLE AND NOT ENABLE_ARES) set(use_core_foundation_and_core_services ON) find_library(SYSTEMCONFIGURATION_FRAMEWORK "SystemConfiguration") @@ -303,10 +308,14 @@ if(ENABLE_IPV6 AND NOT WIN32) list(APPEND CURL_LIBS "-framework SystemConfiguration") endif() endif() +if(ENABLE_IPV6) + set(USE_IPV6 ON) +endif() find_package(Perl) option(BUILD_LIBCURL_DOCS "to build libcurl man pages" ON) +option(BUILD_MISC_DOCS "to build misc man pages (e.g. curl-config and mk-ca-bundle)" ON) option(ENABLE_CURL_MANUAL "to build the man page for curl and enable its -M/--manual option" ON) if(ENABLE_CURL_MANUAL OR BUILD_LIBCURL_DOCS) @@ -375,9 +384,6 @@ check_function_exists(gethostname HAVE_GETHOSTNAME) if(WIN32) list(APPEND CURL_LIBS "ws2_32" "bcrypt") - if(USE_LIBRTMP) - list(APPEND CURL_LIBS "winmm") - endif() endif() # check SSL libraries @@ -420,8 +426,8 @@ endif() if(CURL_USE_SCHANNEL) set(SSL_ENABLED ON) - set(USE_SCHANNEL ON) # Windows native SSL/TLS support - set(USE_WINDOWS_SSPI ON) # CURL_USE_SCHANNEL implies CURL_WINDOWS_SSPI + 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) @@ -436,7 +442,7 @@ if(CURL_USE_SECTRANSP) find_library(SECURITY_FRAMEWORK "Security") if(NOT SECURITY_FRAMEWORK) - message(FATAL_ERROR "Security framework not found") + message(FATAL_ERROR "Security framework not found") endif() set(SSL_ENABLED ON) @@ -453,13 +459,13 @@ if(use_core_foundation_and_core_services) find_library(CORESERVICES_FRAMEWORK "CoreServices") if(NOT COREFOUNDATION_FRAMEWORK) - message(FATAL_ERROR "CoreFoundation framework not found") + message(FATAL_ERROR "CoreFoundation framework not found") endif() if(NOT CORESERVICES_FRAMEWORK) - message(FATAL_ERROR "CoreServices framework not found") + message(FATAL_ERROR "CoreServices framework not found") endif() - list(APPEND CURL_LIBS "-framework CoreFoundation -framework CoreServices") + list(APPEND CURL_LIBS "-framework CoreFoundation" "-framework CoreServices") endif() if(CURL_USE_OPENSSL) @@ -468,7 +474,7 @@ if(CURL_USE_OPENSSL) set(USE_OPENSSL ON) # Depend on OpenSSL via imported targets if supported by the running - # version of CMake. This allows our dependents to get our dependencies + # version of CMake. This allows our dependents to get our dependencies # transitively. if(NOT CMAKE_VERSION VERSION_LESS 3.4) list(APPEND CURL_LIBS OpenSSL::SSL OpenSSL::Crypto) @@ -476,10 +482,12 @@ if(CURL_USE_OPENSSL) list(APPEND CURL_LIBS ${OPENSSL_LIBRARIES}) include_directories(${OPENSSL_INCLUDE_DIR}) endif() + list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "openssl") if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "openssl") set(valid_default_ssl_backend TRUE) endif() + set(curl_ca_bundle_supported TRUE) set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) if(NOT DEFINED HAVE_BORINGSSL) @@ -495,11 +503,13 @@ if(CURL_USE_MBEDTLS) set(SSL_ENABLED ON) set(USE_MBEDTLS ON) list(APPEND CURL_LIBS ${MBEDTLS_LIBRARIES}) + list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "mbedtls") include_directories(${MBEDTLS_INCLUDE_DIRS}) if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "mbedtls") set(valid_default_ssl_backend TRUE) endif() + set(curl_ca_bundle_supported TRUE) endif() if(CURL_USE_BEARSSL) @@ -512,6 +522,7 @@ if(CURL_USE_BEARSSL) if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "bearssl") set(valid_default_ssl_backend TRUE) endif() + set(curl_ca_bundle_supported TRUE) endif() if(CURL_USE_WOLFSSL) @@ -519,23 +530,28 @@ if(CURL_USE_WOLFSSL) set(SSL_ENABLED ON) set(USE_WOLFSSL ON) list(APPEND CURL_LIBS ${WolfSSL_LIBRARIES}) + list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "wolfssl") include_directories(${WolfSSL_INCLUDE_DIRS}) if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "wolfssl") set(valid_default_ssl_backend TRUE) endif() + set(curl_ca_bundle_supported TRUE) endif() if(CURL_USE_GNUTLS) find_package(GnuTLS REQUIRED) + find_package(nettle REQUIRED) set(SSL_ENABLED ON) set(USE_GNUTLS ON) - list(APPEND CURL_LIBS ${GNUTLS_LIBRARIES} "nettle") - include_directories(${GNUTLS_INCLUDE_DIRS}) + list(APPEND CURL_LIBS ${GNUTLS_LIBRARIES} ${NETTLE_LIBRARIES}) + list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "gnutls" "nettle") + include_directories(${GNUTLS_INCLUDE_DIRS} ${NETTLE_INCLUDE_DIRS}) if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "gnutls") set(valid_default_ssl_backend TRUE) endif() + set(curl_ca_bundle_supported TRUE) if(NOT DEFINED HAVE_GNUTLS_SRP AND NOT CURL_DISABLE_SRP) cmake_push_check_state() @@ -569,6 +585,7 @@ if(ZLIB_FOUND) list(APPEND CURL_LIBS ${ZLIB_LIBRARIES}) include_directories(${ZLIB_INCLUDE_DIRS}) endif() + list(APPEND LIBCURL_PC_REQUIRES_PRIVATE "zlib") list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS}) endif() @@ -578,8 +595,8 @@ 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 , et al. +# +# SPDX-License-Identifier: curl + +# Self-contained build environment to match the release environment. +# +# Build and set the timestamp for the date corresponding to the release +# +# docker build --build-arg SOURCE_DATE_EPOCH=1711526400 --build-arg UID=$(id -u) --build-arg GID=$(id -g) -t curl/curl . +# +# Then run commands from within the build environment, for example +# +# docker run --rm -it -u $(id -u):$(id -g) -v $(pwd):/usr/src -w /usr/src curl/curl autoreconf -fi +# docker run --rm -it -u $(id -u):$(id -g) -v $(pwd):/usr/src -w /usr/src curl/curl ./configure --without-ssl --without-libpsl +# docker run --rm -it -u $(id -u):$(id -g) -v $(pwd):/usr/src -w /usr/src curl/curl make +# docker run --rm -it -u $(id -u):$(id -g) -v $(pwd):/usr/src -w /usr/src curl/curl ./maketgz 8.7.1 +# +# or get into a shell in the build environment, for example +# +# docker run --rm -it -u $(id -u):$(id -g) -v (pwd):/usr/src -w /usr/src curl/curl bash +# $ autoreconf -fi +# $ ./configure --without-ssl --without-libpsl +# $ make +# $ ./maketgz 8.7.1 + +# To update, get the latest digest e.g. from https://hub.docker.com/_/debian/tags +FROM debian:bookworm-slim@sha256:39868a6f452462b70cf720a8daff250c63e7342970e749059c105bf7c1e8eeaf + +RUN apt-get update -qq && apt-get install -qq -y --no-install-recommends \ + build-essential make autoconf automake libtool git perl zip zlib1g-dev gawk && \ + rm -rf /var/lib/apt/lists/* + +ARG UID=1000 GID=1000 + +RUN groupadd --gid $UID dev && \ + useradd --uid $UID --gid dev --shell /bin/bash --create-home dev + +USER dev:dev + +ARG SOURCE_DATE_EPOCH +ENV SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH:-1} diff --git a/GIT-INFO.md b/GIT-INFO.md deleted file mode 100644 index 825476c96..000000000 --- a/GIT-INFO.md +++ /dev/null @@ -1,42 +0,0 @@ - _ _ ____ _ - ___| | | | _ \| | - / __| | | | |_) | | - | (__| |_| | _ <| |___ - \___|\___/|_| \_\_____| - -# GIT-INFO - -This file is only present in git - never in release archives. It contains -information about other files and things that the git repository keeps in its -inner sanctum. - -To build in environments that support configure, after having extracted -everything from git, do this: - - autoreconf -fi - ./configure --with-openssl - make - -Daniel uses a configure line similar to this for easier development: - - ./configure --disable-shared --enable-debug --enable-maintainer-mode - -In environments that don't support configure (i.e. Windows), do this: - - buildconf.bat - -## REQUIREMENTS - -For `autoreconf` and `configure` (not `buildconf.bat`) to work, you need the -following software installed: - - o autoconf 2.57 (or later) - o automake 1.7 (or later) - o libtool 1.4.2 (or later) - o GNU m4 (required by autoconf) - o perl - -If you don't have perl and don't want to install it, you can rename the source -file `src/tool_hugehelp.c.cvs` to `src/tool_hugehelp.c` and avoid having to -generate this file. This will give you a stubbed version of the file that -doesn't contain actual content. diff --git a/LICENSES/BSD-3-Clause.txt b/LICENSES/BSD-3-Clause.txt deleted file mode 100644 index 086d3992c..000000000 --- a/LICENSES/BSD-3-Clause.txt +++ /dev/null @@ -1,11 +0,0 @@ -Copyright (c) . - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSES/BSD-4-Clause-UC.txt b/LICENSES/BSD-4-Clause-UC.txt deleted file mode 100644 index 69edbe324..000000000 --- a/LICENSES/BSD-4-Clause-UC.txt +++ /dev/null @@ -1,15 +0,0 @@ -BSD-4-Clause (University of California-Specific) - -Copyright [various years] The Regents of the University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the University of California, Berkeley and its contributors. - -4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSES/ISC.txt b/LICENSES/ISC.txt deleted file mode 100644 index 60f60bfb7..000000000 --- a/LICENSES/ISC.txt +++ /dev/null @@ -1,12 +0,0 @@ -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM -DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL -INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING -FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION -WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/LICENSES/curl.txt b/LICENSES/curl.txt deleted file mode 100644 index 3c1c19742..000000000 --- a/LICENSES/curl.txt +++ /dev/null @@ -1,22 +0,0 @@ -COPYRIGHT AND PERMISSION NOTICE - -Copyright (C) Daniel Stenberg, , and many -contributors, see the THANKS file. - -All rights reserved. - -Permission to use, copy, modify, and distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright -notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE -OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of a copyright holder shall not -be used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization of the copyright holder. diff --git a/MacOSX-Framework b/MacOSX-Framework deleted file mode 100755 index 5ac537633..000000000 --- a/MacOSX-Framework +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### -# This script performs all of the steps needed to build a -# universal binary libcurl.framework for Mac OS X 10.4 or greater. -# -# Hendrik Visage: -# Generalizations added since Snowleopard (10.6) do not include -# the 10.4u SDK. -# -# Also note: -# 10.5 is the *ONLY* SDK that support PPC64 :( -- 10.6 do not have ppc64 support -#If you need to have PPC64 support then change below to 1 -PPC64_NEEDED=0 -# Apple does not support building for PPC anymore in Xcode 4 and later. -# If you're using Xcode 3 or earlier and need PPC support, then change -# the setting below to 1 -PPC_NEEDED=0 - -# For me the default is to develop for the platform I am on, and if you -#desire compatibility with older versions then change USE_OLD to 1 :) -USE_OLD=0 - -VERSION=`/usr/bin/sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' include/curl/curlver.h` -FRAMEWORK_VERSION=Versions/Release-$VERSION - -#I also wanted to "copy over" the system, and thus the reason I added the -# version to Versions/Release-7.20.1 etc. -# now a simple rsync -vaP libcurl.framework /Library/Frameworks will install it -# and setup the right paths to this version, leaving the system version -# "intact", so you can "fix" it later with the links to Versions/A/... - -DEVELOPER_PATH=`xcode-select --print-path` -# Around Xcode 4.3, SDKs were moved from the Developer folder into the -# MacOSX.platform folder -if test -d "$DEVELOPER_PATH/Platforms/MacOSX.platform/Developer/SDKs"; then - SDK_PATH="$DEVELOPER_PATH/Platforms/MacOSX.platform/Developer/SDKs" -else - SDK_PATH="$DEVELOPER_PATH/SDKs" -fi -OLD_SDK=`ls $SDK_PATH|head -1` -NEW_SDK=`ls -r $SDK_PATH|head -1` - -if test "0"$USE_OLD -gt 0 -then - SDK32=$OLD_SDK -else - SDK32=$NEW_SDK -fi - -MACVER=`echo $SDK32|sed -e s/[a-zA-Z]//g -e s/.\$//` - -SDK32_DIR=$SDK_PATH/$SDK32 -MINVER32='-mmacosx-version-min='$MACVER -if test $PPC_NEEDED -gt 0; then - ARCHES32='-arch i386 -arch ppc' -else - ARCHES32='-arch i386' -fi - -if test $PPC64_NEEDED -gt 0 -then - SDK64=10.5 - ARCHES64='-arch x86_64 -arch ppc64' - SDK64=`ls $SDK_PATH | grep "10\.5" | head -1` -else - ARCHES64='-arch x86_64' - #We "know" that 10.4 and earlier do not support 64bit - OLD_SDK64=`ls $SDK_PATH | grep -v "10\.[0-4]" | head -1` - NEW_SDK64=`ls -r $SDK_PATH | grep -v "10\.[0-4][^0-9]" | head -1` - if test $USE_OLD -gt 0 - then - SDK64=$OLD_SDK64 - else - SDK64=$NEW_SDK64 - fi -fi - -SDK64_DIR=$SDK_PATH/$SDK64 -MACVER64=`echo $SDK64|sed -e s/[a-zA-Z]//g -e s/.\$//` - -MINVER64='-mmacosx-version-min='$MACVER64 - -if test ! -z $SDK32; then - echo "----Configuring libcurl for 32 bit universal framework..." - make clean - ./configure --disable-dependency-tracking --disable-static --with-gssapi --with-secure-transport \ - CFLAGS="-Os -isysroot $SDK32_DIR $ARCHES32" \ - LDFLAGS="-Wl,-syslibroot,$SDK32_DIR $ARCHES32 -Wl,-headerpad_max_install_names" \ - CC=$CC - - echo "----Building 32 bit libcurl..." - make -j `sysctl -n hw.logicalcpu_max` - - echo "----Creating 32 bit framework..." - rm -r libcurl.framework - mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Resources - cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl - install_name_tool -id @rpath/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl - cp lib/libcurl.plist libcurl.framework/${FRAMEWORK_VERSION}/Resources/Info.plist - mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl - cp include/curl/*.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl - pushd libcurl.framework - ln -fs ${FRAMEWORK_VERSION}/libcurl libcurl - ln -fs ${FRAMEWORK_VERSION}/Resources Resources - ln -fs ${FRAMEWORK_VERSION}/Headers Headers - cd Versions - ln -fs $(basename "${FRAMEWORK_VERSION}") Current - - echo Testing for SDK64 - if test -d $SDK64_DIR; then - echo entering... - popd - make clean - echo "----Configuring libcurl for 64 bit universal framework..." - ./configure --disable-dependency-tracking --disable-static --with-gssapi --with-secure-transport \ - CFLAGS="-Os -isysroot $SDK64_DIR $ARCHES64" \ - LDFLAGS="-Wl,-syslibroot,$SDK64_DIR $ARCHES64 -Wl,-headerpad_max_install_names" \ - CC=$CC - - echo "----Building 64 bit libcurl..." - make -j `sysctl -n hw.logicalcpu_max` - - echo "----Appending 64 bit framework to 32 bit framework..." - cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 - install_name_tool -id @rpath/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 - cp libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 - pwd - lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl - rm libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 - fi - - pwd - lipo -info libcurl.framework/${FRAMEWORK_VERSION}/libcurl - echo "libcurl.framework is built and can now be included in other projects." - echo "Copy libcurl.framework to your bundle's Contents/Frameworks folder, ~/Library/Frameworks or /Library/Frameworks." -else - echo "Building libcurl.framework requires Mac OS X 10.4 or later with the MacOSX10.4/5/6 SDK installed." -fi diff --git a/Makefile b/Makefile index dbb396553..3db331a48 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -30,27 +30,6 @@ ssl: ./configure --with-openssl make -mingw32: - $(MAKE) -C lib -f Makefile.mk - $(MAKE) -C src -f Makefile.mk - -mingw32-clean: - $(MAKE) -C lib -f Makefile.mk clean - $(MAKE) -C src -f Makefile.mk clean - $(MAKE) -C docs/examples -f Makefile.mk clean - -mingw32-vclean mingw32-distclean: - $(MAKE) -C lib -f Makefile.mk vclean - $(MAKE) -C src -f Makefile.mk vclean - $(MAKE) -C docs/examples -f Makefile.mk vclean - -mingw32-examples%: - $(MAKE) -C docs/examples -f Makefile.mk CFG=$@ - -mingw32%: - $(MAKE) -C lib -f Makefile.mk CFG=$@ - $(MAKE) -C src -f Makefile.mk CFG=$@ - vc: cd winbuild nmake /f Makefile.vc MACHINE=x86 diff --git a/Makefile.am b/Makefile.am index 658189e47..6d604ea89 100644 --- a/Makefile.am +++ b/Makefile.am @@ -53,64 +53,16 @@ CMAKE_DIST = \ CMake/Utilities.cmake \ CMakeLists.txt -VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl -VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist -VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc -VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl -VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist -VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc - -VC14_10_LIBTMPL = projects/Windows/VC14.10/lib/libcurl.tmpl -VC14_10_LIBVCXPROJ = projects/Windows/VC14.10/lib/libcurl.vcxproj.dist -VC14_10_LIBVCXPROJ_DEPS = $(VC14_10_LIBTMPL) Makefile.am lib/Makefile.inc -VC14_10_SRCTMPL = projects/Windows/VC14.10/src/curl.tmpl -VC14_10_SRCVCXPROJ = projects/Windows/VC14.10/src/curl.vcxproj.dist -VC14_10_SRCVCXPROJ_DEPS = $(VC14_10_SRCTMPL) Makefile.am src/Makefile.inc - -VC14_20_LIBTMPL = projects/Windows/VC14.20/lib/libcurl.tmpl -VC14_20_LIBVCXPROJ = projects/Windows/VC14.20/lib/libcurl.vcxproj.dist -VC14_20_LIBVCXPROJ_DEPS = $(VC14_20_LIBTMPL) Makefile.am lib/Makefile.inc -VC14_20_SRCTMPL = projects/Windows/VC14.20/src/curl.tmpl -VC14_20_SRCVCXPROJ = projects/Windows/VC14.20/src/curl.vcxproj.dist -VC14_20_SRCVCXPROJ_DEPS = $(VC14_20_SRCTMPL) Makefile.am src/Makefile.inc - -VC14_30_LIBTMPL = projects/Windows/VC14.30/lib/libcurl.tmpl -VC14_30_LIBVCXPROJ = projects/Windows/VC14.30/lib/libcurl.vcxproj.dist -VC14_30_LIBVCXPROJ_DEPS = $(VC14_30_LIBTMPL) Makefile.am lib/Makefile.inc -VC14_30_SRCTMPL = projects/Windows/VC14.30/src/curl.tmpl -VC14_30_SRCVCXPROJ = projects/Windows/VC14.30/src/curl.vcxproj.dist -VC14_30_SRCVCXPROJ_DEPS = $(VC14_30_SRCTMPL) Makefile.am src/Makefile.inc - VC_DIST = projects/README.md \ projects/build-openssl.bat \ projects/build-wolfssl.bat \ projects/checksrc.bat \ - projects/Windows/VC14/curl-all.sln \ - projects/Windows/VC14/lib/libcurl.sln \ - projects/Windows/VC14/lib/libcurl.vcxproj.filters \ - projects/Windows/VC14/src/curl.sln \ - projects/Windows/VC14/src/curl.vcxproj.filters \ - projects/Windows/VC14.10/curl-all.sln \ - projects/Windows/VC14.10/lib/libcurl.sln \ - projects/Windows/VC14.10/lib/libcurl.vcxproj.filters \ - projects/Windows/VC14.10/src/curl.sln \ - projects/Windows/VC14.10/src/curl.vcxproj.filters \ - projects/Windows/VC14.20/curl-all.sln \ - projects/Windows/VC14.20/lib/libcurl.sln \ - projects/Windows/VC14.20/lib/libcurl.vcxproj.filters \ - projects/Windows/VC14.20/src/curl.sln \ - projects/Windows/VC14.20/src/curl.vcxproj.filters \ - projects/Windows/VC14.30/curl-all.sln \ - projects/Windows/VC14.30/lib/libcurl.sln \ - projects/Windows/VC14.30/lib/libcurl.vcxproj.filters \ - projects/Windows/VC14.30/src/curl.sln \ - projects/Windows/VC14.30/src/curl.vcxproj.filters \ projects/generate.bat \ projects/wolfssl_options.h \ projects/wolfssl_override.props WINBUILD_DIST = winbuild/README.md winbuild/gen_resp_file.bat \ - winbuild/MakefileBuild.vc winbuild/Makefile.vc + winbuild/MakefileBuild.vc winbuild/Makefile.vc winbuild/makedebug.bat PLAN9_DIST = plan9/include/mkfile \ plan9/include/mkfile \ @@ -122,10 +74,10 @@ PLAN9_DIST = plan9/include/mkfile \ plan9/src/mkfile.inc \ plan9/src/mkfile -EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ - RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework $(CMAKE_DIST) \ - $(VC_DIST) $(WINBUILD_DIST) $(PLAN9_DIST) lib/libcurl.vers.in buildconf.bat \ - libcurl.def +EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ + RELEASE-NOTES buildconf libcurl.pc.in $(CMAKE_DIST) $(VC_DIST) \ + $(WINBUILD_DIST) $(PLAN9_DIST) lib/libcurl.vers.in buildconf.bat \ + libcurl.def Dockerfile CLEANFILES = $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) \ $(VC14_10_LIBVCXPROJ) $(VC14_10_SRCVCXPROJ) \ @@ -274,268 +226,6 @@ checksrc: (cd docs/examples && $(MAKE) checksrc) (cd packages && $(MAKE) checksrc) -.PHONY: vc-ide - -vc-ide: $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) \ - $(VC14_10_LIBVCXPROJ_DEPS) $(VC14_10_SRCVCXPROJ_DEPS) \ - $(VC14_20_LIBVCXPROJ_DEPS) $(VC14_20_SRCVCXPROJ_DEPS) \ - $(VC14_30_LIBVCXPROJ_DEPS) $(VC14_30_SRCVCXPROJ_DEPS) - @(win32_lib_srcs='$(LIB_CFILES)'; \ - win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \ - win32_lib_rc='$(LIB_RCFILES)'; \ - win32_lib_vauth_srcs='$(LIB_VAUTH_CFILES)'; \ - win32_lib_vauth_hdrs='$(LIB_VAUTH_HFILES)'; \ - win32_lib_vquic_srcs='$(LIB_VQUIC_CFILES)'; \ - win32_lib_vquic_hdrs='$(LIB_VQUIC_HFILES)'; \ - win32_lib_vssh_srcs='$(LIB_VSSH_CFILES)'; \ - win32_lib_vssh_hdrs='$(LIB_VSSH_HFILES)'; \ - win32_lib_vtls_srcs='$(LIB_VTLS_CFILES)'; \ - win32_lib_vtls_hdrs='$(LIB_VTLS_HFILES)'; \ - win32_src_srcs='$(CURL_CFILES)'; \ - win32_src_hdrs='$(CURL_HFILES)'; \ - win32_src_rc='$(CURL_RCFILES)'; \ - win32_src_x_srcs='$(CURLX_CFILES)'; \ - win32_src_x_hdrs='$(CURLX_HFILES) ../lib/config-win32.h'; \ - \ - sorted_lib_srcs=`for file in $$win32_lib_srcs; do echo $$file; done | sort`; \ - sorted_lib_hdrs=`for file in $$win32_lib_hdrs; do echo $$file; done | sort`; \ - sorted_lib_vauth_srcs=`for file in $$win32_lib_vauth_srcs; do echo $$file; done | sort`; \ - sorted_lib_vauth_hdrs=`for file in $$win32_lib_vauth_hdrs; do echo $$file; done | sort`; \ - sorted_lib_vquic_srcs=`for file in $$win32_lib_vquic_srcs; do echo $$file; done | sort`; \ - sorted_lib_vquic_hdrs=`for file in $$win32_lib_vquic_hdrs; do echo $$file; done | sort`; \ - sorted_lib_vssh_srcs=`for file in $$win32_lib_vssh_srcs; do echo $$file; done | sort`; \ - sorted_lib_vssh_hdrs=`for file in $$win32_lib_vssh_hdrs; do echo $$file; done | sort`; \ - sorted_lib_vtls_srcs=`for file in $$win32_lib_vtls_srcs; do echo $$file; done | sort`; \ - sorted_lib_vtls_hdrs=`for file in $$win32_lib_vtls_hdrs; do echo $$file; done | sort`; \ - sorted_src_srcs=`for file in $$win32_src_srcs; do echo $$file; done | sort`; \ - sorted_src_hdrs=`for file in $$win32_src_hdrs; do echo $$file; done | sort`; \ - sorted_src_x_srcs=`for file in $$win32_src_x_srcs; do echo $$file; done | sort`; \ - sorted_src_x_hdrs=`for file in $$win32_src_x_hdrs; do echo $$file; done | sort`; \ - \ - awk_code='\ -function gen_element(type, dir, file)\ -{\ - sub(/vauth\//, "", file);\ - sub(/vquic\//, "", file);\ - sub(/vssh\//, "", file);\ - sub(/vtls\//, "", file);\ -\ - spaces=" ";\ - if(dir == "lib\\vauth" ||\ - dir == "lib\\vquic" ||\ - dir == "lib\\vssh" ||\ - dir == "lib\\vtls")\ - tabs=" ";\ - else\ - tabs=" ";\ -\ - if(type == "dsp") {\ - printf("# Begin Source File\r\n");\ - printf("\r\n");\ - printf("SOURCE=..\\..\\..\\..\\%s\\%s\r\n", dir, file);\ - printf("# End Source File\r\n");\ - }\ - else if(type == "vcproj1") {\ - printf("%s\r\n",\ - tabs, dir, file);\ - printf("%s\r\n", tabs);\ - }\ - else if(type == "vcproj2") {\ - printf("%s\r\n", tabs);\ - printf("%s\r\n", tabs);\ - }\ - else if(type == "vcxproj") {\ - i = index(file, ".");\ - ext = substr(file, i == 0 ? 0 : i + 1);\ -\ - if(ext == "c")\ - printf("%s\r\n",\ - spaces, dir, file);\ - else if(ext == "h")\ - printf("%s\r\n",\ - spaces, dir, file);\ - else if(ext == "rc")\ - printf("%s\r\n",\ - spaces, dir, file);\ - }\ -}\ -\ -{\ -\ - if($$0 == "CURL_LIB_C_FILES") {\ - split(lib_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_H_FILES") {\ - split(lib_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_RC_FILES") {\ - split(lib_rc, arr);\ - for(val in arr) gen_element(proj_type, "lib", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VAUTH_C_FILES") {\ - split(lib_vauth_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vauth", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VAUTH_H_FILES") {\ - split(lib_vauth_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vauth", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VQUIC_C_FILES") {\ - split(lib_vquic_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vquic", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VQUIC_H_FILES") {\ - split(lib_vquic_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vquic", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VSSH_C_FILES") {\ - split(lib_vssh_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vssh", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VSSH_H_FILES") {\ - split(lib_vssh_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vssh", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VTLS_C_FILES") {\ - split(lib_vtls_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vtls", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VTLS_H_FILES") {\ - split(lib_vtls_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vtls", arr[val]);\ - }\ - else if($$0 == "CURL_SRC_C_FILES") {\ - split(src_srcs, arr);\ - for(val in arr) gen_element(proj_type, "src", arr[val]);\ - }\ - else if($$0 == "CURL_SRC_H_FILES") {\ - split(src_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "src", arr[val]);\ - }\ - else if($$0 == "CURL_SRC_RC_FILES") {\ - split(src_rc, arr);\ - for(val in arr) gen_element(proj_type, "src", arr[val]);\ - }\ - else if($$0 == "CURL_SRC_X_C_FILES") {\ - split(src_x_srcs, arr);\ - for(val in arr) {\ - sub(/..\/lib\//, "", arr[val]);\ - gen_element(proj_type, "lib", arr[val]);\ - }\ - }\ - else if($$0 == "CURL_SRC_X_H_FILES") {\ - split(src_x_hdrs, arr);\ - for(val in arr) {\ - sub(/..\/lib\//, "", arr[val]);\ - gen_element(proj_type, "lib", arr[val]);\ - }\ - }\ - else\ - printf("%s\r\n", $$0);\ -}';\ - \ - echo "generating '$(VC14_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_10_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_10_LIBTMPL) > $(VC14_10_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_10_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_10_SRCTMPL) > $(VC14_10_SRCVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_20_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_20_LIBTMPL) > $(VC14_20_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_20_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_20_SRCTMPL) > $(VC14_20_SRCVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_30_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_30_LIBTMPL) > $(VC14_30_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_30_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_30_SRCTMPL) > $(VC14_30_SRCVCXPROJ) || { exit 1; };) - tidy: (cd src && $(MAKE) tidy) (cd lib && $(MAKE) tidy) diff --git a/Makefile.dist b/Makefile.dist deleted file mode 100644 index 3db331a48..000000000 --- a/Makefile.dist +++ /dev/null @@ -1,71 +0,0 @@ -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -all: - ./configure - make - -ssl: - ./configure --with-openssl - make - -vc: - cd winbuild - nmake /f Makefile.vc MACHINE=x86 - -vc-x64: - cd winbuild - nmake /f Makefile.vc MACHINE=x64 - -djgpp%: - $(MAKE) -C lib -f Makefile.mk CFG=$@ CROSSPREFIX=i586-pc-msdosdjgpp- - $(MAKE) -C src -f Makefile.mk CFG=$@ CROSSPREFIX=i586-pc-msdosdjgpp- - -cygwin: - ./configure - make - -cygwin-ssl: - ./configure --with-openssl - make - -amiga%: - $(MAKE) -C lib -f Makefile.mk CFG=$@ CROSSPREFIX=m68k-amigaos- - $(MAKE) -C src -f Makefile.mk CFG=$@ CROSSPREFIX=m68k-amigaos- - -unix: all - -unix-ssl: ssl - -linux: all - -linux-ssl: ssl - -ca-bundle: scripts/mk-ca-bundle.pl - @echo "generate a fresh ca-bundle.crt" - @perl $< -b -l -u lib/ca-bundle.crt - -ca-firefox: lib/firefox-db2pem.sh - @echo "generate a fresh ca-bundle.crt" - ./lib/firefox-db2pem.sh lib/ca-bundle.crt diff --git a/Makefile.in b/Makefile.in index 9db92476b..d90e03b69 100644 --- a/Makefile.in +++ b/Makefile.in @@ -21,7 +21,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -45,7 +45,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -69,7 +69,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -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 \ @@ -190,7 +190,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.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 \ @@ -339,6 +338,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 +348,7 @@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@ +CADDY = @CADDY@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -379,7 +381,6 @@ 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@ @@ -405,9 +406,12 @@ HAVE_BROTLI = @HAVE_BROTLI@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_OPENSSL_QUIC = @HAVE_OPENSSL_QUIC@ 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@ @@ -420,6 +424,8 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCURL_LIBS = @LIBCURL_LIBS@ LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -430,12 +436,9 @@ 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@ -NSS_LIBS = @NSS_LIBS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ @@ -471,6 +474,7 @@ USE_ARES = @USE_ARES@ USE_BEARSSL = @USE_BEARSSL@ USE_GNUTLS = @USE_GNUTLS@ USE_HYPER = @USE_HYPER@ +USE_LIBPSL = @USE_LIBPSL@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ @@ -479,11 +483,14 @@ USE_MSH3 = @USE_MSH3@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ +USE_NGTCP2_CRYPTO_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ 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_NGTCP2_H3 = @USE_NGTCP2_H3@ USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ USE_QUICHE = @USE_QUICHE@ USE_RUSTLS = @USE_RUSTLS@ USE_SCHANNEL = @USE_SCHANNEL@ @@ -497,6 +504,7 @@ USE_WOLFSSH = @USE_WOLFSSH@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ +VSFTPD = @VSFTPD@ ZLIB_LIBS = @ZLIB_LIBS@ ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ abs_builddir = @abs_builddir@ @@ -572,92 +580,26 @@ 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 -VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl -VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist -VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc -VC14_10_LIBTMPL = projects/Windows/VC14.10/lib/libcurl.tmpl -VC14_10_LIBVCXPROJ = projects/Windows/VC14.10/lib/libcurl.vcxproj.dist -VC14_10_LIBVCXPROJ_DEPS = $(VC14_10_LIBTMPL) Makefile.am lib/Makefile.inc -VC14_10_SRCTMPL = projects/Windows/VC14.10/src/curl.tmpl -VC14_10_SRCVCXPROJ = projects/Windows/VC14.10/src/curl.vcxproj.dist -VC14_10_SRCVCXPROJ_DEPS = $(VC14_10_SRCTMPL) Makefile.am src/Makefile.inc -VC14_30_LIBTMPL = projects/Windows/VC14.30/lib/libcurl.tmpl -VC14_30_LIBVCXPROJ = projects/Windows/VC14.30/lib/libcurl.vcxproj.dist -VC14_30_LIBVCXPROJ_DEPS = $(VC14_30_LIBTMPL) Makefile.am lib/Makefile.inc -VC14_30_SRCTMPL = projects/Windows/VC14.30/src/curl.tmpl -VC14_30_SRCVCXPROJ = projects/Windows/VC14.30/src/curl.vcxproj.dist -VC14_30_SRCVCXPROJ_DEPS = $(VC14_30_SRCTMPL) Makefile.am src/Makefile.inc VC_DIST = projects/README.md \ projects/build-openssl.bat \ projects/build-wolfssl.bat \ projects/checksrc.bat \ - projects/Windows/VC10/curl-all.sln \ - projects/Windows/VC10/lib/libcurl.sln \ - projects/Windows/VC10/lib/libcurl.vcxproj.filters \ - projects/Windows/VC10/src/curl.sln \ - projects/Windows/VC10/src/curl.vcxproj.filters \ - projects/Windows/VC11/curl-all.sln \ - projects/Windows/VC11/lib/libcurl.sln \ - projects/Windows/VC11/lib/libcurl.vcxproj.filters \ - projects/Windows/VC11/src/curl.sln \ - projects/Windows/VC11/src/curl.vcxproj.filters \ - projects/Windows/VC12/curl-all.sln \ - projects/Windows/VC12/lib/libcurl.sln \ - projects/Windows/VC12/lib/libcurl.vcxproj.filters \ - projects/Windows/VC12/src/curl.sln \ - projects/Windows/VC12/src/curl.vcxproj.filters \ - projects/Windows/VC14/curl-all.sln \ - projects/Windows/VC14/lib/libcurl.sln \ - projects/Windows/VC14/lib/libcurl.vcxproj.filters \ - projects/Windows/VC14/src/curl.sln \ - projects/Windows/VC14/src/curl.vcxproj.filters \ - projects/Windows/VC14.10/curl-all.sln \ - projects/Windows/VC14.10/lib/libcurl.sln \ - projects/Windows/VC14.10/lib/libcurl.vcxproj.filters \ - projects/Windows/VC14.10/src/curl.sln \ - projects/Windows/VC14.10/src/curl.vcxproj.filters \ - projects/Windows/VC14.30/curl-all.sln \ - projects/Windows/VC14.30/lib/libcurl.sln \ - projects/Windows/VC14.30/lib/libcurl.vcxproj.filters \ - projects/Windows/VC14.30/src/curl.sln \ - projects/Windows/VC14.30/src/curl.vcxproj.filters \ projects/generate.bat \ projects/wolfssl_options.h \ projects/wolfssl_override.props WINBUILD_DIST = winbuild/README.md winbuild/gen_resp_file.bat \ - winbuild/MakefileBuild.vc winbuild/Makefile.vc + winbuild/MakefileBuild.vc winbuild/Makefile.vc winbuild/makedebug.bat PLAN9_DIST = plan9/include/mkfile \ plan9/include/mkfile \ @@ -669,17 +611,18 @@ PLAN9_DIST = plan9/include/mkfile \ plan9/src/mkfile.inc \ plan9/src/mkfile -EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ - RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework $(CMAKE_DIST) \ - $(VC_DIST) $(WINBUILD_DIST) $(PLAN9_DIST) lib/libcurl.vers.in buildconf.bat +EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ + RELEASE-NOTES buildconf libcurl.pc.in $(CMAKE_DIST) $(VC_DIST) \ + $(WINBUILD_DIST) $(PLAN9_DIST) lib/libcurl.vers.in buildconf.bat \ + libcurl.def Dockerfile -CLEANFILES = $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) $(VC11_LIBVCXPROJ) \ - $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) $(VC14_LIBVCXPROJ) \ - $(VC14_SRCVCXPROJ) $(VC14_10_LIBVCXPROJ) $(VC14_10_SRCVCXPROJ) \ +CLEANFILES = $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ) \ + $(VC14_10_LIBVCXPROJ) $(VC14_10_SRCVCXPROJ) \ + $(VC14_20_LIBVCXPROJ) $(VC14_20_SRCVCXPROJ) \ $(VC14_30_LIBVCXPROJ) $(VC14_30_SRCVCXPROJ) bin_SCRIPTS = curl-config -SUBDIRS = lib src +SUBDIRS = lib docs src scripts DIST_SUBDIRS = $(SUBDIRS) tests packages scripts include docs pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libcurl.pc @@ -705,13 +648,12 @@ LIB_VAUTH_HFILES = \ LIB_VTLS_CFILES = \ vtls/bearssl.c \ - vtls/gskit.c \ + vtls/cipher_suite.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 \ @@ -723,16 +665,16 @@ LIB_VTLS_CFILES = \ LIB_VTLS_HFILES = \ vtls/bearssl.h \ - vtls/gskit.h \ + vtls/cipher_suite.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 \ @@ -740,16 +682,21 @@ LIB_VTLS_HFILES = \ vtls/x509asn1.h LIB_VQUIC_CFILES = \ - vquic/msh3.c \ - vquic/ngtcp2.c \ - vquic/quiche.c \ - vquic/vquic.c + vquic/curl_msh3.c \ + vquic/curl_ngtcp2.c \ + vquic/curl_osslq.c \ + vquic/curl_quiche.c \ + vquic/vquic.c \ + vquic/vquic-tls.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_osslq.h \ + vquic/curl_quiche.h \ + vquic/vquic.h \ + vquic/vquic_int.h \ + vquic/vquic-tls.h LIB_VSSH_CFILES = \ vssh/libssh.c \ @@ -765,8 +712,14 @@ 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 \ @@ -782,16 +735,20 @@ LIB_CFILES = \ 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_sha512_256.c \ curl_sspi.c \ curl_threads.c \ + curl_trc.c \ + cw-out.c \ dict.c \ + dllmain.c \ doh.c \ dynbuf.c \ + dynhds.c \ easy.c \ easygetopt.c \ easyoptions.c \ @@ -805,7 +762,6 @@ LIB_CFILES = \ getenv.c \ getinfo.c \ gopher.c \ - h2h3.c \ hash.c \ headers.c \ hmac.c \ @@ -816,13 +772,14 @@ 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.c \ if2ip.c \ imap.c \ @@ -831,6 +788,7 @@ LIB_CFILES = \ krb5.c \ ldap.c \ llist.c \ + macos.c \ md4.c \ md5.c \ memdebug.c \ @@ -849,6 +807,7 @@ LIB_CFILES = \ psl.c \ rand.c \ rename.c \ + request.c \ rtsp.c \ select.c \ sendf.c \ @@ -880,7 +839,6 @@ LIB_CFILES = \ version.c \ version_win32.c \ warnless.c \ - wildcard.c \ ws.c LIB_HFILES = \ @@ -888,8 +846,14 @@ 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 \ @@ -913,7 +877,6 @@ LIB_HFILES = \ curl_memrchr.h \ curl_multibyte.h \ curl_ntlm_core.h \ - curl_ntlm_wb.h \ curl_path.h \ curl_printf.h \ curl_range.h \ @@ -922,12 +885,16 @@ LIB_HFILES = \ curl_setup.h \ curl_setup_once.h \ curl_sha256.h \ + curl_sha512_256.h \ curl_sspi.h \ curl_threads.h \ + curl_trc.h \ curlx.h \ + cw-out.h \ dict.h \ doh.h \ dynbuf.h \ + dynhds.h \ easy_lock.h \ easyif.h \ easyoptions.h \ @@ -936,30 +903,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 \ @@ -973,9 +941,9 @@ LIB_HFILES = \ pop3.h \ progress.h \ psl.h \ - quic.h \ rand.h \ rename.h \ + request.h \ rtsp.h \ select.h \ sendf.h \ @@ -1007,7 +975,6 @@ LIB_HFILES = \ urldata.h \ version_win32.h \ warnless.h \ - wildcard.h \ ws.h LIB_RCFILES = libcurl.rc @@ -1018,30 +985,38 @@ HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) \ $(LIB_VQUIC_HFILES) $(LIB_VSSH_HFILES) -# 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. +# 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 are not part of +# 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 \ + terminal.c \ tool_binmode.c \ tool_bname.c \ tool_cb_dbg.c \ @@ -1049,6 +1024,7 @@ CURL_CFILES = \ tool_cb_prg.c \ tool_cb_rea.c \ tool_cb_see.c \ + tool_cb_soc.c \ tool_cb_wrt.c \ tool_cfgable.c \ tool_dirhie.c \ @@ -1062,6 +1038,7 @@ CURL_CFILES = \ tool_help.c \ tool_helpers.c \ tool_hugehelp.c \ + tool_ipfs.c \ tool_libinfo.c \ tool_listhelp.c \ tool_main.c \ @@ -1071,18 +1048,21 @@ CURL_CFILES = \ 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 \ + terminal.h \ tool_binmode.h \ tool_bname.h \ tool_cb_dbg.h \ @@ -1090,6 +1070,7 @@ CURL_HFILES = \ tool_cb_prg.h \ tool_cb_rea.h \ tool_cb_see.h \ + tool_cb_soc.h \ tool_cb_wrt.h \ tool_cfgable.h \ tool_dirhie.h \ @@ -1103,6 +1084,7 @@ CURL_HFILES = \ tool_help.h \ tool_helpers.h \ tool_hugehelp.h \ + tool_ipfs.h \ tool_libinfo.h \ tool_main.h \ tool_msgs.h \ @@ -1115,6 +1097,7 @@ CURL_HFILES = \ tool_setopt.h \ tool_setup.h \ tool_sleep.h \ + tool_stderr.h \ tool_strdup.h \ tool_urlglob.h \ tool_util.h \ @@ -1122,7 +1105,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 @@ -1593,6 +1577,8 @@ dvi: dvi-recursive dvi-am: +html: html-recursive + html-am: info: info-recursive @@ -1638,6 +1624,8 @@ mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool +pdf: pdf-recursive + pdf-am: ps: ps-recursive @@ -1683,12 +1671,6 @@ dist-hook: cp -p $$file $(distdir)$$strip; \ done) -html: - cd docs && $(MAKE) html - -pdf: - cd docs && $(MAKE) pdf - check: test examples check-docs @CROSSCOMPILING_TRUE@test-full: test @@ -1772,10 +1754,13 @@ cygwinbin: $(MAKE) -C packages/Win32/cygwin cygwinbin # We extend the standard install with a custom hook: -install-data-hook: - (cd include && $(MAKE) install) - (cd docs && $(MAKE) install) - (cd docs/libcurl && $(MAKE) install) +@BUILD_DOCS_TRUE@install-data-hook: +@BUILD_DOCS_TRUE@ (cd include && $(MAKE) install) +@BUILD_DOCS_TRUE@ (cd docs && $(MAKE) install) +@BUILD_DOCS_TRUE@ (cd docs/libcurl && $(MAKE) install) +@BUILD_DOCS_FALSE@install-data-hook: +@BUILD_DOCS_FALSE@ (cd include && $(MAKE) install) +@BUILD_DOCS_FALSE@ (cd docs && $(MAKE) install) # We extend the standard uninstall with a custom hook: uninstall-hook: @@ -1799,317 +1784,6 @@ checksrc: (cd docs/examples && $(MAKE) checksrc) (cd packages && $(MAKE) 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) \ - $(VC14_30_LIBVCXPROJ_DEPS) $(VC14_30_SRCVCXPROJ_DEPS) - @(win32_lib_srcs='$(LIB_CFILES)'; \ - win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \ - win32_lib_rc='$(LIB_RCFILES)'; \ - win32_lib_vauth_srcs='$(LIB_VAUTH_CFILES)'; \ - win32_lib_vauth_hdrs='$(LIB_VAUTH_HFILES)'; \ - win32_lib_vquic_srcs='$(LIB_VQUIC_CFILES)'; \ - win32_lib_vquic_hdrs='$(LIB_VQUIC_HFILES)'; \ - win32_lib_vssh_srcs='$(LIB_VSSH_CFILES)'; \ - win32_lib_vssh_hdrs='$(LIB_VSSH_HFILES)'; \ - win32_lib_vtls_srcs='$(LIB_VTLS_CFILES)'; \ - win32_lib_vtls_hdrs='$(LIB_VTLS_HFILES)'; \ - win32_src_srcs='$(CURL_CFILES)'; \ - win32_src_hdrs='$(CURL_HFILES)'; \ - win32_src_rc='$(CURL_RCFILES)'; \ - win32_src_x_srcs='$(CURLX_CFILES)'; \ - win32_src_x_hdrs='$(CURLX_HFILES) ../lib/config-win32.h'; \ - \ - sorted_lib_srcs=`for file in $$win32_lib_srcs; do echo $$file; done | sort`; \ - sorted_lib_hdrs=`for file in $$win32_lib_hdrs; do echo $$file; done | sort`; \ - sorted_lib_vauth_srcs=`for file in $$win32_lib_vauth_srcs; do echo $$file; done | sort`; \ - sorted_lib_vauth_hdrs=`for file in $$win32_lib_vauth_hdrs; do echo $$file; done | sort`; \ - sorted_lib_vquic_srcs=`for file in $$win32_lib_vquic_srcs; do echo $$file; done | sort`; \ - sorted_lib_vquic_hdrs=`for file in $$win32_lib_vquic_hdrs; do echo $$file; done | sort`; \ - sorted_lib_vssh_srcs=`for file in $$win32_lib_vssh_srcs; do echo $$file; done | sort`; \ - sorted_lib_vssh_hdrs=`for file in $$win32_lib_vssh_hdrs; do echo $$file; done | sort`; \ - sorted_lib_vtls_srcs=`for file in $$win32_lib_vtls_srcs; do echo $$file; done | sort`; \ - sorted_lib_vtls_hdrs=`for file in $$win32_lib_vtls_hdrs; do echo $$file; done | sort`; \ - sorted_src_srcs=`for file in $$win32_src_srcs; do echo $$file; done | sort`; \ - sorted_src_hdrs=`for file in $$win32_src_hdrs; do echo $$file; done | sort`; \ - sorted_src_x_srcs=`for file in $$win32_src_x_srcs; do echo $$file; done | sort`; \ - sorted_src_x_hdrs=`for file in $$win32_src_x_hdrs; do echo $$file; done | sort`; \ - \ - awk_code='\ -function gen_element(type, dir, file)\ -{\ - sub(/vauth\//, "", file);\ - sub(/vquic\//, "", file);\ - sub(/vssh\//, "", file);\ - sub(/vtls\//, "", file);\ -\ - spaces=" ";\ - if(dir == "lib\\vauth" ||\ - dir == "lib\\vquic" ||\ - dir == "lib\\vssh" ||\ - dir == "lib\\vtls")\ - tabs=" ";\ - else\ - tabs=" ";\ -\ - if(type == "dsp") {\ - printf("# Begin Source File\r\n");\ - printf("\r\n");\ - printf("SOURCE=..\\..\\..\\..\\%s\\%s\r\n", dir, file);\ - printf("# End Source File\r\n");\ - }\ - else if(type == "vcproj1") {\ - printf("%s\r\n",\ - tabs, dir, file);\ - printf("%s\r\n", tabs);\ - }\ - else if(type == "vcproj2") {\ - printf("%s\r\n", tabs);\ - printf("%s\r\n", tabs);\ - }\ - else if(type == "vcxproj") {\ - i = index(file, ".");\ - ext = substr(file, i == 0 ? 0 : i + 1);\ -\ - if(ext == "c")\ - printf("%s\r\n",\ - spaces, dir, file);\ - else if(ext == "h")\ - printf("%s\r\n",\ - spaces, dir, file);\ - else if(ext == "rc")\ - printf("%s\r\n",\ - spaces, dir, file);\ - }\ -}\ -\ -{\ -\ - if($$0 == "CURL_LIB_C_FILES") {\ - split(lib_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_H_FILES") {\ - split(lib_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_RC_FILES") {\ - split(lib_rc, arr);\ - for(val in arr) gen_element(proj_type, "lib", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VAUTH_C_FILES") {\ - split(lib_vauth_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vauth", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VAUTH_H_FILES") {\ - split(lib_vauth_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vauth", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VQUIC_C_FILES") {\ - split(lib_vquic_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vquic", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VQUIC_H_FILES") {\ - split(lib_vquic_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vquic", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VSSH_C_FILES") {\ - split(lib_vssh_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vssh", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VSSH_H_FILES") {\ - split(lib_vssh_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vssh", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VTLS_C_FILES") {\ - split(lib_vtls_srcs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vtls", arr[val]);\ - }\ - else if($$0 == "CURL_LIB_VTLS_H_FILES") {\ - split(lib_vtls_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "lib\\vtls", arr[val]);\ - }\ - else if($$0 == "CURL_SRC_C_FILES") {\ - split(src_srcs, arr);\ - for(val in arr) gen_element(proj_type, "src", arr[val]);\ - }\ - else if($$0 == "CURL_SRC_H_FILES") {\ - split(src_hdrs, arr);\ - for(val in arr) gen_element(proj_type, "src", arr[val]);\ - }\ - else if($$0 == "CURL_SRC_RC_FILES") {\ - split(src_rc, arr);\ - for(val in arr) gen_element(proj_type, "src", arr[val]);\ - }\ - else if($$0 == "CURL_SRC_X_C_FILES") {\ - split(src_x_srcs, arr);\ - for(val in arr) {\ - sub(/..\/lib\//, "", arr[val]);\ - gen_element(proj_type, "lib", arr[val]);\ - }\ - }\ - else if($$0 == "CURL_SRC_X_H_FILES") {\ - split(src_x_hdrs, arr);\ - for(val in arr) {\ - sub(/..\/lib\//, "", arr[val]);\ - gen_element(proj_type, "lib", arr[val]);\ - }\ - }\ - else\ - printf("%s\r\n", $$0);\ -}';\ - \ - echo "generating '$(VC10_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC10_LIBTMPL) > $(VC10_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC10_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC10_SRCTMPL) > $(VC10_SRCVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC11_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC11_LIBTMPL) > $(VC11_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC11_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC11_SRCTMPL) > $(VC11_SRCVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC12_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC12_LIBTMPL) > $(VC12_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC12_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_10_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_10_LIBTMPL) > $(VC14_10_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_10_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_10_SRCTMPL) > $(VC14_10_SRCVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_30_LIBVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v lib_srcs="$$sorted_lib_srcs" \ - -v lib_hdrs="$$sorted_lib_hdrs" \ - -v lib_rc="$$win32_lib_rc" \ - -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \ - -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \ - -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \ - -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \ - -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \ - -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \ - -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \ - -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_30_LIBTMPL) > $(VC14_30_LIBVCXPROJ) || { exit 1; }; \ - \ - echo "generating '$(VC14_30_SRCVCXPROJ)'"; \ - awk -v proj_type=vcxproj \ - -v src_srcs="$$sorted_src_srcs" \ - -v src_hdrs="$$sorted_src_hdrs" \ - -v src_rc="$$win32_src_rc" \ - -v src_x_srcs="$$sorted_src_x_srcs" \ - -v src_x_hdrs="$$sorted_src_x_hdrs" \ - "$$awk_code" $(srcdir)/$(VC14_30_SRCTMPL) > $(VC14_30_SRCVCXPROJ) || { exit 1; };) - tidy: (cd src && $(MAKE) tidy) (cd lib && $(MAKE) tidy) diff --git a/README.md b/README.md deleted file mode 100644 index 8e5866260..000000000 --- a/README.md +++ /dev/null @@ -1,68 +0,0 @@ - - -# [![curl logo](https://curl.se/logo/curl-logo.svg)](https://curl.se/) - -Curl is a command-line tool for transferring data specified with URL -syntax. Find out how to use curl by reading [the curl.1 man -page](https://curl.se/docs/manpage.html) or [the MANUAL -document](https://curl.se/docs/manual.html). Find out how to install Curl -by reading [the INSTALL document](https://curl.se/docs/install.html). - -libcurl is the library curl is using to do its job. It is readily available to -be used by your software. Read [the libcurl.3 man -page](https://curl.se/libcurl/c/libcurl.html) to learn how. - -You can find answers to the most frequent questions we get in [the FAQ -document](https://curl.se/docs/faq.html). - -Study [the COPYING file](https://curl.se/docs/copyright.html) for -distribution terms. - -## Contact - -If you have problems, questions, ideas or suggestions, please contact us by -posting to a suitable [mailing list](https://curl.se/mail/). - -All contributors to the project are listed in [the THANKS -document](https://curl.se/docs/thanks.html). - -## Commercial support - -For commercial support, maybe private and dedicated help with your problems or -applications using (lib)curl visit [the support page](https://curl.se/support.html). - -## Website - -Visit the [curl website](https://curl.se/) for the latest news and -downloads. - -## Git - -To download the latest source from the Git server, do this: - - git clone https://github.com/curl/curl.git - -(you will get a directory named curl created, filled with the source code) - -## Security problems - -Report suspected security problems via [our HackerOne -page](https://hackerone.com/curl) and not in public. - -## Notice - -Curl contains pieces of source code that is Copyright (c) 1998, 1999 Kungliga -Tekniska Högskolan. This notice is included here to comply with the -distribution terms. - -## Backers - -Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/curl#section-contribute). - -## Sponsors - -Support this project by becoming a [sponsor](https://curl.se/sponsors.html). diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 620578ab3..81a78ccb7 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -1,183 +1,44 @@ -curl and libcurl 8.7.0 +curl and libcurl 8.9.1 - Public curl releases: 255 - Command line options: 258 - curl_easy_setopt() options: 304 - Public functions in libcurl: 93 - Contributors: 3134 + Public curl releases: 259 + Command line options: 263 + curl_easy_setopt() options: 306 + Public functions in libcurl: 94 + Contributors: 3211 This release includes the following changes: - o configure: add --disable-docs flag [16] - o CURLINFO_USED_PROXY: return bool whether the proxy was used [24] - o digest: support SHA-512/256 [118] - o DoH: add trace configuration [61] - o write-out: add '%{proxy_used}' [24] This release includes the following bugfixes: - o ALTSVC.md: correct a typo [14] - o asyn-ares: fix data race warning [88] - o asyn-thread: use wakeup_close to close the read descriptor [1] - o badwords: use hostname, not host name [46] - o BINDINGS: add mcurl, the python binding [67] - o bufq: writing into a softlimit queue cannot be partial [49] - o c-hyper: add header collection writer in hyper builds [70] - o cd2nroff: gen: make `\>` in input to render as plain '>' in output - o cd2nroff: remove backticks from titles - o checksrc.pl: fix handling .checksrc with CRLF [43] - o cmake: add USE_OPENSSL_QUIC support [21] - o cmake: add warning for using TLS libraries without 1.3 support [25] - o cmake: enable `ENABLE_CURL_MANUAL` by default [112] - o cmake: fix `CURL_WINDOWS_SSPI=ON` with Schannel disabled [117] - o cmake: fix function description in comment [47] - o cmake: fix install for older CMake versions [53] - o cmake: fix libcurl.pc and curl-config library specifications [115] - o cmdline-docs/Makefile: avoid using a fixed temp file name [5] - o cmdline-docs: quote and angle bracket cleanup [45] - o cmdline-opts/_EXITCODES: sync with libcurl-errors [80] - o cmdline-opts/_VARIABLES.md: improve the description [105] - o cmdline-opts/_VERSION: provide %VERSION correctly [87] - o cmdline-opts: shorter help texts [148] - o configure: add pkg-config support to rustls detection [151] - o configure: add warning for using TLS libraries without 1.3 support [26] - o configure: build & install shell completions when enabled [85] - o configure: do not link with nghttp3 unless necessary [7] - o configure: Don't build shell completions when disabled [68] - o configure: Don't make shell completions without perl [83] - o configure: find libpsl with pkg-config [79] - o connect.c: fix typo [17] - o CONTRIBUTE: update the section on documentation format [96] - o cookie.md: provide an example sending a fixed cookie [13] - o cookie: if psl fails, reject the cookie [107] - o curl: exit on config file parser errors [40] - o curl: make --libcurl output better CURLOPT_*SSLVERSION [127] - o curl: when allocating variables, add the name into the struct [37] - o curl_setup.h: add curl_uint64_t internal type - o curldown: fix email address in Copyright [89] - o CURLMOPT_MAX*: mention what happens if changed mid-transfer [154] - o CURLOPT_INTERFACE.md: remove spurious amp, add see-also [137] - o CURLOPT_POSTQUOTE.md: fix typo [36] - o CURLOPT_SSL_CTX_FUNCTION.md: no promises of lifetime after return [104] - o CURLOPT_WRITEFUNCTION.md: typo fix [41] - o digest: add check for hashing error [111] - o dist: make sure the http tests are in the tarball [29] - o DISTROS: add document with distro pointers [144] - o docs/libcurl: add TLS backend info for all TLS options [155] - o docs/libcurl: generate PROTOCOLS from meta-data [153] - o docs: add missing slashes to SChannel client certificate documentation [11] - o docs: add necessary setup for nghttp3 [51] - o docs: ascii version of manpage without nroff [121] - o docs: dist curl*.1 and install without perl [64] - o docs: make curldown do angle brackets like markdown [54] - o docs: make each libcurl man specify protocol(s) [157] - o docs: make sure curl.1 is included in dist tarballs [35] - o docs: update minimal binary size in INSTALL.md - o docs: use present tense [103] - o examples: use present tense in comments [97] - o file: use xfer buf for file:// transfers [23] - o fopen: fix narrowing conversion warning on 32-bit Android [100] - o form-string.md: correct the example [4] - o ftp: do lineend conversions in client writer [32] - o ftp: fix socket wait activity in ftp_domore_getsock [28] - o ftp: tracing improvements [33] - o ftp: treat a 226 arriving before data as a signal to read data [19] - o gen.pl: make the "manpageification" faster [95] - o gen: make `\>` in input to render as plain '>' in output [78] - o getparam: make --ftp-ssl work again [90] - o GHA/linux: add sysctl trick to work-around GitHub runner issue [129] - o GIT-INFO: convert to markdown [114] - o GOVERNANCE: document the core team [133] - o header.md: remove backslash, make nicer markdown [48] - o HTTP/2: write response directly [12] - o http2, http3: return CURLE_PARTIAL_FILE when bytes were received [160] - o http2: fix push discard [124] - o http2: memory errors in the push callbacks are fatal [132] - o http2: minor tweaks to optimize two struct sizes [130] - o http2: push headers better cleanup [113] - o http2: remove the third (unused) argument from http2_data_done() [159] - o HTTP3.md: adjust the OpenSSL QUIC install instructions [34] - o http: better error message for HTTP/1.x response without status line [86] - o http: improve response header handling, save cpu cycles [138] - o http: move headers collecting to writer [71] - o http: remove stale comment about rewindbeforesend [136] - o http: separate response parsing from response action [158] - o http_chunks: fix the accounting of consumed bytes [22] - o http_chunks: remove unused 'endptr' variable [58] - o https-proxy: use IP address and cert with ip in alt names [50] - o hyper: implement unpausing via client reader [98] - o ipv6.md: mention IPv4 mapped addresses [147] - o KNOWN_BUGS: POP3 issue when reading small chunks [134] - o lib1598: fix `CURLOPT_POSTFIELDSIZE` usage [128] - o lib582: remove code causing warning that is never run [38] - o lib: add `void *ctx` to reader/writer instances [122] - o lib: convert Curl_get_line to use dynbuf [42] - o lib: Curl_read/Curl_write clarifications [101] - o lib: enhance client reader resume + rewind [92] - o lib: initialize output pointers to NULL before calling strto[ff,l,ul] [63] - o lib: keep conn IP information together [109] - o lib: move 'done' parameter to SingleRequests [142] - o lib: remove curl_mimepart object when CURL_DISABLE_MIME [72] - o libcurl-docs: cleanups - o libcurl-security.md: Active FTP passes on the local IP address [6] - o libssh/libssh2: return error on too big range [75] - o MANUAL.md: fix typo [66] - o mbedtls: fix building when MBEDTLS_X509_REMOVE_INFO flag is defined [27] - o mbedtls: fix pytest for newer versions [146] - o mbedtls: properly cleanup the thread-shared entropy [140] - o mbedtls: use mbedtls_ssl_conf_{min|max}_tls_version [59] - o md4: include strdup.h for the memdup proto [10] - o mime: add client reader [126] - o misc: fix typos in docs and lib [84] - o mkhelp: simplify the generated hugehelp program [120] - o mprintf: fix format prefix I32/I64 for windows compilers [77] - o multi: add xfer_buf to multi handle [30] - o multi: fix multi_sock handling of select_bits [81] - o multi: make add_handle free any multi_easy [102] - o ngtcp2: no recvbuf for stream [108] - o ntml_wb: fix buffer type typo [2] - o OpenSSL QUIC: adapt to v3.3.x [65] - o openssl-quic: check on Windows that socket conv to int is possible [8] - o openssl-quic: fix BIO leak and Windows warning [93] - o openssl-quic: fix unity build, casing, indentation [94] - o OS400: avoid using awk in the build scripts [20] - o paramhlp: fix CRLF-stripping files with "-d @file" [116] - o proxy1.0.md: fix example [15] - o pytest: adapt to API change [106] - o request: clarify message when request has been sent off [143] - o rustls: make curl compile with 0.12.0 [73] - o schannel: fix hang on unexpected server close [57] - o scripts: fix cijobs.pl for Azure and GHA - o sendf: ignore response body to HEAD [18] - o setopt: fix check for CURLOPT_PROXY_TLSAUTH_TYPE value [76] - o setopt: fix disabling all protocols [99] - o sha512_256: add support for GnuTLS and OpenSSL [110] - o smtp: fix STARTTLS [91] - o SPONSORS: describe the basics [131] - o strtoofft: fix the overflow check [74] - o test 1541: verify getinfo values on first header callback [149] - o test1165: improve pattern matching [60] - o tests: support setting/using blank content env variables - o TIMER_STARTTRANSFER: set the same for everyone [82] - o TLS: start shutdown only when peer did not already close [150] - o TODO: update 13.11 with more information [152] - o tool_cb_hdr: only parse etag + content-disposition for 2xx [9] - o tool_getparam: accept a blank -w "" [139] - o tool_getparam: handle non-existing (out of range) short-options [141] - o tool_operate: change precedence of server Retry-After time [44] - o tool_operate: do not set CURLOPT_QUICK_EXIT in debug builds [3] - o trace-config.md: remove the mutexed options list [119] - o transfer.c: break receive loop in speed limited transfers [125] - o transfer: improve Windows SO_SNDBUF update limit [56] - o urldata: move authneg bit from conn to Curl_easy [69] - o version: allow building with ancient libpsl [52] - o vquic-tls: fix the error code returned for bad CA file [135] - o vtls: fix tls proxy peer verification [55] - o vtls: revert "receive max buffer" + add test case [39] - o VULN-DISCLOSURE-POLICY.md: update detail about CVE requests [123] - o websocket: fix curl_ws_recv() [62] - o wolfSSL: do not call the stub function wolfSSL_BIO_set_init() [145] - o write-out.md: clarify error handling details [31] + o cmake: detect `libssh` via `pkg-config` [10] + o cmake: detect `nettle` when building with GnuTLS [12] + o cmake: drop `if(PKG_CONFIG_FOUND)` guard for `pkg_check_modules()` [25] + o configure: limit `__builtin_available` test to Darwin [22] + o connect: fix connection shutdown for event based processing [17] + o contrithanks.sh: use -F with -v to match lines as strings + o curl: more defensive socket code for --ip-tos [21] + o CURLOPT_SSL_CTX_FUNCTION.md: mention CA caching [9] + o CURLSHOPT_SHARE.md: mention sessions/cookies as not thread-safe [20] + o example/multi-uv: remove the use of globals [3] + o ftpserver.pl: make POP3 LIST serve content from the test file [19] + o GHA/windows: increase timeout for vcpkg build step + o lib: survive some NULL input args [8] + o macos: fix Apple SDK bug workaround for non-macOS targets [13] + o misc: cleanup after removing years from copyright [26] + o os400: build cli manual. [2] + o os400: workaround an IBM ASCII run-time library bug [5] + o RELEASE-PROCEDURE.md: remove the initial build step [1] + o runtests: fold timing details with GHA, sync `-r` tflags [4] + o tests: provide FTP directory contents in the test file [18] + o tidy-up: URL updates [24] + o TODO: thread-safe sharing + o transfer: speed limiting fix for 32bit systems [6] + o vtls: avoid forward declaration in MultiSSL builds [23] + o wolfSSL: allow wolfSSL's implementation of kyber to be used [7] + o wolfssl: avoid calling get_cached_x509_store if store is uncachable [11] + o wolfssl: CA store share fix [14] + o x509asn1: unittests and fixes for gtime2str [15] This release includes the following known bugs: @@ -185,195 +46,43 @@ This release includes the following known bugs: Planned upcoming removals include: - o support for space-separated NOPROXY patterns + o TLS libraries not supporting TLS 1.3 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: - 5533asdg on github, Alan Coopersmith, Andreas Kiefer, Andrew Kaster, - Andy Fiddaman, Arjan van de Ven, av223119 on github, awesomekosm on github, - Boris Verkhovskiy, Brett Buddin, Brian Clemens, chensong1211 on github, - Chris Webb, chrysos349 on github, Dan Fandrich, Daniel Gustafsson, - Daniel Stenberg, Daniel Szmulewicz, Dan McDonald, DasKutti on github, - dependabot[bot], Dexter Gerig, dfdity on github, Dirk Hünniger, - Dmitry Karpov, Dmitry Tretyakov, edmcln on github, Erik Schnetter, - Evgeny Grin (Karlson2k), Fabian Keil, Fabian Vogt, Fabrice Fontaine, - Faraz Fallahi, Gaelan Steele, Geeknik Labs, Gisle Vanem, graywolf on github, - Harry Sintonen, HsiehYuho on github, Jan Macku, Jiawen Geng, Jiří Bok, - Joel Depooter, John Marshall, Jonathan Perkin, Jon Rumsey, Jordan Brown, - Josh Soref, Karthikdasari0423, Karthikdasari0423 on github, Kevin Daudt, - Konstantin Vlasov, kpcyrd, Lars Kellogg-Stedman, LeeRiva, Louis Solofrizzo, - Lukáš Zaoral, Marcel Raad, Marcus Müller, Matt Jolly, Michael Forney, - Michael Kaufmann, Michał Antoniak, Michał Górny, Mohammadreza Hendiani, - Nikita Taranov, Outvi V, Patrick Monnerat, Paweł Witas, Pēteris Caune, - Peter Krefting, RainRat, Ramiro Garcia, Ray Satiro, Richard Levitte, - Robert Moreton, Ross Burton, Rudi Heitbaum, Ryan Carsten Schmidt, - Scott Mutter, Scott Talbert, Sean Molenaar, Sebastian Neubauer, - Sergey Bronnikov, Simon K, Stefan Eissing, Tal Regev, Thomas Pyle, - Till Wegmüller, Viktor Szakats, vulnerabilityspotter on hackerone, - Winni Neessen - (92 contributors) + Aki Sakurai, Alex Snast, Anthony Hu, Daniel Stenberg, dependabot[bot], + Dov Murik, extrimexxx on github, Gordon Parke, Harry Sintonen, + icy17 on github, Ivan Kuchin, Mamoru Tasaka, Marcel Raad, Patrick Monnerat, + Randall S. Becker, Sergey, Stefan Eissing, Tal Regev, Viktor Szakats + (19 contributors) References to bug reports and discussions on issues: - [1] = https://curl.se/bug/?i=12836 - [2] = https://curl.se/bug/?i=12825 - [3] = https://curl.se/bug/?i=12834 - [4] = https://curl.se/bug/?i=12822 - [5] = https://curl.se/bug/?i=12829 - [6] = https://curl.se/bug/?i=12867 - [7] = https://curl.se/bug/?i=12833 - [8] = https://curl.se/bug/?i=12861 - [9] = https://curl.se/bug/?i=12866 - [10] = https://curl.se/bug/?i=12849 - [11] = https://curl.se/bug/?i=12854 - [12] = https://curl.se/bug/?i=12828 - [13] = https://curl.se/bug/?i=12868 - [14] = https://curl.se/bug/?i=12852 - [15] = https://curl.se/bug/?i=12856 - [16] = https://curl.se/bug/?i=12832 - [17] = https://curl.se/bug/?i=12858 - [18] = https://curl.se/mail/lib-2024-02/0000.html - [19] = https://curl.se/bug/?i=12823 - [20] = https://curl.se/bug/?i=12826 - [21] = https://curl.se/bug/?i=13034 - [22] = https://curl.se/bug/?i=12937 - [23] = https://curl.se/bug/?i=12750 - [24] = https://curl.se/bug/?i=12719 - [25] = https://curl.se/bug/?i=12900 - [26] = https://curl.se/bug/?i=12900 - [27] = https://curl.se/bug/?i=12904 - [28] = https://curl.se/bug/?i=12901 - [29] = https://curl.se/bug/?i=12914 - [30] = https://curl.se/bug/?i=12805 - [31] = https://curl.se/bug/?i=12909 - [32] = https://curl.se/bug/?i=12878 - [33] = https://curl.se/bug/?i=12902 - [34] = https://curl.se/bug/?i=12896 - [35] = https://curl.se/bug/?i=12892 - [36] = https://curl.se/bug/?i=12926 - [37] = https://curl.se/bug/?i=12891 - [38] = https://curl.se/bug/?i=12890 - [39] = https://curl.se/bug/?i=12885 - [40] = https://curl.se/mail/archive-2024-02/0008.html - [41] = https://curl.se/bug/?i=12889 - [42] = https://curl.se/bug/?i=12846 - [43] = https://curl.se/bug/?i=12924 - [44] = https://curl.se/mail/archive-2024-01/0022.html - [45] = https://curl.se/bug/?i=12884 - [46] = https://curl.se/bug/?i=12888 - [47] = https://curl.se/bug/?i=12879 - [48] = https://curl.se/bug/?i=12877 - [49] = https://curl.se/bug/?i=13020 - [50] = https://curl.se/bug/?i=12838 - [51] = https://curl.se/bug/?i=12859 - [52] = https://curl.se/mail/archive-2024-02/0004.html - [53] = https://curl.se/bug/?i=12920 - [54] = https://curl.se/bug/?i=12869 - [55] = https://curl.se/bug/?i=12831 - [56] = https://curl.se/bug/?i=12911 - [57] = https://curl.se/bug/?i=12894 - [58] = https://curl.se/bug/?i=12996 - [59] = https://curl.se/bug/?i=12905 - [60] = https://curl.se/bug/?i=12903 - [61] = https://curl.se/bug/?i=12411 - [62] = https://curl.se/bug/?i=12945 - [63] = https://curl.se/bug/?i=12995 - [64] = https://curl.se/bug/?i=12921 - [65] = https://curl.se/bug/?i=12933 - [66] = https://curl.se/bug/?i=12965 - [67] = https://curl.se/bug/?i=12962 - [68] = https://curl.se/bug/?i=13027 - [69] = https://curl.se/bug/?i=12949 - [70] = https://curl.se/bug/?i=12880 - [71] = https://curl.se/bug/?i=12880 - [72] = https://curl.se/bug/?i=12948 - [73] = https://curl.se/bug/?i=12989 - [74] = https://curl.se/bug/?i=12990 - [75] = https://curl.se/bug/?i=12983 - [76] = https://curl.se/bug/?i=12981 - [77] = https://curl.se/bug/?i=12944 - [78] = https://curl.se/bug/?i=12977 - [79] = https://curl.se/bug/?i=12947 - [80] = https://curl.se/bug/?i=13015 - [81] = https://curl.se/bug/?i=12971 - [82] = https://curl.se/bug/?i=13052 - [83] = https://curl.se/bug/?i=13022 - [84] = https://curl.se/bug/?i=13019 - [85] = https://curl.se/bug/?i=12906 - [86] = https://curl.se/bug/?i=13045 - [87] = https://curl.se/bug/?i=13008 - [88] = https://curl.se/bug/?i=13065 - [89] = https://curl.se/bug/?i=12997 - [90] = https://curl.se/bug/?i=13006 - [91] = https://curl.se/bug/?i=13048 - [92] = https://curl.se/bug/?i=13026 - [93] = https://curl.se/bug/?i=13043 - [94] = https://curl.se/bug/?i=13044 - [95] = https://curl.se/bug/?i=13041 - [96] = https://curl.se/bug/?i=13046 - [97] = https://curl.se/bug/?i=13003 - [98] = https://curl.se/bug/?i=13075 - [99] = https://curl.se/bug/?i=13004 - [100] = https://curl.se/bug/?i=12998 - [101] = https://curl.se/bug/?i=12964 - [102] = https://curl.se/bug/?i=12992 - [103] = https://curl.se/bug/?i=13001 - [104] = https://curl.se/bug/?i=12999 - [105] = https://curl.se/bug/?i=13040 - [106] = https://curl.se/bug/?i=13037 - [107] = https://curl.se/bug/?i=13033 - [108] = https://curl.se/bug/?i=13073 - [109] = https://curl.se/bug/?i=13084 - [110] = https://curl.se/bug/?i=13070 - [111] = https://curl.se/bug/?i=13072 - [112] = https://curl.se/bug/?i=13028 - [113] = https://curl.se/bug/?i=13054 - [114] = https://curl.se/bug/?i=13074 - [115] = https://curl.se/bug/?i=6169 - [116] = https://curl.se/bug/?i=13063 - [117] = https://curl.se/bug/?i=13061 - [118] = https://curl.se/bug/?i=12897 - [119] = https://curl.se/bug/?i=13031 - [120] = https://curl.se/bug/?i=13047 - [121] = https://curl.se/bug/?i=13047 - [122] = https://curl.se/bug/?i=13035 - [123] = https://curl.se/bug/?i=13088 - [124] = https://curl.se/bug/?i=13055 - [125] = https://curl.se/mail/lib-2024-03/0001.html - [126] = https://curl.se/bug/?i=13039 - [127] = https://curl.se/bug/?i=13127 - [128] = https://curl.se/bug/?i=13085 - [129] = https://curl.se/bug/?i=13124 - [130] = https://curl.se/bug/?i=13082 - [131] = https://curl.se/bug/?i=13119 - [132] = https://curl.se/bug/?i=13081 - [133] = https://curl.se/bug/?i=13118 - [134] = https://curl.se/bug/?i=12063 - [135] = https://curl.se/bug/?i=13115 - [136] = https://curl.se/bug/?i=13187 - [137] = https://curl.se/bug/?i=13149 - [138] = https://curl.se/bug/?i=13143 - [139] = https://curl.se/bug/?i=13144 - [140] = https://curl.se/bug/?i=11919 - [141] = https://curl.se/bug/?i=13101 - [142] = https://curl.se/bug/?i=13096 - [143] = https://curl.se/bug/?i=13093 - [144] = https://curl.se/bug/?i=13178 - [145] = https://curl.se/bug/?i=13164 - [146] = https://curl.se/bug/?i=13132 - [147] = https://curl.se/bug/?i=13112 - [148] = https://curl.se/bug/?i=13169 - [149] = https://curl.se/bug/?i=13128 - [150] = https://curl.se/bug/?i=10290 - [151] = https://curl.se/bug/?i=13179 - [152] = https://curl.se/bug/?i=13173 - [153] = https://curl.se/bug/?i=13175 - [154] = https://curl.se/bug/?i=13176 - [155] = https://curl.se/bug/?i=13168 - [157] = https://curl.se/bug/?i=13166 - [158] = https://curl.se/bug/?i=13134 - [159] = https://curl.se/bug/?i=13154 - [160] = https://curl.se/bug/?i=13151 + [1] = https://curl.se/bug/?i=14267 + [2] = https://curl.se/bug/?i=14289 + [3] = https://curl.se/bug/?i=14287 + [4] = https://curl.se/bug/?i=14284 + [5] = https://curl.se/bug/?i=14281 + [6] = https://curl.se/bug/?i=14272 + [7] = https://curl.se/bug/?i=14268 + [8] = https://curl.se/bug/?i=14247 + [9] = https://curl.se/bug/?i=14302 + [10] = https://curl.se/bug/?i=14199 + [11] = https://curl.se/bug/?i=14306 + [12] = https://curl.se/bug/?i=14285 + [13] = https://curl.se/bug/?i=14269 + [14] = https://curl.se/bug/?i=14278 + [15] = https://curl.se/bug/?i=14316 + [17] = https://curl.se/bug/?i=14280 + [18] = https://curl.se/bug/?i=14295 + [19] = https://curl.se/bug/?i=14293 + [20] = https://curl.se/bug/?i=14292 + [21] = https://curl.se/bug/?i=14304 + [22] = https://curl.se/bug/?i=14196 + [23] = https://curl.se/bug/?i=14305 + [24] = https://curl.se/bug/?i=14318 + [25] = https://curl.se/bug/?i=14309 + [26] = https://curl.se/bug/?i=14312 diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index dbce1b52a..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,16 +0,0 @@ - - -# Security Policy - -Read our [Vulnerability Disclosure Policy](docs/VULN-DISCLOSURE-POLICY.md). - -## Reporting a Vulnerability - -If you have found or just suspect a security problem somewhere in curl or -libcurl, report it on [HackerOne](https://hackerone.com/curl). - -We treat security issues with confidentiality until controlled and disclosed responsibly. diff --git a/acinclude.m4 b/acinclude.m4 index a44ae350e..7a26ecedc 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -94,7 +94,7 @@ int main (void) #ifdef $1 return 0; #else - force compilation error + #error force compilation error #endif } ]]) @@ -130,7 +130,7 @@ int main (void) #elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED) return 0; #else - force compilation error + #error force compilation error #endif } ]]) @@ -1256,24 +1256,19 @@ 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" -a \ - "x$WOLFSSL_ENABLED" != "x1"; then - AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS, mbedTLS or wolfSSL]) - fi capath="$want_capath" ca="no" else - dnl first try autodetecting a CA bundle , then a CA path - dnl both autodetections can be skipped by --without-ca-* + dnl First try auto-detecting a CA bundle, then a CA path. + dnl Both auto-detections can be skipped by --without-ca-* ca="no" capath="no" - if test "x$cross_compiling" != "xyes"; then + if test "x$cross_compiling" != "xyes" -a \ + "x$curl_cv_native_windows" != "xyes"; then dnl NOT cross-compiling and... dnl neither of the --with-ca-* options are provided if test "x$want_ca" = "xunset"; then - dnl the path we previously would have installed the curl ca bundle + dnl the path we previously would have installed the curl CA bundle dnl to, and thus we now check for an already existing cert in that dnl place in case we find no other if test "x$prefix" != xNONE; then @@ -1296,12 +1291,7 @@ AS_HELP_STRING([--without-ca-path], [Don't use a default CA path]), fi AC_MSG_NOTICE([want $want_capath ca $ca]) if test "x$want_capath" = "xunset"; then - if test "x$OPENSSL_ENABLED" = "x1" -o \ - "x$GNUTLS_ENABLED" = "x1" -o \ - "x$MBEDTLS_ENABLED" = "x1" -o \ - "x$WOLFSSL_ENABLED" = "x1"; then - check_capath="/etc/ssl/certs" - fi + check_capath="/etc/ssl/certs" fi else dnl no option given and cross-compiling @@ -1649,9 +1639,8 @@ AC_DEFUN([CURL_SUPPORTS_BUILTIN_AVAILABLE], [ AC_MSG_CHECKING([to see if the compiler supports __builtin_available()]) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ -#include ]],[[ - if (__builtin_available(macOS 10.8, iOS 5.0, *)) {} + if(__builtin_available(macOS 10.12, iOS 5.0, *)) {} ]]) ],[ AC_MSG_RESULT([yes]) diff --git a/aclocal.m4 b/aclocal.m4 index 5f0cb3db4..9b6fbc904 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1228,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]) @@ -1245,7 +1244,6 @@ m4_include([m4/lt~obsolete.m4]) m4_include([m4/xc-am-iface.m4]) m4_include([m4/xc-cc-check.m4]) m4_include([m4/xc-lt-iface.m4]) -m4_include([m4/xc-translit.m4]) m4_include([m4/xc-val-flgs.m4]) m4_include([m4/zz40-xc-ovr.m4]) m4_include([m4/zz50-xc-ovr.m4]) diff --git a/appveyor.sh b/appveyor.sh deleted file mode 100644 index 87c9d572a..000000000 --- a/appveyor.sh +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -# shellcheck disable=SC3040,SC2039 -set -eux; [ -n "${BASH:-}${ZSH_NAME:-}" ] && set -o pipefail - -# build - -if [ "${APPVEYOR_BUILD_WORKER_IMAGE}" = 'Visual Studio 2022' ]; then - openssl_root_win='C:/OpenSSL-v30-Win64' -else - openssl_root_win='C:/OpenSSL-v111-Win64' -fi -openssl_root="$(cygpath -u "${openssl_root_win}")" - -if [ "${BUILD_SYSTEM}" = 'CMake' ]; then - options='' - [[ "${TARGET:-}" = *'ARM64'* ]] && SKIP_RUN='ARM64 architecture' - [ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}" - [ "${OPENSSL}" = 'ON' ] && options+=" -DOPENSSL_ROOT_DIR=${openssl_root_win}" - [ "${PRJ_CFG}" = 'Debug' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=' - [ "${PRJ_CFG}" = 'Release' ] && options+=' -DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=' - [[ "${PRJ_GEN}" = *'Visual Studio'* ]] && options+=' -DCMAKE_VS_GLOBALS=TrackFileAccess=false' - # Fails to run without this run due to missing MSVCR90.dll - [ "${PRJ_GEN}" = 'Visual Studio 9 2008' ] && options+=' -DCURL_STATIC_CRT=ON' - # shellcheck disable=SC2086 - cmake -B _bld "-G${PRJ_GEN}" ${TARGET:-} ${options} \ - "-DCURL_USE_OPENSSL=${OPENSSL}" \ - "-DCURL_USE_SCHANNEL=${SCHANNEL}" \ - "-DHTTP_ONLY=${HTTP_ONLY}" \ - "-DBUILD_SHARED_LIBS=${SHARED}" \ - "-DBUILD_TESTING=${TESTING}" \ - "-DENABLE_WEBSOCKETS=${WEBSOCKETS:-}" \ - "-DCMAKE_UNITY_BUILD=${UNITY}" \ - '-DCURL_WERROR=ON' \ - "-DENABLE_DEBUG=${DEBUG}" \ - "-DENABLE_UNICODE=${ENABLE_UNICODE}" \ - '-DCMAKE_INSTALL_PREFIX=C:/CURL' \ - "-DCMAKE_BUILD_TYPE=${PRJ_CFG}" - # shellcheck disable=SC2086 - cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --clean-first -- ${BUILD_OPT:-} - if [ "${SHARED}" = 'ON' ]; then - cp -f -p _bld/lib/*.dll _bld/src/ - fi - if [ "${OPENSSL}" = 'ON' ]; then - cp -f -p "${openssl_root}"/*.dll _bld/src/ - fi - curl='_bld/src/curl.exe' -elif [ "${BUILD_SYSTEM}" = 'VisualStudioSolution' ]; then - ( - cd projects - ./generate.bat "${VC_VERSION}" - msbuild.exe -maxcpucount "-property:Configuration=${PRJ_CFG}" "Windows/${VC_VERSION}/curl-all.sln" - ) - curl="build/Win32/${VC_VERSION}/${PRJ_CFG}/curld.exe" -elif [ "${BUILD_SYSTEM}" = 'winbuild_vs2015' ]; then - ./buildconf.bat - ( - cd winbuild - cat << EOF > _make.bat - call "C:/Program Files/Microsoft SDKs/Windows/v7.1/Bin/SetEnv.cmd" /x64 - call "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/vcvarsall.bat" x86_amd64 - nmake -f Makefile.vc mode=dll VC=14 "SSL_PATH=${openssl_root_win}" WITH_SSL=dll MACHINE=x64 DEBUG=${DEBUG} ENABLE_UNICODE=${ENABLE_UNICODE} -EOF - ./_make.bat - rm _make.bat - ) - curl="builds/libcurl-vc14-x64-${PATHPART}-dll-ssl-dll-ipv6-sspi/bin/curl.exe" -elif [ "${BUILD_SYSTEM}" = 'winbuild_vs2017' ]; then - ./buildconf.bat - ( - cd winbuild - cat << EOF > _make.bat - call "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Auxiliary/Build/vcvars64.bat" - nmake -f Makefile.vc mode=dll VC=14.10 "SSL_PATH=${openssl_root_win}" WITH_SSL=dll MACHINE=x64 DEBUG=${DEBUG} ENABLE_UNICODE=${ENABLE_UNICODE} -EOF - ./_make.bat - rm _make.bat - ) - curl="builds/libcurl-vc14.10-x64-${PATHPART}-dll-ssl-dll-ipv6-sspi/bin/curl.exe" -elif [ "${BUILD_SYSTEM}" = 'autotools' ]; then - autoreconf -fi - ( - mkdir _bld - cd _bld - # shellcheck disable=SC2086 - ../configure ${CONFIG_ARGS:-} - make -j2 V=1 - make -j2 V=1 examples - cd tests - make -j2 V=1 - ) - curl='_bld/src/curl.exe' -fi - -find . -name '*.exe' -o -name '*.dll' -if [ -z "${SKIP_RUN:-}" ]; then - "${curl}" --version -else - echo "Skip running curl.exe. Reason: ${SKIP_RUN}" -fi - -if false; then - for log in CMakeFiles/CMakeConfigureLog.yaml CMakeFiles/CMakeOutput.log CMakeFiles/CMakeError.log; do - [ -r "_bld/${log}" ] && cat "_bld/${log}" - done -fi - -if [ "${TESTING}" = 'ON' ] && [ "${BUILD_SYSTEM}" = 'CMake' ]; then - cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target testdeps -fi - -# test - -if [ "${TESTING}" = 'ON' ]; then - export TFLAGS='' - if [ -x "$(cygpath -u "${WINDIR}/System32/curl.exe")" ]; then - TFLAGS+=" -ac $(cygpath -u "${WINDIR}/System32/curl.exe")" - elif [ -x "$(cygpath -u "C:/msys64/usr/bin/curl.exe")" ]; then - TFLAGS+=" -ac $(cygpath -u "C:/msys64/usr/bin/curl.exe")" - fi - TFLAGS+=" ${DISABLED_TESTS:-}" - if [ "${BUILD_SYSTEM}" = 'CMake' ]; then - ls _bld/lib/*.dll >/dev/null 2>&1 && cp -f -p _bld/lib/*.dll _bld/tests/libtest/ - cmake --build _bld --config "${PRJ_CFG}" --target test-ci - elif [ "${BUILD_SYSTEM}" = 'autotools' ]; then - ( - cd _bld - make -j2 V=1 test-ci - ) - else - ( - TFLAGS="-a -p !flaky -r -rm ${TFLAGS}" - cd _bld/tests - ./runtests.pl - ) - fi -fi diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 7fd1a6629..000000000 --- a/appveyor.yml +++ /dev/null @@ -1,305 +0,0 @@ -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -# https://ci.appveyor.com/project/curlorg/curl/history -# AppVeyor configuration: -# https://www.appveyor.com/docs/appveyor-yml/ -# AppVeyor worker images: -# https://www.appveyor.com/docs/windows-images-software/ - -version: 7.50.0.{build} - -environment: - UNITY: 'OFF' - OPENSSL: 'OFF' - DEBUG: 'ON' - SHARED: 'OFF' - matrix: - # generated CMake-based Visual Studio Release builds - - job_name: 'CMake, VS2008, Release, x86, Schannel, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' - BUILD_SYSTEM: CMake - PRJ_GEN: 'Visual Studio 9 2008' - PRJ_CFG: Release - SCHANNEL: 'ON' - ENABLE_UNICODE: 'OFF' - HTTP_ONLY: 'OFF' - SHARED: 'ON' - TESTING: 'OFF' - DISABLED_TESTS: '' - - job_name: 'CMake, VS2022, Release, x64, OpenSSL 3, WebSockets, Unity, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' - BUILD_SYSTEM: CMake - PRJ_GEN: 'Visual Studio 17 2022' - TARGET: '-A x64' - PRJ_CFG: Release - OPENSSL: 'ON' - SCHANNEL: 'OFF' - ENABLE_UNICODE: 'OFF' - HTTP_ONLY: 'OFF' - SHARED: 'ON' - TESTING: 'OFF' - DISABLED_TESTS: '' - WEBSOCKETS: 'ON' - UNITY: 'ON' - - job_name: 'CMake, VS2022, Release, arm64, Schannel, Static, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' - BUILD_SYSTEM: CMake - PRJ_GEN: 'Visual Studio 17 2022' - TARGET: '-A ARM64' - PRJ_CFG: Release - SCHANNEL: 'ON' - ENABLE_UNICODE: 'OFF' - HTTP_ONLY: 'OFF' - TESTING: 'OFF' - DISABLED_TESTS: '' - # generated CMake-based Visual Studio Debug builds - - job_name: 'CMake, VS2010, Debug, x64, no SSL, Static' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' - BUILD_SYSTEM: CMake - PRJ_GEN: 'Visual Studio 10 2010 Win64' - PRJ_CFG: Debug - SCHANNEL: 'OFF' - ENABLE_UNICODE: 'OFF' - HTTP_ONLY: 'OFF' - TESTING: 'ON' - DISABLED_TESTS: '!1139 !1501 !1140 !1173 !1177 !1477' - - job_name: 'CMake, VS2022, Debug, x64, Schannel, Static, Unicode' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' - BUILD_SYSTEM: CMake - PRJ_GEN: 'Visual Studio 17 2022' - TARGET: '-A x64' - PRJ_CFG: Debug - SCHANNEL: 'ON' - ENABLE_UNICODE: 'ON' - HTTP_ONLY: 'OFF' - TESTING: 'ON' - DISABLED_TESTS: '!1139 !1501 !1140 !1173 !1177 !1477' - - job_name: 'CMake, VS2022, Debug, x64, no SSL, Static' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' - BUILD_SYSTEM: CMake - PRJ_GEN: 'Visual Studio 17 2022' - TARGET: '-A x64' - PRJ_CFG: Debug - SCHANNEL: 'OFF' - ENABLE_UNICODE: 'OFF' - HTTP_ONLY: 'OFF' - TESTING: 'ON' - DISABLED_TESTS: '!1139 !1501 !1140 !1173 !1177 !1477' - - job_name: 'CMake, VS2022, Debug, x64, no SSL, Static, HTTP only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' - BUILD_SYSTEM: CMake - PRJ_GEN: 'Visual Studio 17 2022' - TARGET: '-A x64' - PRJ_CFG: Debug - SCHANNEL: 'OFF' - ENABLE_UNICODE: 'OFF' - HTTP_ONLY: 'ON' - TESTING: 'ON' - DISABLED_TESTS: '!1139 !1501 !1140 !1173 !1177 !1477' - # generated CMake-based MSYS Makefiles builds (mingw cross-compiling) - - job_name: 'CMake, mingw-w64, gcc 13, Debug, x64, Schannel, Static, Unicode, Unity' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' - BUILD_SYSTEM: CMake - PRJ_GEN: 'MSYS Makefiles' - PRJ_CFG: Debug - SCHANNEL: 'ON' - ENABLE_UNICODE: 'ON' - HTTP_ONLY: 'OFF' - TESTING: 'ON' - DISABLED_TESTS: '!1086 !1139 !1451 !1501 !1140 !1173 !1177 !1477' - ADD_PATH: 'C:/msys64/mingw64/bin' - MSYS2_ARG_CONV_EXCL: '/*' - BUILD_OPT: -k - UNITY: 'ON' - - job_name: 'CMake, mingw-w64, gcc 7, Debug, x64, Schannel, Static, Unicode' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: CMake - PRJ_GEN: 'MSYS Makefiles' - PRJ_CFG: Debug - SCHANNEL: 'ON' - ENABLE_UNICODE: 'ON' - HTTP_ONLY: 'OFF' - TESTING: 'ON' - DISABLED_TESTS: '!1086 !1139 !1451 !1501 !1140 !1173 !1177 !1477' - ADD_PATH: 'C:/mingw-w64/x86_64-7.2.0-posix-seh-rt_v5-rev1/mingw64/bin' - MSYS2_ARG_CONV_EXCL: '/*' - BUILD_OPT: -k - - job_name: 'CMake, mingw-w64, gcc 9, Debug, x64, Schannel, Static, Unity' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: CMake - PRJ_GEN: 'MSYS Makefiles' - PRJ_CFG: Debug - SCHANNEL: 'ON' - ENABLE_UNICODE: 'OFF' - HTTP_ONLY: 'OFF' - TESTING: 'ON' - # test 286 disabled due to https://github.com/curl/curl/issues/12040 - DISABLED_TESTS: '~286 !1086 !1139 !1451 !1501 !1140 !1173 !1177 !1477' - ADD_PATH: 'C:/msys64/mingw64/bin' - MSYS2_ARG_CONV_EXCL: '/*' - BUILD_OPT: -k - UNITY: 'ON' - - job_name: 'CMake, mingw-w64, gcc 6, Debug, x86, Schannel, Static' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' - BUILD_SYSTEM: CMake - PRJ_GEN: 'MSYS Makefiles' - PRJ_CFG: Debug - SCHANNEL: 'ON' - ENABLE_UNICODE: 'OFF' - HTTP_ONLY: 'OFF' - TESTING: 'ON' - DISABLED_TESTS: '!1086 !1139 !1451 !1501 !1140 !1173 !1177 !1477' - ADD_PATH: 'C:/mingw-w64/i686-6.3.0-posix-dwarf-rt_v5-rev1/mingw32/bin' - MSYS2_ARG_CONV_EXCL: '/*' - BUILD_OPT: -k - # winbuild-based builds - - job_name: 'winbuild, VS2015, Debug, x64, OpenSSL 1.1.1, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' - BUILD_SYSTEM: winbuild_vs2015 - DEBUG: 'yes' - PATHPART: debug - TESTING: 'OFF' - ENABLE_UNICODE: 'no' - - job_name: 'winbuild, VS2015, Release, x64, OpenSSL 1.1.1, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' - BUILD_SYSTEM: winbuild_vs2015 - DEBUG: 'no' - PATHPART: release - TESTING: 'OFF' - ENABLE_UNICODE: 'no' - - job_name: 'winbuild, VS2017, Debug, x64, OpenSSL 1.1.1, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: winbuild_vs2017 - DEBUG: 'yes' - PATHPART: debug - TESTING: 'OFF' - ENABLE_UNICODE: 'no' - - job_name: 'winbuild, VS2017, Release, x64, OpenSSL 1.1.1, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: winbuild_vs2017 - DEBUG: 'no' - PATHPART: release - TESTING: 'OFF' - ENABLE_UNICODE: 'no' - - job_name: 'winbuild, VS2015, Debug, x64, OpenSSL 1.1.1, Unicode, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' - BUILD_SYSTEM: winbuild_vs2015 - DEBUG: 'yes' - PATHPART: debug - TESTING: 'OFF' - ENABLE_UNICODE: 'yes' - - job_name: 'winbuild, VS2015, Release, x64, OpenSSL 1.1.1, Unicode, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' - BUILD_SYSTEM: winbuild_vs2015 - DEBUG: 'no' - PATHPART: release - TESTING: 'OFF' - ENABLE_UNICODE: 'yes' - - job_name: 'winbuild, VS2017, Debug, x64, OpenSSL 1.1.1, Unicode, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: winbuild_vs2017 - DEBUG: 'yes' - PATHPART: debug - TESTING: 'OFF' - ENABLE_UNICODE: 'yes' - - job_name: 'winbuild, VS2017, Release, x64, OpenSSL 1.1.1, Unicode, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: winbuild_vs2017 - DEBUG: 'no' - PATHPART: release - TESTING: 'OFF' - ENABLE_UNICODE: 'yes' - # generated VisualStudioSolution-based builds - - job_name: 'VisualStudioSolution, VS2017, Debug, x86, Schannel, Build-only' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: VisualStudioSolution - PRJ_CFG: 'DLL Debug - DLL Windows SSPI - DLL WinIDN' - TESTING: 'OFF' - VC_VERSION: VC14.10 - # autotools-based builds (NOT mingw cross-compiling, but msys2 native) - - job_name: 'autotools, msys2, Debug, x86_64, no Proxy, no SSL' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: autotools - TESTING: 'ON' - DISABLED_TESTS: '!19 !1233' - CONFIG_ARGS: '--enable-debug --enable-werror --disable-threaded-resolver --disable-proxy --without-ssl --enable-websockets --without-libpsl' - - job_name: 'autotools, msys2, Debug, x86_64, no SSL' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: autotools - TESTING: 'ON' - DISABLED_TESTS: '!19 !504 !704 !705 !1233' - CONFIG_ARGS: '--enable-debug --enable-werror --disable-threaded-resolver --without-ssl --enable-websockets --without-libpsl' - - job_name: 'autotools, msys2, Release, x86_64, no SSL' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' - BUILD_SYSTEM: autotools - TESTING: 'ON' - DISABLED_TESTS: '!19 !504 !704 !705 !1233' - CONFIG_ARGS: '--enable-warnings --enable-werror --without-ssl --enable-websockets --without-libpsl' - # autotools-based Cygwin build - - job_name: 'autotools, cygwin, Debug, x86_64, no SSL' - APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' - BUILD_SYSTEM: autotools - TESTING: 'ON' - DISABLED_TESTS: '' - ADD_SHELL: 'C:/cygwin64/bin' - CONFIG_ARGS: '--enable-debug --enable-werror --disable-threaded-resolver --without-ssl --enable-websockets --without-libpsl' - -install: - - ps: | - if($env:ADD_SHELL -ne $null) { - $env:PATH = "$env:ADD_SHELL;$env:PATH" - } - else { - $env:PATH = "C:/msys64/usr/bin;$env:PATH" - } - if($env:ADD_PATH -ne $null) { - $env:PATH = "$env:ADD_PATH;$env:PATH" - } - -build_script: - - cmd: sh -c ./appveyor.sh - -clone_depth: 10 - -# select branches to avoid testing feature branches twice (as branch and as pull request) -branches: - only: - - master - - /\/ci$/ - -skip_commits: - files: - - '.azure-pipelines.yml' - - '.circleci/*' - - '.cirrus.yml' - - '.github/**/*' - - 'packages/**/*' - - 'plan9/**/*' - -artifacts: - - path: '**/curl.exe' - name: curl - - path: '**/*curl*.dll' - name: libcurl dll diff --git a/configure b/configure index 49dc26f48..03effc57d 100644 --- 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, +# Copyright (C) Daniel Stenberg, # This configure script may be copied, distributed and modified under the # terms of the curl license; see COPYING for more details @@ -906,6 +906,8 @@ SSL_BACKENDS SUPPORT_PROTOCOLS SUPPORT_FEATURES LIBCURL_NO_SHARED +LIBCURL_PC_REQUIRES +LIBCURL_PC_REQUIRES_PRIVATE ENABLE_STATIC ENABLE_SHARED CROSSCOMPILING_FALSE @@ -923,21 +925,28 @@ BUILD_LIBHOSTNAME_TRUE USE_ARES USE_MANUAL_FALSE USE_MANUAL_TRUE -MANOPT -NROFF +BUILD_DOCS_FALSE +BUILD_DOCS_TRUE PERL +USE_FISH_COMPLETION_FALSE +USE_FISH_COMPLETION_TRUE FISH_FUNCTIONS_DIR +USE_ZSH_COMPLETION_FALSE +USE_ZSH_COMPLETION_TRUE ZSH_FUNCTIONS_DIR USE_MSH3 USE_QUICHE +USE_OPENSSL_H3 +USE_NGTCP2_H3 USE_NGHTTP3 +USE_OPENSSL_QUIC USE_NGTCP2_CRYPTO_WOLFSSL USE_NGTCP2_CRYPTO_GNUTLS -USE_NGTCP2_CRYPTO_OPENSSL +USE_NGTCP2_CRYPTO_BORINGSSL +USE_NGTCP2_CRYPTO_QUICTLS USE_NGTCP2 USE_NGHTTP2 IDN_ENABLED -CURL_PLIST_VERSION CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_FALSE CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_TRUE CURL_LT_SHLIB_VERSIONED_FLAVOUR @@ -949,17 +958,17 @@ USE_GSASL_FALSE USE_GSASL_TRUE USE_LIBPSL_FALSE USE_LIBPSL_TRUE +USE_LIBPSL CURL_CA_BUNDLE CURL_WITH_MULTI_SSL SSL_ENABLED -NSS_LIBS -USE_NSS USE_RUSTLS USE_BEARSSL USE_WOLFSSL USE_MBEDTLS HAVE_GNUTLS_SRP USE_GNUTLS +HAVE_OPENSSL_QUIC HAVE_OPENSSL_SRP RANDOM_FILE SSL_LIBS @@ -1002,13 +1011,11 @@ HAVE_WINDRES_TRUE USE_WIN32_CRYPTO USE_WIN32_SMALL_FILES USE_WIN32_LARGE_FILES -DOING_NATIVE_WINDOWS_FALSE -DOING_NATIVE_WINDOWS_TRUE BUILD_UNITTESTS_FALSE BUILD_UNITTESTS_TRUE -CURLDEBUG_FALSE -CURLDEBUG_TRUE CURL_CFLAG_EXTRAS +DOING_NATIVE_WINDOWS_FALSE +DOING_NATIVE_WINDOWS_TRUE USE_EXPLICIT_LIB_DEPS_FALSE USE_EXPLICIT_LIB_DEPS_TRUE REQUIRE_LIB_DEPS @@ -1051,6 +1058,12 @@ build_os build_vendor build_cpu build +HTTPD_NGHTTPX +APACHECTL +HTTPD +APXS +VSFTPD +CADDY TEST_NGHTTPX PKGADD_VENDOR PKGADD_NAME @@ -1108,6 +1121,8 @@ EGREP GREP SED CONFIGURE_OPTIONS +DEBUGBUILD_FALSE +DEBUGBUILD_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V @@ -1168,6 +1183,7 @@ enable_curldebug enable_symbol_hiding enable_ares enable_rt +enable_httpsrr enable_ech enable_code_coverage enable_dependency_tracking @@ -1181,9 +1197,10 @@ with_mbedtls with_wolfssl with_bearssl with_rustls -with_nss_deprecated -with_nss with_test_nghttpx +with_test_caddy +with_test_vsftpd +with_test_httpd with_darwinssl enable_largefile enable_shared @@ -1212,6 +1229,7 @@ enable_smtp enable_gopher enable_mqtt enable_manual +enable_docs enable_libcurl_option enable_libgcc with_zlib @@ -1224,7 +1242,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 @@ -1242,19 +1259,23 @@ with_winidn with_libidn2 with_nghttp2 with_ngtcp2 +with_openssl_quic with_nghttp3 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 enable_unix_sockets enable_cookies @@ -1262,6 +1283,8 @@ enable_socketpair enable_http_auth enable_doh enable_mime +enable_bindlocal +enable_form_api enable_dateparse enable_netrc enable_progress_meter @@ -1929,6 +1952,8 @@ Optional Features: --enable-ares[=PATH] Enable c-ares for DNS lookups --disable-ares Disable c-ares for DNS lookups --disable-rt disable dependency on -lrt + --enable-httpsrr Enable HTTPSRR support + --disable-httpsrr Disable HTTPSRR support --enable-ech Enable ECH support --disable-ech Disable ECH support --enable-code-coverage Provide code coverage @@ -1953,7 +1978,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 @@ -1976,6 +2001,8 @@ Optional Features: --disable-mqtt Disable MQTT support --enable-manual Enable built-in manual --disable-manual Disable built-in manual + --enable-docs Enable documentation + --disable-docs Disable documentation --enable-libcurl-option Enable --libcurl C code generation support --disable-libcurl-option Disable --libcurl C code generation support @@ -2000,15 +2027,21 @@ 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 - helper, where FILE is ntlm_auth's absolute filename - (default: /usr/bin/ntlm_auth) - --disable-ntlm-wb Disable NTLM delegation to winbind's ntlm_auth - helper --enable-tls-srp Enable TLS-SRP authentication --disable-tls-srp Disable TLS-SRP authentication --enable-unix-sockets Enable Unix domain sockets @@ -2023,6 +2056,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 @@ -2041,7 +2078,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 @@ -2061,17 +2098,17 @@ Optional Packages: installation root --with-mbedtls=PATH where to look for mbedTLS, PATH points to the installation root - --with-wolfssl=PATH where to look for WolfSSL, PATH points to the + --with-wolfssl=PATH where to look for wolfSSL, PATH points to the installation root (default: system lib default) --with-bearssl=PATH where to look for BearSSL, PATH points to the 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-vsftpd=PATH where to find vsftpd 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] @@ -2104,7 +2141,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) @@ -2113,12 +2149,16 @@ 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 - --without-libpsl disable support for libpsl cookie checking + --with-libpsl=PATH Where to look for libpsl, PATH points to the LIBPSL + installation; when possible, set the PKG_CONFIG_PATH + environment variable instead of using this option + --without-libpsl disable LIBPSL --without-libgsasl disable libgsasl support for SCRAM --with-libssh2=PATH Where to look for libssh2, PATH points to the libssh2 installation; when possible, set the @@ -2147,6 +2187,8 @@ Optional Packages: --without-nghttp2 Disable nghttp2 usage --with-ngtcp2=PATH Enable ngtcp2 usage --without-ngtcp2 Disable ngtcp2 usage + --with-openssl-quic Enable OpenSSL QUIC usage + --without-openssl-quic Disable OpenSSL QUIC usage --with-nghttp3=PATH Enable nghttp3 usage --without-nghttp3 Disable nghttp3 usage --with-quiche=PATH Enable quiche usage @@ -2161,8 +2203,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 @@ -2250,7 +2290,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, +Copyright (C) Daniel Stenberg, This configure script may be copied, distributed and modified under the terms of the curl license; see COPYING for more details _ACEOF @@ -3563,6 +3603,14 @@ printf "%s\n" "#define DEBUGBUILD 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $want_debug" >&5 printf "%s\n" "$want_debug" >&6; } + if test x$want_debug = xyes; then + DEBUGBUILD_TRUE= + DEBUGBUILD_FALSE='#' +else + DEBUGBUILD_TRUE='#' + DEBUGBUILD_FALSE= +fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable compiler optimizer" >&5 printf %s "checking whether to enable compiler optimizer... " >&6; } @@ -3769,6 +3817,37 @@ printf "%s\n" "no" >&6; } esac + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable HTTPSRR support" >&5 +printf %s "checking whether to enable HTTPSRR support... " >&6; } + OPT_HTTPSRR="default" + # Check whether --enable-httpsrr was given. +if test ${enable_httpsrr+y} +then : + enableval=$enable_httpsrr; OPT_HTTPSRR=$enableval +fi + + case "$OPT_HTTPSRR" in + no) + want_httpsrr="no" + curl_httpsrr_msg="no (--enable-httpsrr)" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + default) + want_httpsrr="no" + curl_httpsrr_msg="no (--enable-httpsrr)" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; + *) + want_httpsrr="yes" + curl_httpsrr_msg="enabled (--disable-httpsrr)" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + ;; + esac + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable ECH support" >&5 printf %s "checking whether to enable ECH support... " >&6; } OPT_ECH="default" @@ -3794,7 +3873,6 @@ printf "%s\n" "no" >&6; } *) want_ech="yes" curl_ech_msg="enabled (--disable-ech)" - experimental="ech" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; @@ -6630,7 +6708,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)" @@ -6642,6 +6720,7 @@ curl_tls_srp_msg="no (--enable-tls-srp)" curl_ipv6_msg="no (--enable-ipv6)" curl_unix_sockets_msg="no (--enable-unix-sockets)" curl_idn_msg="no (--with-{libidn2,winidn})" + curl_docs_msg="enabled (--disable-docs)" curl_manual_msg="no (--enable-manual)" curl_libcurl_msg="enabled (--disable-libcurl-option)" curl_verbose_msg="enabled (--disable-verbose)" @@ -6657,8 +6736,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-openssl-quic, --with-msh3)" enable_altsvc="yes" hsts="yes" @@ -6666,6 +6745,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. @@ -6802,49 +6894,439 @@ 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=/usr/bin/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 - 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 + + +VSFTPD=/usr/sbin/vsftpd + +# Check whether --with-test-vsftpd was given. +if test ${with_test_vsftpd+y} +then : + withval=$with_test_vsftpd; VSFTPD=$withval + if test X"$OPT_VSFTPD" = "Xno" ; then + VSFTPD="" + 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$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 + - TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }NSS" + 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 -TEST_NGHTTPX=nghttpx + 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 -# Check whether --with-test-nghttpx was given. -if test ${with_test_nghttpx+y} + ;; +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 : - withval=$with_test_nghttpx; TEST_NGHTTPX=$withval - if test X"$OPT_TEST_NGHTTPX" = "Xno" ; then - TEST_NGHTTPX="" + 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 + if test -z "$TLSCHOICE"; then if test "x$OPT_SSL" != "xno"; then @@ -6856,8 +7338,7 @@ Select from these: --with-bearssl --with-gnutls --with-mbedtls - --with-nss - --with-openssl (also works for BoringSSL and libressl) + --with-openssl (also works for BoringSSL and LibreSSL) --with-rustls --with-schannel --with-secure-transport @@ -6870,7 +7351,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 @@ -7103,7 +7584,7 @@ printf "%s\n" "$ac_cv_path_EGREP" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if OS is AIX (to define _ALL_SOURCE)" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if OS is AIX (to define _ALL_SOURCE)" >&5 printf %s "checking if OS is AIX (to define _ALL_SOURCE)... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -7147,7 +7628,7 @@ int main (void) #ifdef _THREAD_SAFE int dummy=1; #else - force compilation error + #error force compilation error #endif ; @@ -7233,7 +7714,7 @@ int main (void) #ifdef _REENTRANT int dummy=1; #else - force compilation error + #error force compilation error #endif ; @@ -7313,7 +7794,7 @@ int main (void) #ifdef errno int dummy=1; #else - force compilation error + #error force compilation error #endif ; @@ -7341,7 +7822,7 @@ int main (void) #ifdef errno int dummy=1; #else - force compilation error + #error force compilation error #endif ; @@ -16869,51 +17350,6 @@ else fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -printf %s "checking for inline... " >&6; } -if test ${ac_cv_c_inline+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo (void) {return 0; } -$ac_kw foo_t foo (void) {return 0; } -#endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_c_inline=$ac_kw -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -printf "%s\n" "$ac_cv_c_inline" >&6; } - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if cpp -P is needed" >&5 @@ -17276,7 +17712,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 @@ -17447,18 +17887,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" @@ -17521,125 +17984,30 @@ 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" flags_opt_off="-O0" - - 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 _WIN32 -CURL_DEF_TOKEN _WIN32 -#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" = "_WIN32"; then - tmp_exp="" - fi - -fi -rm -f conftest.err conftest.i conftest.$ac_ext - if test -z "$tmp_exp"; then - curl_cv_have_def__WIN32=no - - else - curl_cv_have_def__WIN32=yes - curl_cv_def__WIN32=$tmp_exp - - fi - CPPFLAGS=$OLDCPPFLAGS - - 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 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 + case $host in + mips-sgi-irix*) { 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; } @@ -17901,6 +18269,8 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "no" >&6; } fi + ;; + esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler is SunPro C" >&5 printf %s "checking if compiler is SunPro C... " >&6; } @@ -18041,6 +18411,57 @@ _EOF fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build target is a native Windows one" >&5 +printf %s "checking whether build target is a native Windows one... " >&6; } +if test ${curl_cv_native_windows+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + +int main (void) +{ + +#ifdef _WIN32 + int dummy=1; +#else + Not a native Windows build target. +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + curl_cv_native_windows="yes" + +else $as_nop + + curl_cv_native_windows="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_native_windows" >&5 +printf "%s\n" "$curl_cv_native_windows" >&6; } + if test "x$curl_cv_native_windows" = xyes; then + DOING_NATIVE_WINDOWS_TRUE= + DOING_NATIVE_WINDOWS_FALSE='#' +else + DOING_NATIVE_WINDOWS_TRUE='#' + DOING_NATIVE_WINDOWS_FALSE= +fi + + + squeeze() { _sqz_result="" eval _sqz_input=\$$1 @@ -18069,7 +18490,7 @@ squeeze() { CLANG) # tmp_CFLAGS="$tmp_CFLAGS -Qunused-arguments" - tmp_CFLAGS="$tmp_CFLAGS -Wno-pointer-bool-conversion" + tmp_CFLAGS="$tmp_CFLAGS -Werror-implicit-function-declaration" ;; # DEC_C) @@ -18112,11 +18533,6 @@ squeeze() { tmp_CFLAGS="$tmp_CFLAGS" ;; # - LCC) - # - tmp_CFLAGS="$tmp_CFLAGS -n" - ;; - # SGI_MIPS_C) # tmp_CFLAGS="$tmp_CFLAGS" @@ -18262,7 +18678,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 @@ -18307,6 +18725,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -18591,7 +19010,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 @@ -18636,6 +19057,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -18820,7 +19242,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 @@ -18838,6 +19260,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 @@ -18964,33 +19387,10 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} fi # - if test "$compiler_num" -ge "208"; then - - ac_var_added_warnings="" - for warning in vla; 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 "209"; then + if test "$compiler_num" -ge "207"; then ac_var_added_warnings="" - for warning in shift-sign-overflow; do + for warning in address; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19008,16 +19408,9 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - fi - # - if test "$compiler_num" -ge "302"; then - case $host_os in - cygwin* | mingw*) - ;; - *) ac_var_added_warnings="" - for warning in missing-variable-declarations; do + for warning in attributes; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19035,14 +19428,9 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - ;; - esac - fi - # - if test "$compiler_num" -ge "306"; then ac_var_added_warnings="" - for warning in double-promotion; do + for warning in bad-function-cast; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19060,12 +19448,9 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - fi - # - if test "$compiler_num" -ge "309"; then ac_var_added_warnings="" - for warning in comma; do + for warning in conversion; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19083,16 +19468,9 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - # avoid the varargs warning, fixed in 4.0 - # https://bugs.llvm.org/show_bug.cgi?id=29140 - if test "$compiler_num" -lt "400"; then - tmp_CFLAGS="$tmp_CFLAGS -Wno-varargs" - fi - fi - if test "$compiler_num" -ge "700"; then ac_var_added_warnings="" - for warning in assign-enum; do + for warning in div-by-zero format-security; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19112,7 +19490,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} ac_var_added_warnings="" - for warning in extra-semi-stmt; do + for warning in empty-body; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19130,30 +19508,9 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - fi - fi - ;; - # - DEC_C) - # - if test "$want_warnings" = "yes"; then - tmp_CFLAGS="$tmp_CFLAGS -msg_enable level3" - fi - ;; - # - 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 - tmp_CFLAGS="$tmp_CFLAGS -pedantic" - fi - # ac_var_added_warnings="" - for warning in all; do + for warning in missing-field-initializers; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19171,12 +19528,9 @@ 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 -W" - # - if test "$compiler_num" -ge "104"; then ac_var_added_warnings="" - for warning in pointer-arith write-strings; do + for warning in missing-noreturn; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19194,11 +19548,9 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - if test "x$cross_compiling" != "xyes" || - test "$compiler_num" -ge "300"; then ac_var_added_warnings="" - for warning in unused shadow; do + for warning in old-style-definition; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19216,13 +19568,9 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - fi - fi - # - if test "$compiler_num" -ge "207"; then ac_var_added_warnings="" - for warning in inline nested-externs; do + for warning in redundant-decls; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19240,11 +19588,10 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - if test "x$cross_compiling" != "xyes" || - test "$compiler_num" -ge "300"; then + # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [switch-enum]) # Not used because this basically disallows default case ac_var_added_warnings="" - for warning in missing-declarations; do + for warning in type-limits; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19262,9 +19609,10 @@ 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], [unused-macros]) # Not practical ac_var_added_warnings="" - for warning in missing-prototypes; do + for warning in unreachable-code unused-parameter; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19282,14 +19630,12 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - fi fi # - if test "$compiler_num" -ge "295"; then - tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long" + if test "$compiler_num" -ge "208"; then ac_var_added_warnings="" - for warning in bad-function-cast; do + for warning in ignored-qualifiers; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19307,12 +19653,9 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - fi - # - if test "$compiler_num" -ge "296"; then ac_var_added_warnings="" - for warning in float-equal; do + for warning in vla; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19330,10 +19673,12 @@ 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" + fi + # + if test "$compiler_num" -ge "209"; then ac_var_added_warnings="" - for warning in sign-compare; do + for warning in sign-conversion; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19351,9 +19696,10 @@ 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-error=sign-conversion" # FIXME ac_var_added_warnings="" - for warning in undef; do + for warning in shift-sign-overflow; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19371,20 +19717,13 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - fi - # - if test "$compiler_num" -ge "297"; then - tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral" + # CURL_ADD_COMPILER_WARNINGS([tmp_CFLAGS], [padded]) # Not used because we cannot change public structs fi # if test "$compiler_num" -ge "300"; then - tmp_CFLAGS="$tmp_CFLAGS" - fi - # - if test "$compiler_num" -ge "303"; then ac_var_added_warnings="" - for warning in endif-labels strict-prototypes; do + for warning in language-extension-token; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19402,12 +19741,13 @@ 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 -Wformat=2" fi # - if test "$compiler_num" -ge "304"; then + if test "$compiler_num" -ge "302"; then ac_var_added_warnings="" - for warning in declaration-after-statement; do + for warning in enum-conversion; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19427,7 +19767,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} ac_var_added_warnings="" - for warning in old-style-definition; do + for warning in sometimes-uninitialized; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19445,16 +19785,13 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS - fi - # - if test "$compiler_num" -ge "400"; then - tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3" - fi - # - if test "$compiler_num" -ge "402"; then + case $host_os in + cygwin* | mingw*) + ;; + *) ac_var_added_warnings="" - for warning in cast-align; do + for warning in missing-variable-declarations; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19472,32 +19809,14 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS $ac_var_added_warnings" squeeze tmp_CFLAGS + ;; + esac fi # - if test "$compiler_num" -ge "403"; then - - ac_var_added_warnings="" - for warning in type-limits old-style-declaration; 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 - + if test "$compiler_num" -ge "304"; then ac_var_added_warnings="" - for warning in missing-parameter-type empty-body; do + for warning in header-guard; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19517,7 +19836,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} ac_var_added_warnings="" - for warning in clobbered ignored-qualifiers; do + for warning in unused-const-variable; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19535,9 +19854,12 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} 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 conversion; do + for warning in pragmas; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19555,10 +19877,9 @@ 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-sign-conversion" ac_var_added_warnings="" - for warning in vla; do + for warning in unreachable-code-break; do ac_var_match_word="no" for word1 in $CFLAGS; do @@ -19576,16 +19897,749 @@ 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 -ftree-vrp" fi # - if test "$compiler_num" -ge "405"; then - if test "$curl_cv_have_def__WIN32" = "yes"; then - tmp_CFLAGS="$tmp_CFLAGS -Wno-pedantic-ms-format" - fi - fi - # - if test "$compiler_num" -ge "406"; then + if test "$compiler_num" -ge "306"; then + + ac_var_added_warnings="" + for warning in double-promotion; 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 "309"; then + + ac_var_added_warnings="" + for warning in comma; 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 + + # avoid the varargs warning, fixed in 4.0 + # https://bugs.llvm.org/show_bug.cgi?id=29140 + if test "$compiler_num" -lt "400"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-varargs" + fi + fi + if test "$compiler_num" -ge "700"; then + + ac_var_added_warnings="" + for warning in assign-enum; 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 extra-semi-stmt; 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 "1000"; then + tmp_CFLAGS="$tmp_CFLAGS -Wimplicit-fallthrough" # we have silencing markup for clang 10.0 and above only + fi + fi + ;; + # + DEC_C) + # + if test "$want_warnings" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -msg_enable level3" + fi + ;; + # + GNU_C) + # + if test "$want_warnings" = "yes"; then + # + if test "x$cross_compiling" != "xyes" || + test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS -pedantic" + fi + # + + ac_var_added_warnings="" + for warning in all; 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 + + tmp_CFLAGS="$tmp_CFLAGS -W" + # + if test "$compiler_num" -ge "104"; then + + ac_var_added_warnings="" + for warning in pointer-arith write-strings; 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 + + if test "x$cross_compiling" != "xyes" || + test "$compiler_num" -ge "300"; then + + ac_var_added_warnings="" + for warning in unused shadow; 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 + fi + # + if test "$compiler_num" -ge "207"; then + + ac_var_added_warnings="" + for warning in inline nested-externs; 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 + + if test "x$cross_compiling" != "xyes" || + test "$compiler_num" -ge "300"; then + + ac_var_added_warnings="" + for warning in missing-declarations; 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-prototypes; 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 + fi + # + if test "$compiler_num" -ge "295"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long" + + 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 + + fi + # + if test "$compiler_num" -ge "296"; then + + ac_var_added_warnings="" + for warning in float-equal; 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 + + tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar" + + ac_var_added_warnings="" + for warning in sign-compare; 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 undef; 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 "297"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral" + fi + # + if test "$compiler_num" -ge "300"; then + tmp_CFLAGS="$tmp_CFLAGS" + fi + # + if test "$compiler_num" -ge "303"; then + + ac_var_added_warnings="" + for warning in endif-labels strict-prototypes; 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 "304"; then + + ac_var_added_warnings="" + for warning in declaration-after-statement; 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 + + fi + # + if test "$compiler_num" -ge "400"; then + 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="" + for warning in cast-align; 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 "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" + 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-parameter-type 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 clobbered 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 conversion trampolines; 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 sign-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 + + tmp_CFLAGS="$tmp_CFLAGS -Wno-error=sign-conversion" # FIXME + + ac_var_added_warnings="" + for warning in vla; 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 + + tmp_CFLAGS="$tmp_CFLAGS -ftree-vrp" + fi + # + if test "$compiler_num" -ge "405"; then + if test "$curl_cv_native_windows" = "yes"; then + tmp_CFLAGS="$tmp_CFLAGS -Wno-pedantic-ms-format" + fi + fi + # + if test "$compiler_num" -ge "406"; then ac_var_added_warnings="" for warning in double-promotion; do @@ -19764,9 +20818,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;} tmp_CFLAGS="$tmp_CFLAGS -Wformat-overflow=2" tmp_CFLAGS="$tmp_CFLAGS -Wformat-truncation=2" - if test "$compiler_num" -lt "1200"; then - tmp_CFLAGS="$tmp_CFLAGS -Wimplicit-fallthrough=4" - fi + tmp_CFLAGS="$tmp_CFLAGS -Wimplicit-fallthrough" fi # if test "$compiler_num" -ge "1000"; then @@ -19868,13 +20920,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 @@ -20088,7 +21133,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 @@ -20133,6 +21180,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -20177,6 +21225,8 @@ if test X"$want_werror" = Xyes; then if test "$compiler_num" -ge "500"; then CURL_CFLAG_EXTRAS="$CURL_CFLAG_EXTRAS -pedantic-errors" fi + elif test "$compiler_id" = "CLANG"; then + CURL_CFLAG_EXTRAS="$CURL_CFLAG_EXTRAS -pedantic-errors" fi fi @@ -20423,53 +21473,6 @@ printf "%s\n" "no" >&6; } fi - - supports_curldebug="unknown" - if test "$want_curldebug" = "yes"; then - if test "x$enable_shared" != "xno" && - test "x$enable_shared" != "xyes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown enable_shared setting." >&5 -printf "%s\n" "$as_me: WARNING: unknown enable_shared setting." >&2;} - supports_curldebug="no" - fi - if test "x$enable_static" != "xno" && - test "x$enable_static" != "xyes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown enable_static setting." >&5 -printf "%s\n" "$as_me: WARNING: unknown enable_static setting." >&2;} - supports_curldebug="no" - fi - if test "$supports_curldebug" != "no"; then - if test "$enable_shared" = "yes" && - test "x$xc_lt_shlib_use_no_undefined" = 'xyes'; then - supports_curldebug="no" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: shared library does not support undefined symbols." >&5 -printf "%s\n" "$as_me: WARNING: shared library does not support undefined symbols." >&2;} - fi - fi - fi - # - if test "$want_curldebug" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if curl debug memory tracking can be enabled" >&5 -printf %s "checking if curl debug memory tracking can be enabled... " >&6; } - test "$supports_curldebug" = "no" || supports_curldebug="yes" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $supports_curldebug" >&5 -printf "%s\n" "$supports_curldebug" >&6; } - if test "$supports_curldebug" = "no"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot enable curl debug memory tracking." >&5 -printf "%s\n" "$as_me: WARNING: cannot enable curl debug memory tracking." >&2;} - want_curldebug="no" - fi - fi - - if test x$want_curldebug = xyes; then - CURLDEBUG_TRUE= - CURLDEBUG_FALSE='#' -else - CURLDEBUG_TRUE='#' - CURLDEBUG_FALSE= -fi - - supports_unittests=yes # cross-compilation of unit tests static library/programs fails when # libcurl shared library is built. This might be due to a libtool or @@ -20514,444 +21517,12 @@ 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 - - - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for windows.h" >&5 -printf %s "checking for windows.h... " >&6; } -if test ${curl_cv_header_windows_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 - -int main (void) -{ - -#if defined(__CYGWIN__) || defined(__CEGCC__) - HAVE_WINDOWS_H shall not be defined. -#else - int dummy=2*WINVER; -#endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - curl_cv_header_windows_h="yes" - -else $as_nop - - curl_cv_header_windows_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_windows_h" >&5 -printf "%s\n" "$curl_cv_header_windows_h" >&6; } - case "$curl_cv_header_windows_h" in - yes) - -printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h - - ;; - esac - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build target is a native Windows one" >&5 -printf %s "checking whether build target is a native Windows one... " >&6; } -if test ${curl_cv_native_windows+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - if test "$curl_cv_header_windows_h" = "no"; then - curl_cv_native_windows="no" - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - -int main (void) -{ - -#if defined(__MINGW32__) || defined(__MINGW32CE__) || \ - (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))) - int dummy=1; -#else - Not a native Windows build target. -#endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - curl_cv_native_windows="yes" - -else $as_nop - - curl_cv_native_windows="no" - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_native_windows" >&5 -printf "%s\n" "$curl_cv_native_windows" >&6; } - if test "x$curl_cv_native_windows" = xyes; then - DOING_NATIVE_WINDOWS_TRUE= - DOING_NATIVE_WINDOWS_FALSE='#' -else - DOING_NATIVE_WINDOWS_TRUE='#' - DOING_NATIVE_WINDOWS_FALSE= -fi - - -case X-"$curl_cv_native_windows" in - X-yes) - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for winsock2.h" >&5 -printf %s "checking for winsock2.h... " >&6; } -if test ${curl_cv_header_winsock2_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 -#include - -int main (void) -{ - -#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) - HAVE_WINSOCK2_H shall not be defined. -#else - int dummy=2*IPPROTO_ESP; -#endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - curl_cv_header_winsock2_h="yes" - -else $as_nop - - curl_cv_header_winsock2_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_winsock2_h" >&5 -printf "%s\n" "$curl_cv_header_winsock2_h" >&6; } - case "$curl_cv_header_winsock2_h" in - yes) - -printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h - - ;; - esac - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ws2tcpip.h" >&5 -printf %s "checking for ws2tcpip.h... " >&6; } -if test ${curl_cv_header_ws2tcpip_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 -#include -#include - -int main (void) -{ - -#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) - HAVE_WS2TCPIP_H shall not be defined. -#else - int dummy=2*IP_PKTINFO; -#endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - curl_cv_header_ws2tcpip_h="yes" - -else $as_nop - - curl_cv_header_ws2tcpip_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_ws2tcpip_h" >&5 -printf "%s\n" "$curl_cv_header_ws2tcpip_h" >&6; } - case "$curl_cv_header_ws2tcpip_h" in - yes) - -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 -#include - -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 -#endif -#include - -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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build target supports WIN32 file API" >&5 printf %s "checking whether build target supports WIN32 file API... " >&6; } curl_win32_file_api="no" - if test "$curl_cv_header_windows_h" = "yes"; then + if test "$curl_cv_native_windows" = "yes"; then if test x"$enable_largefile" != "xno"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -20961,9 +21532,7 @@ printf %s "checking whether build target supports WIN32 file API... " >&6; } int main (void) { -#if !defined(_WIN32_WCE) && \ - (defined(__MINGW32__) || \ - (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))) +#if !defined(_WIN32_WCE) && (defined(__MINGW32__) || defined(_MSC_VER)) int dummy=1; #else WIN32 large file API not supported. @@ -21040,7 +21609,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_native_windows" = "yes"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -21133,56 +21702,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi - -{ 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; } case $host_os in darwin*) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -#include - -int main (void) -{ - -#if (TARGET_OS_OSX) - return 0; -#else -#error Not a macOS -#endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - build_for_macos="yes" - -else $as_nop - - build_for_macos="no" - -fi -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" - 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}: result: no" >&5 -printf "%s\n" "no" >&6; } -esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking to see if the compiler supports __builtin_available()" >&5 printf %s "checking to see if the compiler supports __builtin_available()... " >&6; } @@ -21190,12 +21711,11 @@ printf %s "checking to see if the compiler supports __builtin_available()... " > /* end confdefs.h. */ -#include int main (void) { - if (__builtin_available(macOS 10.8, iOS 5.0, *)) {} + if(__builtin_available(macOS 10.12, iOS 5.0, *)) {} ; return 0; @@ -21219,6 +21739,8 @@ printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ;; +esac if test "$curl_cv_native_windows" = "yes" && test -n "${RC}"; then HAVE_WINDRES_TRUE= @@ -21681,7 +22203,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,6 +22213,8 @@ printf "%s\n" "#define USE_HYPER 1" >>confdefs.h export CURL_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_HYPER to CURL_LIBRARY_PATH" >&5 printf "%s\n" "$as_me: Added $DIR_HYPER to CURL_LIBRARY_PATH" >&6;} + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE hyper" + fi done @@ -21717,9 +22240,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. @@ -22044,6 +22565,34 @@ printf "%s\n" "yes" >&6; } fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build documentation" >&5 +printf %s "checking whether to build documentation... " >&6; } +# Check whether --enable-docs was given. +if test ${enable_docs+y} +then : + enableval=$enable_docs; case "$enableval" in + no) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + BUILD_DOCS=0 + USE_MANUAL=0 + curl_docs_msg="no" + ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + BUILD_DOCS=1 + ;; + esac +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + BUILD_DOCS=1 + +fi + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable generation of C code" >&5 printf %s "checking whether to enable generation of C code... " >&6; } # Check whether --enable-libcurl_option was given. @@ -22107,7 +22656,7 @@ int main (void) #elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED) return 0; #else - force compilation error + #error force compilation error #endif } @@ -22312,10 +22861,8 @@ fi if test "$HAVE_GETHOSTBYNAME" != "1" then - if test "$curl_cv_header_windows_h" = "yes"; then - if test "$curl_cv_header_winsock2_h" = "yes"; then - winsock_LIB="-lws2_32" - fi + if test "$curl_cv_native_windows" = "yes"; then + winsock_LIB="-lws2_32" if test ! -z "$winsock_LIB"; then my_ac_save_LIBS=$LIBS LIBS="$winsock_LIB $LIBS" @@ -22325,20 +22872,17 @@ printf %s "checking for gethostbyname in $winsock_LIB... " >&6; } /* end confdefs.h. */ -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#include -#ifdef HAVE_WINSOCK2_H #include #endif -#endif int main (void) { - gethostbyname("www.dummysite.com"); + gethostbyname("localhost"); ; return 0; @@ -22380,7 +22924,7 @@ printf %s "checking for gethostbyname for Minix 3... " >&6; } int main (void) { - gethostbyname("www.dummysite.com"); + gethostbyname("localhost"); ; return 0; @@ -22418,7 +22962,7 @@ printf %s "checking for gethostbyname for eCos... " >&6; } int main (void) { - gethostbyname("www.dummysite.com"); + gethostbyname("localhost"); ; return 0; @@ -22461,7 +23005,7 @@ printf %s "checking for gethostbyname for AmigaOS bsdsocket.library... " >&6; } int main (void) { - gethostbyname("www.dummysite.com"); + gethostbyname("localhost"); ; return 0; @@ -22544,20 +23088,17 @@ fi curl_includes_winsock2="\ /* includes start */ -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN # endif -# include -# ifdef HAVE_WINSOCK2_H -# include -# endif +# include #endif /* includes end */" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for windows.h" >&5 -printf %s "checking for windows.h... " >&6; } -if test ${curl_cv_header_windows_h+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build target is a native Windows one" >&5 +printf %s "checking whether build target is a native Windows one... " >&6; } +if test ${curl_cv_native_windows+y} then : printf %s "(cached) " >&6 else $as_nop @@ -22566,19 +23107,14 @@ else $as_nop /* end confdefs.h. */ -#undef inline -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include int main (void) { -#if defined(__CYGWIN__) || defined(__CEGCC__) - HAVE_WINDOWS_H shall not be defined. +#ifdef _WIN32 + int dummy=1; #else - int dummy=2*WINVER; + Not a native Windows build target. #endif ; @@ -22589,81 +23125,26 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : - curl_cv_header_windows_h="yes" + curl_cv_native_windows="yes" else $as_nop - curl_cv_header_windows_h="no" + curl_cv_native_windows="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_windows_h" >&5 -printf "%s\n" "$curl_cv_header_windows_h" >&6; } - case "$curl_cv_header_windows_h" in - yes) - -printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h - - ;; - esac - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for winsock2.h" >&5 -printf %s "checking for winsock2.h... " >&6; } -if test ${curl_cv_header_winsock2_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 -#include - -int main (void) -{ - -#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) - HAVE_WINSOCK2_H shall not be defined. -#else - int dummy=2*IPPROTO_ESP; -#endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - curl_cv_header_winsock2_h="yes" - -else $as_nop - - curl_cv_header_winsock2_h="no" - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_native_windows" >&5 +printf "%s\n" "$curl_cv_native_windows" >&6; } + if test "x$curl_cv_native_windows" = xyes; then + DOING_NATIVE_WINDOWS_TRUE= + DOING_NATIVE_WINDOWS_FALSE='#' +else + DOING_NATIVE_WINDOWS_TRUE='#' + DOING_NATIVE_WINDOWS_FALSE= fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_header_winsock2_h" >&5 -printf "%s\n" "$curl_cv_header_winsock2_h" >&6; } - case "$curl_cv_header_winsock2_h" in - yes) -printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h - - ;; - esac @@ -22707,7 +23188,7 @@ printf %s "checking for connect in libraries... " >&6; } $curl_includes_winsock2 $curl_includes_bsdsocket - #if !defined(HAVE_WINDOWS_H) && !defined(HAVE_PROTO_BSDSOCKET_H) + #if !defined(_WIN32) && !defined(HAVE_PROTO_BSDSOCKET_H) int connect(int, void*, int); #endif @@ -22908,9 +23389,7 @@ else $as_nop /* end confdefs.h. */ -#ifdef HAVE_STDLIB_H #include -#endif #ifdef HAVE_SYS_TYPES_H #include #endif @@ -22953,7 +23432,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 @@ -22967,9 +23448,7 @@ else $as_nop /* end confdefs.h. */ -#ifdef HAVE_STDLIB_H #include -#endif #ifdef HAVE_SYS_TYPES_H #include #endif @@ -23011,6 +23490,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -23028,6 +23508,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 +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include + +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 @@ -23191,9 +23731,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 @@ -23239,7 +23784,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 @@ -23297,7 +23843,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 @@ -23322,6 +23869,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 @@ -23329,19 +23877,19 @@ 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 printf "%s\n" "$as_me: found both libz and libz.h header" >&6;} + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE zlib" curl_zlib_msg="enabled" fi fi @@ -23615,6 +24163,7 @@ done printf "%s\n" "$as_me: Added $DIR_BROTLI to CURL_LIBRARY_PATH" >&6;} fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libbrotlidec" else LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS @@ -23880,6 +24429,7 @@ done printf "%s\n" "$as_me: Added $DIR_ZSTD to CURL_LIBRARY_PATH" >&6;} fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libzstd" else LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS @@ -23921,7 +24471,7 @@ else $as_nop #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif @@ -23973,7 +24523,7 @@ printf "%s\n" "#define HAVE_LBER_H 1" >>confdefs.h #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif @@ -24037,7 +24587,7 @@ else $as_nop #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif @@ -24058,7 +24608,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); ; @@ -24102,7 +24652,7 @@ else $as_nop #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif @@ -24126,7 +24676,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; @@ -24261,7 +24811,7 @@ printf %s "checking for LDAP libraries... " >&6; } #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif @@ -24289,7 +24839,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); @@ -24429,6 +24979,12 @@ if test "x$ac_cv_func_ldap_url_parse" = xyes 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 @@ -24438,13 +24994,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 @@ -24483,7 +25041,7 @@ else $as_nop /* are AF_INET6 and sockaddr_in6 available? */ #include -#ifdef HAVE_WINSOCK2_H +#ifdef _WIN32 #include #include #else @@ -24493,15 +25051,12 @@ else $as_nop # include #endif #endif -#include /* for exit() */ -main() + +int main(void) { struct sockaddr_in6 s; (void)s; - if (socket(AF_INET6, SOCK_STREAM, 0) < 0) - exit(1); - else - exit(0); + return socket(AF_INET6, SOCK_STREAM, 0) < 0; } @@ -24526,7 +25081,7 @@ fi if test "$ipv6" = yes; then curl_ipv6_msg="enabled" -printf "%s\n" "#define ENABLE_IPV6 1" >>confdefs.h +printf "%s\n" "#define USE_IPV6 1" >>confdefs.h IPV6_ENABLED=1 @@ -24537,7 +25092,7 @@ printf %s "checking if struct sockaddr_in6 has sin6_scope_id member... " >&6; } /* end confdefs.h. */ #include -#ifdef HAVE_WINSOCK2_H +#ifdef _WIN32 #include #include #else @@ -24591,9 +25146,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 @@ -24611,7 +25174,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 @@ -24624,9 +25189,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 @@ -24643,6 +25216,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -25052,10 +25626,6 @@ done if test "x$ac_cv_header_gssapi_h" = xyes then : - -printf "%s\n" "#define HAVE_GSSHEIMDAL 1" >>confdefs.h - - else $as_nop want_gss=no @@ -25066,10 +25636,7 @@ printf "%s\n" "$as_me: WARNING: disabling GSS-API support since no header files fi else - -printf "%s\n" "#define HAVE_GSSMIT 1" >>confdefs.h - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if GSS-API headers declare GSS_C_NT_HOSTBASED_SERVICE" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if GSS-API headers declare GSS_C_NT_HOSTBASED_SERVICE" >&5 printf %s "checking if GSS-API headers declare GSS_C_NT_HOSTBASED_SERVICE... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -25586,7 +26153,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; } @@ -25614,8 +26181,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 @@ -25686,7 +26253,6 @@ then : fi - CPPFLAGS="$CPPFLAGS -DOPENSSL_SUPPRESS_DEPRECATED" else $as_nop @@ -26258,7 +26824,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 @@ -26327,14 +26893,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 @@ -26360,10 +26918,44 @@ then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } + ssl_msg="BoringSSL" + OPENSSL_IS_BORINGSSL=1 -printf "%s\n" "#define HAVE_BORINGSSL 1" >>confdefs.h +else $as_nop - ssl_msg="BoringSSL" + { 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 + + { 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 + +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" + OPENSSL_IS_BORINGSSL=1 else $as_nop @@ -26373,8 +26965,8 @@ printf "%s\n" "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libressl" >&5 -printf %s "checking for libressl... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LibreSSL" >&5 +printf %s "checking for LibreSSL... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -26399,7 +26991,7 @@ printf "%s\n" "yes" >&6; } printf "%s\n" "#define HAVE_LIBRESSL 1" >>confdefs.h - ssl_msg="libressl" + ssl_msg="LibreSSL" else $as_nop @@ -26420,7 +27012,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 @@ -26439,7 +27031,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 @@ -26451,6 +27042,25 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi + + for ac_func in SSL_set_quic_use_legacy_codepoint +do : + ac_fn_c_check_func "$LINENO" "SSL_set_quic_use_legacy_codepoint" "ac_cv_func_SSL_set_quic_use_legacy_codepoint" +if test "x$ac_cv_func_SSL_set_quic_use_legacy_codepoint" = xyes +then : + printf "%s\n" "#define HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT 1" >>confdefs.h + QUIC_ENABLED=yes +fi + +done + if test "$QUIC_ENABLED" = "yes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: OpenSSL fork speaks QUIC API" >&5 +printf "%s\n" "$as_me: OpenSSL fork speaks QUIC API" >&6;} + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: OpenSSL version does not speak QUIC API" >&5 +printf "%s\n" "$as_me: OpenSSL version does not speak QUIC API" >&6;} + fi + if test "$OPENSSL_ENABLED" = "1"; then if test -n "$LIB_OPENSSL"; then if test "x$cross_compiling" != "xyes"; then @@ -26461,6 +27071,7 @@ printf "%s\n" "$as_me: Added $LIB_OPENSSL to CURL_LIBRARY_PATH" >&6;} fi fi check_for_ca_bundle=1 + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE openssl" fi test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" @@ -26478,20 +27089,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 : @@ -26595,6 +27192,48 @@ fi fi +if test "$OPENSSL_ENABLED" = "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for QUIC support and OpenSSL >= 3.3" >&5 +printf %s "checking for QUIC support and OpenSSL >= 3.3... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include + +int main (void) +{ + + #if (OPENSSL_VERSION_NUMBER < 0x30300000L) + #error need at least version 3.3.0 + #endif + OSSL_QUIC_client_method(); + + ; + 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; } + +printf "%s\n" "#define HAVE_OPENSSL_QUIC 1" >>confdefs.h + + HAVE_OPENSSL_QUIC=1 + + +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_exeext conftest.$ac_ext +fi if test "x$OPT_GNUTLS" != xno; then @@ -26840,6 +27479,7 @@ printf "%s\n" "#define USE_GNUTLS 1" >>confdefs.h GNUTLS_ENABLED=1 USE_GNUTLS="yes" ssl_msg="GnuTLS" + QUIC_ENABLED=yes test gnutls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes else $as_nop @@ -26862,6 +27502,7 @@ printf "%s\n" "$as_me: detected GnuTLS version $version" >&6;} printf "%s\n" "$as_me: Added $gtlslib to CURL_LIBRARY_PATH" >&6;} fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE gnutls nettle" fi fi @@ -27075,7 +27716,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 @@ -27168,6 +27809,7 @@ printf "%s\n" "$as_me: detected mbedTLS" >&6;} printf "%s\n" "$as_me: Added $mbedtlslib to CURL_LIBRARY_PATH" >&6;} fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE mbedtls" fi fi @@ -27401,7 +28043,7 @@ printf %s "checking for wolfSSL_Init in -lwolfssl... " >&6; } /* end confdefs.h. */ -/* These aren't needed for detection and confuse WolfSSL. +/* These are not needed for detection and confuse wolfSSL. They are set up properly later if it is detected. */ #undef SIZEOF_LONG #undef SIZEOF_LONG_LONG @@ -27411,7 +28053,7 @@ printf %s "checking for wolfSSL_Init in -lwolfssl... " >&6; } int main (void) { - return wolfSSL_Init(); + return wolfSSL_Init(); ; return 0; @@ -27430,8 +28072,9 @@ 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 + ssl_msg="wolfSSL" + QUIC_ENABLED=yes + test wolfssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes else $as_nop @@ -27493,7 +28136,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $r" >&5 printf "%s\n" "$r" >&6; } - tname=$(echo "ac_cv_sizeof_long long" | tr A-Z a-z | tr " " "_") + tname=`echo "ac_cv_sizeof_long long" | tr A-Z a-z | tr " " "_"` eval "$tname=$r" @@ -27552,6 +28195,7 @@ fi printf "%s\n" "$as_me: Added $wolfssllibpath to CURL_LIBRARY_PATH" >&6;} fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE wolfssl" else as_fn_error $? "--with-wolfssl but wolfSSL was not found or doesn't work" "$LINENO" 5 fi @@ -27622,7 +28266,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 @@ -27724,89 +28368,59 @@ fi if test "x$OPT_RUSTLS" != xno; then - _cppflags=$CPPFLAGS - _ldflags=$LDFLAGS ssl_msg= - if test X"$OPT_RUSTLS" != Xno; then - - if test "$OPT_RUSTLS" = "yes"; 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 -printf %s "checking for rustls_client_session_read in -lrustls... " >&6; } -if test ${ac_cv_lib_rustls_rustls_client_session_read+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lrustls -lpthread -ldl -lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" -#ifdef __cplusplus -extern "C" -#endif -char rustls_client_session_read (); -int main (void) -{ -return rustls_client_session_read (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_rustls_rustls_client_session_read=yes -else $as_nop - ac_cv_lib_rustls_rustls_client_session_read=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_rustls_rustls_client_session_read" >&5 -printf "%s\n" "$ac_cv_lib_rustls_rustls_client_session_read" >&6; } -if test "x$ac_cv_lib_rustls_rustls_client_session_read" = xyes -then : + case $host_os in + darwin*) + LDFLAGS="$LDFLAGS -framework Security" + ;; + *) + ;; + esac + ## NEW CODE -printf "%s\n" "#define USE_RUSTLS 1" >>confdefs.h + case "$OPT_RUSTLS" in + yes) + PKGTEST="yes" + PREFIX_RUSTLS= + ;; + *) + PKGTEST="no" + PREFIX_RUSTLS=$OPT_RUSTLS - USE_RUSTLS=1 - RUSTLS_ENABLED=1 - USE_RUSTLS="yes" - ssl_msg="rustls" - test rustls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes + RUSTLS_PCDIR="$PREFIX_RUSTLS/lib/pkgconfig" + if test -f "$RUSTLS_PCDIR/rustls.pc"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: PKG_CONFIG_LIBDIR will be set to \"$RUSTLS_PCDIR\"" >&5 +printf "%s\n" "$as_me: PKG_CONFIG_LIBDIR will be set to \"$RUSTLS_PCDIR\"" >&6;} + PKGTEST="yes" + fi -fi + if test "$PKGTEST" != "yes"; then + # try lib64 instead + RUSTLS_PCDIR="$PREFIX_RUSTLS/lib64/pkgconfig" + if test -f "$RUSTLS_PCDIR/rustls.pc"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: PKG_CONFIG_LIBDIR will be set to \"$RUSTLS_PCDIR\"" >&5 +printf "%s\n" "$as_me: PKG_CONFIG_LIBDIR will be set to \"$RUSTLS_PCDIR\"" >&6;} + PKGTEST="yes" + fi + fi - fi + if test "$PKGTEST" != "yes"; then - if test "x$USE_RUSTLS" != "xyes"; then - addld=-L$OPT_RUSTLS/lib$libsuff - addcflags=-I$OPT_RUSTLS/include - rustlslib=$OPT_RUSTLS/lib$libsuff + addld=-L$PREFIX_RUSTLS/lib$libsuff + addcflags=-I$PREFIX_RUSTLS/include - LDFLAGS="$LDFLAGS $addld" - if test "$addcflags" != "-I/usr/include"; then - CPPFLAGS="$CPPFLAGS $addcflags" - fi + LDFLAGS="$LDFLAGS $addld" + if test "$addcflags" != "-I/usr/include"; then + CPPFLAGS="$CPPFLAGS $addcflags" + fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rustls_connection_read in -lrustls" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rustls_connection_read in -lrustls" >&5 printf %s "checking for rustls_connection_read in -lrustls... " >&6; } if test ${ac_cv_lib_rustls_rustls_connection_read+y} then : @@ -27847,213 +28461,29 @@ then : printf "%s\n" "#define USE_RUSTLS 1" >>confdefs.h - USE_RUSTLS=1 + USE_RUSTLS=1 - RUSTLS_ENABLED=1 - USE_RUSTLS="yes" - ssl_msg="rustls" - test rustls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes + RUSTLS_ENABLED=1 + USE_RUSTLS="yes" + ssl_msg="rustls" + test rustls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes else $as_nop as_fn_error $? "--with-rustls was specified but could not find rustls." "$LINENO" 5 fi - fi - if test "x$USE_RUSTLS" = "xyes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: detected rustls" >&5 -printf "%s\n" "$as_me: detected rustls" >&6;} - check_for_ca_bundle=1 - - LIBS="-lrustls -lpthread -ldl -lm $LIBS" - - if test -n "$rustlslib"; then - if test "x$cross_compiling" != "xyes"; then - CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$rustlslib" - export CURL_LIBRARY_PATH - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $rustlslib to CURL_LIBRARY_PATH" >&5 -printf "%s\n" "$as_me: Added $rustlslib to CURL_LIBRARY_PATH" >&6;} + LIB_RUSTLS="$PREFIX_RUSTLS/lib$libsuff" + if test "$PREFIX_RUSTLS" != "/usr" ; then + SSL_LDFLAGS="-L$LIB_RUSTLS" + SSL_CPPFLAGS="-I$PREFIX_RUSTLS/include" fi fi - fi - - fi - test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" -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 + if test "$PKGTEST" = "yes"; then - 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" @@ -28171,14 +28601,14 @@ 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; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rustls options with pkg-config" >&5 +printf %s "checking for rustls options with pkg-config... " >&6; } itexists=` - if test -n "$NSS_PCDIR"; then - PKG_CONFIG_LIBDIR="$NSS_PCDIR" + if test -n "$RUSTLS_PCDIR"; then + PKG_CONFIG_LIBDIR="$RUSTLS_PCDIR" export PKG_CONFIG_LIBDIR fi - $PKGCONFIG --exists nss >/dev/null 2>&1 && echo 1` + $PKGCONFIG --exists rustls >/dev/null 2>&1 && echo 1` if test -z "$itexists"; then PKGCONFIG="no" @@ -28190,165 +28620,102 @@ 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" + + if test "$PKGCONFIG" != "no" ; then + SSL_LIBS=` + if test -n "$RUSTLS_PCDIR"; then + PKG_CONFIG_LIBDIR="$RUSTLS_PCDIR" export PKG_CONFIG_LIBDIR fi - $PKGCONFIG --variable=prefix nss` - fi - fi - fi + $PKGCONFIG --libs-only-l --libs-only-other rustls 2>/dev/null` - 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 + SSL_LDFLAGS=` + if test -n "$RUSTLS_PCDIR"; then + PKG_CONFIG_LIBDIR="$RUSTLS_PCDIR" + export PKG_CONFIG_LIBDIR fi + $PKGCONFIG --libs-only-L rustls 2>/dev/null` - CLEANLDFLAGS="$LDFLAGS" - CLEANLIBS="$LIBS" - CLEANCPPFLAGS="$CPPFLAGS" - - LDFLAGS="$addld $LDFLAGS" - LIBS="$addlib $LIBS" - if test "$addcflags" != "-I/usr/include"; then - CPPFLAGS="$CPPFLAGS $addcflags" + SSL_CPPFLAGS=` + if test -n "$RUSTLS_PCDIR"; then + PKG_CONFIG_LIBDIR="$RUSTLS_PCDIR" + export PKG_CONFIG_LIBDIR fi + $PKGCONFIG --cflags-only-I rustls 2>/dev/null` - { 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;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: pkg-config: SSL_LIBS: \"$SSL_LIBS\"" >&5 +printf "%s\n" "$as_me: pkg-config: SSL_LIBS: \"$SSL_LIBS\"" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: pkg-config: SSL_LDFLAGS: \"$SSL_LDFLAGS\"" >&5 +printf "%s\n" "$as_me: pkg-config: SSL_LDFLAGS: \"$SSL_LDFLAGS\"" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: pkg-config: SSL_CPPFLAGS: \"$SSL_CPPFLAGS\"" >&5 +printf "%s\n" "$as_me: pkg-config: SSL_CPPFLAGS: \"$SSL_CPPFLAGS\"" >&6;} - ac_fn_c_check_func "$LINENO" "PK11_CreateManagedGenericObject" "ac_cv_func_PK11_CreateManagedGenericObject" -if test "x$ac_cv_func_PK11_CreateManagedGenericObject" = xyes -then : + LIB_RUSTLS=`echo $SSL_LDFLAGS | sed -e 's/^-L//'` + LIBS="$SSL_LIBS $LIBS" + ssl_msg="rustls" -printf "%s\n" "#define HAVE_PK11_CREATEMANAGEDGENERICOBJECT 1" >>confdefs.h +printf "%s\n" "#define USE_RUSTLS 1" >>confdefs.h + USE_RUSTLS=1 -fi + USE_RUSTLS="yes" + RUSTLS_ENABLED=1 + test rustls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes + else + as_fn_error $? "pkg-config: Could not find rustls" "$LINENO" 5 + fi + else + LIBS="-lrustls -lpthread -ldl -lm $LIBS" + fi - NSS_LIBS=$addlib + CPPFLAGS="$CLEAN_CPPFLAGS $SSL_CPPFLAGS" + LDFLAGS="$CLAN_LDFLAGS $SSL_LDFLAGS" + if test "x$USE_RUSTLS" = "xyes"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: detected rustls" >&5 +printf "%s\n" "$as_me: detected rustls" >&6;} + check_for_ca_bundle=1 + if test -n "$LIB_RUSTLS"; then if test "x$cross_compiling" != "xyes"; then - CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$nssprefix/lib$libsuff" + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$LIB_RUSTLS" 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;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $LIB_RUSTLS to CURL_LIBRARY_PATH" >&5 +printf "%s\n" "$as_me: Added $LIB_RUSTLS to CURL_LIBRARY_PATH" >&6;} fi - fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE rustls" fi + test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" -fi + if test X"$OPT_RUSTLS" != Xno && + test "$RUSTLS_ENABLED" != "1"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: OPT_RUSTLS: $OPT_RUSTLS" >&5 +printf "%s\n" "$as_me: OPT_RUSTLS: $OPT_RUSTLS" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: RUSTLS_ENABLED: $RUSTLS_ENABLED" >&5 +printf "%s\n" "$as_me: RUSTLS_ENABLED: $RUSTLS_ENABLED" >&6;} + as_fn_error $? "--with-rustls was given but Rustls could not be detected" "$LINENO" 5 + fi +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 @@ -28362,7 +28729,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 ;; *) @@ -28446,15 +28813,13 @@ 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 - fi - capath="$want_capath" + capath="$want_capath" ca="no" else ca="no" capath="no" - if test "x$cross_compiling" != "xyes"; then + if test "x$cross_compiling" != "xyes" -a \ + "x$curl_cv_native_windows" != "xyes"; then if test "x$want_ca" = "xunset"; then if test "x$prefix" != xNONE; then cac="${prefix}/share/curl/curl-ca-bundle.crt" @@ -28474,9 +28839,10 @@ 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 + check_capath="/etc/ssl/certs" fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: skipped the ca-cert path detection when cross-compiling" >&5 @@ -28559,23 +28925,194 @@ printf "%s\n" "#define CURL_CA_FALLBACK 1" >>confdefs.h fi +OPT_LIBPSL=off # Check whether --with-libpsl was given. if test ${with_libpsl+y} then : - withval=$with_libpsl; with_libpsl=$withval + withval=$with_libpsl; OPT_LIBPSL=$withval +fi + + +if test X"$OPT_LIBPSL" != Xno; then + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + case "$OPT_LIBPSL" in + yes) + + 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 - with_libpsl=yes + 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 $with_libpsl != "no"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing psl_builtin" >&5 -printf %s "checking for library containing psl_builtin... " >&6; } -if test ${ac_cv_search_psl_builtin+y} + 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 libpsl options with pkg-config" >&5 +printf %s "checking for libpsl options with pkg-config... " >&6; } + itexists=` + if test -n ""; then + PKG_CONFIG_LIBDIR="" + export PKG_CONFIG_LIBDIR + fi + $PKGCONFIG --exists libpsl >/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 + LIB_PSL=`$PKGCONFIG --libs-only-l libpsl` + LD_PSL=`$PKGCONFIG --libs-only-L libpsl` + CPP_PSL=`$PKGCONFIG --cflags-only-I libpsl` + else + LIB_PSL="-lpsl" + fi + + ;; + off) + LIB_PSL="-lpsl" + ;; + *) + LIB_PSL="-lpsl" + PREFIX_PSL=$OPT_LIBPSL + ;; + esac + + if test -n "$PREFIX_PSL"; then + LD_PSL=-L${PREFIX_PSL}/lib$libsuff + CPP_PSL=-I${PREFIX_PSL}/include + fi + + LDFLAGS="$LDFLAGS $LD_PSL" + CPPFLAGS="$CPPFLAGS $CPP_PSL" + LIBS="$LIB_PSL $LIBS" + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for psl_builtin in -lpsl" >&5 +printf %s "checking for psl_builtin in -lpsl... " >&6; } +if test ${ac_cv_lib_psl_psl_builtin+y} then : printf %s "(cached) " >&6 else $as_nop - ac_func_search_save_LIBS=$LIBS + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -28591,53 +29128,52 @@ return psl_builtin (); return 0; } _ACEOF -for ac_lib in '' psl -do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO" +if ac_fn_c_try_link "$LINENO" then : - ac_cv_search_psl_builtin=$ac_res + ac_cv_lib_psl_psl_builtin=yes +else $as_nop + ac_cv_lib_psl_psl_builtin=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext - if test ${ac_cv_search_psl_builtin+y} -then : - break + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS fi -done -if test ${ac_cv_search_psl_builtin+y} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_psl_psl_builtin" >&5 +printf "%s\n" "$ac_cv_lib_psl_psl_builtin" >&6; } +if test "x$ac_cv_lib_psl_psl_builtin" = xyes then : -else $as_nop - ac_cv_search_psl_builtin=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_psl_builtin" >&5 -printf "%s\n" "$ac_cv_search_psl_builtin" >&6; } -ac_res=$ac_cv_search_psl_builtin -if test "$ac_res" != no + for ac_header in libpsl.h +do : + ac_fn_c_check_header_compile "$LINENO" "libpsl.h" "ac_cv_header_libpsl_h" "$ac_includes_default" +if test "x$ac_cv_header_libpsl_h" = xyes then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - curl_psl_msg="enabled"; + printf "%s\n" "#define HAVE_LIBPSL_H 1" >>confdefs.h + curl_psl_msg="enabled" + LIBPSL_ENABLED=1 printf "%s\n" "#define USE_LIBPSL 1" >>confdefs.h + USE_LIBPSL=1 -else $as_nop - curl_psl_msg="no (libpsl not found)"; - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libpsl was not found" >&5 -printf "%s\n" "$as_me: WARNING: libpsl was not found" >&2;} + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libpsl" +fi + +done + +else $as_nop + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS fi + + if test X"$OPT_LIBPSL" != Xoff && + test "$LIBPSL_ENABLED" != "1"; then + as_fn_error $? "libpsl libs and/or directories were not found where specified!" "$LINENO" 5 + fi fi if test "$curl_psl_msg" = "enabled"; then USE_LIBPSL_TRUE= @@ -28743,7 +29279,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 @@ -28927,7 +29463,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` @@ -29000,7 +29536,7 @@ fi ac_fn_c_check_header_compile "$LINENO" "libssh2.h" "ac_cv_header_libssh2_h" "$ac_includes_default" if test "x$ac_cv_header_libssh2_h" = xyes then : - curl_ssh_msg="enabled (libSSH2)" + curl_ssh_msg="enabled (libssh2)" LIBSSH2_ENABLED=1 printf "%s\n" "#define USE_LIBSSH2 1" >>confdefs.h @@ -29013,7 +29549,7 @@ fi if test X"$OPT_LIBSSH2" != Xoff && test "$LIBSSH2_ENABLED" != "1"; then - as_fn_error $? "libSSH2 libs and/or directories were not found where specified!" "$LINENO" 5 + as_fn_error $? "libssh2 libs and/or directories were not found where specified!" "$LINENO" 5 fi if test "$LIBSSH2_ENABLED" = "1"; then @@ -29026,6 +29562,7 @@ fi printf "%s\n" "$as_me: Added $DIR_SSH2 to CURL_LIBRARY_PATH" >&6;} fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libssh2" else LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS @@ -29249,7 +29786,7 @@ fi ac_fn_c_check_header_compile "$LINENO" "libssh/libssh.h" "ac_cv_header_libssh_libssh_h" "$ac_includes_default" if test "x$ac_cv_header_libssh_libssh_h" = xyes then : - curl_ssh_msg="enabled (libSSH)" + curl_ssh_msg="enabled (libssh)" LIBSSH_ENABLED=1 printf "%s\n" "#define USE_LIBSSH 1" >>confdefs.h @@ -29262,7 +29799,7 @@ fi if test X"$OPT_LIBSSH" != Xoff && test "$LIBSSH_ENABLED" != "1"; then - as_fn_error $? "libSSH libs and/or directories were not found where specified!" "$LINENO" 5 + as_fn_error $? "libssh libs and/or directories were not found where specified!" "$LINENO" 5 fi if test "$LIBSSH_ENABLED" = "1"; then @@ -29275,6 +29812,7 @@ fi printf "%s\n" "$as_me: Added $DIR_SSH to CURL_LIBRARY_PATH" >&6;} fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libssh" else LDFLAGS=$CLEANLDFLAGS CPPFLAGS=$CLEANCPPFLAGS @@ -29591,6 +30129,7 @@ printf "%s\n" "#define USE_LIBRTMP 1" >>confdefs.h USE_LIBRTMP=1 + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE librtmp" fi @@ -29638,8 +30177,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 @@ -29678,9 +30215,6 @@ else fi -CURL_PLIST_VERSION="$CURLVERSION" - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable Windows native IDN (Windows native builds only)" >&5 printf %s "checking whether to enable Windows native IDN (Windows native builds only)... " >&6; } @@ -30267,6 +30801,7 @@ printf "%s\n" "#define HAVE_LIBIDN2 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $IDN_DIR to CURL_LIBRARY_PATH" >&5 printf "%s\n" "$as_me: Added $IDN_DIR to CURL_LIBRARY_PATH" >&6;} fi + LIBCURL_PC_REQUIRES_PRIVATE="libidn2 $LIBCURL_PC_REQUIRES_PRIVATE" else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find libraries for IDN support: IDN disabled" >&5 printf "%s\n" "$as_me: WARNING: Cannot find libraries for IDN support: IDN disabled" >&2;} @@ -30487,17 +31022,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 @@ -30510,27 +31047,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 @@ -30546,6 +31083,7 @@ printf "%s\n" "#define USE_NGHTTP2 1" >>confdefs.h USE_NGHTTP2=1 + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libnghttp2" fi @@ -30596,6 +31134,11 @@ esac curl_tcp2_msg="no (--with-ngtcp2)" if test X"$want_tcp2" != Xno; then + + if test "$QUIC_ENABLED" != "yes"; then + as_fn_error $? "the detected TLS library does not support QUIC, making --with-ngtcp2 a no-no" "$LINENO" 5 + fi + CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" @@ -30828,6 +31371,7 @@ printf "%s\n" "#define USE_NGTCP2 1" >>confdefs.h export CURL_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_TCP2 to CURL_LIBRARY_PATH" >&5 printf "%s\n" "$as_me: Added $DIR_TCP2 to CURL_LIBRARY_PATH" >&6;} + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2" fi @@ -30849,7 +31393,7 @@ fi fi -if test "x$NGTCP2_ENABLED" = "x1" -a "x$OPENSSL_ENABLED" = "x1"; then +if test "x$NGTCP2_ENABLED" = "x1" -a "x$OPENSSL_ENABLED" = "x1" -a "x$OPENSSL_IS_BORINGSSL" != "x1"; then CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" @@ -30971,14 +31515,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" @@ -30992,50 +31536,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. */ @@ -31053,17 +31597,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 @@ -31074,14 +31618,15 @@ 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;} + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2_crypto_quictls" fi @@ -31097,7 +31642,261 @@ 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 + +if test "x$NGTCP2_ENABLED" = "x1" -a "x$OPENSSL_ENABLED" = "x1" -a "x$OPENSSL_IS_BORINGSSL" = "x1"; then + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + + 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 libngtcp2_crypto_boringssl options with pkg-config" >&5 +printf %s "checking for libngtcp2_crypto_boringssl 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_boringssl >/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 + LIB_NGTCP2_CRYPTO_BORINGSSL=` + if test -n "$want_tcp2_path"; then + PKG_CONFIG_LIBDIR="$want_tcp2_path" + export PKG_CONFIG_LIBDIR + fi + + $PKGCONFIG --libs-only-l libngtcp2_crypto_boringssl` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: -l is $LIB_NGTCP2_CRYPTO_BORINGSSL" >&5 +printf "%s\n" "$as_me: -l is $LIB_NGTCP2_CRYPTO_BORINGSSL" >&6;} + + CPP_NGTCP2_CRYPTO_BORINGSSL=` + if test -n "$want_tcp2_path"; then + PKG_CONFIG_LIBDIR="$want_tcp2_path" + export PKG_CONFIG_LIBDIR + fi + $PKGCONFIG --cflags-only-I libngtcp2_crypto_boringssl` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: -I is $CPP_NGTCP2_CRYPTO_BORINGSSL" >&5 +printf "%s\n" "$as_me: -I is $CPP_NGTCP2_CRYPTO_BORINGSSL" >&6;} + + LD_NGTCP2_CRYPTO_BORINGSSL=` + if test -n "$want_tcp2_path"; then + PKG_CONFIG_LIBDIR="$want_tcp2_path" + export PKG_CONFIG_LIBDIR + fi + + $PKGCONFIG --libs-only-L libngtcp2_crypto_boringssl` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: -L is $LD_NGTCP2_CRYPTO_BORINGSSL" >&5 +printf "%s\n" "$as_me: -L is $LD_NGTCP2_CRYPTO_BORINGSSL" >&6;} + + LDFLAGS="$LDFLAGS $LD_NGTCP2_CRYPTO_BORINGSSL" + CPPFLAGS="$CPPFLAGS $CPP_NGTCP2_CRYPTO_BORINGSSL" + LIBS="$LIB_NGTCP2_CRYPTO_BORINGSSL $LIBS" + + if test "x$cross_compiling" != "xyes"; then + DIR_NGTCP2_CRYPTO_BORINGSSL=`echo $LD_NGTCP2_CRYPTO_BORINGSSL | $SED -e 's/^-L//'` + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ngtcp2_crypto_recv_client_initial_cb in -lngtcp2_crypto_boringssl" >&5 +printf %s "checking for ngtcp2_crypto_recv_client_initial_cb in -lngtcp2_crypto_boringssl... " >&6; } +if test ${ac_cv_lib_ngtcp2_crypto_boringssl_ngtcp2_crypto_recv_client_initial_cb+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lngtcp2_crypto_boringssl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef __cplusplus +extern "C" +#endif +char ngtcp2_crypto_recv_client_initial_cb (); +int main (void) +{ +return ngtcp2_crypto_recv_client_initial_cb (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_ngtcp2_crypto_boringssl_ngtcp2_crypto_recv_client_initial_cb=yes +else $as_nop + ac_cv_lib_ngtcp2_crypto_boringssl_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_boringssl_ngtcp2_crypto_recv_client_initial_cb" >&5 +printf "%s\n" "$ac_cv_lib_ngtcp2_crypto_boringssl_ngtcp2_crypto_recv_client_initial_cb" >&6; } +if test "x$ac_cv_lib_ngtcp2_crypto_boringssl_ngtcp2_crypto_recv_client_initial_cb" = xyes +then : + + for ac_header in ngtcp2/ngtcp2_crypto.h +do : + ac_fn_c_check_header_compile "$LINENO" "ngtcp2/ngtcp2_crypto.h" "ac_cv_header_ngtcp2_ngtcp2_crypto_h" "$ac_includes_default" +if test "x$ac_cv_header_ngtcp2_ngtcp2_crypto_h" = xyes +then : + printf "%s\n" "#define HAVE_NGTCP2_NGTCP2_CRYPTO_H 1" >>confdefs.h + NGTCP2_ENABLED=1 + +printf "%s\n" "#define USE_NGTCP2_CRYPTO_BORINGSSL 1" >>confdefs.h + + USE_NGTCP2_CRYPTO_BORINGSSL=1 + + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_BORINGSSL" + export CURL_LIBRARY_PATH + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_NGTCP2_CRYPTO_BORINGSSL to CURL_LIBRARY_PATH" >&5 +printf "%s\n" "$as_me: Added $DIR_NGTCP2_CRYPTO_BORINGSSL to CURL_LIBRARY_PATH" >&6;} + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2_crypto_boringssl" + +fi + +done + +else $as_nop + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + +fi + + + else + if test X"$want_tcp2" != Xdefault; then + as_fn_error $? "--with-ngtcp2 was specified but could not find ngtcp2_crypto_boringssl pkg-config file." "$LINENO" 5 fi fi fi @@ -31335,6 +32134,7 @@ printf "%s\n" "#define USE_NGTCP2_CRYPTO_GNUTLS 1" >>confdefs.h export CURL_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_NGTCP2_CRYPTO_GNUTLS to CURL_LIBRARY_PATH" >&5 printf "%s\n" "$as_me: Added $DIR_NGTCP2_CRYPTO_GNUTLS to CURL_LIBRARY_PATH" >&6;} + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2_crypto_gnutls" fi @@ -31588,6 +32388,7 @@ printf "%s\n" "#define USE_NGTCP2_CRYPTO_WOLFSSL 1" >>confdefs.h export CURL_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_NGTCP2_CRYPTO_WOLFSSL to CURL_LIBRARY_PATH" >&5 printf "%s\n" "$as_me: Added $DIR_NGTCP2_CRYPTO_WOLFSSL to CURL_LIBRARY_PATH" >&6;} + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2_crypto_wolfssl" fi @@ -31609,11 +32410,52 @@ fi fi +OPT_OPENSSL_QUIC="no" + +if test "x$disable_http" = "xyes" -o "x$OPENSSL_ENABLED" != "x1"; then + # without HTTP or without openssl, no use + OPT_OPENSSL_QUIC="no" +fi + + +# Check whether --with-openssl-quic was given. +if test ${with_openssl_quic+y} +then : + withval=$with_openssl_quic; OPT_OPENSSL_QUIC=$withval +fi + +case "$OPT_OPENSSL_QUIC" in + no) + want_openssl_quic="no" + ;; + yes) + want_openssl_quic="yes" + ;; +esac + +curl_openssl_quic_msg="no (--with-openssl-quic)" +if test "x$want_openssl_quic" = "xyes"; then + + if test "$NGTCP2_ENABLED" = 1; then + as_fn_error $? "--with-openssl-quic and --with-ngtcp2 are mutually exclusive" "$LINENO" 5 + fi + if test "$HAVE_OPENSSL_QUIC" != 1; then + as_fn_error $? "--with-openssl-quic requires quic support and OpenSSL >= 3.3.0" "$LINENO" 5 + fi + +printf "%s\n" "#define USE_OPENSSL_QUIC 1" >>confdefs.h + + USE_OPENSSL_QUIC=1 + +fi + + OPT_NGHTTP3="yes" -if test "x$NGTCP2_ENABLED" = "x"; then - # without ngtcp2, nghttp3 is of no use for us +if test "x$USE_NGTCP2" != "x1" -a "x$USE_OPENSSL_QUIC" != "x1"; then + # without ngtcp2 or openssl quic, nghttp3 is of no use for us OPT_NGHTTP3="no" + want_nghttp3="no" fi @@ -31639,6 +32481,12 @@ esac curl_http3_msg="no (--with-nghttp3)" if test X"$want_nghttp3" != Xno; then + + if test "x$USE_NGTCP2" != "x1" -a "x$USE_OPENSSL_QUIC" != "x1"; then + # without ngtcp2 or openssl quic, nghttp3 is of no use for us + as_fn_error $? "nghttp3 enabled without a QUIC library; enable ngtcp2 or OpenSSL-QUIC" "$LINENO" 5 + fi + CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" CLEANLIBS="$LIBS" @@ -31861,8 +32709,6 @@ do : if test "x$ac_cv_header_nghttp3_nghttp3_h" = xyes then : printf "%s\n" "#define HAVE_NGHTTP3_NGHTTP3_H 1" >>confdefs.h - curl_h3_msg="enabled (ngtcp2 + nghttp3)" - NGHTTP3_ENABLED=1 printf "%s\n" "#define USE_NGHTTP3 1" >>confdefs.h @@ -31872,7 +32718,7 @@ 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" + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libnghttp3" fi @@ -31895,6 +32741,31 @@ fi fi +if test "x$NGTCP2_ENABLED" = "x1" -a "x$USE_NGHTTP3" = "x1"; then + +printf "%s\n" "#define USE_NGTCP2_H3 1" >>confdefs.h + + USE_NGTCP2_H3=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: HTTP3 support is experimental" >&5 +printf "%s\n" "$as_me: HTTP3 support is experimental" >&6;} + curl_h3_msg="enabled (ngtcp2 + nghttp3)" +fi + + +if test "x$USE_OPENSSL_QUIC" = "x1" -a "x$USE_NGHTTP3" = "x1"; then + experimental="$experimental HTTP3" + +printf "%s\n" "#define USE_OPENSSL_H3 1" >>confdefs.h + + USE_OPENSSL_H3=1 + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: HTTP3 support is experimental" >&5 +printf "%s\n" "$as_me: HTTP3 support is experimental" >&6;} + curl_h3_msg="enabled (openssl + nghttp3)" +fi + + OPT_QUICHE="no" if test "x$disable_http" = "xyes" -o "x$USE_NGTCP" = "x1"; then @@ -31925,6 +32796,10 @@ esac if test X"$want_quiche" != Xno; then + if test "$QUIC_ENABLED" != "yes"; then + as_fn_error $? "the detected TLS library does not support QUIC, making --with-quiche a no-no" "$LINENO" 5 + fi + if test "$NGHTTP3_ENABLED" = 1; then as_fn_error $? "--with-quiche and --with-ngtcp2 are mutually exclusive" "$LINENO" 5 fi @@ -32107,9 +32982,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 @@ -32122,27 +32997,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 @@ -32177,6 +33052,7 @@ fi export CURL_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_QUICHE to CURL_LIBRARY_PATH" >&5 printf "%s\n" "$as_me: Added $DIR_QUICHE to CURL_LIBRARY_PATH" >&6;} + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE quiche" fi done @@ -32224,9 +33100,21 @@ esac if test X"$want_msh3" != Xno; then + if test "$curl_cv_native_windows" != "yes"; then + if test "$QUIC_ENABLED" != "yes"; then + as_fn_error $? "the detected TLS library does not support QUIC, making --with-msh3 a no-no" "$LINENO" 5 + fi + if test "$OPENSSL_ENABLED" != "1"; then + as_fn_error $? "msh3 requires OpenSSL" "$LINENO" 5 + fi + fi + if test "$NGHTTP3_ENABLED" = 1; then as_fn_error $? "--with-msh3 and --with-ngtcp2 are mutually exclusive" "$LINENO" 5 fi + if test "$QUICHE_ENABLED" = 1; then + as_fn_error $? "--with-msh3 and --with-quiche are mutually exclusive" "$LINENO" 5 + fi CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" @@ -32296,8 +33184,8 @@ printf "%s\n" "#define USE_MSH3 1" >>confdefs.h export CURL_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Added $DIR_MSH3 to CURL_LIBRARY_PATH" >&5 printf "%s\n" "$as_me: Added $DIR_MSH3 to CURL_LIBRARY_PATH" >&6;} -else $as_nop - experimental="$experimental HTTP3" + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libmsh3" + experimental="$experimental HTTP3" fi @@ -32322,9 +33210,9 @@ then : fi case "$OPT_ZSH_FPATH" in - no) + default|no) ;; - default|yes) + yes) ZSH_FUNCTIONS_DIR="$datarootdir/zsh/site-functions" ;; @@ -32333,6 +33221,14 @@ case "$OPT_ZSH_FPATH" in ;; esac + if test x"$ZSH_FUNCTIONS_DIR" != x; then + USE_ZSH_COMPLETION_TRUE= + USE_ZSH_COMPLETION_FALSE='#' +else + USE_ZSH_COMPLETION_TRUE='#' + USE_ZSH_COMPLETION_FALSE= +fi + OPT_FISH_FPATH=default @@ -32344,9 +33240,9 @@ then : fi case "$OPT_FISH_FPATH" in - no) + default|no) ;; - default|yes) + yes) if test -n "$PKG_CONFIG"; then PKGCONFIG="$PKG_CONFIG" @@ -32484,7 +33380,7 @@ printf "%s\n" "found" >&6; } fi if test "$PKGCONFIG" != "no" ; then - FISH_FUNCTIONS_DIR="$($PKGCONFIG --variable completionsdir fish)" + FISH_FUNCTIONS_DIR=`$PKGCONFIG --variable completionsdir fish` else FISH_FUNCTIONS_DIR="$datarootdir/fish/vendor_completions.d" fi @@ -32495,6 +33391,14 @@ printf "%s\n" "found" >&6; } ;; esac + if test x"$FISH_FUNCTIONS_DIR" != x; then + USE_FISH_COMPLETION_TRUE= + USE_FISH_COMPLETION_FALSE='#' +else + USE_FISH_COMPLETION_TRUE='#' + USE_FISH_COMPLETION_FALSE= +fi + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" " #ifdef HAVE_SYS_TYPES_H @@ -32655,38 +33559,6 @@ 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" "sys/uio.h" "ac_cv_header_sys_uio_h" " -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_SYS_SELECT_H -#include -#elif defined(HAVE_UNISTD_H) -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_NETINET_IN6_H -#include -#endif -#ifdef HAVE_SYS_UN_H -#include -#endif - - -" -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" "unistd.h" "ac_cv_header_unistd_h" " #ifdef HAVE_SYS_TYPES_H @@ -33584,7 +34456,7 @@ 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" " +ac_fn_c_check_header_compile "$LINENO" "sys/filio.h" "ac_cv_header_sys_filio_h" " #ifdef HAVE_SYS_TYPES_H #include #endif @@ -33611,12 +34483,12 @@ ac_fn_c_check_header_compile "$LINENO" "arpa/tftp.h" "ac_cv_header_arpa_tftp_h" " -if test "x$ac_cv_header_arpa_tftp_h" = xyes +if test "x$ac_cv_header_sys_filio_h" = xyes then : - printf "%s\n" "#define HAVE_ARPA_TFTP_H 1" >>confdefs.h + printf "%s\n" "#define HAVE_SYS_FILIO_H 1" >>confdefs.h fi -ac_fn_c_check_header_compile "$LINENO" "sys/filio.h" "ac_cv_header_sys_filio_h" " +ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" " #ifdef HAVE_SYS_TYPES_H #include #endif @@ -33643,12 +34515,12 @@ ac_fn_c_check_header_compile "$LINENO" "sys/filio.h" "ac_cv_header_sys_filio_h" " -if test "x$ac_cv_header_sys_filio_h" = xyes +if test "x$ac_cv_header_sys_wait_h" = xyes then : - printf "%s\n" "#define HAVE_SYS_FILIO_H 1" >>confdefs.h + printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi -ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" " +ac_fn_c_check_header_compile "$LINENO" "sys/eventfd.h" "ac_cv_header_sys_eventfd_h" " #ifdef HAVE_SYS_TYPES_H #include #endif @@ -33675,9 +34547,9 @@ ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" " " -if test "x$ac_cv_header_sys_wait_h" = xyes +if test "x$ac_cv_header_sys_eventfd_h" = xyes then : - printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h + printf "%s\n" "#define HAVE_SYS_EVENTFD_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "setjmp.h" "ac_cv_header_setjmp_h" " @@ -33797,114 +34669,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 : @@ -33948,15 +34712,12 @@ else $as_nop #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#include -#ifdef HAVE_WINSOCK2_H #include #endif -#endif #ifdef HAVE_SYS_TYPES_H #include #endif @@ -34044,7 +34805,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 @@ -34078,6 +34841,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -34126,7 +34890,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $r" >&5 printf "%s\n" "$r" >&6; } - tname=$(echo "ac_cv_sizeof_size_t" | tr A-Z a-z | tr " " "_") + tname=`echo "ac_cv_sizeof_size_t" | tr A-Z a-z | tr " " "_"` eval "$tname=$r" @@ -34175,7 +34939,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $r" >&5 printf "%s\n" "$r" >&6; } - tname=$(echo "ac_cv_sizeof_long" | tr A-Z a-z | tr " " "_") + tname=`echo "ac_cv_sizeof_long" | tr A-Z a-z | tr " " "_"` eval "$tname=$r" @@ -34224,7 +34988,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $r" >&5 printf "%s\n" "$r" >&6; } - tname=$(echo "ac_cv_sizeof_int" | tr A-Z a-z | tr " " "_") + tname=`echo "ac_cv_sizeof_int" | tr A-Z a-z | tr " " "_"` eval "$tname=$r" @@ -34273,7 +35037,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $r" >&5 printf "%s\n" "$r" >&6; } - tname=$(echo "ac_cv_sizeof_time_t" | tr A-Z a-z | tr " " "_") + tname=`echo "ac_cv_sizeof_time_t" | tr A-Z a-z | tr " " "_"` eval "$tname=$r" @@ -34322,7 +35086,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $r" >&5 printf "%s\n" "$r" >&6; } - tname=$(echo "ac_cv_sizeof_off_t" | tr A-Z a-z | tr " " "_") + tname=`echo "ac_cv_sizeof_off_t" | tr A-Z a-z | tr " " "_"` eval "$tname=$r" @@ -34376,7 +35140,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $r" >&5 printf "%s\n" "$r" >&6; } - tname=$(echo "ac_cv_sizeof_curl_off_t" | tr A-Z a-z | tr " " "_") + tname=`echo "ac_cv_sizeof_curl_off_t" | tr A-Z a-z | tr " " "_"` eval "$tname=$r" @@ -34384,6 +35148,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 + +#include + + +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" @@ -34397,21 +35212,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 @@ -34462,6 +35264,12 @@ else $as_nop # The windows name? ac_fn_c_check_type "$LINENO" "ADDRESS_FAMILY" "ac_cv_type_ADDRESS_FAMILY" " +#ifdef _WIN32 +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#endif #ifdef HAVE_SYS_SOCKET_H #include #endif @@ -34518,8 +35326,10 @@ else $as_nop #include #include - 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" @@ -34541,7 +35351,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 @@ -34555,8 +35367,10 @@ else $as_nop #include #include - 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" @@ -34577,105 +35391,19 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac -curl_includes_poll="\ -/* includes start */ -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_POLL_H -# include -#endif -#ifdef HAVE_SYS_POLL_H -# include -#endif -/* includes end */" - ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$curl_includes_poll -" -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" "poll.h" "ac_cv_header_poll_h" "$curl_includes_poll -" -if test "x$ac_cv_header_poll_h" = xyes -then : - printf "%s\n" "#define HAVE_POLL_H 1" >>confdefs.h - -fi -ac_fn_c_check_header_compile "$LINENO" "sys/poll.h" "ac_cv_header_sys_poll_h" "$curl_includes_poll -" -if test "x$ac_cv_header_sys_poll_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_POLL_H 1" >>confdefs.h - -fi - - - - # - tst_poll_events_macro_defined="unknown" - # - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - - $curl_includes_poll - -int main (void) -{ - -#if defined(events) || defined(revents) - return 0; -#else - force compilation error -#endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - tst_poll_events_macro_defined="yes" - -else $as_nop - - tst_poll_events_macro_defined="no" - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - # - if test "$tst_poll_events_macro_defined" = "yes"; then - if test "x$ac_cv_header_sys_poll_h" = "xyes"; then - -cat >>confdefs.h <<_EOF -#define CURL_PULL_SYS_POLL_H 1 -_EOF - - fi - fi - # - - - ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" " #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#include -#ifdef HAVE_WINSOCK2_H #include -#endif #else #ifdef HAVE_SYS_TYPES_H #include @@ -34712,14 +35440,11 @@ else $as_nop #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#include -#ifdef HAVE_WINSOCK2_H #include -#endif #else #ifdef HAVE_SYS_TYPES_H #include @@ -34777,14 +35502,11 @@ fi ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" " #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#include -#ifdef HAVE_WINSOCK2_H #include -#endif #else #ifdef HAVE_SYS_TYPES_H #include @@ -34832,15 +35554,12 @@ printf %s "checking for select... " >&6; } #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#include -#ifdef HAVE_WINSOCK2_H #include #endif -#endif #ifdef HAVE_SYS_TYPES_H #include #endif @@ -34848,7 +35567,7 @@ printf %s "checking for select... " >&6; } #include #endif #include -#ifndef HAVE_WINDOWS_H +#ifndef _WIN32 #ifdef HAVE_SYS_SELECT_H #include #elif defined(HAVE_UNISTD_H) @@ -34917,14 +35636,11 @@ printf %s "checking for recv... " >&6; } #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#include -#ifdef HAVE_WINSOCK2_H #include -#endif #else $curl_includes_bsdsocket #ifdef HAVE_SYS_TYPES_H @@ -34993,14 +35709,11 @@ printf %s "checking for send... " >&6; } #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#include -#ifdef HAVE_WINSOCK2_H #include -#endif #else $curl_includes_bsdsocket #ifdef HAVE_SYS_TYPES_H @@ -35073,14 +35786,11 @@ else $as_nop #undef inline -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif -#include -#ifdef HAVE_WINSOCK2_H #include -#endif #else #ifdef HAVE_SYS_TYPES_H #include @@ -35306,9 +36016,7 @@ curl_includes_string="\ #ifdef HAVE_SYS_TYPES_H # include #endif -#ifdef HAVE_STRING_H -# include -#endif +#include #ifdef HAVE_STRINGS_H # include #endif @@ -35319,13 +36027,6 @@ 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" "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 " @@ -35855,155 +36556,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 @@ -36271,78 +36823,18 @@ printf "%s\n" "no" >&6; } curl_includes_ws2tcpip="\ /* includes start */ -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN # endif -# include -# ifdef HAVE_WINSOCK2_H -# include -# ifdef HAVE_WS2TCPIP_H -# include -# endif -# endif +# include +# include #endif /* includes end */" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for windows.h" >&5 -printf %s "checking for windows.h... " >&6; } -if test ${curl_cv_header_windows_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 - -int main (void) -{ - -#if defined(__CYGWIN__) || defined(__CEGCC__) - HAVE_WINDOWS_H shall not be defined. -#else - int dummy=2*WINVER; -#endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - curl_cv_header_windows_h="yes" - -else $as_nop - - curl_cv_header_windows_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_windows_h" >&5 -printf "%s\n" "$curl_cv_header_windows_h" >&6; } - case "$curl_cv_header_windows_h" in - yes) - -printf "%s\n" "#define HAVE_WINDOWS_H 1" >>confdefs.h - - ;; - esac - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for winsock2.h" >&5 -printf %s "checking for winsock2.h... " >&6; } -if test ${curl_cv_header_winsock2_h+y} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build target is a native Windows one" >&5 +printf %s "checking whether build target is a native Windows one... " >&6; } +if test ${curl_cv_native_windows+y} then : printf %s "(cached) " >&6 else $as_nop @@ -36351,20 +36843,14 @@ else $as_nop /* end confdefs.h. */ -#undef inline -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif -#include -#include int main (void) { -#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) - HAVE_WINSOCK2_H shall not be defined. +#ifdef _WIN32 + int dummy=1; #else - int dummy=2*IPPROTO_ESP; + Not a native Windows build target. #endif ; @@ -36375,82 +36861,26 @@ _ACEOF if ac_fn_c_try_compile "$LINENO" then : - curl_cv_header_winsock2_h="yes" + curl_cv_native_windows="yes" else $as_nop - curl_cv_header_winsock2_h="no" + curl_cv_native_windows="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_winsock2_h" >&5 -printf "%s\n" "$curl_cv_header_winsock2_h" >&6; } - case "$curl_cv_header_winsock2_h" in - yes) - -printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h - - ;; - esac - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ws2tcpip.h" >&5 -printf %s "checking for ws2tcpip.h... " >&6; } -if test ${curl_cv_header_ws2tcpip_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 -#include -#include - -int main (void) -{ - -#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) - HAVE_WS2TCPIP_H shall not be defined. -#else - int dummy=2*IP_PKTINFO; -#endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - curl_cv_header_ws2tcpip_h="yes" - -else $as_nop - - curl_cv_header_ws2tcpip_h="no" - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_native_windows" >&5 +printf "%s\n" "$curl_cv_native_windows" >&6; } + if test "x$curl_cv_native_windows" = xyes; then + DOING_NATIVE_WINDOWS_TRUE= + DOING_NATIVE_WINDOWS_FALSE='#' +else + DOING_NATIVE_WINDOWS_TRUE='#' + DOING_NATIVE_WINDOWS_FALSE= fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $curl_cv_header_ws2tcpip_h" >&5 -printf "%s\n" "$curl_cv_header_ws2tcpip_h" >&6; } - case "$curl_cv_header_ws2tcpip_h" in - yes) -printf "%s\n" "#define HAVE_WS2TCPIP_H 1" >>confdefs.h - - ;; - esac @@ -37016,9 +37446,7 @@ curl_includes_stdlib="\ #ifdef HAVE_SYS_TYPES_H # include #endif -#ifdef HAVE_STDLIB_H -# include -#endif +#include /* includes end */" ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$curl_includes_stdlib " @@ -37026,13 +37454,6 @@ 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" "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 @@ -37183,10 +37604,10 @@ int main (void) struct addrinfo *ai = 0; int error; - #ifdef HAVE_WINSOCK2_H + #ifdef _WIN32 WSADATA wsa; - if (WSAStartup(MAKEWORD(2,2), &wsa)) - exit(2); + if(WSAStartup(MAKEWORD(2, 2), &wsa)) + exit(2); #endif memset(&hints, 0, sizeof(hints)); @@ -37222,7 +37643,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 @@ -37249,10 +37672,10 @@ int main (void) struct addrinfo *ai = 0; int error; - #ifdef HAVE_WINSOCK2_H + #ifdef _WIN32 WSADATA wsa; - if (WSAStartup(MAKEWORD(2,2), &wsa)) - exit(2); + if(WSAStartup(MAKEWORD(2, 2), &wsa)) + exit(2); #endif memset(&hints, 0, sizeof(hints)); @@ -37287,6 +37710,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -37390,7 +37814,7 @@ int main (void) #ifdef h_errno return 0; #else - force compilation error + #error force compilation error #endif } @@ -37463,7 +37887,7 @@ int main (void) #elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700) return 0; #else - force compilation error + #error force compilation error #endif ; @@ -37906,7 +38330,7 @@ printf "%s\n" "no" >&6; } curl_preprocess_callconv="\ /* preprocess start */ -#ifdef HAVE_WINDOWS_H +#ifdef _WIN32 # define FUNCALLCONV __stdcall #else # define FUNCALLCONV @@ -38779,7 +39203,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 @@ -38830,6 +39256,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -39071,7 +39498,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 @@ -39122,6 +39551,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -39176,7 +39606,7 @@ curl_includes_arpa_inet="\ #ifdef HAVE_ARPA_INET_H # include #endif -#ifdef HAVE_WINSOCK2_H +#ifdef _WIN32 #include #include #endif @@ -39428,7 +39858,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 @@ -39521,6 +39953,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -39770,7 +40203,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 @@ -39856,6 +40291,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -39896,6 +40332,359 @@ printf "%s\n" "no" >&6; } fi +curl_includes_stropts="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif +#ifdef HAVE_STROPTS_H +# include +#endif +/* 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 +#else +# include +#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 + +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" @@ -40046,7 +40835,7 @@ printf %s "checking if ioctlsocket FIONBIO is compilable... " >&6; } int main (void) { - int flags = 0; + unsigned long flags = 0; if(0 != ioctlsocket(0, FIONBIO, &flags)) return 1; @@ -40511,6 +41300,42 @@ printf "%s\n" "no" >&6; } fi +curl_includes_poll="\ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_POLL_H +# include +#endif +#ifdef HAVE_SYS_POLL_H +# include +#endif +/* includes end */" + ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$curl_includes_poll +" +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" "poll.h" "ac_cv_header_poll_h" "$curl_includes_poll +" +if test "x$ac_cv_header_poll_h" = xyes +then : + printf "%s\n" "#define HAVE_POLL_H 1" >>confdefs.h + +fi +ac_fn_c_check_header_compile "$LINENO" "sys/poll.h" "ac_cv_header_sys_poll_h" "$curl_includes_poll +" +if test "x$ac_cv_header_sys_poll_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_POLL_H 1" >>confdefs.h + +fi + + + # tst_links_poll="unknown" tst_proto_poll="unknown" @@ -40694,7 +41519,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 @@ -40757,6 +41584,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -40802,9 +41630,7 @@ curl_includes_signal="\ #ifdef HAVE_SYS_TYPES_H # include #endif -#ifdef HAVE_SIGNAL_H -# include -#endif +#include /* includes end */" ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$curl_includes_signal " @@ -40812,13 +41638,6 @@ 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" "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 @@ -41278,9 +42097,7 @@ curl_includes_setjmp="\ #ifdef HAVE_SYS_TYPES_H # include #endif -#ifdef HAVE_SETJMP_H -# include -#endif +#include /* includes end */" ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$curl_includes_setjmp " @@ -41288,13 +42105,6 @@ 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" "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 @@ -42472,7 +43282,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 @@ -42526,6 +43338,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -42638,7 +43451,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 @@ -42692,6 +43507,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi LD_LIBRARY_PATH=$old # restore + CC=$oldcc ;; esac @@ -43323,66 +44139,154 @@ printf "%s\n" "#define HAVE_DECL_GETPWUID_R_MISSING 1" >>confdefs.h fi +ac_fn_c_check_func "$LINENO" "_fseeki64" "ac_cv_func__fseeki64" +if test "x$ac_cv_func__fseeki64" = xyes +then : + printf "%s\n" "#define HAVE__FSEEKI64 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "arc4random" "ac_cv_func_arc4random" +if test "x$ac_cv_func_arc4random" = xyes +then : + printf "%s\n" "#define HAVE_ARC4RANDOM 1" >>confdefs.h - for ac_func in fnmatch fchmod fork 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" -if eval test \"x\$"$as_ac_var"\" = x"yes" +fi +ac_fn_c_check_func "$LINENO" "eventfd" "ac_cv_func_eventfd" +if test "x$ac_cv_func_eventfd" = xyes then : - cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF + printf "%s\n" "#define HAVE_EVENTFD 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "fnmatch" "ac_cv_func_fnmatch" +if test "x$ac_cv_func_fnmatch" = xyes +then : + printf "%s\n" "#define HAVE_FNMATCH 1" >>confdefs.h -else $as_nop +fi +ac_fn_c_check_func "$LINENO" "fseeko" "ac_cv_func_fseeko" +if test "x$ac_cv_func_fseeko" = xyes +then : + printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h - func="$ac_func" - eval skipcheck=\$skipcheck_$func - if test "x$skipcheck" != "xyes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking deeper for $func" >&5 -printf %s "checking deeper for $func... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ +fi +ac_fn_c_check_func "$LINENO" "geteuid" "ac_cv_func_geteuid" +if test "x$ac_cv_func_geteuid" = xyes +then : + printf "%s\n" "#define HAVE_GETEUID 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "getpass_r" "ac_cv_func_getpass_r" +if test "x$ac_cv_func_getpass_r" = xyes +then : + printf "%s\n" "#define HAVE_GETPASS_R 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "getppid" "ac_cv_func_getppid" +if test "x$ac_cv_func_getppid" = xyes +then : + printf "%s\n" "#define HAVE_GETPPID 1" >>confdefs.h -int main (void) -{ +fi +ac_fn_c_check_func "$LINENO" "getpwuid" "ac_cv_func_getpwuid" +if test "x$ac_cv_func_getpwuid" = xyes +then : + printf "%s\n" "#define HAVE_GETPWUID 1" >>confdefs.h - $func (); +fi +ac_fn_c_check_func "$LINENO" "getpwuid_r" "ac_cv_func_getpwuid_r" +if test "x$ac_cv_func_getpwuid_r" = xyes +then : + printf "%s\n" "#define HAVE_GETPWUID_R 1" >>confdefs.h - ; - return 0; -} +fi +ac_fn_c_check_func "$LINENO" "getrlimit" "ac_cv_func_getrlimit" +if test "x$ac_cv_func_getrlimit" = xyes +then : + printf "%s\n" "#define HAVE_GETRLIMIT 1" >>confdefs.h -_ACEOF -if ac_fn_c_try_link "$LINENO" +fi +ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" +if test "x$ac_cv_func_gettimeofday" = xyes then : + printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - eval "ac_cv_func_$func=yes" +fi +ac_fn_c_check_func "$LINENO" "if_nametoindex" "ac_cv_func_if_nametoindex" +if test "x$ac_cv_func_if_nametoindex" = xyes +then : + printf "%s\n" "#define HAVE_IF_NAMETOINDEX 1" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$func" | sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' | sed 's/^A-Z0-9_/_/g'` 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "mach_absolute_time" "ac_cv_func_mach_absolute_time" +if test "x$ac_cv_func_mach_absolute_time" = xyes +then : + printf "%s\n" "#define HAVE_MACH_ABSOLUTE_TIME 1" >>confdefs.h +fi +ac_fn_c_check_func "$LINENO" "pipe" "ac_cv_func_pipe" +if test "x$ac_cv_func_pipe" = xyes +then : + printf "%s\n" "#define HAVE_PIPE 1" >>confdefs.h -else $as_nop +fi +ac_fn_c_check_func "$LINENO" "sched_yield" "ac_cv_func_sched_yield" +if test "x$ac_cv_func_sched_yield" = xyes +then : + printf "%s\n" "#define HAVE_SCHED_YIELD 1" >>confdefs.h - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: but still no" >&5 -printf "%s\n" "but still no" >&6; } +fi +ac_fn_c_check_func "$LINENO" "sendmsg" "ac_cv_func_sendmsg" +if test "x$ac_cv_func_sendmsg" = xyes +then : + printf "%s\n" "#define HAVE_SENDMSG 1" >>confdefs.h fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - fi +ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale" +if test "x$ac_cv_func_setlocale" = xyes +then : + printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h fi +ac_fn_c_check_func "$LINENO" "setmode" "ac_cv_func_setmode" +if test "x$ac_cv_func_setmode" = xyes +then : + printf "%s\n" "#define HAVE_SETMODE 1" >>confdefs.h -done +fi +ac_fn_c_check_func "$LINENO" "setrlimit" "ac_cv_func_setrlimit" +if test "x$ac_cv_func_setrlimit" = xyes +then : + printf "%s\n" "#define HAVE_SETRLIMIT 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" +if test "x$ac_cv_func_snprintf" = xyes +then : + printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "utime" "ac_cv_func_utime" +if test "x$ac_cv_func_utime" = xyes +then : + printf "%s\n" "#define HAVE_UTIME 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" +if test "x$ac_cv_func_utimes" = xyes +then : + printf "%s\n" "#define HAVE_UTIMES 1" >>confdefs.h + +fi + + +ac_fn_check_decl "$LINENO" "fseeko" "ac_cv_have_decl_fseeko" "#include +" "$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 # @@ -43409,8 +44313,8 @@ printf "%s\n" "$as_me: WARNING: cannot determine non-blocking socket method." >& fi - -# Extract the first word of "perl", so it can be a program name with args. +if test "x$BUILD_DOCS" != "x0" -o "x$USE_MANUAL" != "x0"; then + # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } @@ -43458,91 +44362,19 @@ fi -for ac_prog in gnroff nroff -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; 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_NROFF+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $NROFF in - [\\/]* | ?:[\\/]*) - ac_cv_path_NROFF="$NROFF" # 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_NROFF="$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 + if test -z "$PERL"; then + as_fn_error $? "perl was not found, needed for docs and manual" "$LINENO" 5 fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -NROFF=$ac_cv_path_NROFF -if test -n "$NROFF"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NROFF" >&5 -printf "%s\n" "$NROFF" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } fi - - test -n "$NROFF" && break -done - - - -if test -n "$NROFF"; then - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to use *nroff to get plain text from man pages" >&5 -printf %s "checking how to use *nroff to get plain text from man pages... " >&6; } - MANOPT="-man" - mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null` - if test -z "$mancheck"; then - MANOPT="-mandoc" - mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null` - if test -z "$mancheck"; then - MANOPT="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -printf "%s\n" "failed" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: found no *nroff option to get plaintext from man pages" >&5 -printf "%s\n" "$as_me: WARNING: found no *nroff option to get plaintext from man pages" >&2;} - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANOPT" >&5 -printf "%s\n" "$MANOPT" >&6; } - fi - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANOPT" >&5 -printf "%s\n" "$MANOPT" >&6; } - fi - + if test x"$BUILD_DOCS" = x1; then + BUILD_DOCS_TRUE= + BUILD_DOCS_FALSE='#' +else + BUILD_DOCS_TRUE='#' + BUILD_DOCS_FALSE= fi -if test -z "$MANOPT" -then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: disabling built-in manual" >&5 -printf "%s\n" "$as_me: WARNING: disabling built-in manual" >&2;} - USE_MANUAL="no"; -fi if test "$USE_MANUAL" = "1"; then @@ -43950,8 +44782,12 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \ printf "%s\n" "#define USE_ARES 1" >>confdefs.h + +printf "%s\n" "#define CARES_NO_DEPRECATED 1" >>confdefs.h + USE_ARES=1 + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libcares" curl_res_msg="c-ares" fi fi @@ -43994,6 +44830,60 @@ fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $want_thres" >&5 printf "%s\n" "$want_thres" >&6; } + + if test "$ipv6" = yes; then + +{ 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 +/* end confdefs.h. */ + + +#include +#include + +int main (void) +{ + +#if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) + return 0; +#else +#error Not macOS +#endif + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + build_for_macos="yes" + +else $as_nop + + build_for_macos="no" + +fi +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 CoreServices -framework SystemConfiguration" + 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}: result: no" >&5 +printf "%s\n" "no" >&6; } +esac + + fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use POSIX threads for threaded resolver" >&5 @@ -44157,6 +45047,25 @@ printf "%s\n" "#define USE_THREADS_WIN32 1" >>confdefs.h fi fi +ac_fn_c_check_header_compile "$LINENO" "dirent.h" "ac_cv_header_dirent_h" "$ac_includes_default" +if test "x$ac_cv_header_dirent_h" = xyes +then : + +printf "%s\n" "#define HAVE_DIRENT_H 1" >>confdefs.h + + ac_fn_c_check_func "$LINENO" "opendir" "ac_cv_func_opendir" +if test "x$ac_cv_func_opendir" = xyes +then : + +printf "%s\n" "#define HAVE_OPENDIR 1" >>confdefs.h + +fi + + + +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking convert -I options to -isystem" >&5 printf %s "checking convert -I options to -isystem... " >&6; } @@ -44272,19 +45181,44 @@ 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_crypto_auth; case "$enableval" in + 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_CRYPTO_AUTH 1" >>confdefs.h +printf "%s\n" "#define CURL_DISABLE_BEARER_AUTH 1" >>confdefs.h - CURL_DISABLE_CRYPTO_AUTH=1 + CURL_DISABLE_BEARER_AUTH=1 ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } @@ -44297,19 +45231,19 @@ printf "%s\n" "yes" >&6; } fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support NTLM" >&5 -printf %s "checking whether to support NTLM... " >&6; } -# Check whether --enable-ntlm was given. -if test ${enable_ntlm+y} +{ 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_ntlm; case "$enableval" in + 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_NTLM 1" >>confdefs.h +printf "%s\n" "#define CURL_DISABLE_DIGEST_AUTH 1" >>confdefs.h - CURL_DISABLE_NTLM=1 + CURL_DISABLE_DIGEST_AUTH=1 ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } @@ -44322,52 +45256,105 @@ printf "%s\n" "yes" >&6; } fi - - OPT_NTLM_WB="default" - # Check whether --enable-ntlm-wb was given. -if test ${enable_ntlm_wb+y} +{ 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_ntlm_wb; OPT_NTLM_WB=$enableval + 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 - want_ntlm_wb_file="/usr/bin/ntlm_auth" - case "$OPT_NTLM_WB" in - no) - want_ntlm_wb="no" - ;; - default) - want_ntlm_wb="yes" - ;; - *) - want_ntlm_wb="yes" - if test -n "$enableval" && test "$enableval" != "yes"; then - want_ntlm_wb_file="$enableval" - 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 NTLM delegation to winbind's helper" >&5 -printf %s "checking whether to enable NTLM delegation to winbind's helper... " >&6; } - if test "$curl_cv_native_windows" = "yes" || - 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; } - if test "$want_ntlm_wb" = "yes"; then -printf "%s\n" "#define NTLM_WB_ENABLED 1" >>confdefs.h +{ 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_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_AWS 1" >>confdefs.h -printf "%s\n" "#define NTLM_WB_FILE \"$want_ntlm_wb_file\"" >>confdefs.h + CURL_DISABLE_AWS=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; } - NTLM_WB_ENABLED=1 - fi +fi + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to support NTLM" >&5 +printf %s "checking whether to support NTLM... " >&6; } +# Check whether --enable-ntlm was given. +if test ${enable_ntlm+y} +then : + enableval=$enable_ntlm; 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_NTLM 1" >>confdefs.h + + CURL_DISABLE_NTLM=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 TLS-SRP authentication" >&5 @@ -44579,6 +45566,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. @@ -44751,7 +45797,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. @@ -44786,6 +45831,16 @@ printf "%s\n" "#define CURL_DISABLE_HSTS 1" >>confdefs.h fi + +if test "x$want_httpsrr" != "xno"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: HTTPSRR support is available" >&5 +printf "%s\n" "HTTPSRR support is available" >&6; } + +printf "%s\n" "#define USE_HTTPSRR 1" >>confdefs.h + + experimental="$experimental HTTPSRR" +fi + if test "x$want_ech" != "xno"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ECH support is available" >&5 printf %s "checking whether ECH support is available... " >&6; } @@ -44793,24 +45848,54 @@ printf %s "checking whether ECH support is available... " >&6; } ECH_ENABLED=0 ECH_SUPPORT='' - if test "x$OPENSSL_ENABLED" = "x1"; then + if test "x$OPENSSL_ENABLED" = "x1"; then - for ac_func in SSL_get_ech_status + for ac_func in SSL_ech_set1_echconfig do : - ac_fn_c_check_func "$LINENO" "SSL_get_ech_status" "ac_cv_func_SSL_get_ech_status" -if test "x$ac_cv_func_SSL_get_ech_status" = xyes + ac_fn_c_check_func "$LINENO" "SSL_ech_set1_echconfig" "ac_cv_func_SSL_ech_set1_echconfig" +if test "x$ac_cv_func_SSL_ech_set1_echconfig" = xyes then : - printf "%s\n" "#define HAVE_SSL_GET_ECH_STATUS 1" >>confdefs.h - ECH_SUPPORT="ECH support available (OpenSSL with SSL_get_ech_status)" + printf "%s\n" "#define HAVE_SSL_ECH_SET1_ECHCONFIG 1" >>confdefs.h + ECH_SUPPORT="ECH support available via OpenSSL with SSL_ech_set1_echconfig" ECH_ENABLED=1 fi done + fi + if test "x$OPENSSL_ENABLED" = "x1"; then - fi + for ac_func in SSL_set1_ech_config_list +do : + ac_fn_c_check_func "$LINENO" "SSL_set1_ech_config_list" "ac_cv_func_SSL_set1_ech_config_list" +if test "x$ac_cv_func_SSL_set1_ech_config_list" = xyes +then : + printf "%s\n" "#define HAVE_SSL_SET1_ECH_CONFIG_LIST 1" >>confdefs.h + ECH_SUPPORT="ECH support available via BoringSSL with SSL_set1_ech_config_list" + ECH_ENABLED=1 +fi + +done + fi + if test "x$WOLFSSL_ENABLED" = "x1"; then + + for ac_func in wolfSSL_CTX_GenerateEchConfig +do : + ac_fn_c_check_func "$LINENO" "wolfSSL_CTX_GenerateEchConfig" "ac_cv_func_wolfSSL_CTX_GenerateEchConfig" +if test "x$ac_cv_func_wolfSSL_CTX_GenerateEchConfig" = xyes +then : + printf "%s\n" "#define HAVE_WOLFSSL_CTX_GENERATEECHCONFIG 1" >>confdefs.h + ECH_SUPPORT="ECH support available via wolfSSL with wolfSSL_CTX_GenerateEchConfig" + ECH_ENABLED=1 +fi + +done + fi if test "x$ECH_ENABLED" = "x1"; then +printf "%s\n" "#define USE_HTTPSRR 1" >>confdefs.h + + printf "%s\n" "#define USE_ECH 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ECH_SUPPORT" >&5 @@ -44821,6 +45906,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. @@ -44913,14 +46008,24 @@ ENABLE_SHARED="$enable_shared" ENABLE_STATIC="$enable_static" +squeeze LIBCURL_PC_REQUIRES_PRIVATE +LIBCURL_PC_REQUIRES_PRIVATE=`echo $LIBCURL_PC_REQUIRES_PRIVATE | tr ' ' ','` + + + if test "x$enable_shared" = "xno"; then + LIBCURL_PC_REQUIRES=$LIBCURL_PC_REQUIRES_PRIVATE LIBCURL_NO_SHARED=$LIBCURL_LIBS else + LIBCURL_PC_REQUIRES= LIBCURL_NO_SHARED= fi +rm $compilersh + + if test "x$OPENSSL_ENABLED" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES SSL" elif test -n "$SSL_ENABLED"; then @@ -44971,22 +46076,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 @@ -44996,11 +46100,6 @@ if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \ if test "x$use_curl_ntlm_core" = "xyes" \ -o "x$USE_WINDOWS_SSPI" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM" - - if test "x$CURL_DISABLE_HTTP" != "x1" -a \ - "x$NTLM_WB_ENABLED" = "x1"; then - SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM_WB" - fi fi fi @@ -45008,12 +46107,15 @@ 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 -if test "x$USE_NGTCP2" = "x1" -o "x$USE_QUICHE" = "x1" \ - -o "x$USE_MSH3" = "x1"; then +if test "x$USE_NGTCP2_H3" = "x1" -o "x$USE_QUICHE" = "x1" \ + -o "x$USE_OPENSSL_H3" = "x1" -o "x$USE_MSH3" = "x1"; then + if test "x$CURL_WITH_MULTI_SSL" = "x1"; then + as_fn_error $? "MultiSSL cannot be enabled with HTTP/3 and vice versa" "$LINENO" 5 + fi SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP3" fi @@ -45021,24 +46123,42 @@ 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" \ - -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" - 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}: 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 - SUPPORT_FEATURES="$SUPPORT_FEATURES ECH" +if test "x$OPENSSL_ENABLED" = "x1" -o -n "$SSL_ENABLED"; then + if test "x$ECH_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES ECH" + fi fi if test ${ac_cv_sizeof_curl_off_t} -gt 4; then @@ -45050,6 +46170,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. */ @@ -45078,11 +46201,22 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -SUPPORT_FEATURES=`echo $SUPPORT_FEATURES | tr ' ' '\012' | sort | tr '\012' ' '` +if test "x$want_debug" = "xyes"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES Debug" +fi +if test "x$want_curldebug" = "xyes"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES TrackMemory" +fi + +if sort -f /dev/null 2>&1; then + SUPPORT_FEATURES=`echo $SUPPORT_FEATURES | tr ' ' '\012' | sort -f | tr '\012' ' '` +else + SUPPORT_FEATURES=`echo $SUPPORT_FEATURES | tr ' ' '\012' | sort | tr '\012' ' '` +fi if test "x$CURL_DISABLE_HTTP" != "x1"; then - SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTP" + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTP IPFS IPNS" if test "x$SSL_ENABLED" = "x1"; then SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTPS" fi @@ -45360,7 +46494,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/config 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 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 @@ -45475,6 +46609,10 @@ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${DEBUGBUILD_TRUE}" && test -z "${DEBUGBUILD_FALSE}"; then + as_fn_error $? "conditional \"DEBUGBUILD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then @@ -45519,22 +46657,22 @@ if test -z "${USE_EXPLICIT_LIB_DEPS_TRUE}" && test -z "${USE_EXPLICIT_LIB_DEPS_F as_fn_error $? "conditional \"USE_EXPLICIT_LIB_DEPS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${CURLDEBUG_TRUE}" && test -z "${CURLDEBUG_FALSE}"; then - as_fn_error $? "conditional \"CURLDEBUG\" was never defined. +if test -z "${DOING_NATIVE_WINDOWS_TRUE}" && test -z "${DOING_NATIVE_WINDOWS_FALSE}"; then + 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 "${BUILD_UNITTESTS_TRUE}" && test -z "${BUILD_UNITTESTS_FALSE}"; then as_fn_error $? "conditional \"BUILD_UNITTESTS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${DOING_NATIVE_WINDOWS_TRUE}" && test -z "${DOING_NATIVE_WINDOWS_FALSE}"; then - 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 "${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 "${DOING_NATIVE_WINDOWS_TRUE}" && test -z "${DOING_NATIVE_WINDOWS_FALSE}"; then + 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 "${HAVE_LIBZ_TRUE}" && test -z "${HAVE_LIBZ_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBZ\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -45555,6 +46693,22 @@ if test -z "${CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_TRUE}" && test -z "${CURL_LT_S as_fn_error $? "conditional \"CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${USE_ZSH_COMPLETION_TRUE}" && test -z "${USE_ZSH_COMPLETION_FALSE}"; then + as_fn_error $? "conditional \"USE_ZSH_COMPLETION\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_FISH_COMPLETION_TRUE}" && test -z "${USE_FISH_COMPLETION_FALSE}"; then + as_fn_error $? "conditional \"USE_FISH_COMPLETION\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${DOING_NATIVE_WINDOWS_TRUE}" && test -z "${DOING_NATIVE_WINDOWS_FALSE}"; then + 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 "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then + as_fn_error $? "conditional \"BUILD_DOCS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${USE_MANUAL_TRUE}" && test -z "${USE_MANUAL_FALSE}"; then as_fn_error $? "conditional \"USE_MANUAL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -46526,7 +47680,6 @@ do "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; "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" ;; @@ -46535,6 +47688,9 @@ do "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" ;; @@ -47992,110 +49148,7 @@ 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 ## -## -------------------------------- ## - - +SUPPORT_PROTOCOLS_LOWER=`echo "$SUPPORT_PROTOCOLS" | tr A-Z a-z` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configured to build curl/libcurl: @@ -48103,6 +49156,7 @@ done Install prefix: ${prefix} Compiler: ${CC} CFLAGS: ${CFLAGS} + CFLAGS extras: ${CURL_CFLAG_EXTRAS} CPPFLAGS: ${CPPFLAGS} LDFLAGS: ${LDFLAGS} LIBS: ${LIBS} @@ -48120,6 +49174,7 @@ done IPv6: ${curl_ipv6_msg} Unix sockets: ${curl_unix_sockets_msg} IDN: ${curl_idn_msg} + Build docs: ${curl_docs_msg} Build libcurl: Shared=${enable_shared}, Static=${enable_static} Built-in manual: ${curl_manual_msg} --libcurl option: ${curl_libcurl_msg} @@ -48142,7 +49197,7 @@ done HTTP3: ${curl_h3_msg} ECH: ${curl_ech_msg} WebSockets: ${curl_ws_msg} - Protocols: ${SUPPORT_PROTOCOLS} + Protocols: ${SUPPORT_PROTOCOLS_LOWER} Features: ${SUPPORT_FEATURES} " >&5 printf "%s\n" "$as_me: Configured to build curl/libcurl: @@ -48151,6 +49206,7 @@ printf "%s\n" "$as_me: Configured to build curl/libcurl: Install prefix: ${prefix} Compiler: ${CC} CFLAGS: ${CFLAGS} + CFLAGS extras: ${CURL_CFLAG_EXTRAS} CPPFLAGS: ${CPPFLAGS} LDFLAGS: ${LDFLAGS} LIBS: ${LIBS} @@ -48168,6 +49224,7 @@ printf "%s\n" "$as_me: Configured to build curl/libcurl: IPv6: ${curl_ipv6_msg} Unix sockets: ${curl_unix_sockets_msg} IDN: ${curl_idn_msg} + Build docs: ${curl_docs_msg} Build libcurl: Shared=${enable_shared}, Static=${enable_static} Built-in manual: ${curl_manual_msg} --libcurl option: ${curl_libcurl_msg} @@ -48190,12 +49247,22 @@ printf "%s\n" "$as_me: Configured to build curl/libcurl: HTTP3: ${curl_h3_msg} ECH: ${curl_ech_msg} WebSockets: ${curl_ws_msg} - Protocols: ${SUPPORT_PROTOCOLS} + Protocols: ${SUPPORT_PROTOCOLS_LOWER} Features: ${SUPPORT_FEATURES} " >&6;} + +non13=`echo "$TLSCHOICE" | $EGREP -io 'bearssl|secure-transport'`; +if test -n "$non13"; then + for a in $non13; do + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $a is enabled for TLS but it does not support TLS 1.3" >&5 +printf "%s\n" "$as_me: WARNING: $a is enabled for TLS but it does not support TLS 1.3" >&2;} + done +fi + if test -n "$experimental"; then - cat >&2 << _EOF - WARNING: $experimental enabled but marked EXPERIMENTAL. Use with caution! -_EOF + for a in $experimental; do + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $a is enabled but marked EXPERIMENTAL. Use with caution!" >&5 +printf "%s\n" "$as_me: WARNING: $a is enabled but marked EXPERIMENTAL. Use with caution!" >&2;} + done fi diff --git a/configure.ac b/configure.ac index 49371a755..1e18b8156 100644 --- a/configure.ac +++ b/configure.ac @@ -44,6 +44,7 @@ AM_MAINTAINER_MODE m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) CURL_CHECK_OPTION_DEBUG +AM_CONDITIONAL(DEBUGBUILD, test x$want_debug = xyes) CURL_CHECK_OPTION_OPTIMIZE CURL_CHECK_OPTION_WARNINGS CURL_CHECK_OPTION_WERROR @@ -51,6 +52,7 @@ CURL_CHECK_OPTION_CURLDEBUG CURL_CHECK_OPTION_SYMBOL_HIDING CURL_CHECK_OPTION_ARES CURL_CHECK_OPTION_RT +CURL_CHECK_OPTION_HTTPSRR CURL_CHECK_OPTION_ECH XC_CHECK_PATH_SEPARATOR @@ -273,7 +275,7 @@ AS_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to OPT_WOLFSSL=no AC_ARG_WITH(wolfssl,dnl -AS_HELP_STRING([--with-wolfssl=PATH],[where to look for WolfSSL, PATH points to the installation root (default: system lib default)]),[ +AS_HELP_STRING([--with-wolfssl=PATH],[where to look for wolfSSL, PATH points to the installation root (default: system lib default)]),[ OPT_WOLFSSL=$withval if test X"$withval" != Xno; then TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }wolfSSL" @@ -309,7 +311,7 @@ AS_HELP_STRING([--with-test-nghttpx=PATH],[where to find nghttpx for testing]), ) AC_SUBST(TEST_NGHTTPX) -CADDY=caddy +CADDY=/usr/bin/caddy AC_ARG_WITH(test-caddy,dnl AS_HELP_STRING([--with-test-caddy=PATH],[where to find caddy for testing]), CADDY=$withval @@ -319,6 +321,16 @@ AS_HELP_STRING([--with-test-caddy=PATH],[where to find caddy for testing]), ) AC_SUBST(CADDY) +VSFTPD=/usr/sbin/vsftpd +AC_ARG_WITH(test-vsftpd,dnl +AS_HELP_STRING([--with-test-vsftpd=PATH],[where to find vsftpd for testing]), + VSFTPD=$withval + if test X"$OPT_VSFTPD" = "Xno" ; then + VSFTPD="" + fi +) +AC_SUBST(VSFTPD) + dnl we'd like a httpd+apachectl as test server dnl HTTPD_ENABLED="maybe" @@ -406,7 +418,7 @@ Select from these: --with-bearssl --with-gnutls --with-mbedtls - --with-openssl (also works for BoringSSL and libressl) + --with-openssl (also works for BoringSSL and LibreSSL) --with-rustls --with-schannel --with-secure-transport @@ -496,9 +508,6 @@ fi AC_SUBST(REQUIRE_LIB_DEPS) AM_CONDITIONAL(USE_EXPLICIT_LIB_DEPS, test x$REQUIRE_LIB_DEPS = xyes) -dnl check if there's a way to force code inline -AC_C_INLINE - dnl ********************************************************************** dnl platform/compiler/architecture specific checks/flags dnl ********************************************************************** @@ -531,6 +540,8 @@ if test X"$want_werror" = Xyes; then if test "$compiler_num" -ge "500"; then CURL_CFLAG_EXTRAS="$CURL_CFLAG_EXTRAS -pedantic-errors" fi + elif test "$compiler_id" = "CLANG"; then + CURL_CFLAG_EXTRAS="$CURL_CFLAG_EXTRAS -pedantic-errors" fi fi AC_SUBST(CURL_CFLAG_EXTRAS) @@ -540,9 +551,6 @@ CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE CURL_CHECK_COMPILER_PROTOTYPE_MISMATCH CURL_CHECK_COMPILER_SYMBOL_HIDING -CURL_CHECK_CURLDEBUG -AM_CONDITIONAL(CURLDEBUG, test x$want_curldebug = xyes) - supports_unittests=yes # cross-compilation of unit tests static library/programs fails when # libcurl shared library is built. This might be due to a libtool or @@ -589,8 +597,11 @@ CURL_CHECK_WIN32_LARGEFILE CURL_CHECK_WIN32_CRYPTO CURL_DARWIN_CFLAGS -CURL_DARWIN_SYSTEMCONFIGURATION -CURL_SUPPORTS_BUILTIN_AVAILABLE +case $host_os in + darwin*) + CURL_SUPPORTS_BUILTIN_AVAILABLE + ;; +esac AM_CONDITIONAL([HAVE_WINDRES], [test "$curl_cv_native_windows" = "yes" && test -n "${RC}"]) @@ -791,7 +802,8 @@ if test X"$want_hyper" != Xno; then AC_SUBST(USE_HYPER, [1]) CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_HYPER" export CURL_LIBRARY_PATH - AC_MSG_NOTICE([Added $DIR_HYPER to CURL_LIBRARY_PATH]), + AC_MSG_NOTICE([Added $DIR_HYPER to CURL_LIBRARY_PATH]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE hyper" ) ], for d in `echo $DIR_HYPER | $SED -e 's/:/ /'`; do @@ -999,48 +1011,51 @@ AS_HELP_STRING([--disable-mqtt],[Disable MQTT support]), ) dnl ********************************************************************** -dnl Check whether to build documentation +dnl Check for built-in manual dnl ********************************************************************** -AC_MSG_CHECKING([whether to build documentation]) -AC_ARG_ENABLE(docs, -AS_HELP_STRING([--enable-docs],[Enable documentation]) -AS_HELP_STRING([--disable-docs],[Disable documentation]), +AC_MSG_CHECKING([whether to provide built-in manual]) +AC_ARG_ENABLE(manual, +AS_HELP_STRING([--enable-manual],[Enable built-in manual]) +AS_HELP_STRING([--disable-manual],[Disable built-in manual]), [ case "$enableval" in no) AC_MSG_RESULT(no) - BUILD_DOCS=0 - curl_docs_msg="no" ;; *) AC_MSG_RESULT(yes) - BUILD_DOCS=1 + USE_MANUAL="1" ;; esac ], AC_MSG_RESULT(yes) - BUILD_DOCS=1 + USE_MANUAL="1" ) +dnl The actual use of the USE_MANUAL variable is done much later in this +dnl script to allow other actions to disable it as well. dnl ********************************************************************** -dnl Check for built-in manual +dnl Check whether to build documentation dnl ********************************************************************** -AC_MSG_CHECKING([whether to provide built-in manual]) -AC_ARG_ENABLE(manual, -AS_HELP_STRING([--enable-manual],[Enable built-in manual]) -AS_HELP_STRING([--disable-manual],[Disable built-in manual]), +AC_MSG_CHECKING([whether to build documentation]) +AC_ARG_ENABLE(docs, +AS_HELP_STRING([--enable-docs],[Enable documentation]) +AS_HELP_STRING([--disable-docs],[Disable documentation]), [ case "$enableval" in no) AC_MSG_RESULT(no) + BUILD_DOCS=0 + dnl disable manual too because it needs built documentation + USE_MANUAL=0 + curl_docs_msg="no" ;; *) AC_MSG_RESULT(yes) - USE_MANUAL="1" + BUILD_DOCS=1 ;; esac ], AC_MSG_RESULT(yes) - USE_MANUAL="1" + BUILD_DOCS=1 ) -dnl The actual use of the USE_MANUAL variable is done much later in this -dnl script to allow other actions to disable it as well. + dnl ************************************************************ dnl disable C code generation support @@ -1370,6 +1385,7 @@ else dnl replace 'HAVE_LIBZ' in the automake makefile.ams AMFIXLIB="1" AC_MSG_NOTICE([found both libz and libz.h header]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE zlib" curl_zlib_msg="enabled" fi fi @@ -1458,6 +1474,7 @@ if test X"$OPT_BROTLI" != Xno; then AC_MSG_NOTICE([Added $DIR_BROTLI to CURL_LIBRARY_PATH]) fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libbrotlidec" else dnl no brotli, revert back to clean variables LDFLAGS=$CLEANLDFLAGS @@ -1545,6 +1562,7 @@ if test X"$OPT_ZSTD" != Xno; then AC_MSG_NOTICE([Added $DIR_ZSTD to CURL_LIBRARY_PATH]) fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libzstd" else dnl no zstd, revert back to clean variables LDFLAGS=$CLEANLDFLAGS @@ -1697,7 +1715,7 @@ int main(void) if test "$ipv6" = yes; then curl_ipv6_msg="enabled" - AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support]) + AC_DEFINE(USE_IPV6, 1, [Define if you want to enable IPv6 support]) IPV6_ENABLED=1 AC_SUBST(IPV6_ENABLED) @@ -2131,6 +2149,7 @@ if test X"$OPT_LIBPSL" != Xno; then LIBPSL_ENABLED=1 AC_DEFINE(USE_LIBPSL, 1, [if libpsl is in use]) AC_SUBST(USE_LIBPSL, [1]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libpsl" ) ], dnl not found, revert back to clean variables @@ -2172,10 +2191,10 @@ AC_ARG_WITH(libmetalink,, AC_MSG_ERROR([--with-libmetalink and --without-libmetalink no longer work!])) dnl ********************************************************************** -dnl Check for the presence of LIBSSH2 libraries and headers +dnl Check for the presence of libssh2 libraries and headers dnl ********************************************************************** -dnl Default to compiler & linker defaults for LIBSSH2 files & libraries. +dnl Default to compiler & linker defaults for libssh2 files & libraries. OPT_LIBSSH2=off AC_ARG_WITH(libssh2,dnl AS_HELP_STRING([--with-libssh2=PATH],[Where to look for libssh2, PATH points to the libssh2 installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) @@ -2240,15 +2259,15 @@ if test X"$OPT_LIBSSH2" != Xno; then AC_CHECK_LIB(ssh2, libssh2_session_block_directions) AC_CHECK_HEADER(libssh2.h, - curl_ssh_msg="enabled (libSSH2)" + curl_ssh_msg="enabled (libssh2)" LIBSSH2_ENABLED=1 - AC_DEFINE(USE_LIBSSH2, 1, [if libSSH2 is in use]) + AC_DEFINE(USE_LIBSSH2, 1, [if libssh2 is in use]) AC_SUBST(USE_LIBSSH2, [1]) ) if test X"$OPT_LIBSSH2" != Xoff && test "$LIBSSH2_ENABLED" != "1"; then - AC_MSG_ERROR([libSSH2 libs and/or directories were not found where specified!]) + AC_MSG_ERROR([libssh2 libs and/or directories were not found where specified!]) fi if test "$LIBSSH2_ENABLED" = "1"; then @@ -2263,6 +2282,7 @@ if test X"$OPT_LIBSSH2" != Xno; then AC_MSG_NOTICE([Added $DIR_SSH2 to CURL_LIBRARY_PATH]) fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libssh2" else dnl no libssh2, revert back to clean variables LDFLAGS=$CLEANLDFLAGS @@ -2313,15 +2333,15 @@ elif test X"$OPT_LIBSSH" != Xno; then AC_CHECK_LIB(ssh, ssh_new) AC_CHECK_HEADER(libssh/libssh.h, - curl_ssh_msg="enabled (libSSH)" + curl_ssh_msg="enabled (libssh)" LIBSSH_ENABLED=1 - AC_DEFINE(USE_LIBSSH, 1, [if libSSH is in use]) + AC_DEFINE(USE_LIBSSH, 1, [if libssh is in use]) AC_SUBST(USE_LIBSSH, [1]) ) if test X"$OPT_LIBSSH" != Xoff && test "$LIBSSH_ENABLED" != "1"; then - AC_MSG_ERROR([libSSH libs and/or directories were not found where specified!]) + AC_MSG_ERROR([libssh libs and/or directories were not found where specified!]) fi if test "$LIBSSH_ENABLED" = "1"; then @@ -2336,6 +2356,7 @@ elif test X"$OPT_LIBSSH" != Xno; then AC_MSG_NOTICE([Added $DIR_SSH to CURL_LIBRARY_PATH]) fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libssh" else dnl no libssh, revert back to clean variables LDFLAGS=$CLEANLDFLAGS @@ -2430,6 +2451,7 @@ if test X"$OPT_LIBRTMP" != Xno; then LIBRTMP_ENABLED=1 AC_DEFINE(USE_LIBRTMP, 1, [if librtmp is in use]) AC_SUBST(USE_LIBRTMP, [1]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE librtmp" ) ], dnl not found, revert back to clean variables @@ -2495,10 +2517,6 @@ AC_SUBST([CURL_LT_SHLIB_VERSIONED_FLAVOUR], AM_CONDITIONAL([CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS], [test "x$versioned_symbols" = 'xyes']) -dnl Update .plist file with current version -AC_SUBST([CURL_PLIST_VERSION], - ["$CURLVERSION"]) - dnl ------------------------------------------------- dnl check winidn option before other IDN libraries dnl ------------------------------------------------- @@ -2717,6 +2735,7 @@ if test "$want_idn" = "yes"; then export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $IDN_DIR to CURL_LIBRARY_PATH]) fi + LIBCURL_PC_REQUIRES_PRIVATE="libidn2 $LIBCURL_PC_REQUIRES_PRIVATE" else AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled]) CPPFLAGS="$clean_CPPFLAGS" @@ -2807,6 +2826,7 @@ if test X"$want_nghttp2" != Xno; then NGHTTP2_ENABLED=1 AC_DEFINE(USE_NGHTTP2, 1, [if nghttp2 is in use]) AC_SUBST(USE_NGHTTP2, [1]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libnghttp2" ) CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_H2" @@ -2895,6 +2915,7 @@ if test X"$want_tcp2" != Xno; then CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_TCP2" export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $DIR_TCP2 to CURL_LIBRARY_PATH]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2" ) ], dnl not found, revert back to clean variables @@ -2951,6 +2972,7 @@ if test "x$NGTCP2_ENABLED" = "x1" -a "x$OPENSSL_ENABLED" = "x1" -a "x$OPENSSL_IS CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_QUICTLS" export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $DIR_NGTCP2_CRYPTO_QUICTLS to CURL_LIBRARY_PATH]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2_crypto_quictls" ) ], dnl not found, revert back to clean variables @@ -3006,6 +3028,7 @@ if test "x$NGTCP2_ENABLED" = "x1" -a "x$OPENSSL_ENABLED" = "x1" -a "x$OPENSSL_IS CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_BORINGSSL" export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $DIR_NGTCP2_CRYPTO_BORINGSSL to CURL_LIBRARY_PATH]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2_crypto_boringssl" ) ], dnl not found, revert back to clean variables @@ -3061,6 +3084,7 @@ if test "x$NGTCP2_ENABLED" = "x1" -a "x$GNUTLS_ENABLED" = "x1"; then CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_GNUTLS" export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $DIR_NGTCP2_CRYPTO_GNUTLS to CURL_LIBRARY_PATH]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2_crypto_gnutls" ) ], dnl not found, revert back to clean variables @@ -3116,6 +3140,7 @@ if test "x$NGTCP2_ENABLED" = "x1" -a "x$WOLFSSL_ENABLED" = "x1"; then CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_WOLFSSL" export CURL_LIBRARY_PATH AC_MSG_NOTICE([Added $DIR_NGTCP2_CRYPTO_WOLFSSL to CURL_LIBRARY_PATH]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libngtcp2_crypto_wolfssl" ) ], dnl not found, revert back to clean variables @@ -3167,7 +3192,7 @@ if test "x$want_openssl_quic" = "xyes"; then AC_MSG_ERROR([--with-openssl-quic and --with-ngtcp2 are mutually exclusive]) fi if test "$HAVE_OPENSSL_QUIC" != 1; then - AC_MSG_ERROR([--with-openssl-quic requires quic support in OpenSSL]) + AC_MSG_ERROR([--with-openssl-quic requires quic support and OpenSSL >= 3.3.0]) fi AC_DEFINE(USE_OPENSSL_QUIC, 1, [if openssl QUIC is in use]) AC_SUBST(USE_OPENSSL_QUIC, [1]) @@ -3209,6 +3234,11 @@ esac curl_http3_msg="no (--with-nghttp3)" if test X"$want_nghttp3" != Xno; then + if test "x$USE_NGTCP2" != "x1" -a "x$USE_OPENSSL_QUIC" != "x1"; then + # without ngtcp2 or openssl quic, nghttp3 is of no use for us + AC_MSG_ERROR([nghttp3 enabled without a QUIC library; enable ngtcp2 or OpenSSL-QUIC]) + fi + dnl backup the pre-nghttp3 variables CLEANLDFLAGS="$LDFLAGS" CLEANCPPFLAGS="$CPPFLAGS" @@ -3244,6 +3274,7 @@ 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]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libnghttp3" ) ], dnl not found, revert back to clean variables @@ -3367,7 +3398,8 @@ if test X"$want_quiche" != Xno; then AC_CHECK_FUNCS([quiche_conn_set_qlog_fd]) CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_QUICHE" export CURL_LIBRARY_PATH - AC_MSG_NOTICE([Added $DIR_QUICHE to CURL_LIBRARY_PATH]), + AC_MSG_NOTICE([Added $DIR_QUICHE to CURL_LIBRARY_PATH]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE quiche", [], [ AC_INCLUDES_DEFAULT @@ -3462,7 +3494,8 @@ if test X"$want_msh3" != Xno; then AC_SUBST(USE_MSH3, [1]) CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_MSH3" export CURL_LIBRARY_PATH - AC_MSG_NOTICE([Added $DIR_MSH3 to CURL_LIBRARY_PATH]), + AC_MSG_NOTICE([Added $DIR_MSH3 to CURL_LIBRARY_PATH]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libmsh3" experimental="$experimental HTTP3" ) ], @@ -3516,7 +3549,7 @@ case "$OPT_FISH_FPATH" in dnl --with-fish-functions-dir option used without path CURL_CHECK_PKGCONFIG(fish) if test "$PKGCONFIG" != "no" ; then - FISH_FUNCTIONS_DIR="$($PKGCONFIG --variable completionsdir fish)" + FISH_FUNCTIONS_DIR=`$PKGCONFIG --variable completionsdir fish` else FISH_FUNCTIONS_DIR="$datarootdir/fish/vendor_completions.d" fi @@ -3568,6 +3601,7 @@ AC_CHECK_HEADERS( stdbool.h \ sys/filio.h \ sys/wait.h \ + sys/eventfd.h \ setjmp.h, dnl to do if not found [], @@ -3773,6 +3807,7 @@ AC_CHECK_DECLS([getpwuid_r], [], [AC_DEFINE(HAVE_DECL_GETPWUID_R_MISSING, 1, "Se AC_CHECK_FUNCS([\ _fseeki64 \ arc4random \ + eventfd \ fnmatch \ fseeko \ geteuid \ @@ -3793,26 +3828,6 @@ AC_CHECK_FUNCS([\ snprintf \ utime \ utimes \ -],[ -],[ - func="$ac_func" - eval skipcheck=\$skipcheck_$func - if test "x$skipcheck" != "xyes"; then - AC_MSG_CHECKING([deeper for $func]) - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([[ - ]],[[ - $func (); - ]]) - ],[ - AC_MSG_RESULT([yes]) - eval "ac_cv_func_$func=yes" - AC_DEFINE_UNQUOTED(XC_SH_TR_CPP([HAVE_$func]), [1], - [Define to 1 if you have the $func function.]) - ],[ - AC_MSG_RESULT([but still no]) - ]) - fi ]) dnl On Android, the only way to know if fseeko can be used is to see if it is @@ -3826,15 +3841,14 @@ AC_CHECK_DECL([fseeko], CURL_CHECK_NONBLOCKING_SOCKET -AC_PATH_PROG( PERL, perl, , - $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin ) -AC_SUBST(PERL) +if test "x$BUILD_DOCS" != "x0" -o "x$USE_MANUAL" != "x0"; then + AC_PATH_PROG( PERL, perl, , + $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin ) + AC_SUBST(PERL) -if test -z "$PERL"; then - dnl if perl was not found then disable building docs - AC_MSG_WARN([disabling documentation]) - BUILD_DOCS=0 - curl_docs_msg="no" + if test -z "$PERL"; then + AC_MSG_ERROR([perl was not found, needed for docs and manual]) + fi fi dnl set variable for use in automakefile(s) @@ -3864,6 +3878,10 @@ AM_CONDITIONAL(BUILD_LIBHOSTNAME, test x$build_libhostname = xyes) if test "x$want_ares" != xyes; then CURL_CHECK_OPTION_THREADED_RESOLVER + + if test "$ipv6" = yes; then + CURL_DARWIN_SYSTEMCONFIGURATION + fi fi dnl ************************************************************ @@ -3911,7 +3929,7 @@ if test "$want_pthreads" != "no"; then AC_CHECK_HEADER(pthread.h, [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have ]) save_CFLAGS="$CFLAGS" - dnl When statically linking against boringssl, -lpthread is added to LIBS. + dnl When statically linking against BoringSSL, -lpthread is added to LIBS. dnl Make sure to that this does not pass the check below, we really want dnl -pthread in CFLAGS as recommended for GCC. This also ensures that dnl lib1541 and lib1565 tests are built with these options. Otherwise @@ -3985,6 +4003,12 @@ if test "$want_thres" = "yes" && test "x$USE_THREADS_POSIX" != "x1"; then fi fi +AC_CHECK_HEADER(dirent.h, + [ AC_DEFINE(HAVE_DIRENT_H, 1, [if you have ]) + AC_CHECK_FUNC(opendir, AC_DEFINE(HAVE_OPENDIR, 1, [if you have opendir]) ) + ] +) + CURL_CONVERT_INCLUDE_TO_ISYSTEM dnl ************************************************************ @@ -4176,10 +4200,6 @@ AS_HELP_STRING([--disable-ntlm],[Disable NTLM support]), AC_MSG_RESULT(yes) ) -CURL_CHECK_OPTION_NTLM_WB - -CURL_CHECK_NTLM_WB - dnl ************************************************************ dnl disable TLS-SRP authentication dnl @@ -4537,6 +4557,16 @@ if test "x$hsts" != "xyes"; then AC_DEFINE(CURL_DISABLE_HSTS, 1, [disable alt-svc]) fi + +dnl ************************************************************* +dnl check whether HTTPSRR support if desired +dnl +if test "x$want_httpsrr" != "xno"; then + AC_MSG_RESULT([HTTPSRR support is available]) + AC_DEFINE(USE_HTTPSRR, 1, [enable HTTPS RR support]) + experimental="$experimental HTTPSRR" +fi + dnl ************************************************************* dnl check whether ECH support, if desired, is actually available dnl @@ -4547,18 +4577,28 @@ if test "x$want_ech" != "xno"; then ECH_ENABLED=0 ECH_SUPPORT='' - dnl OpenSSL with a chosen ECH function should be enough - dnl so more exhaustive checking seems unnecessary for now + dnl check for OpenSSL if test "x$OPENSSL_ENABLED" = "x1"; then - AC_CHECK_FUNCS(SSL_get_ech_status, - ECH_SUPPORT="ECH support available (OpenSSL with SSL_get_ech_status)" + AC_CHECK_FUNCS(SSL_ech_set1_echconfig, + ECH_SUPPORT="ECH support available via OpenSSL with SSL_ech_set1_echconfig" + ECH_ENABLED=1) + fi + dnl check for BoringSSL equivalent + if test "x$OPENSSL_ENABLED" = "x1"; then + AC_CHECK_FUNCS(SSL_set1_ech_config_list, + ECH_SUPPORT="ECH support available via BoringSSL with SSL_set1_ech_config_list" + ECH_ENABLED=1) + fi + if test "x$WOLFSSL_ENABLED" = "x1"; then + AC_CHECK_FUNCS(wolfSSL_CTX_GenerateEchConfig, + ECH_SUPPORT="ECH support available via wolfSSL with wolfSSL_CTX_GenerateEchConfig" ECH_ENABLED=1) - - dnl add 'elif' chain here for additional implementations fi dnl now deal with whatever we found if test "x$ECH_ENABLED" = "x1"; then + dnl force pre-requisites for ECH + AC_DEFINE(USE_HTTPSRR, 1, [force HTTPS RR support for ECH]) AC_DEFINE(USE_ECH, 1, [if ECH support is available]) AC_MSG_RESULT($ECH_SUPPORT) experimental="$experimental ECH" @@ -4637,12 +4677,20 @@ dnl to let curl-config output the static libraries correctly ENABLE_STATIC="$enable_static" AC_SUBST(ENABLE_STATIC) -dnl merge the pkg-config Libs.private field into Libs when static-only +squeeze LIBCURL_PC_REQUIRES_PRIVATE +LIBCURL_PC_REQUIRES_PRIVATE=`echo $LIBCURL_PC_REQUIRES_PRIVATE | tr ' ' ','` + +AC_SUBST(LIBCURL_PC_REQUIRES_PRIVATE) + +dnl Merge pkg-config private fields into public ones when static-only if test "x$enable_shared" = "xno"; then + LIBCURL_PC_REQUIRES=$LIBCURL_PC_REQUIRES_PRIVATE LIBCURL_NO_SHARED=$LIBCURL_LIBS else + LIBCURL_PC_REQUIRES= LIBCURL_NO_SHARED= fi +AC_SUBST(LIBCURL_PC_REQUIRES) AC_SUBST(LIBCURL_NO_SHARED) rm $compilersh @@ -4726,11 +4774,6 @@ if test "x$CURL_DISABLE_NTLM" != "x1"; then if test "x$use_curl_ntlm_core" = "xyes" \ -o "x$USE_WINDOWS_SSPI" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM" - - if test "x$CURL_DISABLE_HTTP" != "x1" -a \ - "x$NTLM_WB_ENABLED" = "x1"; then - SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM_WB" - fi fi fi @@ -4781,8 +4824,10 @@ else AC_MSG_RESULT([no]) fi -if test "x$ECH_ENABLED" = "x1"; then - SUPPORT_FEATURES="$SUPPORT_FEATURES ECH" +if test "x$OPENSSL_ENABLED" = "x1" -o -n "$SSL_ENABLED"; then + if test "x$ECH_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES ECH" + fi fi if test ${ac_cv_sizeof_curl_off_t} -gt 4; then @@ -4812,10 +4857,21 @@ else ]) fi +if test "x$want_debug" = "xyes"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES Debug" +fi +if test "x$want_curldebug" = "xyes"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES TrackMemory" +fi + dnl replace spaces with newlines dnl sort the lines dnl replace the newlines back to spaces -SUPPORT_FEATURES=`echo $SUPPORT_FEATURES | tr ' ' '\012' | sort | tr '\012' ' '` +if sort -f /dev/null 2>&1; then + SUPPORT_FEATURES=`echo $SUPPORT_FEATURES | tr ' ' '\012' | sort -f | tr '\012' ' '` +else + SUPPORT_FEATURES=`echo $SUPPORT_FEATURES | tr ' ' '\012' | sort | tr '\012' ' '` +fi AC_SUBST(SUPPORT_FEATURES) dnl For supported protocols in pkg-config file @@ -4948,7 +5004,6 @@ AC_CONFIG_FILES([Makefile \ lib/Makefile \ scripts/Makefile \ lib/libcurl.vers \ - lib/libcurl.plist \ tests/Makefile \ tests/config \ tests/certs/Makefile \ @@ -4969,12 +5024,15 @@ AC_OUTPUT CURL_GENERATE_CONFIGUREHELP_PM +SUPPORT_PROTOCOLS_LOWER=`echo "$SUPPORT_PROTOCOLS" | tr A-Z a-z` + AC_MSG_NOTICE([Configured to build curl/libcurl: Host setup: ${host} Install prefix: ${prefix} Compiler: ${CC} CFLAGS: ${CFLAGS} + CFLAGS extras: ${CURL_CFLAG_EXTRAS} CPPFLAGS: ${CPPFLAGS} LDFLAGS: ${LDFLAGS} LIBS: ${LIBS} @@ -5015,19 +5073,19 @@ AC_MSG_NOTICE([Configured to build curl/libcurl: HTTP3: ${curl_h3_msg} ECH: ${curl_ech_msg} WebSockets: ${curl_ws_msg} - Protocols: ${SUPPORT_PROTOCOLS} + Protocols: ${SUPPORT_PROTOCOLS_LOWER} Features: ${SUPPORT_FEATURES} ]) -non13=`echo "$TLSCHOICE" | grep -Ei 'bearssl|secure-transport|mbedtls'`; +non13=`echo "$TLSCHOICE" | $EGREP -io 'bearssl|secure-transport'`; if test -n "$non13"; then - cat >&2 << _EOF - WARNING: A selected TLS library ($TLSCHOICE) does not support TLS 1.3! -_EOF + for a in $non13; do + AC_MSG_WARN([$a is enabled for TLS but it does not support TLS 1.3]) + done fi if test -n "$experimental"; then - cat >&2 << _EOF - WARNING: $experimental enabled but marked EXPERIMENTAL. Use with caution! -_EOF + for a in $experimental; do + AC_MSG_WARN([$a is enabled but marked EXPERIMENTAL. Use with caution!]) + done fi diff --git a/curl-config.in b/curl-config.in index 54f92d931..5d40bc39f 100644 --- a/curl-config.in +++ b/curl-config.in @@ -1,4 +1,4 @@ -#! /bin/sh +#!/bin/sh #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | @@ -23,174 +23,173 @@ # ########################################################################### +# shellcheck disable=SC2006 + prefix="@prefix@" +# Used in @libdir@ +# shellcheck disable=SC2034 exec_prefix=@exec_prefix@ +# shellcheck disable=SC2034 includedir=@includedir@ cppflag_curl_staticlib=@CPPFLAG_CURL_STATICLIB@ usage() { - cat <&2 - exit 1 - fi - ;; - - --configure) - echo @CONFIGURE_OPTIONS@ - ;; - - *) - echo "unknown option: $1" - usage 1 - ;; - esac - shift + fi + fi + + echo "requested version $checkfor is newer than existing @CURLVERSION@" + exit 1 + ;; + + --vernum) + echo '@VERSIONNUM@' + exit 0 + ;; + + --help) + usage 0 + ;; + + --cflags) + if test "X$cppflag_curl_staticlib" = "X-DCURL_STATICLIB"; then + CPPFLAG_CURL_STATICLIB="-DCURL_STATICLIB " + else + CPPFLAG_CURL_STATICLIB="" + fi + if test "X@includedir@" = "X/usr/include"; then + echo "${CPPFLAG_CURL_STATICLIB}" + else + echo "${CPPFLAG_CURL_STATICLIB}-I@includedir@" + fi + ;; + + --libs) + if test "X@libdir@" != "X/usr/lib" -a "X@libdir@" != "X/usr/lib64"; then + CURLLIBDIR="-L@libdir@ " + else + CURLLIBDIR="" + fi + if test "X@ENABLE_SHARED@" = "Xno"; then + echo "${CURLLIBDIR}-lcurl @LIBCURL_LIBS@" + else + echo "${CURLLIBDIR}-lcurl" + fi + ;; + + --ssl-backends) + echo '@SSL_BACKENDS@' + ;; + + --static-libs) + if test "X@ENABLE_STATIC@" != "Xno" ; then + echo "@libdir@/libcurl.@libext@" @LDFLAGS@ @LIBCURL_LIBS@ + else + echo 'curl was built with static libraries disabled' >&2 + exit 1 + fi + ;; + + --configure) + echo @CONFIGURE_OPTIONS@ + ;; + + *) + echo "unknown option: $1" + usage 1 + ;; + esac + shift done exit 0 diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index a087be744..000000000 --- a/docs/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -*.1 -*.3 diff --git a/docs/ALTSVC.md b/docs/ALTSVC.md index 92343aee4..4b5bcffcc 100644 --- a/docs/ALTSVC.md +++ b/docs/ALTSVC.md @@ -1,3 +1,9 @@ + + # Alt-Svc curl features support for the Alt-Svc: HTTP header. diff --git a/docs/BINDINGS.md b/docs/BINDINGS.md index 060586fde..970df396c 100644 --- a/docs/BINDINGS.md +++ b/docs/BINDINGS.md @@ -1,3 +1,9 @@ + + libcurl bindings ================ @@ -57,7 +63,7 @@ Go: [go-curl](https://github.com/andelf/go-curl) by ShuYu Wang [Hollywood](https://www.hollywood-mal.com/download.html) hURL by Andreas Falkenhahn -[Java](https://github.com/pjlegato/curl-java) +[Java](https://github.com/covers1624/curl4j) [Julia](https://github.com/JuliaWeb/LibCURL.jl) Written by Amit Murthy diff --git a/docs/BUFQ.md b/docs/BUFQ.md index 26cfccf49..60843819e 100644 --- a/docs/BUFQ.md +++ b/docs/BUFQ.md @@ -1,3 +1,9 @@ + + # bufq This is an internal module for managing I/O buffers. A `bufq` can be written diff --git a/docs/BUFREF.md b/docs/BUFREF.md index 9ee8fdbbe..9a8b506b5 100644 --- a/docs/BUFREF.md +++ b/docs/BUFREF.md @@ -1,3 +1,9 @@ + + # bufref This is an internal module for handling buffer references. A referenced diff --git a/docs/BUG-BOUNTY.md b/docs/BUG-BOUNTY.md index 3cb4024a3..399c4cfe1 100644 --- a/docs/BUG-BOUNTY.md +++ b/docs/BUG-BOUNTY.md @@ -1,3 +1,9 @@ + + # The curl bug bounty The curl project runs a bug bounty program in association with @@ -61,6 +67,13 @@ infrastructure. The curl security team is the sole arbiter if a reported flaw is subject to a bounty or not. +## Third parties + +The curl bug bounty does not cover flaws in third party dependencies +(libraries) used by curl or libcurl. If the bug triggers because of curl +behaving wrongly or abusing a third party dependency, the problem is rather in +curl and not in the dependency and then the bounty might cover the problem. + ## How are vulnerabilities graded? The grading of each reported vulnerability that makes a reward claim is diff --git a/docs/BUGS.md b/docs/BUGS.md index 9a3a30add..8a3ef82e9 100644 --- a/docs/BUGS.md +++ b/docs/BUGS.md @@ -1,3 +1,9 @@ + + # BUGS ## There are still bugs diff --git a/docs/CHECKSRC.md b/docs/CHECKSRC.md index fc5004535..16eb96c75 100644 --- a/docs/CHECKSRC.md +++ b/docs/CHECKSRC.md @@ -1,3 +1,9 @@ + + # checksrc This is the tool we use within the curl project to scan C source code and diff --git a/docs/CIPHERS.md b/docs/CIPHERS.md index 1fb854058..607810c04 100644 --- a/docs/CIPHERS.md +++ b/docs/CIPHERS.md @@ -1,3 +1,9 @@ + + # Ciphers With curl's options @@ -19,7 +25,7 @@ libcurl was built to use. This is an attempt to list known cipher names. ## OpenSSL -(based on [OpenSSL docs](https://www.openssl.org/docs/manmaster/man1/openssl-ciphers.html)) +(based on [OpenSSL docs](https://docs.openssl.org/master/man1/openssl-ciphers/)) When specifying multiple cipher names, separate them with colon (`:`). @@ -165,7 +171,7 @@ When specifying multiple cipher names, separate them with colon (`:`). `TLS_AES_128_CCM_8_SHA256` `TLS_AES_128_CCM_SHA256` -## WolfSSL +## wolfSSL `RC4-SHA`, `RC4-MD5`, diff --git a/docs/CLIENT-READERS.md b/docs/CLIENT-READERS.md index dec35b328..073063845 100644 --- a/docs/CLIENT-READERS.md +++ b/docs/CLIENT-READERS.md @@ -1,3 +1,9 @@ + + # curl client readers Client readers is a design in the internals of libcurl, not visible in its public API. They were started @@ -117,7 +123,7 @@ Readers operating on callbacks to the application need to "rewind" the underlyin ## Summary and Outlook -By adding the client reader interface, any protocol can control how/if it wants the curl transfer to send bytes for a request. The transfer loop becomes then blissfully ignorant of the specifics. +By adding the client reader interface, any protocol can control how/if it wants the curl transfer to send bytes for a request. The transfer loop becomes then blissfully ignorant of the specifics. The protocols on the other hand no longer have to care to package data most efficiently. At any time, should more data be needed, it can be read from the client. This is used when sending HTTP requests headers to add as much request body data to the initial sending as there is room for. diff --git a/docs/CLIENT-WRITERS.md b/docs/CLIENT-WRITERS.md index 47e802f12..9f7197d22 100644 --- a/docs/CLIENT-WRITERS.md +++ b/docs/CLIENT-WRITERS.md @@ -1,3 +1,9 @@ + + # curl client writers Client writers is a design in the internals of libcurl, not visible in its public API. They were started diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt index 9c0b37691..9fd494408 100644 --- a/docs/CMakeLists.txt +++ b/docs/CMakeLists.txt @@ -21,10 +21,26 @@ # SPDX-License-Identifier: curl # ########################################################################### -#add_subdirectory(examples) + if(BUILD_LIBCURL_DOCS) add_subdirectory(libcurl) endif() if(ENABLE_CURL_MANUAL AND BUILD_CURL_EXE) add_subdirectory(cmdline-opts) endif() + +if(BUILD_MISC_DOCS) + foreach(_man_misc IN ITEMS "curl-config" "mk-ca-bundle") + set(_man_target "${CURL_BINARY_DIR}/docs/${_man_misc}.1") + add_custom_command(OUTPUT "${_man_target}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND "${PERL_EXECUTABLE}" ${PROJECT_SOURCE_DIR}/scripts/cd2nroff "${_man_misc}.md" > "${_man_target}" + DEPENDS "${_man_misc}.md" + VERBATIM + ) + add_custom_target("curl-generate-${_man_misc}.1" ALL DEPENDS "${_man_target}") + if(NOT CURL_DISABLE_INSTALL) + install(FILES "${_man_target}" DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) + endif() + endforeach() +endif() diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md index 1f71c387b..5c8878189 100644 --- a/docs/CODE_OF_CONDUCT.md +++ b/docs/CODE_OF_CONDUCT.md @@ -1,3 +1,9 @@ + + Contributor Code of Conduct =========================== diff --git a/docs/CODE_REVIEW.md b/docs/CODE_REVIEW.md index 0776d30a0..bee26a3f3 100644 --- a/docs/CODE_REVIEW.md +++ b/docs/CODE_REVIEW.md @@ -1,3 +1,9 @@ + + # How to do code reviews for curl Anyone and everyone is encouraged and welcome to review code submissions in @@ -135,13 +141,13 @@ data. Where it comes from and where it goes. `size_t` is not a fixed size. `time_t` can be signed or unsigned and have different sizes. Relying on variable sizes is a red flag. -Also remember that endianness and >= 32 bit accesses to unaligned addresses +Also remember that endianness and >= 32-bit accesses to unaligned addresses are problematic areas. ## Integer overflows -Be careful about integer overflows. Some variable types can be either 32 bit -or 64 bit. Integer overflows must be detected and acted on *before* they +Be careful about integer overflows. Some variable types can be either 32-bit +or 64-bit. Integer overflows must be detected and acted on *before* they happen. ## Dangerous use of functions diff --git a/docs/CODE_STYLE.md b/docs/CODE_STYLE.md index 970a3b0ae..7b2b60251 100644 --- a/docs/CODE_STYLE.md +++ b/docs/CODE_STYLE.md @@ -1,3 +1,9 @@ + + # curl C code style Source code that has a common style is easier to read than code that uses diff --git a/docs/CONNECTION-FILTERS.md b/docs/CONNECTION-FILTERS.md index 95b6d50d7..629e769b9 100644 --- a/docs/CONNECTION-FILTERS.md +++ b/docs/CONNECTION-FILTERS.md @@ -1,3 +1,9 @@ + + # curl connection filters Connection filters is a design in the internals of curl, not visible in its @@ -265,7 +271,7 @@ conn[curl.se] --> SETUP[TCP] --> HAPPY-EYEBALLS --> TCP[2a04:4e42:c00::347]:443 * transfer ``` -The modular design of connection filters and that we can plug them into each other is used to control the parallel attempts. When a `TCP` filter does not connect (in time), it is torn down and another one is created for the next address. This keeps the `TCP` filter simple. +The modular design of connection filters and that we can plug them into each other is used to control the parallel attempts. When a `TCP` filter does not connect (in time), it is torn down and another one is created for the next address. This keeps the `TCP` filter simple. The `HAPPY-EYEBALLS` on the other hand stays focused on its side of the problem. We can use it also to make other type of connection by just giving it another filter type to try to have happy eyeballing for QUIC: diff --git a/docs/CONTRIBUTE.md b/docs/CONTRIBUTE.md index 6288dac90..156ea0bef 100644 --- a/docs/CONTRIBUTE.md +++ b/docs/CONTRIBUTE.md @@ -1,3 +1,9 @@ + + # Contributing to the curl project This document is intended to offer guidelines on how to best contribute to the @@ -310,8 +316,8 @@ fine. This means that all files need to have their license and copyright information clearly stated. Ideally by having the standard curl source code header, with the SPDX-License-Identifier included. If the header does not work, you can use a -smaller header or add the information for a specific file to the `.reuse/dep5` +smaller header or add the information for a specific file to the `REUSE.toml` file. You can manually verify the copyright and compliance status by running the -`./scripts/copyright.pl` script in the root of the git repository. +[REUSE helper tool](https://github.com/fsfe/reuse-tool): `reuse lint` diff --git a/docs/CURL-DISABLE.md b/docs/CURL-DISABLE.md index 7978ed212..3409bec01 100644 --- a/docs/CURL-DISABLE.md +++ b/docs/CURL-DISABLE.md @@ -1,3 +1,9 @@ + + # Code defines to disable features and protocols ## `CURL_DISABLE_ALTSVC` diff --git a/docs/CURLDOWN.md b/docs/CURLDOWN.md index 8ee2f3ce4..18c1cbc3c 100644 --- a/docs/CURLDOWN.md +++ b/docs/CURLDOWN.md @@ -1,3 +1,9 @@ + + # curldown A markdown-like syntax for libcurl man pages. @@ -74,6 +80,7 @@ Each curldown starts with a header with meta-data: - CURLOPT_HTTPAUTH (3) TLS-backend: - [name] + Added-in: [version or "n/a"] --- All curldown files *must* have all the headers present and at least one @@ -91,7 +98,7 @@ option. The available TLS backends are: - `BearSSL` - `GnuTLS` - `mbedTLS` -- `OpenSSL` (also covers BoringSSL, libressl, quictls, AWS-LC and AmiSSL) +- `OpenSSL` (also covers BoringSSL, LibreSSL, quictls, AWS-LC and AmiSSL) - `rustls` - `Schannel` - `Secure Transport` @@ -141,7 +148,15 @@ readable. To make sure curldown documents render correctly as markdown, all literal occurrences of `<` or `>` need to be escaped by a leading backslash. -## symbols +## Generating contents + +`# %PROTOCOLS%` - inserts a **PROTOCOLS** section based on the metadata +provided in the header. + +`# %AVAILABILITY%` - inserts an **AVAILABILITY** section based on the metadata +provided in the header. + +## Symbols All mentioned curl symbols that have their own man pages, like `curl_easy_perform(3)` are automatically rendered using italics in the output diff --git a/docs/DEPRECATE.md b/docs/DEPRECATE.md index 6b6b5b46b..6ad931723 100644 --- a/docs/DEPRECATE.md +++ b/docs/DEPRECATE.md @@ -1,3 +1,9 @@ + + # Items to be removed from future curl releases If any of these deprecated features is a cause for concern for you, please @@ -6,47 +12,26 @@ 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. -## NTLM_WB auth - -This NTLM authentication method is powered by a separate tool, -`ntlm_auth`. Barely anyone uses this method. It was always a quirky -implementation (including fork + exec), it has limited portability and we do -not test it in the test suite and CI. - -We keep the native NTLM implementation. - -Due to a mistake, the `NTLM_WB` functionality is missing in builds since 8.4.0 -(October 2023). It needs to be manually patched to work. See [PR -12479](https://github.com/curl/curl/pull/12479). - -curl removes the support for NTLM_WB auth in April 2024. - -## space-separated `NOPROXY` patterns - -When specifying patterns/domain names for curl that should *not* go through a -proxy, the curl tool features the `--noproxy` command line option and the -library supports the `NO_PROXY` environment variable and the `CURLOPT_NOPROXY` -libcurl option. +## TLS libraries without 1.3 support -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. +curl drops support for TLS libraries without TLS 1.3 capability after May +2025. -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. +It requires that a curl build using the library should be able to negotiate +and use TLS 1.3, or else it is not good enough. -curl removes the support for space-separated names in July 2024. +As of May 2024, the libraries that need to get fixed to remain supported after +May 2025 are: BearSSL and Secure Transport. -## past removals +## Past removals - Pipelining - axTLS - PolarSSL - NPN - - Support for systems without 64 bit data types + - Support for systems without 64-bit data types - NSS - gskit - mingw v1 + - NTLM_WB + - space-separated `NOPROXY` patterns diff --git a/docs/DISTROS.md b/docs/DISTROS.md index 09e588c4f..c3ae64c81 100644 --- a/docs/DISTROS.md +++ b/docs/DISTROS.md @@ -1,17 +1,25 @@ + + # curl distros Lots of organizations distribute curl packages to end users. This is a collection of pointers to where to learn more about curl on and with each -distro. +distro. Those marked *Rolling Release* typically run the latest version of curl +and are therefore less likely to have back-ported patches to older versions. We discuss curl distro issues, patches and collaboration on the [curl-distros -mailing list](https://lists.haxx.se/listinfo/curl-distros). +mailing list](https://lists.haxx.se/listinfo/curl-distros) ([list +archives](https://curl.se/mail/list.cgi?list=curl-distros)). ## AlmaLinux -- curl package source and patches: curl package source and patches +- curl package source and patches: https://git.almalinux.org/rpms/curl/ - curl issues: https://bugs.almalinux.org/view_all_bug_page.php click Category and choose curl - curl security: https://errata.almalinux.org/ search for curl @@ -30,6 +38,8 @@ mailing list](https://lists.haxx.se/listinfo/curl-distros). ## Arch Linux +*Rolling Release* + - curl: https://archlinux.org/packages/core/x86_64/curl/ - curl issues: https://gitlab.archlinux.org/archlinux/packaging/packages/curl/-/issues - curl security: https://security.archlinux.org/package/curl @@ -37,6 +47,8 @@ mailing list](https://lists.haxx.se/listinfo/curl-distros). ## Buildroot +*Rolling Release* + - curl package source and patches: https://git.buildroot.net/buildroot/tree/package/libcurl - curl issues: https://bugs.buildroot.org/buglist.cgi?quicksearch=curl @@ -46,6 +58,8 @@ mailing list](https://lists.haxx.se/listinfo/curl-distros). ## Clear Linux +*Rolling Release* + - curl: https://github.com/clearlinux-pkgs/curl - curl issues: https://github.com/clearlinux/distribution/issues @@ -69,7 +83,11 @@ mailing list](https://lists.haxx.se/listinfo/curl-distros). (this is the official curl binaries for Windows shipped by the curl project) +*Rolling Release* + - curl: https://curl.se/windows/ +- curl patches: https://github.com/curl/curl-for-win/blob/main/curl.patch (if any) +- build-specific issues: https://github.com/curl/curl-for-win/issues Issues and patches for this are managed in the main curl project. @@ -77,6 +95,13 @@ Issues and patches for this are managed in the main curl project. - curl: https://cygwin.com/cgit/cygwin-packages/curl/tree/curl.cygport - curl patches: https://cygwin.com/cgit/cygwin-packages/curl/tree +- curl issues: https://inbox.sourceware.org/cygwin/?q=s%3Acurl + +## Cygwin (cross mingw64) + +- mingw64-x86_64-curl: https://cygwin.com/cgit/cygwin-packages/mingw64-x86_64-curl/tree/mingw64-x86_64-curl.cygport +- mingw64-x86_64-curl patches: https://cygwin.com/cgit/cygwin-packages/mingw64-x86_64-curl/tree +- mingw64-x86_64-curl issues: https://inbox.sourceware.org/cygwin/?q=s%3Amingw64-x86_64-curl ## Debian @@ -99,17 +124,23 @@ Issues and patches for this are managed in the main curl project. ## Gentoo Linux +*Rolling Release* + - curl: https://packages.gentoo.org/packages/net-misc/curl - curl issues: https://bugs.gentoo.org/buglist.cgi?quicksearch=net-misc/curl - curl package sources and patches: https://gitweb.gentoo.org/repo/gentoo.git/tree/net-misc/curl/ ## GNU Guix +*Rolling Release* + - curl: https://git.savannah.gnu.org/gitweb/?p=guix.git;a=blob;f=gnu/packages/curl.scm;hb=HEAD - curl issues: https://issues.guix.gnu.org/search?query=curl ## Homebrew +*Rolling Release* + - curl: https://formulae.brew.sh/formula/curl Homebrew's policy is that all patches and issues should be submitted upstream @@ -117,6 +148,8 @@ unless it is very specific to Homebrew's way of packaging software. ## MacPorts +*Rolling Release* + - curl: https://github.com/macports/macports-ports/tree/master/net/curl - curl issues: https://trac.macports.org/query?0_port=curl&0_port_mode=%7E&0_status=%21closed - curl patches: https://github.com/macports/macports-ports/tree/master/net/curl/files @@ -131,12 +164,24 @@ unless it is very specific to Homebrew's way of packaging software. ## MSYS2 +*Rolling Release* + +- curl: https://github.com/msys2/MSYS2-packages/tree/master/curl +- curl issues: https://github.com/msys2/MSYS2-packages/issues +- curl patches: https://github.com/msys2/MSYS2-packages/tree/master/curl (`*.patch`) + +## MSYS2 (mingw-w64) + +*Rolling Release* + - curl: https://github.com/msys2/MINGW-packages/tree/master/mingw-w64-curl - curl issues: https://github.com/msys2/MINGW-packages/issues - curl patches: https://github.com/msys2/MINGW-packages/tree/master/mingw-w64-curl (`*.patch`) ## Muldersoft +*Rolling Release* + - curl: https://github.com/lordmulder/cURL-build-win32 - curl issues: https://github.com/lordmulder/cURL-build-win32/issues - curl patches: https://github.com/lordmulder/cURL-build-win32/tree/master/patch @@ -173,6 +218,8 @@ can also be used on other distributions ## OpenEmbedded / Yocto Project +*Rolling Release* + - curl: https://layers.openembedded.org/layerindex/recipe/5765/ - curl issues: https://bugzilla.yoctoproject.org/ - curl patches: https://git.openembedded.org/openembedded-core/tree/meta/recipes-support/curl @@ -218,16 +265,22 @@ can also be used on other distributions ## vcpkg +*Rolling Release* + - curl: https://github.com/microsoft/vcpkg/tree/master/ports/curl - curl issues: https://github.com/microsoft/vcpkg/issues - curl patches: https://github.com/microsoft/vcpkg/tree/master/ports/curl (`*.patch`) ## Void Linux +*Rolling Release* + - curl: https://github.com/void-linux/void-packages/tree/master/srcpkgs/curl - curl issues: https://github.com/void-linux/void-packages/issues - curl patches: https://github.com/void-linux/void-packages/tree/master/srcpkgs/curl/patches ## Wolfi +*Rolling Release* + - curl: https://github.com/wolfi-dev/os/blob/main/curl.yaml diff --git a/docs/DYNBUF.md b/docs/DYNBUF.md index 3f63ec7e4..01fe332ab 100644 --- a/docs/DYNBUF.md +++ b/docs/DYNBUF.md @@ -1,3 +1,9 @@ + + # dynbuf This is the internal module for creating and handling "dynamic buffers". This diff --git a/docs/EARLY-RELEASE.md b/docs/EARLY-RELEASE.md index 3e9a679ac..e66dbbd44 100644 --- a/docs/EARLY-RELEASE.md +++ b/docs/EARLY-RELEASE.md @@ -1,3 +1,9 @@ + + # 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 diff --git a/docs/ECH.md b/docs/ECH.md new file mode 100644 index 000000000..9c7cbf15f --- /dev/null +++ b/docs/ECH.md @@ -0,0 +1,478 @@ + + +# Building curl with HTTPS-RR and ECH support + +We have added support for ECH to curl. It can use HTTPS RRs published in the +DNS if curl uses DoH, or else can accept the relevant ECHConfigList values +from the command line. This works with OpenSSL, wolfSSL or BoringSSL as the +TLS provider. + +This feature is EXPERIMENTAL. DO NOT USE IN PRODUCTION. + +This should however provide enough of a proof-of-concept to prompt an informed +discussion about a good path forward for ECH support in curl. + +## OpenSSL Build + +To build our ECH-enabled OpenSSL fork: + +```bash + cd $HOME/code + git clone https://github.com/defo-project/openssl + cd openssl + ./config --libdir=lib --prefix=$HOME/code/openssl-local-inst + ...stuff... + make -j8 + ...stuff (maybe go for coffee)... + make install_sw + ...a little bit of stuff... +``` + +To build curl ECH-enabled, making use of the above: + +```bash + cd $HOME/code + git clone https://github.com/curl/curl + cd curl + autoreconf -fi + LDFLAGS="-Wl,-rpath,$HOME/code/openssl-local-inst/lib/" ./configure --with-ssl=$HOME/code/openssl-local-inst --enable-ech --enable-httpsrr + ...lots of output... + WARNING: ECH HTTPSRR enabled but marked EXPERIMENTAL... + make + ...lots more output... +``` + +If you do not get that WARNING at the end of the ``configure`` command, then +ECH is not enabled, so go back some steps and re-do whatever needs re-doing:-) +If you want to debug curl then you should add ``--enable-debug`` to the +``configure`` command. + +In a recent (2024-05-20) build on one machine, configure failed to find the +ECH-enabled SSL library, apparently due to the existence of +``$HOME/code/openssl-local-inst/lib/pkgconfig`` as a directory containing +various settings. Deleting that directory worked around the problem but may +not be the best solution. + +## Using ECH and DoH + +Curl supports using DoH for A/AAAA lookups so it was relatively easy to add +retrieval of HTTPS RRs in that situation. To use ECH and DoH together: + +```bash + cd $HOME/code/curl + LD_LIBRARY_PATH=$HOME/code/openssl ./src/curl --ech true --doh-url https://one.one.one.one/dns-query https://defo.ie/ech-check.php + ... + SSL_ECH_STATUS: success good
+ ... +``` + +The output snippet above is within the HTML for the webpage, when things work. + +The above works for these test sites: + +```bash + https://defo.ie/ech-check.php + https://draft-13.esni.defo.ie:8413/stats + https://draft-13.esni.defo.ie:8414/stats + https://crypto.cloudflare.com/cdn-cgi/trace + https://tls-ech.dev +``` + +The list above has 4 different server technologies, implemented by 3 different +parties, and includes a case (the port 8414 server) where HelloRetryRequest +(HRR) is forced. + +We currently support the following new curl command line arguments/options: + +- ``--ech `` - the ``config`` value can be one of: + - ``false`` says to not attempt ECH + - ``true`` says to attempt ECH, if possible + - ``grease`` if attempting ECH is not possible, then send a GREASE ECH extension + - ``hard`` hard-fail the connection if ECH cannot be attempted + - ``ecl:`` a base64 encoded ECHConfigList, rather than one accessed from the DNS + - ``pn:`` over-ride the ``public_name`` from an ECHConfigList + +Note that in the above "attempt ECH" means the client emitting a TLS +ClientHello with a "real" ECH extension, but that does not mean that the +relevant server can succeed in decrypting, as things can fail for other +reasons. + +## Supplying an ECHConfigList on the command line + +To supply the ECHConfigList on the command line, you might need a bit of +cut-and-paste, e.g.: + +```bash + dig +short https defo.ie + 1 . ipv4hint=213.108.108.101 ech=AED+DQA8PAAgACD8WhlS7VwEt5bf3lekhHvXrQBGDrZh03n/LsNtAodbUAAEAAEAAQANY292ZXIuZGVmby5pZQAA ipv6hint=2a00:c6c0:0:116:5::10 +``` + +Then paste the base64 encoded ECHConfigList onto the curl command line: + +```bash + LD_LIBRARY_PATH=$HOME/code/openssl ./src/curl --ech ecl:AED+DQA8PAAgACD8WhlS7VwEt5bf3lekhHvXrQBGDrZh03n/LsNtAodbUAAEAAEAAQANY292ZXIuZGVmby5pZQAA https://defo.ie/ech-check.php + ... + SSL_ECH_STATUS: success good
+ ... +``` + +The output snippet above is within the HTML for the webpage. + +If you paste in the wrong ECHConfigList (it changes hourly for ``defo.ie``) you +should get an error like this: + +```bash + LD_LIBRARY_PATH=$HOME/code/openssl ./src/curl -vvv --ech ecl:AED+DQA8yAAgACDRMQo+qYNsNRNj+vfuQfFIkrrUFmM4vogucxKj/4nzYgAEAAEAAQANY292ZXIuZGVmby5pZQAA https://defo.ie/ech-check.php + ... + * OpenSSL/3.3.0: error:0A00054B:SSL routines::ech required + ... +``` + +There is a reason to want this command line option - for use before publishing +an ECHConfigList in the DNS as per the Internet-draft [A well-known URI for +publishing ECHConfigList values](https://datatracker.ietf.org/doc/draft-ietf-tls-wkech/). + +If you do use a wrong ECHConfigList value, then the server might return a +good value, via the ``retry_configs`` mechanism. You can see that value in +the verbose output, e.g.: + +```bash + LD_LIBRARY_PATH=$HOME/code/openssl ./src/curl -vvv --ech ecl:AED+DQA8yAAgACDRMQo+qYNsNRNj+vfuQfFIkrrUFmM4vogucxKj/4nzYgAEAAEAAQANY292ZXIuZGVmby5pZQAA https://defo.ie/ech-check.php + ... +* ECH: retry_configs AQD+DQA8DAAgACBvYqJy+Hgk33wh/ZLBzKSPgwxeop7gvojQzfASq7zeZQAEAAEAAQANY292ZXIuZGVmby5pZQAA/g0APEMAIAAgXkT5r4cYs8z19q5rdittyIX8gfQ3ENW4wj1fVoiJZBoABAABAAEADWNvdmVyLmRlZm8uaWUAAP4NADw2ACAAINXSE9EdXzEQIJZA7vpwCIQsWqsFohZARXChgPsnfI1kAAQAAQABAA1jb3Zlci5kZWZvLmllAAD+DQA8cQAgACASeiD5F+UoSnVoHvA2l1EifUVMFtbVZ76xwDqmMPraHQAEAAEAAQANY292ZXIuZGVmby5pZQAA +* ECH: retry_configs for defo.ie from cover.defo.ie, 319 + ... +``` + +At that point, you could copy the base64 encoded value above and try again. +For now, this only works for the OpenSSL and BoringSSL builds. + +## Default settings + +Curl has various ways to configure default settings, e.g. in ``$HOME/.curlrc``, +so one can set the DoH URL and enable ECH that way: + +```bash + cat ~/.curlrc + doh-url=https://one.one.one.one/dns-query + silent + ech=true +``` + +Note that when you use the system's curl command (rather than our ECH-enabled +build), it is liable to warn that ``ech`` is an unknown option. If that is an +issue (e.g. if some script re-directs stdout and stderr somewhere) then adding +the ``silent`` line above seems to be a good enough fix. (Though of +course, yet another script could depend on non-silent behavior, so you may have +to figure out what you prefer yourself.) That seems to have changed with the +latest build, previously ``silent=TRUE`` was what I used in ``~/.curlrc`` but +now that seems to cause a problem, so that the following line(s) are ignored. + +If you want to always use our OpenSSL build you can set ``LD_LIBRARY_PATH`` +in the environment: + +```bash + export LD_LIBRARY_PATH=$HOME/code/openssl +``` + +When you do the above, there can be a mismatch between OpenSSL versions +for applications that check that. A ``git push`` for example fails so you +should unset ``LD_LIBRARY_PATH`` before doing that or use a different shell. + +```bash + git push + OpenSSL version mismatch. Built against 30000080, you have 30200000 + ... +``` + +With all that setup as above the command line gets simpler: + +```bash + ./src/curl https://defo.ie/ech-check.php + ... + SSL_ECH_STATUS: success good
+ ... +``` + +The ``--ech true`` option is opportunistic, so tries to do ECH but does not fail if +the client for example cannot find any ECHConfig values. The ``--ech hard`` +option hard-fails if there is no ECHConfig found in DNS, so for now, that is not +a good option to set as a default. Once ECH has really been attempted by +the client, if decryption on the server side fails, then curl fails. + +## Code changes for ECH support when using DoH + +Code changes are ``#ifdef`` protected via ``USE_ECH`` or ``USE_HTTPSRR``: + +- ``USE_HTTPSRR`` is used for HTTPS RR retrieval code that could be generically + used should non-ECH uses for HTTPS RRs be identified, e.g. use of ALPN values +or IP address hints. + +- ``USE_ECH`` protects ECH specific code. + +There are various obvious code blocks for handling the new command line +arguments which are not described here, but should be fairly clear. + +As shown in the ``configure`` usage above, there are ``configure.ac`` changes +that allow separately dis/enabling ``USE_HTTPSRR`` and ``USE_ECH``. If ``USE_ECH`` +is enabled, then ``USE_HTTPSRR`` is forced. In both cases ``USE_DOH`` +is required. (There may be some configuration conflicts available for the +determined:-) + +The main functional change, as you would expect, is in ``lib/vtls/openssl.c`` +where an ECHConfig, if available from command line or DNS cache, is fed into +the OpenSSL library via the new APIs implemented in our OpenSSL fork for that +purpose. This code also implements the opportunistic (``--ech true``) or hard-fail +(``--ech hard``) logic. + +Other than that, the main additions are in ``lib/doh.c`` +where we re-use ``dohprobe()`` to retrieve an HTTPS RR value for the target +domain. If such a value is found, that is stored using a new ``store_https()`` +function in a new field in the ``dohentry`` structure. + +The qname for the DoH query is modified if the port number is not 443, as +defined in the SVCB specification. + +When the DoH process has worked, ``Curl_doh_is_resolved()`` now also returns +the relevant HTTPS RR value data in the ``Curl_dns_entry`` structure. +That is later accessed when the TLS session is being established, if ECH is +enabled (from ``lib/vtls/openssl.c`` as described above). + +## Limitations + +Things that need fixing, but that can probably be ignored for the +moment: + +- We could easily add code to make use of an ``alpn=`` value found in an HTTPS + RR, passing that on to OpenSSL for use as the "inner" ALPN value, but have +yet to do that. + +Current limitations (more interesting than the above): + +- Only the first HTTPS RR value retrieved is actually processed as described + above, that could be extended in future, though picking the "right" HTTPS RR +could be non-trivial if multiple RRs are published - matching IP address hints +versus A/AAAA values might be a good basis for that. Last I checked though, +browsers supporting ECH did not handle multiple HTTPS RRs well, though that +needs re-checking as it has been a while. + +- It is unclear how one should handle any IP address hints found in an HTTPS RR. + It may be that a bit of consideration of how "multi-CDN" deployments might +emerge would provide good answers there, but for now, it is not clear how best +curl might handle those values when present in the DNS. + +- The SVCB/HTTPS RR specification supports a new "CNAME at apex" indirection + ("aliasMode") - the current code takes no account of that at all. One could +envisage implementing the equivalent of following CNAMEs in such cases, but +it is not clear if that'd be a good plan. (As of now, chrome browsers do not seem +to have any support for that "aliasMode" and we have not checked Firefox for that +recently.) + +- We have not investigated what related changes or additions might be needed + for applications using libcurl, as opposed to use of curl as a command line +tool. + +- We have not yet implemented tests as part of the usual curl test harness as +doing so would seem to require re-implementing an ECH-enabled server as part +of the curl test harness. For now, we have a ``./tests/ech_test.sh`` script +that attempts ECH with various test servers and with many combinations of the +allowed command line options. While that is a useful test and has find issues, +it is not comprehensive and we are not (as yet) sure what would be the right +level of coverage. When running that script you should not have a +``$HOME/.curlrc`` file that affects ECH or some of the negative tests could +produce spurious failures. + +## Building with cmake + +To build with cmake, assuming our ECH-enabled OpenSSL is as before: + +```bash + cd $HOME/code + git clone https://github.com/curl/curl + cd curl + mkdir build + cd build + cmake -DOPENSSL_ROOT_DIR=$HOME/code/openssl -DUSE_ECH=1 -DUSE_HTTPSRR=1 .. + ... + make + ... + [100%] Built target curl +``` + +The binary produced by the cmake build does not need any ECH-specific +``LD_LIBRARY_PATH`` setting. + +## BoringSSL build + +BoringSSL is also supported by curl and also supports ECH, so to build +with that, instead of our ECH-enabled OpenSSL: + +```bash + cd $HOME/code + git clone https://boringssl.googlesource.com/boringssl + cd boringssl + cmake -DCMAKE_INSTALL_PREFIX:PATH=$HOME/code/boringssl/inst -DBUILD_SHARED_LIBS=1 + make + ... + make install +``` + +Then: + +```bash + cd $HOME/code + git clone https://github.com/curl/curl + cd curl + autoreconf -fi + LDFLAGS="-Wl,-rpath,$HOME/code/boringssl/inst/lib" ./configure --with-ssl=$HOME/code/boringssl/inst --enable-ech --enable-httpsrr + ...lots of output... + WARNING: ECH HTTPSRR enabled but marked EXPERIMENTAL. Use with caution! + make +``` + +The BoringSSL APIs are fairly similar to those in our ECH-enabled OpenSSL +fork, so code changes are also in ``lib/vtls/openssl.c``, protected +via ``#ifdef OPENSSL_IS_BORINGSSL`` and are mostly obvious API variations. + +The BoringSSL APIs however do not support the ``--ech pn:`` command line +variant as of now. + +## wolfSSL build + +wolfSSL also supports ECH and can be used by curl, so here's how: + +```bash + cd $HOME/code + git clone https://github.com/wolfSSL/wolfssl + cd wolfssl + ./autogen.sh + ./configure --prefix=$HOME/code/wolfssl/inst --enable-ech --enable-debug --enable-opensslextra + make + make install +``` + +The install prefix (``inst``) in the above causes wolfSSL to be installed there +and we seem to need that for the curl configure command to work out. The +``--enable-opensslextra`` turns out (after much faffing about;-) to be +important or else we get build problems with curl below. + +```bash + cd $HOME/code + git clone https://github.com/curl/curl + cd curl + autoreconf -fi + ./configure --with-wolfssl=$HOME/code/wolfssl/inst --enable-ech --enable-httpsrr + make +``` + +There are some known issues with the ECH implementation in wolfSSL: + +- The main issue is that the client currently handles HelloRetryRequest + incorrectly. [HRR issue](https://github.com/wolfSSL/wolfssl/issues/6802).) + The HRR issue means that the client does not work for + [this ECH test web site](https://tls-ech.dev) and any other similarly configured + sites. +- There is also an issue related to so-called middlebox compatibility mode. + [middlebox compatibility issue](https://github.com/wolfSSL/wolfssl/issues/6774) + +### Code changes to support wolfSSL + +There are what seem like oddball differences: + +- The DoH URL in``$HOME/.curlrc`` can use `1.1.1.1` for OpenSSL but has to be + `one.one.one.one` for wolfSSL. The latter works for both, so OK, we us that. +- There seems to be some difference in CA databases too - the wolfSSL version + does not like ``defo.ie``, whereas the system and OpenSSL ones do. We can + ignore that for our purposes via ``--insecure``/``-k`` but would need to fix + for a real setup. (Browsers do like those certificates though.) + +Then there are some functional code changes: + +- tweak to ``configure.ac`` to check if wolfSSL has ECH or not +- added code to ``lib/vtls/wolfssl.c`` mirroring what's done in the + OpenSSL equivalent above. +- wolfSSL does not support ``--ech false`` or the ``--ech pn:`` command line + argument. + +The lack of support for ``--ech false`` is because wolfSSL has decided to +always at least GREASE if built to support ECH. In other words, GREASE is +a compile time choice for wolfSSL, but a runtime choice for OpenSSL or +BoringSSL. (Both are reasonable.) + +## Additional notes + +### Supporting ECH without DoH + +All of the above only applies if DoH is being used. There should be a use-case +for ECH when DoH is not used by curl - if a system stub resolver supports DoT +or DoH, then, considering only ECH and the network threat model, it would make +sense for curl to support ECH without curl itself using DoH. The author for +example uses a combination of stubby+unbound as the system resolver listening +on localhost:53, so would fit this use-case. That said, it is unclear if +this is a niche that is worth trying to address. (The author is just as happy to +let curl use DoH to talk to the same public recursive that stubby might use:-) + +Assuming for the moment this is a use-case we would like to support, then if +DoH is not being used by curl, it is not clear at this time how to provide +support for ECH. One option would seem to be to extend the ``c-ares`` library +to support HTTPS RRs, but in that case it is not now clear whether such +changes would be attractive to the ``c-ares`` maintainers, nor whether the +"tag=value" extensibility inherent in the HTTPS/SVCB specification is a good +match for the ``c-ares`` approach of defining structures specific to decoded +answers for each supported RRtype. We are also not sure how many downstream +curl deployments actually make use of the ``c-ares`` library, which would +affect the utility of such changes. Another option might be to consider using +some other generic DNS library that does support HTTPS RRs, but it is unclear +if such a library could or would be used by all or almost all curl builds and +downstream releases of curl. + +Our current conclusion is that doing the above is likely best left until we +have some experience with the "using DoH" approach, so we are going to punt on +this for now. + +### Debugging + +Just a note to self as remembering this is a nuisance: + +```bash +LD_LIBRARY_PATH=$HOME/code/openssl:./lib/.libs gdb ./src/.libs/curl +``` + +### Localhost testing + +It can be useful to be able to run against a localhost OpenSSL ``s_server`` +for testing. We have published instructions for such +[localhost tests](https://github.com/defo-project/ech-dev-utils/blob/main/howtos/localhost-tests.md) +in another repository. Once you have that set up, you can start a server +and then run curl against that: + +```bash + cd $HOME/code/ech-dev-utils + ./scripts/echsvr.sh -d + ... +``` + +The ``echsvr.sh`` script supports many ECH-related options. Use ``echsvr.sh -h`` +for details. + +In another window: + +```bash + cd $HOME/code/curl/ + ./src/curl -vvv --insecure --connect-to foo.example.com:8443:localhost:8443 --ech ecl:AD7+DQA6uwAgACBix2B78sX+EQhEbxMspDOc8Z3xVS5aQpYP0Cxpc2AWPAAEAAEAAQALZXhhbXBsZS5jb20AAA== +``` + +### Automated use of ``retry_configs`` not supported so far... + +As of now we have not added support for using ``retry_config`` handling in the +application - for a command line tool, one can just use ``dig`` (or ``kdig``) +to get the HTTPS RR and pass the ECHConfigList from that on the command line, +if needed, or one can access the value from command line output in verbose more +and then re-use that in another invocation. + +Both our OpenSSL fork and BoringSSL have APIs for both controlling GREASE and +accessing and logging ``retry_configs``, it seems wolfSSL has neither. diff --git a/docs/EXPERIMENTAL.md b/docs/EXPERIMENTAL.md index ee26ac110..23be5a5c3 100644 --- a/docs/EXPERIMENTAL.md +++ b/docs/EXPERIMENTAL.md @@ -1,3 +1,9 @@ + + # Experimental Some features and functionality in curl and libcurl are considered @@ -16,9 +22,59 @@ Experimental support in curl means: experimental. 5. Experimental features are clearly marked so in documentation. Beware. +## Graduation + +1. Each experimental feature should have a set of documented requirements of + what is needed for that feature to graduate. Graduation means being removed + from the list of experiments. +2. An experiment should NOT graduate if it needs test cases to be disabled, + unless they are for minor features that are clearly documented as not + provided by the experiment and then the disabling should be managed inside + each affected test case. + ## Experimental features right now - - The Hyper HTTP backend - - HTTP/3 support (using the quiche or msh3 backends) - - The rustls backend - - WebSocket +### The Hyper HTTP backend + +Graduation requirements: + +- HTTP/1 and HTTP/2 support, including multiplexing + +### HTTP/3 support (non-ngtcp2 backends) + +Graduation requirements: + +- The used libraries should be considered out-of-beta with a reasonable + expectation of a stable API going forward. + +- Using HTTP/3 with the given build should perform without risking busy-loops + +### The rustls backend + +Graduation requirements: + +- a reasonable expectation of a stable API going forward. + +### WebSocket + +Graduation requirements: + +- feedback from users saying that the API works for their specific use cases + +- unless the above happens, we consider WebSocket silently working by + September 2024 when it has been stewing as EXPERIMENTAL for two years. + +## ECH + +Use of the HTTPS resource record and Encrypted Client Hello (ECH) when using +DoH + +Graduation requirements: + +- ECH support exists in at least one widely used TLS library apart from + BoringSSL and wolfSSL. + +- feedback from users saying that ECH works for their use cases + +- it has been given time to mature, so no earlier than April 2025 (twelve + months after being added here) diff --git a/docs/FAQ b/docs/FAQ index 1450a1e75..12c743bb5 100644 --- a/docs/FAQ +++ b/docs/FAQ @@ -56,7 +56,7 @@ FAQ 4. Running Problems 4.2 Why do I get problems when I use & or % in the URL? 4.3 How can I use {, }, [ or ] to specify multiple URLs? - 4.4 Why do I get downloaded data even though the web page does not exist? + 4.4 Why do I get downloaded data even though the webpage does not exist? 4.5 Why do I get return code XXX from an HTTP server? 4.5.1 "400 Bad Request" 4.5.2 "401 Unauthorized" @@ -65,7 +65,7 @@ FAQ 4.5.5 "405 Method Not Allowed" 4.5.6 "301 Moved Permanently" 4.6 Can you tell me what error code 142 means? - 4.7 How do I keep user names and passwords secret in curl command lines? + 4.7 How do I keep usernames and passwords secret in curl command lines? 4.8 I found a bug 4.9 curl cannot authenticate to a server that requires NTLM? 4.10 My HTTP request using HEAD, PUT or DELETE does not work @@ -89,7 +89,7 @@ FAQ 5.6 What about Keep-Alive or persistent connections? 5.7 Link errors when building libcurl on Windows 5.8 libcurl.so.X: open failed: No such file or directory - 5.9 How does libcurl resolve host names? + 5.9 How does libcurl resolve hostnames? 5.10 How do I prevent libcurl from writing the response to stdout? 5.11 How do I make libcurl not receive the whole HTTP response? 5.12 Can I make libcurl fake or hide my real IP address? @@ -407,7 +407,7 @@ FAQ The reason why static libraries is much harder to deal with is that for them we do not get any help but the script itself must know or check what more libraries that are needed (with shared libraries, that dependency "chain" is - handled automatically). This is a error-prone process and one that also + handled automatically). This is an error-prone process and one that also tends to vary over time depending on the release versions of the involved components and may also differ between operating systems. @@ -423,7 +423,7 @@ FAQ backends. curl can be built to use one of the following SSL alternatives: OpenSSL, - libressl, BoringSSL, AWS-LC, GnuTLS, wolfSSL, mbedTLS, Secure Transport + 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 @@ -624,7 +624,7 @@ FAQ 3.14 Does curl support JavaScript or PAC (automated proxy config)? - Many web pages do magic stuff using embedded JavaScript. curl and libcurl + Many webpages do magic stuff using embedded JavaScript. curl and libcurl have no built-in support for that, so it will be treated just like any other contents. @@ -722,7 +722,7 @@ FAQ curl --header "Host: www.example.com" http://127.0.0.1/ - You can also opt to add faked host name entries to curl with the --resolve + You can also opt to add faked hostname entries to curl with the --resolve option. That has the added benefit that things like redirects will also work properly. The above operation would instead be done as: @@ -771,11 +771,10 @@ FAQ [WHATEVER]. This way you can for example send a DELETE by doing "curl -X DELETE [URL]". - It is thus pointless to do "curl -XGET [URL]" as GET would be used - anyway. In the same vein it is pointless to do "curl -X POST -d data - [URL]"... But you can make a fun and somewhat rare request that sends a - request-body in a GET request with something like "curl -X GET -d data - [URL]" + It is thus pointless to do "curl -XGET [URL]" as GET would be used anyway. + In the same vein it is pointless to do "curl -X POST -d data [URL]". You can + make a fun and somewhat rare request that sends a request-body in a GET + request with something like "curl -X GET -d data [URL]" Note that -X does not actually change curl's behavior as it only modifies the actual string sent in the request, but that may of course trigger a @@ -822,7 +821,7 @@ FAQ curl -g 'www.example.com/weirdname[].html' - 4.4 Why do I get downloaded data even though the web page does not exist? + 4.4 Why do I get downloaded data even though the webpage does not exist? curl asks remote servers for the page you specify. If the page does not exist at the server, the HTTP protocol defines how the server should respond and @@ -883,7 +882,7 @@ FAQ appreciate a detailed bug report from you that describes how we could go ahead and repeat this. - 4.7 How do I keep user names and passwords secret in curl command lines? + 4.7 How do I keep usernames and passwords secret in curl command lines? This problem has two sides: @@ -1100,7 +1099,7 @@ FAQ When doing HTTP transfers, curl will perform exactly what you are asking it to do and if successful it will not return an error. You can use curl to test your web server's "file not found" page (that gets 404 back), you can - use it to check your authentication protected web pages (that gets a 401 + use it to check your authentication protected webpages (that gets a 401 back) and so on. The specific HTTP response code does not constitute a problem or error for @@ -1192,7 +1191,7 @@ FAQ 5.6 What about Keep-Alive or persistent connections? curl and libcurl have excellent support for persistent connections when - transferring several files from the same server. curl will attempt to reuse + transferring several files from the same server. curl will attempt to reuse connections for all URLs specified on the same command line/config file, and libcurl will reuse connections for all transfers that are made using the same libcurl handle. @@ -1252,14 +1251,14 @@ FAQ 'man ld.so' and 'man ld' will tell you more details - 5.9 How does libcurl resolve host names? + 5.9 How does libcurl resolve hostnames? libcurl supports a large number of name resolve functions. One of them is picked at build-time and will be used unconditionally. Thus, if you want to change name resolver function you must rebuild libcurl and tell it to use a different function. - - The non-IPv6 resolver that can use one of four different host name resolve + - The non-IPv6 resolver that can use one of four different hostname resolve calls (depending on what your system supports): A - gethostbyname() diff --git a/docs/FEATURES.md b/docs/FEATURES.md index bae38fb85..ef5fd0fc1 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -1,3 +1,9 @@ + + # Features -- what curl can do ## curl tool @@ -6,7 +12,6 @@ - multiple URLs in a single command line - range "globbing" support: [0-13], {one,two,three} - multiple file upload on a single command line - - custom maximum transfer rate - redirect stderr - parallel transfers @@ -14,39 +19,74 @@ - URL RFC 3986 syntax - custom maximum download time - - custom least download speed acceptable + - custom lowest download speed acceptable - custom output result after completion - guesses protocol from hostname unless specified - - uses .netrc + - supports .netrc - progress bar with time statistics while downloading - - "standard" proxy environment variables support - - compiles on win32 (reported builds on 70+ operating systems) + - standard proxy environment variables support + - have run on 101 operating systems and 28 CPU architectures - selectable network interface for outgoing traffic - IPv6 support on Unix and Windows - - happy eyeballs dual-stack connects + - happy eyeballs dual-stack IPv4 + IPv6 connects - persistent connections - SOCKS 4 + 5 support, with or without local name resolving + - *pre-proxy* support, for *proxy chaining* - supports username and password in proxy environment variables - operations through HTTP proxy "tunnel" (using CONNECT) - replaceable memory functions (malloc, free, realloc, etc) - - asynchronous name resolving (6) + - asynchronous name resolving - both a push and a pull style interface - - international domain names (10) + - international domain names (IDN) + - transfer late limiting + - stable API and ABI + - TCP keep alive + - TCP Fast Open + - DNS cache (that can be shared between transfers) + - non-blocking single-threaded parallel transfers + - unix domain sockets to server or proxy + - DNS-over-HTTPS + - uses non-blocking name resolves + - selectable name resolver backend + +## URL API + + - parses RFC 3986 URLs + - generates URLs from individual components + - manages "redirects" + +## Header API + + - easy access to HTTP response headers, from all contexts + - named headers + - iterate over headers + +## TLS + + - selectable TLS backend(s) + - TLS False Start + - TLS version control + - TLS session resumption + - key pinning + - mutual authentication + - Use dedicated CA cert bundle + - Use OS-provided CA store + - separate TLS options for HTTPS proxy ## HTTP - HTTP/0.9 responses are optionally accepted - HTTP/1.0 - HTTP/1.1 - - HTTP/2, including multiplexing and server push (5) + - HTTP/2, including multiplexing and server push - GET - PUT - HEAD - POST - multipart formpost (RFC 1867-style) - - authentication: Basic, Digest, NTLM (9) and Negotiate (SPNEGO) (3) + - authentication: Basic, Digest, NTLM (9) and Negotiate (SPNEGO) to server and proxy - - resume (both GET and PUT) + - resume transfers - follow redirects - maximum amount of redirects to follow - custom HTTP request @@ -59,26 +99,30 @@ - proxy authentication - time conditions - via HTTP proxy, HTTPS proxy or SOCKS proxy + - HTTP/2 or HTTP/1.1 to HTTPS proxy - retrieve file modification date - - Content-Encoding support for deflate and gzip + - Content-Encoding support for deflate, gzip, brotli and zstd - "Transfer-Encoding: chunked" support in uploads - - automatic data compression (11) + - HSTS + - alt-svc + - ETags + - HTTP/1.1 trailers, both sending and getting -## HTTPS (1) +## HTTPS - - (all the HTTP features) - - HTTP/3 experimental support + - HTTP/3 - using client certificates - verify server certificate - via HTTP proxy, HTTPS proxy or SOCKS proxy - select desired encryption - - select usage of a specific SSL version + - select usage of a specific TLS version + - ECH ## FTP - download - authentication - - Kerberos 5 (12) + - Kerberos 5 - active/passive using PORT, EPRT, PASV or EPSV - single file size information (compare to HTTP HEAD) - 'type=' URL support @@ -96,20 +140,24 @@ - customizable to retrieve file modification date - no directory depth limit -## FTPS (1) +## FTPS - implicit `ftps://` support that use SSL on both connections - explicit "AUTH TLS" and "AUTH SSL" usage to "upgrade" plain `ftp://` connection to use SSL for both or one of the connections -## SCP (8) +## SSH (both SCP and SFTP) + - selectable SSH backend + - known hosts support + - public key fingerprinting - both password and public key auth -## SFTP (7) +## SFTP - both password and public key auth - with custom commands sent before/after the transfer + - directory listing ## TFTP @@ -122,7 +170,7 @@ - custom telnet options - stdin/stdout I/O -## LDAP (2) +## LDAP - full LDAP URL support @@ -145,8 +193,8 @@ ## SMTP - - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (9), Kerberos 5 - (4) and External. + - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM, Kerberos 5 and + External - send emails - mail from support - mail size support @@ -154,7 +202,7 @@ - multiple recipients - via http-proxy -## SMTPS (1) +## SMTPS - implicit `smtps://` support - explicit "STARTTLS" usage to "upgrade" plain `smtp://` connections to use SSL @@ -163,15 +211,15 @@ ## POP3 - authentication: Clear Text, APOP and SASL - - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (9), - Kerberos 5 (4) and External. + - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM, + Kerberos 5 and External - list emails - retrieve emails - enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via custom requests - via http-proxy -## POP3S (1) +## POP3S - implicit `pop3s://` support - explicit `STLS` usage to "upgrade" plain `pop3://` connections to use SSL @@ -180,8 +228,8 @@ ## IMAP - authentication: Clear Text and SASL - - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (9), - Kerberos 5 (4) and External. + - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM, + Kerberos 5 and External - list the folders of a mailbox - select a mailbox with support for verifying the `UIDVALIDITY` - fetch emails with support for specifying the UID and SECTION @@ -190,7 +238,7 @@ STORE, COPY and UID via custom requests - via http-proxy -## IMAPS (1) +## IMAPS - implicit `imaps://` support - explicit "STARTTLS" usage to "upgrade" plain `imap://` connections to use SSL @@ -199,21 +247,3 @@ ## MQTT - Subscribe to and publish topics using URL scheme `mqtt://broker/topic` - -## Footnotes - - 1. requires a TLS library - 2. requires OpenLDAP or WinLDAP - 3. requires a GSS-API implementation (such as Heimdal or MIT Kerberos) or - SSPI (native Windows) - 4. requires a GSS-API implementation, however, only Windows SSPI is - currently supported - 5. requires nghttp2 - 6. requires c-ares - 7. requires libssh2, libssh or wolfSSH - 8. requires libssh2 or libssh - 9. requires OpenSSL, GnuTLS, mbedTLS, Secure Transport or SSPI - (native Windows) - 10. requires libidn2 or Windows - 11. requires libz, brotli and/or zstd - 12. requires a GSS-API implementation (such as Heimdal or MIT Kerberos) diff --git a/docs/GOVERNANCE.md b/docs/GOVERNANCE.md index 09723c4d0..4ab52a9a0 100644 --- a/docs/GOVERNANCE.md +++ b/docs/GOVERNANCE.md @@ -1,3 +1,9 @@ + + # Decision making in the curl project A rough guide to how we make decisions and who does what. diff --git a/docs/HELP-US.md b/docs/HELP-US.md index 15996d046..0619aec53 100644 --- a/docs/HELP-US.md +++ b/docs/HELP-US.md @@ -1,3 +1,9 @@ + + # How to get started helping out in the curl project We are always in need of more help. If you are new to the project and are diff --git a/docs/HISTORY.md b/docs/HISTORY.md index d28217ca6..96cf049dc 100644 --- a/docs/HISTORY.md +++ b/docs/HISTORY.md @@ -1,3 +1,9 @@ + + How curl Became Like This ========================= @@ -280,7 +286,7 @@ August: February: added support for the axTLS backend -April: added the cyassl backend (later renamed to WolfSSL) +April: added the cyassl backend (later renamed to wolfSSL) 2012 ---- diff --git a/docs/HSTS.md b/docs/HSTS.md index c1f433b28..85140ab30 100644 --- a/docs/HSTS.md +++ b/docs/HSTS.md @@ -1,3 +1,9 @@ + + # HSTS support HTTP Strict-Transport-Security. Added as experimental in curl diff --git a/docs/HTTP-COOKIES.md b/docs/HTTP-COOKIES.md index 174c4f536..38432d273 100644 --- a/docs/HTTP-COOKIES.md +++ b/docs/HTTP-COOKIES.md @@ -1,3 +1,9 @@ + + # HTTP Cookies ## Cookie overview diff --git a/docs/HTTP2.md b/docs/HTTP2.md index 1d6575b54..55d3db588 100644 --- a/docs/HTTP2.md +++ b/docs/HTTP2.md @@ -1,3 +1,9 @@ + + HTTP/2 with curl ================ @@ -7,7 +13,7 @@ HTTP/2 with curl Build prerequisites ------------------- - nghttp2 - - OpenSSL, libressl, BoringSSL, GnuTLS, mbedTLS, wolfSSL or Schannel + - OpenSSL, LibreSSL, BoringSSL, GnuTLS, mbedTLS, wolfSSL or Schannel with a new enough version. [nghttp2](https://nghttp2.org/) diff --git a/docs/HTTP3.md b/docs/HTTP3.md index 783ab101f..c1c6bf249 100644 --- a/docs/HTTP3.md +++ b/docs/HTTP3.md @@ -1,3 +1,9 @@ + + # HTTP3 (and QUIC) ## Resources @@ -176,13 +182,14 @@ 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 Build quiche and BoringSSL: - % git clone --recursive -b 0.20.0 https://github.com/cloudflare/quiche + % git clone --recursive -b 0.22.0 https://github.com/cloudflare/quiche % cd quiche % cargo build --package quiche --release --features ffi,pkg-config-meta,qlog + % ln -s libquiche.so target/release/libquiche.so.0 % mkdir quiche/deps/boringssl/src/lib % ln -vnf $(find target/release -name libcrypto.a -o -name libssl.a) quiche/deps/boringssl/src/lib/ @@ -203,12 +210,12 @@ Build curl: QUIC support is **EXPERIMENTAL** -Build OpenSSL 3.2.0 +Build OpenSSL 3.3.1 % cd .. - % git clone -b openssl-3.2.0 https://github.com/openssl/openssl + % git clone -b openssl-3.3.1 https://github.com/openssl/openssl % cd openssl - % ./config enable-tls1_3 --prefix= --libdir=/lib + % ./config enable-tls1_3 --prefix= --libdir=lib % make % make install @@ -229,7 +236,7 @@ Build curl: % git clone https://github.com/curl/curl % cd curl % autoreconf -fi - % LDFLAGS="-Wl,-rpath,/lib" ./configure --with-openssl= --with-openssl-quic --with-nghttp3= + % LDFLAGS="-Wl,-rpath,/lib" ./configure --with-openssl= --with-openssl-quic --with-nghttp3= % make % make install diff --git a/docs/HYPER.md b/docs/HYPER.md index 1e47c4237..591b6fc30 100644 --- a/docs/HYPER.md +++ b/docs/HYPER.md @@ -1,3 +1,9 @@ + + # Hyper Hyper is a separate HTTP library written in Rust. curl can be told to use this @@ -15,7 +21,7 @@ in the master branch using pull-requests, just like ordinary changes. The C API for Hyper is brand new and is still under development. -## build curl with hyper +## Build curl with hyper Using Rust 1.64.0 or later, build hyper and enable its C API like this: @@ -33,7 +39,7 @@ Build curl to use hyper's C API: % ./configure LDFLAGS="-Wl,-rpath,/target/debug -Wl,-rpath,/target/release" --with-openssl --with-hyper= % make -# using Hyper internally +# Using Hyper internally Hyper is a low level HTTP transport library. curl itself provides all HTTP headers and Hyper provides all received headers back to curl. diff --git a/docs/INSTALL-CMAKE.md b/docs/INSTALL-CMAKE.md index a606fcb21..0457efe2d 100644 --- a/docs/INSTALL-CMAKE.md +++ b/docs/INSTALL-CMAKE.md @@ -1,10 +1,8 @@ - _ _ ____ _ - ___| | | | _ \| | - / __| | | | |_) | | - | (__| |_| | _ <| |___ - \___|\___/|_| \_\_____| + # Building with CMake @@ -24,7 +22,7 @@ Missing features in the CMake build: - Builds libcurl without large file support - Does not support all SSL libraries (only OpenSSL, Schannel, Secure - Transport, and mbedTLS, WolfSSL) + 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 @@ -68,6 +66,13 @@ If you want to build in the source tree, it is enough to do this: $ cmake . +### Build system generator selection + +You can override CMake's default by using `-G `. For example +on Windows with multiple build systems if you have MinGW-w64 then you could use +`-G "MinGW Makefiles"`. +[List of generator names](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html). + ## Using `ccmake` CMake comes with a curses based interface called `ccmake`. To run `ccmake` diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 7971b1aba..d00f22dcb 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -1,4 +1,10 @@ -# how to install curl and libcurl + + +# How to install curl and libcurl ## Installing Binary Packages @@ -134,7 +140,7 @@ These options are provided to select the TLS backend to use. - BearSSL: `--with-bearssl` - GnuTLS: `--with-gnutls`. - mbedTLS: `--with-mbedtls` - - OpenSSL: `--with-openssl` (also for BoringSSL, AWS-LC, libressl, and quictls) + - OpenSSL: `--with-openssl` (also for BoringSSL, AWS-LC, LibreSSL, and quictls) - rustls: `--with-rustls` - Schannel: `--with-schannel` - Secure Transport: `--with-secure-transport` @@ -148,7 +154,7 @@ conflicting identical symbol names. When you build with multiple TLS backends, you can select the active one at runtime when curl starts up. -## configure finding libs in wrong directory +## 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 diff --git a/docs/INTERNALS.md b/docs/INTERNALS.md index b1a095fe9..ff77bac77 100644 --- a/docs/INTERNALS.md +++ b/docs/INTERNALS.md @@ -1,3 +1,9 @@ + + # curl internals The canonical libcurl internals documentation is now in the [everything @@ -41,7 +47,7 @@ versions of libs and build tools. - GNU Autoconf 2.59 - GNU Automake 1.7 - GNU M4 1.4 - - perl 5.6 + - perl 5.8 - roffit 0.5 - cmake 3.7 diff --git a/docs/IPFS.md b/docs/IPFS.md index 65c0f5dad..82dae9439 100644 --- a/docs/IPFS.md +++ b/docs/IPFS.md @@ -1,3 +1,9 @@ + + # IPFS For an overview about IPFS, visit the [IPFS project site](https://ipfs.tech/). diff --git a/docs/KNOWN_BUGS b/docs/KNOWN_BUGS index f4ced4d84..be44d16c6 100644 --- a/docs/KNOWN_BUGS +++ b/docs/KNOWN_BUGS @@ -18,7 +18,7 @@ problems may have been fixed or changed somewhat since this was written. 2. TLS 2.1 IMAPS connection fails with rustls error 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.4 Secure Transport does not import PKCS#12 client certificates without a password 2.5 Client cert handling with Issuer DN differs between backends 2.7 Client cert (MTLS) issues with Schannel 2.11 Schannel TLS 1.2 handshake bug in old Windows versions @@ -33,6 +33,8 @@ problems may have been fixed or changed somewhat since this was written. 3.6 POP3 issue when reading small chunks 4. Command line + 4.1 -T /dev/stdin may upload with an incorrect content length + 4.2 -T - always uploads chunked 5. Build and portability issues 5.1 OS400 port requires deprecated IBM library @@ -40,7 +42,6 @@ problems may have been fixed or changed somewhat since this was written. 5.3 building for old macOS fails with gcc 5.5 cannot handle Unicode arguments in non-Unicode builds on Windows 5.6 cygwin: make install installs curl-config.1 twice - 5.9 Utilize Requires.private directives in libcurl.pc 5.11 configure --with-gssapi with Heimdal is ignored on macOS 5.12 flaky CI builds 5.13 long paths are not fully supported on Windows @@ -61,12 +62,10 @@ problems may have been fixed or changed somewhat since this was written. 6.13 Negotiate against Hadoop HDFS 7. FTP - 7.1 FTP upload fails if remembered dir is deleted + 7.1 FTP upload fails if remembered directory is deleted 7.2 Implicit FTPS upload timeout 7.3 FTP with NOBODY and FAILONERROR 7.4 FTP with ACCT - 7.5 FTPS upload, FileZilla, GnuTLS and close_notify - 7.11 FTPS upload data loss with TLS 1.3 7.12 FTPS directory listing hangs on Windows with Schannel 9. SFTP and SCP @@ -80,9 +79,12 @@ problems may have been fixed or changed somewhat since this was written. 10.3 FTPS over SOCKS 11. Internals + 11.1 gssapi library name + version is missing in curl_version_info() 11.2 error buffer not set if connection to multiple addresses fails + 11.3 TFTP tests fail on OpenBSD 11.4 HTTP test server 'connection-monitor' problems 11.5 Connection information when using TCP Fast Open + 11.6 test cases sometimes timeout 12. LDAP 12.1 OpenLDAP hangs after returning results @@ -104,15 +106,19 @@ problems may have been fixed or changed somewhat since this was written. 16. aws-sigv4 16.1 aws-sigv4 does not sign requests with * correctly + 16.2 aws-sigv4 does not handle multipart/form-data correctly + 16.3 aws-sigv4 has problems with particular URLs 16.6 aws-sigv4 does not behave well with AWS VPC Lattice 17. HTTP/2 17.1 HTTP/2 prior knowledge over proxy 17.2 HTTP/2 frames while in the connection pool kill reuse 17.3 ENHANCE_YOUR_CALM causes infinite retries + 17.4 HTTP/2 + TLS spends a lot of time in recv 18. HTTP/3 18.1 connection migration does not work + 18.2 quiche: QUIC connection is draining 19. RTSP 19.1 Some methods do not support response bodies @@ -144,7 +150,7 @@ problems may have been fixed or changed somewhat since this was written. See https://github.com/curl/curl/issues/5403 -2.4 Secure Transport will not import PKCS#12 client certificates without a password +2.4 Secure Transport does not import PKCS#12 client certificates without a password libcurl calls SecPKCS12Import with the PKCS#12 client certificate, but that function rejects certificates that do not have a password. @@ -213,6 +219,25 @@ problems may have been fixed or changed somewhat since this was written. 4. Command line +4.1 -T /dev/stdin may upload with an incorrect content length + + -T stats the path to figure out its size in bytes to use it as Content-Length + if it is a regular file. + + The problem with that is that, on BSDs and some other UNIXes (not Linux), + open(path) may not give you a file descriptor with a 0 offset from the start + of the file. + + See https://github.com/curl/curl/issues/12177 + +4.2 -T - always uploads chunked + + When the `<` shell operator is used. curl should realise that stdin is a + regular file in this case, and that it can do a non-chunked upload, like it + would do if you used -T file. + + See https://github.com/curl/curl/issues/12171 + 5. Build and portability issues 5.1 OS400 port requires deprecated IBM library @@ -225,9 +250,9 @@ problems may have been fixed or changed somewhat since this was written. 5.2 curl-config --libs contains private details - "curl-config --libs" will include details set in LDFLAGS when configure is - run that might be needed only for building libcurl. Further, curl-config - --cflags suffers from the same effects with CFLAGS/CPPFLAGS. + "curl-config --libs" include details set in LDFLAGS when configure is run + that might be needed only for building libcurl. Further, curl-config --cflags + suffers from the same effects with CFLAGS/CPPFLAGS. 5.3 building for old macOS fails with gcc @@ -242,8 +267,8 @@ problems may have been fixed or changed somewhat since this was written. it can only be encoded properly in the Unicode character set. Windows uses UTF-16 encoding for Unicode and stores it in wide characters, however curl and libcurl are not equipped for that at the moment except when built with - _UNICODE and UNICODE defined. And, except for Cygwin, Windows cannot use UTF-8 - as a locale. + _UNICODE and UNICODE defined. Except for Cygwin, Windows cannot use UTF-8 as + a locale. https://curl.se/bug/?i=345 https://curl.se/bug/?i=731 @@ -253,10 +278,6 @@ problems may have been fixed or changed somewhat since this was written. https://github.com/curl/curl/issues/8839 -5.9 Utilize Requires.private directives in libcurl.pc - - https://github.com/curl/curl/issues/864 - 5.11 configure --with-gssapi with Heimdal is ignored on macOS ... unless you also pass --with-gssapi-libs @@ -306,7 +327,7 @@ problems may have been fixed or changed somewhat since this was written. 6.1 NTLM authentication and unicode - NTLM authentication involving unicode user name or password only works + NTLM authentication involving unicode username or password only works properly if built with UNICODE defined together with the Schannel backend. The original problem was mentioned in: https://curl.se/mail/lib-2009-10/0024.html @@ -324,8 +345,8 @@ problems may have been fixed or changed somewhat since this was written. 6.3 NTLM in system context uses wrong name NTLM authentication using SSPI (on Windows) when (lib)curl is running in - "system context" will make it use wrong(?) user name - at least when compared - to what winhttp does. See https://curl.se/bug/view.cgi?id=535 + "system context" makes it use wrong(?) username - at least when compared to + what winhttp does. See https://curl.se/bug/view.cgi?id=535 6.5 NTLM does not support password with § character @@ -334,11 +355,11 @@ problems may have been fixed or changed somewhat since this was written. 6.6 libcurl can fail to try alternatives with --proxy-any When connecting via a proxy using --proxy-any, a failure to establish an - authentication will cause libcurl to abort trying other options if the - failed method has a higher preference than the alternatives. As an example, + authentication causes libcurl to abort trying other options if the failed + method has a higher preference than the alternatives. As an example, --proxy-any against a proxy which advertise Negotiate and NTLM, but which - fails to set up Kerberos authentication will not proceed to try authentication - using NTLM. + fails to set up Kerberos authentication does not proceed to try + authentication using NTLM. https://github.com/curl/curl/issues/876 @@ -381,7 +402,7 @@ problems may have been fixed or changed somewhat since this was written. 7. FTP -7.1 FTP upload fails if remembered dir is deleted +7.1 FTP upload fails if remembered directory is deleted curl's FTP code assumes that the directory it entered in a previous transfer still exists when it comes back to do a second transfer, and does not respond @@ -402,41 +423,16 @@ problems may have been fixed or changed somewhat since this was written. 7.4 FTP with ACCT When doing an operation over FTP that requires the ACCT command (but not when - logging in), the operation will fail since libcurl does not detect this and - thus fails to issue the correct command: - https://curl.se/bug/view.cgi?id=635 - -7.5 FTPS upload, FileZilla, GnuTLS and close_notify - - An issue where curl does not send the TLS alert close_notify, which triggers - the wrath of GnuTLS in FileZilla server, and a FTP reply 426 ECONNABORTED. - - https://github.com/curl/curl/issues/11383 - -7.11 FTPS upload data loss with TLS 1.3 - - During FTPS upload curl does not attempt to read TLS handshake messages sent - after the initial handshake. OpenSSL servers running TLS 1.3 may send such a - message. When curl closes the upload connection if unread data has been - received (such as a TLS handshake message) then the TCP protocol sends an - RST to the server, which may cause the server to discard or truncate the - upload if it has not read all sent data yet, and then return an error to curl - on the control channel connection. - - Since 7.78.0 this is mostly fixed. curl will do a single read before closing - TLS connections (which causes the TLS library to read handshake messages), - however there is still possibility of an RST if more messages need to be read - or a message arrives after the read but before close (network race condition). - - https://github.com/curl/curl/issues/6149 + logging in), the operation fails since libcurl does not detect this and thus + fails to issue the correct command: https://curl.se/bug/view.cgi?id=635 7.12 FTPS server compatibility on Windows with Schannel - FTPS is not widely used with the Schannel TLS backend and so there may be more - bugs compared to other TLS backends such as OpenSSL. In the past users have - reported hanging and failed connections. It's very likely some changes to curl - since then fixed the issues. None of the reported issues can be reproduced any - longer. + FTPS is not widely used with the Schannel TLS backend and so there may be + more bugs compared to other TLS backends such as OpenSSL. In the past users + have reported hanging and failed connections. It is likely some changes to + curl since then fixed the issues. None of the reported issues can be + reproduced any longer. If you encounter an issue connecting to your server via FTPS with the latest curl and Schannel then please search for open issues or file a new issue. @@ -471,7 +467,7 @@ problems may have been fixed or changed somewhat since this was written. In the SSH_SFTP_INIT state for libssh, the ssh session working mode is set to blocking mode. If the network is suddenly disconnected during sftp - transmission, curl will be stuck, even if curl is configured with a timeout. + transmission, curl is stuck, even if curl is configured with a timeout. https://github.com/curl/curl/issues/8632 @@ -490,13 +486,26 @@ problems may have been fixed or changed somewhat since this was written. 11. Internals +11.1 gssapi library name + version is missing in curl_version_info() + + The struct needs to be expanded and code added to store this info. + + See https://github.com/curl/curl/issues/13492 + 11.2 error buffer not set if connection to multiple addresses fails If you ask libcurl to resolve a hostname like example.com to IPv6 addresses - only. But you only have IPv4 connectivity. libcurl will correctly fail with - CURLE_COULDNT_CONNECT. But the error buffer set by CURLOPT_ERRORBUFFER + when you only have IPv4 connectivity. libcurl fails with + CURLE_COULDNT_CONNECT, but the error buffer set by CURLOPT_ERRORBUFFER remains empty. Issue: https://github.com/curl/curl/issues/544 +11.3 TFTP tests fail on OpenBSD + + When adding an OpenBSD job with tests to GHA, some tests consistently fail + to run. + + See https://github.com/curl/curl/issues/13623 + 11.4 HTTP test server 'connection-monitor' problems The 'connection-monitor' feature of the sws HTTP test server does not work @@ -512,6 +521,12 @@ 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.6 test cases sometimes timeout + + Occasionally, one of the tests timeouts. Inexplicably. + + See https://github.com/curl/curl/issues/13350 + 12. LDAP 12.1 OpenLDAP hangs after returning results @@ -553,8 +568,8 @@ problems may have been fixed or changed somewhat since this was written. 13.2 Trying local ports fails on Windows This makes '--local-port [range]' to not work since curl cannot properly - detect if a port is already in use, so it will try the first port, use that and - then subsequently fail anyway if that was actually in use. + detect if a port is already in use, so it tries the first port, uses that and + then subsequently fails anyway if that was actually in use. https://github.com/curl/curl/issues/8112 @@ -607,6 +622,14 @@ problems may have been fixed or changed somewhat since this was written. https://github.com/curl/curl/issues/7559 +16.2 aws-sigv4 does not handle multipart/form-data correctly + + https://github.com/curl/curl/issues/13351 + +16.3 aws-sigv4 has problems with particular URLs + + https://github.com/curl/curl/issues/13058 + 16.6 aws-sigv4 does not behave well with AWS VPC Lattice https://github.com/curl/curl/issues/11007 @@ -620,9 +643,9 @@ problems may have been fixed or changed somewhat since this was written. 17.2 HTTP/2 frames while in the connection pool kill reuse If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to - curl while the connection is held in curl's connection pool, the socket will - be found readable when considered for reuse and that makes curl think it is - dead and then it will be closed and a new connection gets created instead. + curl while the connection is held in curl's connection pool, the socket is + found readable when considered for reuse and that makes curl think it is dead + and then it is closed and a new connection gets created instead. This is *best* fixed by adding monitoring to connections while they are kept in the pool so that pings can be responded to appropriately. @@ -634,18 +657,34 @@ problems may have been fixed or changed somewhat since this was written. See https://github.com/curl/curl/issues/5119 +17.4 HTTP/2 + TLS spends a lot of time in recv + + It has been observered that by making the speed limit less accurate we could + improve this performance. (by reverting + https://github.com/curl/curl/commit/db5c9f4f9e0779b49624752b135281a0717b277b) + Can we find a golden middle ground? + + See https://curl.se/mail/lib-2024-05/0026.html and + https://github.com/curl/curl/issues/13416 + 18. HTTP/3 18.1 connection migration does not work https://github.com/curl/curl/issues/7695 +18.2 quiche: QUIC connection is draining + + The transfer ends with error "QUIC connection is draining". + + https://github.com/curl/curl/issues/12037 + 19. RTSP 19.1 Some methods do not support response bodies The RTSP implementation is written to assume that a number of RTSP methods - will always get responses without bodies, even though there seems to be no + always get responses without bodies, even though there seems to be no indication in the RFC that this is always the case. https://github.com/curl/curl/issues/12414 diff --git a/docs/MAIL-ETIQUETTE b/docs/MAIL-ETIQUETTE deleted file mode 100644 index d42a6f0d6..000000000 --- a/docs/MAIL-ETIQUETTE +++ /dev/null @@ -1,284 +0,0 @@ - _ _ ____ _ - ___| | | | _ \| | - / __| | | | |_) | | - | (__| |_| | _ <| |___ - \___|\___/|_| \_\_____| - -MAIL ETIQUETTE - - 1. About the lists - 1.1 Mailing Lists - 1.2 Netiquette - 1.3 Do Not Mail a Single Individual - 1.4 Subscription Required - 1.5 Moderation of new posters - 1.6 Handling trolls and spam - 1.7 How to unsubscribe - 1.8 I posted, now what? - 1.9 Your emails are public - - 2. Sending mail - 2.1 Reply or New Mail - 2.2 Reply to the List - 2.3 Use a Sensible Subject - 2.4 Do Not Top-Post - 2.5 HTML is not for mails - 2.6 Quoting - 2.7 Digest - 2.8 Please Tell Us How You Solved The Problem - -============================================================================== - -1. About the lists - - 1.1 Mailing Lists - - The mailing lists we have are all listed and described at - https://curl.se/mail/ - - Each mailing list is targeted to a specific set of users and subjects, - please use the one or the ones that suit you the most. - - Each mailing list has hundreds up to thousands of readers, meaning that each - mail sent is received and read by a large number of people. People from - various cultures, regions, religions and continents. - - 1.2 Netiquette - - Netiquette is a common term for how to behave on the Internet. Of course, in - each particular group and subculture there are differences in what is - acceptable and what is considered good manners. - - This document outlines what we in the curl project consider to be good - etiquette, and primarily this focus on how to behave on and how to use our - mailing lists. - - 1.3 Do Not Mail a Single Individual - - Many people send one question to one person. One person gets many mails, and - there is only one person who can give you a reply. The question may be - something that other people would also like to ask. These other people have - no way to read the reply, but to ask the one person the question. The one - person consequently gets overloaded with mail. - - If you really want to contact an individual and perhaps pay for his or her - services, by all means go ahead, but if it's just another curl question, - take it to a suitable list instead. - - 1.4 Subscription Required - - All curl mailing lists require that you are subscribed to allow a mail to go - through to all the subscribers. - - If you post without being subscribed (or from a different mail address than - the one you are subscribed with), your mail is simply silently discarded. - You have to subscribe first, then post. - - The reason for this unfortunate and strict subscription policy is of course - to stop spam from pestering the lists. - - 1.5 Moderation of new posters - - Several of the curl mailing lists automatically make all posts from new - subscribers be moderated. After you have subscribed and sent your first mail - to a list, that mail is not let through to the list until a mailing list - administrator has verified that it is OK and permits it to get posted. - - Once a first post has been made that proves the sender is actually talking - about curl-related subjects, the moderation "flag" is switched off and - future posts go through without being moderated. - - The reason for this moderation policy is that we do suffer from spammers who - actually subscribe and send spam to our lists. - - 1.6 Handling trolls and spam - - Despite our good intentions and hard work to keep spam off the lists and to - maintain a friendly and positive atmosphere, there are times when spam and - or trolls get through. - - Troll - "someone who posts inflammatory, extraneous, or off-topic messages - in an online community" - - Spam - "use of electronic messaging systems to send unsolicited bulk - messages" - - No matter what, we NEVER EVER respond to trolls or spammers on the list. If - you believe the list admin should do something in particular, contact them - off-list. The subject is taken care of as much as possible to prevent - repeated offenses, but responding on the list to such messages never leads - to anything good and only puts the light even more on the offender: which - was the entire purpose of it getting sent to the list in the first place. - - Do not feed the trolls. - - 1.7 How to unsubscribe - - You can unsubscribe the same way you subscribed in the first place. You go - to the page for the particular mailing list you are subscribed to and you enter - your email address and password and press the unsubscribe button. - - Also, the instructions to unsubscribe are included in the headers of every - mail that is sent out to all curl related mailing lists and there is a footer - in each mail that links to the "admin" page on which you can unsubscribe and - change other options. - - You NEVER EVER email the mailing list requesting someone else to take you off - the list. - - 1.8 I posted, now what? - - If you are not subscribed with the same email address that you used to send - the email, your post is silently discarded. - - If you posted for the first time to the mailing list, you first need to wait - for an administrator to allow your email to go through (moderated). This - normally happens quickly but in case we are asleep, you may have to wait a - few hours. - - Once your email goes through it is sent out to several hundred or even - thousands of recipients. Your email may cover an area that not that many - people know about or are interested in. Or possibly the person who knows - about it is on vacation or under a heavy work load right now. You may have - to wait for a response and you should not expect to get a response at all. - Ideally, you get an answer within a couple of days. - - You do yourself and all of us a service when you include as many details as - possible already in your first email. Mention your operating system and - environment. Tell us which curl version you are using and tell us what you - did, what happened and what you expected would happen. Preferably, show us - what you did with details enough to allow others to help point out the - problem or repeat the steps in their locations. - - Failing to include details only delays responses and make people respond and - ask for more details and you have to send follow-up emails that include - them. - - Expect the responses to primarily help YOU debug the issue, or ask YOU - questions that can lead you or others towards a solution or explanation to - whatever you experience. - - If you are a repeat offender to the guidelines outlined in this document, - chances are that people ignore you and your chances to get responses in the - future greatly diminish. - - 1.9 Your emails are public - - Your email, its contents and all its headers and the details in those - headers are received by every subscriber of the mailing list that you send - your email to. - - Your email as sent to a curl mailing list ends up in mail archives, on the - curl website and elsewhere, for others to see and read. Today and in the - future. In addition to the archives, the mail is sent out to thousands of - individuals. There is no way to undo a sent email. - - When sending emails to a curl mailing list, do not include sensitive - information such as user names and passwords; use fake ones, temporary ones - or just remove them completely from the mail. Note that this includes base64 - encoded HTTP Basic auth headers. - - This public nature of the curl mailing lists makes automatically inserted mail - footers about mails being "private" or "only meant for the recipient" or - similar even more silly than usual. Because they are absolutely not private - when sent to a public mailing list. - - -2. Sending mail - - 2.1 Reply or New Mail - - Please do not reply to an existing message as a short-cut to post a message - to the lists. - - Many mail programs and web archivers use information within mails to keep - them together as "threads", as collections of posts that discuss a certain - subject. If you do not intend to reply on the same or similar subject, do not - just hit reply on an existing mail and change the subject, create a new mail. - - 2.2 Reply to the List - - When replying to a message from the list, make sure that you do "group - reply" or "reply to all", and not just reply to the author of the single - mail you reply to. - - We are actively discouraging replying back to the single person by setting - the Reply-To: field in outgoing mails back to the mailing list address, - making it harder for people to mail the author directly, if only by mistake. - - 2.3 Use a Sensible Subject - - Please use a subject of the mail that makes sense and that is related to the - contents of your mail. It makes it a lot easier to find your mail afterwards - and it makes it easier to track mail threads and topics. - - 2.4 Do Not Top-Post - - If you reply to a message, do not use top-posting. Top-posting is when you - write the new text at the top of a mail and you insert the previous quoted - mail conversation below. It forces users to read the mail in a backwards - order to properly understand it. - - This is why top posting is so bad (in top posting order): - - A: Because it messes up the order in which people normally read text. - Q: Why is top-posting such a bad thing? - A: Top-posting. - Q: What is the most annoying thing in email? - - Apart from the screwed up read order (especially when mixed together in a - thread when someone responds using the mandated bottom-posting style), it - also makes it impossible to quote only parts of the original mail. - - When you reply to a mail. You let the mail client insert the previous mail - quoted. Then you put the cursor on the first line of the mail and you move - down through the mail, deleting all parts of the quotes that do not add - context for your comments. When you want to add a comment you do so, inline, - right after the quotes that relate to your comment. Then you continue - downwards again. - - When most of the quotes have been removed and you have added your own words, - you are done. - - 2.5 HTML is not for mails - - Please switch off those HTML encoded messages. You can mail all those funny - mails to your friends. We speak plain text mails. - - 2.6 Quoting - - Quote as little as possible. Just enough to provide the context you cannot - leave out. A lengthy description can be found here: - - https://www.netmeister.org/news/learn2quote.html - - 2.7 Digest - - We allow subscribers to subscribe to the "digest" version of the mailing - lists. A digest is a collection of mails lumped together in one single mail. - - Should you decide to reply to a mail sent out as a digest, there are two - things you MUST consider if you really really cannot subscribe normally - instead: - - Cut off all mails and chatter that is not related to the mail you want to - reply to. - - Change the subject name to something sensible and related to the subject, - preferably even the actual subject of the single mail you wanted to reply to - - 2.8 Please Tell Us How You Solved The Problem - - Many people mail questions to the list, people spend some of their time and - make an effort in providing good answers to these questions. - - If you are the one who asks, please consider responding once more in case - one of the hints was what solved your problems. The guys who write answers - feel good to know that they provided a good answer and that you fixed the - problem. Far too often, the person who asked the question is never heard from - again, and we never get to know if they are gone because the problem was - solved or perhaps because the problem was unsolvable. - - Getting the solution posted also helps other users that experience the same - problem(s). They get to see (possibly in the web archives) that the - suggested fixes actually have helped at least one person. diff --git a/docs/MAIL-ETIQUETTE.md b/docs/MAIL-ETIQUETTE.md new file mode 100644 index 000000000..e3cf702be --- /dev/null +++ b/docs/MAIL-ETIQUETTE.md @@ -0,0 +1,258 @@ + + +# Mail etiquette + +## About the lists + +### Mailing Lists + +The mailing lists we have are all listed and described on the [curl +website](https://curl.se/mail/). + +Each mailing list is targeted to a specific set of users and subjects, please +use the one or the ones that suit you the most. + +Each mailing list has hundreds up to thousands of readers, meaning that each +mail sent is received and read by a large number of people. People from +various cultures, regions, religions and continents. + +### Netiquette + +Netiquette is a common term for how to behave on the Internet. Of course, in +each particular group and subculture there are differences in what is +acceptable and what is considered good manners. + +This document outlines what we in the curl project consider to be good +etiquette, and primarily this focus on how to behave on and how to use our +mailing lists. + +### Do Not Mail a Single Individual + +Many people send one question to one person. One person gets many mails, and +there is only one person who can give you a reply. The question may be +something that other people would also like to ask. These other people have no +way to read the reply, but to ask the one person the question. The one person +consequently gets overloaded with mail. + +If you really want to contact an individual and perhaps pay for his or her +services, by all means go ahead, but if it is just another curl question, take +it to a suitable list instead. + +### Subscription Required + +All curl mailing lists require that you are subscribed to allow a mail to go +through to all the subscribers. + +If you post without being subscribed (or from a different mail address than +the one you are subscribed with), your mail is simply silently discarded. You +have to subscribe first, then post. + +The reason for this unfortunate and strict subscription policy is of course to +stop spam from pestering the lists. + +### Moderation of new posters + +Several of the curl mailing lists automatically make all posts from new +subscribers be moderated. After you have subscribed and sent your first mail +to a list, that mail is not let through to the list until a mailing list +administrator has verified that it is OK and permits it to get posted. + +Once a first post has been made that proves the sender is actually talking +about curl-related subjects, the moderation "flag" is switched off and future +posts go through without being moderated. + +The reason for this moderation policy is that we do suffer from spammers who +actually subscribe and send spam to our lists. + +### Handling trolls and spam + +Despite our good intentions and hard work to keep spam off the lists and to +maintain a friendly and positive atmosphere, there are times when spam and or +trolls get through. + +Troll - "someone who posts inflammatory, extraneous, or off-topic messages in +an online community" + +Spam - "use of electronic messaging systems to send unsolicited bulk messages" + +No matter what, we NEVER EVER respond to trolls or spammers on the list. If +you believe the list admin should do something in particular, contact them +off-list. The subject is taken care of as much as possible to prevent repeated +offenses, but responding on the list to such messages never leads to anything +good and only puts the light even more on the offender: which was the entire +purpose of it getting sent to the list in the first place. + +Do not feed the trolls. + +### How to unsubscribe + +You can unsubscribe the same way you subscribed in the first place. You go to +the page for the particular mailing list you are subscribed to and you enter +your email address and password and press the unsubscribe button. + +Also, the instructions to unsubscribe are included in the headers of every +mail that is sent out to all curl related mailing lists and there is a footer +in each mail that links to the "admin" page on which you can unsubscribe and +change other options. + +You NEVER EVER email the mailing list requesting someone else to take you off +the list. + +### I posted, now what? + +If you are not subscribed with the same email address that you used to send +the email, your post is silently discarded. + +If you posted for the first time to the mailing list, you first need to wait +for an administrator to allow your email to go through (moderated). This +normally happens quickly but in case we are asleep, you may have to wait a few +hours. + +Once your email goes through it is sent out to several hundred or even +thousands of recipients. Your email may cover an area that not that many +people know about or are interested in. Or possibly the person who knows about +it is on vacation or under a heavy work load right now. You may have to wait +for a response and you should not expect to get a response at all. Ideally, +you get an answer within a couple of days. + +You do yourself and all of us a service when you include as many details as +possible already in your first email. Mention your operating system and +environment. Tell us which curl version you are using and tell us what you +did, what happened and what you expected would happen. Preferably, show us +what you did with details enough to allow others to help point out the problem +or repeat the steps in their locations. + +Failing to include details only delays responses and make people respond and +ask for more details and you have to send follow-up emails that include them. + +Expect the responses to primarily help YOU debug the issue, or ask YOU +questions that can lead you or others towards a solution or explanation to +whatever you experience. + +If you are a repeat offender to the guidelines outlined in this document, +chances are that people ignore you and your chances to get responses in the +future greatly diminish. + +### Your emails are public + +Your email, its contents and all its headers and the details in those headers +are received by every subscriber of the mailing list that you send your email +to. + +Your email as sent to a curl mailing list ends up in mail archives, on the +curl website and elsewhere, for others to see and read. Today and in the +future. In addition to the archives, the mail is sent out to thousands of +individuals. There is no way to undo a sent email. + +When sending emails to a curl mailing list, do not include sensitive +information such as usernames and passwords; use fake ones, temporary ones or +just remove them completely from the mail. Note that this includes base64 +encoded HTTP Basic auth headers. + +This public nature of the curl mailing lists makes automatically inserted mail +footers about mails being "private" or "only meant for the recipient" or +similar even more silly than usual. Because they are absolutely not private +when sent to a public mailing list. + +## Sending mail + +### Reply or New Mail + +Please do not reply to an existing message as a short-cut to post a message to +the lists. + +Many mail programs and web archivers use information within mails to keep them +together as "threads", as collections of posts that discuss a certain subject. +If you do not intend to reply on the same or similar subject, do not just hit +reply on an existing mail and change the subject, create a new mail. + +### Reply to the List + +When replying to a message from the list, make sure that you do "group reply" +or "reply to all", and not just reply to the author of the single mail you +reply to. + +We are actively discouraging replying to the single person by setting the +correct field in outgoing mails back asking for replies to get sent to the +mailing list address, making it harder for people to reply to the author only +by mistake. + +### Use a Sensible Subject + +Please use a subject of the mail that makes sense and that is related to the +contents of your mail. It makes it a lot easier to find your mail afterwards +and it makes it easier to track mail threads and topics. + +### Do Not Top-Post + +If you reply to a message, do not use top-posting. Top-posting is when you +write the new text at the top of a mail and you insert the previous quoted +mail conversation below. It forces users to read the mail in a backwards order +to properly understand it. + +This is why top posting is so bad (in top posting order): + + A: Because it messes up the order in which people normally read text. + Q: Why is top-posting such a bad thing? + A: Top-posting. + Q: What is the most annoying thing in email? + +Apart from the screwed up read order (especially when mixed together in a +thread when someone responds using the mandated bottom-posting style), it also +makes it impossible to quote only parts of the original mail. + +When you reply to a mail. You let the mail client insert the previous mail +quoted. Then you put the cursor on the first line of the mail and you move +down through the mail, deleting all parts of the quotes that do not add +context for your comments. When you want to add a comment you do so, inline, +right after the quotes that relate to your comment. Then you continue +downwards again. + +When most of the quotes have been removed and you have added your own words, +you are done. + +### HTML is not for mails + +Please switch off those HTML encoded messages. You can mail all those funny +mails to your friends. We speak plain text mails. + +### Quoting + +Quote as little as possible. Just enough to provide the context you cannot +eave out. A lengthy description can be found +[here](https://www.netmeister.org/news/learn2quote.html). + +### Digest + +We allow subscribers to subscribe to the "digest" version of the mailing +lists. A digest is a collection of mails lumped together in one single mail. + +Should you decide to reply to a mail sent out as a digest, there are two +things you MUST consider if you really really cannot subscribe normally +instead: + +Cut off all mails and chatter that is not related to the mail you want to +reply to. + +Change the subject name to something sensible and related to the subject, +preferably even the actual subject of the single mail you wanted to reply to + +### Please Tell Us How You Solved The Problem + +Many people mail questions to the list, people spend some of their time and +make an effort in providing good answers to these questions. + +If you are the one who asks, please consider responding once more in case one +of the hints was what solved your problems. The guys who write answers feel +good to know that they provided a good answer and that you fixed the problem. +Far too often, the person who asked the question is never heard from again, +and we never get to know if they are gone because the problem was solved or +perhaps because the problem was unsolvable. + +Getting the solution posted also helps other users that experience the same +problem(s). They get to see (possibly in the web archives) that the suggested +fixes actually have helped at least one person. diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 3ce869413..33596663c 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -1,3 +1,9 @@ + + # curl tutorial ## Simple Usage @@ -303,7 +309,8 @@ Post a simple `name` and `phone` guestbook. Or automatically [URL encode the data](https://everything.curl.dev/http/post/url-encode). - curl --data-urlencode "name=Rafael Sagula&phone=3320780" http://www.example.com/guest.cgi + curl --data-urlencode "name=Rafael Sagula&phone=3320780" + http://www.example.com/guest.cgi How to post a form with curl, lesson #1: @@ -337,7 +344,8 @@ We want to enter user `foobar` with password `12345`. To post to this, you would enter a curl command line like: - curl -d "user=foobar&pass=12345&id=blablabla&ding=submit" http://example.com/post.cgi + curl -d "user=foobar&pass=12345&id=blablabla&ding=submit" + http://example.com/post.cgi While `-d` uses the application/x-www-form-urlencoded mime-type, generally understood by CGI's and similar, curl also supports the more capable diff --git a/docs/MQTT.md b/docs/MQTT.md index 35c4e7699..a1bc4b349 100644 --- a/docs/MQTT.md +++ b/docs/MQTT.md @@ -1,3 +1,9 @@ + + # MQTT in curl ## Usage diff --git a/docs/Makefile.am b/docs/Makefile.am index ca7b08334..e9ef62848 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -28,9 +28,9 @@ if BUILD_DOCS # if we disable man page building, ignore these MK_CA_DOCS = mk-ca-bundle.1 CURLCONF_DOCS = curl-config.1 +man_MANS = curl-config.1 endif -man_MANS = curl-config.1 CURLPAGES = curl-config.md mk-ca-bundle.md SUBDIRS = . cmdline-opts libcurl @@ -42,9 +42,9 @@ endif EXTRA_DIST = \ $(CURLPAGES) \ - $(CURLCONF_DOCS) \ ALTSVC.md \ BINDINGS.md \ + BUFQ.md \ BUFREF.md \ BUG-BOUNTY.md \ BUGS.md \ @@ -64,6 +64,7 @@ EXTRA_DIST = \ DISTROS.md \ DYNBUF.md \ EARLY-RELEASE.md \ + ECH.md \ EXPERIMENTAL.md \ FAQ \ FEATURES.md \ @@ -79,8 +80,10 @@ EXTRA_DIST = \ INSTALL-CMAKE.md \ INSTALL.md \ INTERNALS.md \ + IPFS.md \ KNOWN_BUGS \ - MAIL-ETIQUETTE \ + MAIL-ETIQUETTE.md \ + MANUAL.md \ MQTT.md \ NEW-PROTOCOL.md \ options-in-versions \ @@ -110,7 +113,7 @@ CD2_ = $(CD2_0) SUFFIXES = .1 .md -all: $(MK_CA_DOCS) +all: $(MK_CA_DOCS) $(CURLCONF_DOCS) .md.1: $(CD2)$(CD2NROFF) diff --git a/docs/Makefile.in b/docs/Makefile.in new file mode 100644 index 000000000..7499d4bb9 --- /dev/null +++ b/docs/Makefile.in @@ -0,0 +1,943 @@ +# 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, , et al. +# +# This software is licensed 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 = docs +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-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 = +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 = +depcomp = +am__maybe_remake_depfiles = +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 +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(man_MANS) +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)` +am__DIST_COMMON = $(srcdir)/Makefile.in INSTALL README.md THANKS TODO +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_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_QUIC = @HAVE_OPENSSL_QUIC@ +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@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ +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@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +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_LIBPSL = @USE_LIBPSL@ +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_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ +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_NGTCP2_H3 = @USE_NGTCP2_H3@ +USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ +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@ +VSFTPD = @VSFTPD@ +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 no-dependencies + +# if we disable man page building, ignore these +@BUILD_DOCS_TRUE@MK_CA_DOCS = mk-ca-bundle.1 +@BUILD_DOCS_TRUE@CURLCONF_DOCS = curl-config.1 +@BUILD_DOCS_TRUE@man_MANS = curl-config.1 +CURLPAGES = curl-config.md mk-ca-bundle.md +SUBDIRS = . cmdline-opts libcurl +DIST_SUBDIRS = $(SUBDIRS) examples +@BUILD_DOCS_TRUE@CLEANFILES = mk-ca-bundle.1 curl-config.1 +EXTRA_DIST = \ + $(CURLPAGES) \ + ALTSVC.md \ + BINDINGS.md \ + BUFQ.md \ + BUFREF.md \ + BUG-BOUNTY.md \ + BUGS.md \ + CHECKSRC.md \ + CIPHERS.md \ + CMakeLists.txt \ + CODE_OF_CONDUCT.md \ + CODE_REVIEW.md \ + CODE_STYLE.md \ + CLIENT-READERS.md \ + CLIENT-WRITERS.md \ + CONNECTION-FILTERS.md \ + CONTRIBUTE.md \ + CURL-DISABLE.md \ + CURLDOWN.md \ + DEPRECATE.md \ + DISTROS.md \ + DYNBUF.md \ + EARLY-RELEASE.md \ + ECH.md \ + EXPERIMENTAL.md \ + FAQ \ + FEATURES.md \ + GOVERNANCE.md \ + HELP-US.md \ + HISTORY.md \ + HSTS.md \ + HTTP-COOKIES.md \ + HTTP2.md \ + HTTP3.md \ + HYPER.md \ + INSTALL \ + INSTALL-CMAKE.md \ + INSTALL.md \ + INTERNALS.md \ + IPFS.md \ + KNOWN_BUGS \ + MAIL-ETIQUETTE.md \ + MANUAL.md \ + MQTT.md \ + NEW-PROTOCOL.md \ + options-in-versions \ + PARALLEL-TRANSFERS.md \ + README.md \ + RELEASE-PROCEDURE.md \ + RUSTLS.md \ + ROADMAP.md \ + SECURITY-ADVISORY.md \ + SPONSORS.md \ + SSL-PROBLEMS.md \ + SSLCERTS.md \ + THANKS \ + TODO \ + TheArtOfHttpScripting.md \ + URL-SYNTAX.md \ + VERSIONS.md \ + VULN-DISCLOSURE-POLICY.md \ + WEBSOCKET.md + +CD2NROFF = $(top_srcdir)/scripts/cd2nroff $< >$@ +CD2 = $(CD2_$(V)) +CD2_0 = @echo " RENDER " $@; +CD2_1 = +CD2_ = $(CD2_0) +SUFFIXES = .1 .md +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .1 .md +$(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 docs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/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): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) + +# 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 $(MANS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +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: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +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 mostlyclean-am + +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-man + +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-man1 + +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: uninstall-man + +uninstall-man: uninstall-man1 + +.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 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-man1 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 uninstall-man uninstall-man1 + +.PRECIOUS: Makefile + + +all: $(MK_CA_DOCS) $(CURLCONF_DOCS) + +.md.1: + $(CD2)$(CD2NROFF) + +curl-config.1: curl-config.md + +mk-ca-bundle.1: mk-ca-bundle.md + +distclean: + rm -f $(CLEANFILES) + +# 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/docs/NEW-PROTOCOL.md b/docs/NEW-PROTOCOL.md index b70caa944..be7fc9846 100644 --- a/docs/NEW-PROTOCOL.md +++ b/docs/NEW-PROTOCOL.md @@ -1,3 +1,9 @@ + + # Adding a new protocol? Every once in a while, someone comes up with the idea of adding support for yet diff --git a/docs/PARALLEL-TRANSFERS.md b/docs/PARALLEL-TRANSFERS.md index c086f14ab..08aac544a 100644 --- a/docs/PARALLEL-TRANSFERS.md +++ b/docs/PARALLEL-TRANSFERS.md @@ -1,3 +1,9 @@ + + # Parallel transfers curl 7.66.0 introduced support for doing multiple transfers simultaneously; in diff --git a/docs/README.md b/docs/README.md index 59f4bd147..22d96ea9b 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,3 +1,9 @@ + + ![curl logo](https://curl.se/logo/curl-logo.svg) # Documentation diff --git a/docs/RELEASE-PROCEDURE.md b/docs/RELEASE-PROCEDURE.md index e48a4d28a..043e3afd0 100644 --- a/docs/RELEASE-PROCEDURE.md +++ b/docs/RELEASE-PROCEDURE.md @@ -1,11 +1,15 @@ + + curl release procedure - how to do a release ============================================ in the source code repo ----------------------- -- run `./scripts/copyright.pl` and correct possible omissions - - edit `RELEASE-NOTES` to be accurate - update `docs/THANKS` @@ -16,9 +20,7 @@ in the source code repo tag and we use underscores instead of dots in the version number. Make sure the tag is GPG signed (using -s). -- run `./maketgz 7.34.0` to build the release tarballs. It is important that - you run this on a machine with the correct set of autotools etc installed as - this is what is shipped and used by most users on \*nix like systems. +- run `./scripts/dmaketgz 7.34.0` to build the release tarballs. - push the git commits and the new tag @@ -106,11 +108,11 @@ Coming dates Based on the description above, here are some planned release dates (at the time of this writing): -- May 22, 2024 -- July 17, 2024 - September 11, 2024 - November 6, 2024 - January 8, 2025 - March 5, 2025 - April 30, 2025 - June 25, 2025 +- August 20, 2025 +- October 15, 2025 diff --git a/docs/RELEASE-TOOLS.md b/docs/RELEASE-TOOLS.md new file mode 100644 index 000000000..e449ade54 --- /dev/null +++ b/docs/RELEASE-TOOLS.md @@ -0,0 +1,28 @@ +# Release tools used for curl 8.9.1 + +The following tools and their Debian package version numbers were used to +produce this release tarball. + +- autoconf: 2.71-3 +- automake: 1:1.16.5-1.3 +- libtool: 2.4.7-7~deb12u1 +- make: 4.3-4.1 +- perl: 5.36.0-7+deb12u1 +- git: 1:2.39.2-1.1 + +# Reproduce the tarball + +- Clone the repo and checkout the tag: curl-8_9_1 +- Install the same set of tools + versions as listed above + +## Do a standard build + +- autoreconf -fi +- ./configure [...] +- make + +## Generate the tarball with the same timestamp + +- export SOURCE_DATE_EPOCH=1722408713 +- ./maketgz [version] + diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 464293834..abf306b33 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,24 +1,17 @@ + + # curl the next few years - perhaps Roadmap of things Daniel Stenberg wants to work on next. It is intended to serve as a guideline for others for information, feedback and possible participation. -## "Complete" the HTTP/3 support - -curl has experimental support for HTTP/3 since a good while back. There are -some functionality missing and once the final specs are published we want to -eventually remove the "experimental" label from this functionality. - -## HTTPS DNS records - -As a DNS version of alt-svc and also a pre-requisite for ECH (see below). - -See: https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-02 - -## ECH (Encrypted Client Hello - formerly known as ESNI) +## WebSocket - See Daniel's post on [Support of Encrypted - SNI](https://curl.se/mail/lib-2019-03/0000.html) on the mailing list. +Agree that it is a good enough API and remove the EXPERIMENTAL label. - Initial work exists in [PR 4011](https://github.com/curl/curl/pull/4011) +## diff --git a/docs/RUSTLS.md b/docs/RUSTLS.md index 3515e1666..cf32afc5e 100644 --- a/docs/RUSTLS.md +++ b/docs/RUSTLS.md @@ -1,9 +1,15 @@ + + # Rustls [Rustls is a TLS backend written in Rust](https://docs.rs/rustls/). Curl can be built to use it as an alternative to OpenSSL or other TLS backends. We use the [rustls-ffi C bindings](https://github.com/rustls/rustls-ffi/). This -version of curl depends on version v0.12.0 of rustls-ffi. +version of curl depends on version v0.13.0 of rustls-ffi. # Building with rustls @@ -11,8 +17,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.12.0 + % git clone https://github.com/rustls/rustls-ffi -b v0.13.0 % cd rustls-ffi % make % make DESTDIR=${HOME}/rustls-ffi-built/ install diff --git a/docs/SECURITY-ADVISORY.md b/docs/SECURITY-ADVISORY.md index 8d908a8ca..efb0e0493 100644 --- a/docs/SECURITY-ADVISORY.md +++ b/docs/SECURITY-ADVISORY.md @@ -1,3 +1,9 @@ + + # Anatomy of a curl security advisory As described in the [Security Process](https://curl.se/dev/secprocess.html) diff --git a/docs/SPONSORS.md b/docs/SPONSORS.md index bec96809c..bb1109760 100644 --- a/docs/SPONSORS.md +++ b/docs/SPONSORS.md @@ -1,3 +1,9 @@ + + # curl sponsors A sponsor is someone who donates money or resources to the curl project for no diff --git a/docs/SSL-PROBLEMS.md b/docs/SSL-PROBLEMS.md index 86262222f..26deed391 100644 --- a/docs/SSL-PROBLEMS.md +++ b/docs/SSL-PROBLEMS.md @@ -1,8 +1,8 @@ - _ _ ____ _ - ___| | | | _ \| | - / __| | | | |_) | | - | (__| |_| | _ <| |___ - \___|\___/|_| \_\_____| + # SSL problems diff --git a/docs/SSLCERTS.md b/docs/SSLCERTS.md index caac51c42..ba349ed63 100644 --- a/docs/SSLCERTS.md +++ b/docs/SSLCERTS.md @@ -1,3 +1,9 @@ + + SSL Certificate Verification ============================ @@ -111,8 +117,8 @@ server, do one of the following: order: 1. application's directory 2. current working directory - 3. Windows System directory (e.g. C:\windows\system32) - 4. Windows Directory (e.g. C:\windows) + 3. Windows System directory (e.g. C:\Windows\System32) + 4. Windows Directory (e.g. C:\Windows) 5. all directories along %PATH% 5. Get another CA cert bundle. One option is to extract the one a recent diff --git a/docs/THANKS b/docs/THANKS index 8bd6b3d86..03bd1b7ac 100644 --- a/docs/THANKS +++ b/docs/THANKS @@ -19,6 +19,7 @@ Aaron Oneal Aaron Orenstein Aaron Scarisbrick aasivov on github +Abdullah Alyan Abhinav Singh Abram Pousada accountantM on github @@ -50,6 +51,7 @@ Ajit Dhumale Akhil Kedia Akhilesh Nema Aki Koskinen +Aki Sakurai Akos Pasztory Akshay Vernekar Alain Danteny @@ -67,6 +69,7 @@ Aleksandar Milivojevic Aleksander Mazur Aleksandr Krotov Aleksey Tulinov +alervd on github Ales Mlakar Ales Novak Alessandro Ghedini @@ -92,6 +95,7 @@ Alex Nichols Alex Potapenko Alex Rousskov Alex Samorukov +Alex Snast Alex Suykov Alex Vinnik Alex Xu @@ -108,6 +112,7 @@ Alexander Krasnostavsky Alexander Lazic Alexander Pepper Alexander Peslyak +Alexander Shtuchkin Alexander Sinditskiy Alexander Traud Alexander V. Tikhonov @@ -181,6 +186,7 @@ Andrei Sedoi Andrei Valeriu BICA Andrei Virtosu Andrej E Baranov +Andrew Andrew Barnert Andrew Barnes Andrew Benham @@ -207,6 +213,8 @@ Andrés García Andy Alt Andy Cedilnik Andy Fiddaman +Andy Pan +Andy Reitz Andy Serpa Andy Stamp Andy Tsouladze @@ -225,6 +233,7 @@ Anthony Hu Anthony Ramine Anthony Shaw Antoine Aubert +Antoine Bollengier Antoine Calando Antoine du Hamel Antoine Pietri @@ -267,6 +276,7 @@ AtariDreams on github Ates Goral atjg on github Augustus Saunders +Aurélien Pierre Austin Green av223119 on github Avery Fay @@ -337,6 +347,7 @@ Bertrand Demiddelaer Bertrand Simonnet beslick5 on github Bevan Weiss +Bhanu Prakash Bill Doyle Bill Egert Bill Hoffman @@ -357,6 +368,7 @@ Björn Stenberg black-desk on github Blaise Potard Blake Burkhart +blankie bnfp on github Bo Anderson Bob Relyea @@ -400,6 +412,7 @@ Brian Green Brian Inglis Brian J. Murrell Brian Lund +brian m. carlson Brian Nixon Brian Prodoehl Brian R Duffy @@ -455,6 +468,7 @@ cbartl on github cclauss on github Cering on github Cesar Eduardo Barros +Ch40zz on github Chad Monroe Chandrakant Bagul Chara White @@ -492,6 +506,7 @@ Christian Fillion Christian Grothoff Christian Heimes Christian Hesse +Christian Heusel Christian Hägele Christian Krause Christian Kurz @@ -529,6 +544,7 @@ Clifford Wolf Clint Clayton Cloudogu Siebels Clément Notin +CMD cmfrolick on github codesniffer13 on github Cody Jones @@ -540,6 +556,7 @@ Colin Blair Colin Cross Colin Hogben Colin Leroy +Colin Leroy-Mira Colin O'Dell Colin Watson Colm Buckley @@ -573,6 +590,7 @@ d912e3 on github Da-Yoon Chung daboul on github Dag Ekengren +Dagfinn Ilmari Mannsåker Dagobert Michelsen Daiki Ueno Dair Grant @@ -604,6 +622,7 @@ Daniel Faust Daniel Gustafsson Daniel Hallberg Daniel Hwang +Daniel J. H. Daniel Jeliński Daniel Johnson Daniel Kahn Gillmor @@ -613,6 +632,7 @@ Daniel Kurečka Daniel Lee Hwang Daniel Lublin Daniel Marjamäki +Daniel McCarney Daniel Melani Daniel Mentz Daniel Romero @@ -705,6 +725,7 @@ Denis Laxalde Denis Ollier Dennis Clarke Dennis Felsing +dependabot[bot] Derek Higgins Derzsi Dániel Desmond O. Chang @@ -759,16 +780,19 @@ Dmitry S. Baikov Dmitry Tretyakov Dmitry Wagin dnivras on github +dogma Dolbneff A.V Domen Kožar Domenico Andreoli Dominick Meglio Dominik Hölzl Dominik Klemba +Dominik Piątkowski Dominik Thalhammer Dominique Leuenberger Don J Olmstead Dongliang Mu +Dorian Craps Doron Behar Doug Kaufman Doug Porter @@ -829,6 +853,7 @@ Eli Schwartz Elia Tufarolo Elliot Killick Elliot Saba +Elliott Balsley Ellis Pritchard Elmira A Semenova Elms @@ -898,6 +923,7 @@ Evert Pot Evgeny Grin (Karlson2k) Evgeny Turnaev eXeC64 on github +extrimexxx on github Eygene Ryabinkin Eylem Ugurel Fabian Fischer @@ -912,6 +938,7 @@ Fabrizio Ammollo Fahim Chandurwala Faizur Rahman Faraz Fallahi +farazrbx on github Farzin on github Fata Nugraha Fawad Mirza @@ -974,6 +1001,7 @@ FuccDucc on github Fujii Hironori fullincome on github fundawang on github +fuzzard Gabe Gabriel Corona Gabriel Kuri @@ -1033,8 +1061,10 @@ Glenn Sheridan Glenn Strauss godmar on github Godwin Stewart +Gonçalo Carvalho Google Inc. Gordon Marler +Gordon Parke Gorilla Maguila Goro FUJI Gou Lingfeng @@ -1059,6 +1089,7 @@ Grigory Entin Grisha Levit Guenole Bescon Guido Berhoerster +Guilherme Puida Guillaume Algis Guillaume Arluison guitared on github @@ -1067,6 +1098,7 @@ Gunter Knauf guoxinvmware on github Gustaf Hui Gustavo Grieco +Gusted Guy Poizat GwanYeong Kim Gwen Shapira @@ -1079,6 +1111,7 @@ Hagai Auro Haibo Huang Hakan Sunay Halil Hamish Mackenzie +hammlee96 on github hamstergene on github Han Han Han Qiao @@ -1095,6 +1128,7 @@ Hans-Jurgen May Hao Wu Hardeep Singh Haris Okanovic +Harmen Stoppels Harold Stuart Harry Mallon Harry Sarson @@ -1130,6 +1164,7 @@ Hiroki Kurosawa Hirotaka Tagawa Ho-chi Chen Hoi-Ho Chan +Hongfei Li Hongli Lai Hongyi Zhao Howard Blaise @@ -1192,7 +1227,9 @@ Isaac Boukris Isaiah Norton Ishan SinghLevett Ithubg on github +Ivan Ivan Avdeev +Ivan Kuchin Ivan Tsybulin ivanfywang IvanoG on github @@ -1219,6 +1256,7 @@ Jakub Bochenski Jakub Jelen Jakub Wilk Jakub Zakrzewski +James Abbatiello James Atwill James Brown James Bursa @@ -1276,6 +1314,7 @@ Javier Navarro Javier Sixto Jay Austin Jay Dommaschk +Jay Guerette Jay Wu Jayesh A Shah Jaz Fresh @@ -1337,6 +1376,7 @@ Jesse Noller Jesse Tan jethrogb on github jhoyla on github +Jiang Wenjian Jiawen Geng Jie He Jiehong on github @@ -1353,6 +1393,7 @@ Jiri Dvorak Jiri Hruska Jiri Jaburek Jishan Shaikh +Jiwoo Park Jiří Bok Jiří Malák jmdavitt on github @@ -1372,6 +1413,7 @@ Johan Anderson Johan Lantz Johan Nilsson Johan van Selst +Johann Sebastian Schicho Johann150 on github Johannes Bauer Johannes Ernst @@ -1441,6 +1483,7 @@ Jonatan Lander Jonatan Vela Jonathan Cardoso Machado Jonathan Hseu +Jonathan Matthews Jonathan Moerman Jonathan Nieder Jonathan Perkin @@ -1513,6 +1556,7 @@ jzinn on github János Fekete Jérémy Rabasco Jérémy Rocher +Jérôme Leclercq Jörg Mueller-Tolk Jörn Hartroth Jürgen Gmach @@ -1524,7 +1568,9 @@ Kai Noda Kai Pastor Kai Sommerfeld Kai-Uwe Rommel +Kailun Qin Kalle Vahlman +kalvdans on github Kamil Dudka Kane York Kang Lin @@ -1535,6 +1581,7 @@ Kari Pahula Karl Chen Karl Moerder Karol Pietrzak +kartatz Kartatz on Github Karthikdasari0423 Karthikdasari0423 on github @@ -1544,6 +1591,7 @@ Katie Wang Katsuhiko YOSHIDA Kazuho Oku kchow-FTNT on github +Keerthi Timmaraju Kees Cook Kees Dekker Keitagit-kun on github @@ -1592,12 +1640,13 @@ Koichi Shiraishi kokke on github Konstantin Isakov Konstantin Kushnir +Konstantin Kuzov Konstantin Vlasov KotlinIsland on github kotoriのねこ kouzhudong on github Kovalkov Dmitrii -kpcyrd +kpcyrd on github kreshano on github Kris Kennaway Krishnendu Majumdar @@ -1652,6 +1701,7 @@ Lawrence Wagerfield Leah Neukirchen Lealem Amedie Leandro Coutinho +Lee Li LeeRiva Legoff Vincent Lehel Bernadt @@ -1709,6 +1759,7 @@ Luca Niccoli Lucas Adamski Lucas Clemente Vella Lucas Holt +Lucas Nussbaum Lucas Pardue Lucas Servén Marín Lucas Severo @@ -1724,6 +1775,7 @@ Luke Amery Luke Call Luke Dashjr Luke Granger-Brown +Luke Hamburg Lukáš Zaoral luminixinc on github Luo Jinghua @@ -1740,6 +1792,7 @@ Maciej Puzio Maciej W. Rozycki madblobfish on github MaeIsBad on github +magisterquis on hackerone Mahmoud Samir Fayed Maks Naumov Maksim Arhipov @@ -1840,6 +1893,7 @@ Martin Jansen Martin Kammerhofer Martin Kepplinger Martin Lemke +Martin Peck Martin Schmatz Martin Skinner Martin Staael @@ -1849,6 +1903,7 @@ Martin V Martin Vejnár Martin Waleczek Martin Ågren +martinevsky Marty Kuhrt Maruko Masaya Suzuki @@ -1890,6 +1945,7 @@ Matthew Whitehead Matthias Bolte Matthias Gatto Matthias Naegler +Matthieu Baerts Mattias Fornander Matus Uzak Maurice Barnum @@ -1917,6 +1973,7 @@ Median Median Stride mehatzri on github Mehmet Bozkurt Mekonikum +Mel Zuser Melissa Mears Melroy van den Berg Mert Yazıcıoğlu @@ -1948,6 +2005,7 @@ Michael Kolechkin Michael Kujawa Michael König Michael Lee +Michael Litwak Michael Maltese Michael Mealling Michael Mueller @@ -2024,6 +2082,7 @@ momala454 on github Momoka Yamamoto MonkeybreadSoftware on github moohoorama on github +Morgan Willcock Morten Minde Neergaard Mostyn Bramley-Moore Moti Avrahami @@ -2148,6 +2207,7 @@ Oliver Schindler Oliver Urbann oliverpool on github Olivier Berger +Olivier Bonaventure Olivier Brunel Omar Ramadan omau on github @@ -2203,6 +2263,7 @@ Pau Garcia i Quiles Paul B. Omta Paul Donohue Paul Dreik +Paul Gilmartin Paul Groke Paul Harrington Paul Harris @@ -2224,6 +2285,7 @@ Paulo Roberto Tomasi Pavel Cenek Pavel Gushchin Pavel Kalyugin +Pavel Kropachev Pavel Löbl Pavel Mayorov Pavel Orehov @@ -2352,6 +2414,7 @@ Rafael Sagula Rafayel Mkrtchyan Rafaël Carré Rafał Mikrut +Rahul Krishna M Rainer Canavan Rainer Jung Rainer Koenig @@ -2398,10 +2461,13 @@ Renaud Guillard Renaud Lehoux Rene Bernhardt Rene Rebe +renovate[bot] +renovate[bot] Reuven Wachtfogel RevaliQaQ on github Reza Arbab Rianov Viacheslav +riastradh on github Ricardo Cadime Ricardo Gomes Ricardo M. Correia @@ -2572,6 +2638,7 @@ SandakovMM on github Sander Gates Sandor Feldi Sandro Jaeckel +Sanjay Pujare Santhana Todatry Santino Keupp Saqib Ali @@ -2582,6 +2649,7 @@ Sascha Zengler Satadru Pramanik Satana de Sant'Ana Saul good +saurabhsingh-dev on github Saurav Babu sayrer on github SBKarr on github @@ -2601,6 +2669,7 @@ Sean McArthur Sean Miller Sean Molenaar Sebastiaan van Erk +Sebastian Andersson Sebastian Haglund Sebastian Mundry Sebastian Neubauer @@ -2630,6 +2699,7 @@ Sergio Mijatovic Sergio-IME on github sergio-nsk on github Serj Kalichev +Sertonix SerusDev on github Seshubabu Pasam Seth Mos @@ -2683,6 +2753,7 @@ Sohom Datta Somnath Kundu Song Ma Sonia Subramanian +southernedge on github Spacen Jasset Spezifant on github Spiridonoff A.V @@ -2730,6 +2801,7 @@ Stephane Pellegrino Stephen Boost Stephen Brokenshire Stephen Collyer +Stephen Farrell Stephen Kick Stephen M. Coakley Stephen More @@ -2911,10 +2983,12 @@ Tommy Chiang Tommy Odom Tommy Petty Tommy Tam +tomy2105 on github Ton Voon Toni Moreno Tony Kelman tonystz on Github +Toon Claes Toon Verwaest Tor Arntsen Torben Dannhauer @@ -2931,6 +3005,8 @@ Trivikram Kamat Troels Walsted Hansen Troy Engel trrui-huawei +Trumeet on github +Trzik on github Tseng Jun Tuomas Siipola Tuomo Rinne @@ -3002,6 +3078,7 @@ Volker Schmid Vsevolod Novikov vshmuk on hackerone vulnerabilityspotter on hackerone +vuonganh1993 on github vvb2060 vvb2060 on github Vyron Tsingaras @@ -3096,8 +3173,7 @@ Yusuke Nakamura Yves Arrouye Yves Lejeune YX Hao -z2-2z on github -z2_ on hackerone +z2_ Zachary Seguin Zdenek Pavlas Zekun Ni @@ -3117,6 +3193,7 @@ zhihaoy on github Zhouyihai Ding ZimCodes on github zloi-user on github +zmcx16 on github Zmey Petroff Zvi Har'El zzq1015 on github @@ -3134,5 +3211,7 @@ zzq1015 on github 加藤郁之 南宫雪珊 左潇峰 +李四 梦终无痕 積丹尼 Dan Jacobson +罗朝辉 diff --git a/docs/THANKS-filter b/docs/THANKS-filter deleted file mode 100644 index 732ccfe74..000000000 --- a/docs/THANKS-filter +++ /dev/null @@ -1,139 +0,0 @@ -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### -# -# This is a list of names we have recorded that already are thanked -# appropriately in THANKS. This list contains variations of their names and -# their "canonical" name. This file is used for scripting purposes to avoid -# duplicate entries and will not be included in release tarballs. -# When removing dupes that are not identical names from THANKS, add a line -# here! -# -# Used-by: contributors.sh -s/Andres Garcia/Andrés García/ -s/Chris Conroy/Christopher Conroy/ -s/Francois Charlier/François Charlier/ -s/Gokhan Sengun/Gökhan Şengün/ -s/John Malmberg/John E. Malmberg/ -s/Luca Alteas/Luca Altea/ -s/Michal Gorny/Michał Górny/ -s/Michal Górny/Michał Górny/ -s/^Moonesamy$/S. Moonesamy/ -s/Pete Su$/Peter Su/ -s/Sam Listopad/Samuel Listopad/ -s/Sebastien Willemijns/Sébastien Willemijns/ -s/YAMADA Yasuharu/Yasuharu Yamada/ -s/Karl M$/Karl Moerder/ -s/Bjorn Stenberg/Björn Stenberg/ -s/upstream tests 305 and 404// -s/Gaël PORTAY/Gaël Portay/ -s/Romulo Ceccon/Romulo A. Ceccon/ -s/Nach M. S$/Nach M. S./ -s/Ja[yt] Satiro/Ray Satiro/ -s/Richard J. Moore/Richard Moore/ -s/Sergey Nikulov/Sergei Nikulov/ -s/Petr Písař/Petr Pisar/ -s/Nick Zitzmann (originally)/Nick Zitzmann/ -s/product-security at Apple// -s/IT DOES NOT WORK// -s/Albert Chin$/Albert Chin-A-Young/ -s/Paras S\z/Paras Sethia/ -s/Paras Sethiaethia/Paras Sethia/ -s/Дмитрий Фалько/Dmitry Falko/ -s/byte_bucket in the #curl IRC channel// -s/Michal Górny and Anthony G. Basile// -s/Alejandro Alvarez$/Alejandro Alvarez Ayllon/ -s/Ant Bryan/Anthony Bryan/ -s/Cédric Deltheil/Cédric Deltheil/ -s/Christian Hagele/Christian Hägele/ -s/douglas steinwand/Douglas Steinwand/ -s/Frank Van Uffelen and Fabian Hiernaux// -s/Rodrigo Silva (MestreLion)/Rodrigo Silva/ -s/tetetest tetetest// -s/Jiří Hruška/Jiri Hruska/ -s/Viktor Szakáts/Viktor Szakats/ -s/Jonathan Cardoso$/Jonathan Cardoso Machado/ -s/Linus Nielsen$/Linus Nielsen Feltzing/ -s/Todd Ouska$/Todd A Ouska/ -s/Tim Ruehsen/Tim Rühsen/ -s/Michael Koenig/Michael König/ -s/moparisthebest/Travis Burtrum/ -s/Jan-E/Jan Ehrhardt/ -s/Paras S$/Paras Sethia/ -s/Cristian Rodr\xEDguez$/Cristian Rodríguez/ -s/Sidney San Mart\xEDn$/Sidney San Martín/ -s/Sidney San Martin$/Sidney San Martín/ -s/Taneli V\xE4h\xE4kangas$/Taneli Vähäkangas/ -s/Taneli Vahakangas$/Taneli Vähäkangas/ -s/Никита Дорохин./Никита Дорохин/ -s/upstream tests 305// -s/ (edited)// -s/Jean-Philippe Barette-LaPierre$/Jean-Philippe Barrette-LaPierre/ -s/Joern Hartroth$/Jörn Hartroth/ -s/Hongli Lai (Phusion)$/Hongli Lai/ -s/github user 'kreshano'$/kreshano on github/ -s/Marc Hoersken$/Marc Hörsken/ -s/Martin Storsjo$/Martin Storsjö/ -s/Jiri Malak$/Jiří Malák/ -s/JDepooter$/Joel Depooter/ -s/ERAMOTO Masaya$/Eramoto Masaya/ -s/shachaf on github$/Shachaf Ben-Kiki/ -s/CarloCannas on github$/Carlo Cannas/ -s/Henrik S. Gaßmann$/Henrik Gaßmann/ -s/moteus on github/Alexey Melnichuk/ -s/Rich Moore/Richard Moore/ -s/kdekker/Kees Dekker/ -s/Daniel Jelinski/Daniel Jeliński/ -s/Dario Weisser/Dario Weißer/ -s/Github user @jakirkham/jakirkham on github/ -s/Guenter Knauf/Gunter Knauf/ -s/Matteo B.$/Matteo Bignotti/ -s/Dan C$/Dan Cristian/ -s/Mark Eichin/Mark W. Eichin/ -s/Andreas Faerber/Andreas Farber/ -s/paulharris on github/Paul Harris/ -s/Warp Kawada/Yukihiro Kawada/ -s/Lau Hang Kin/Hang Kin Lau/ -s/Jonathan Cardoso Machado Machado/Jonathan Cardoso Machado/ -s/David Meyer/David J Meyer/ -s/Ramana Mokkapati/Venkataramana Mokkapati/ -s/wyattoday on github/Wyatt O'Day/ -s/Jason Priebe/Jason S. Priebe/ -s/Ale Vesely/Alessandro Vesely/ -s/Yamada Yasuharu/Yasuharu Yamada/ -s/Jim Gallagher/James Gallagher/ -s/Steve Brokenshire/Stephen Brokenshire/ -s/wangp on github/Peter Wang/ -s# *autobuild https://.*## -s/William A Rowe Jr/William A. Rowe Jr/ -s/jonrumsey on github/Jon Rumsey/ -s/Travis Burtrum on github// -s/i-ky on github/Gleb Ivanovsky/ -s/ *via curl-library *// -s/Evgeny Grin$/Evgeny Grin (Karlson2k)/ -s/Karlson2k on github/Evgeny Grin (Karlson2k)/ -s/Dan Frandrich/Dan Fandrich/ -s/Dan Fandrich\./Dan Fandrich/ -s/GitHub$// -s/pszlazak$/pszlazak on github/ -s/Randall$/Randall S. Becker/ diff --git a/docs/TODO b/docs/TODO index 159e2e875..914b9a312 100644 --- a/docs/TODO +++ b/docs/TODO @@ -20,15 +20,16 @@ 1.1 TFO support on Windows 1.2 Consult %APPDATA% also for .netrc 1.3 struct lifreq - 1.4 Better and more sharing + 1.4 alt-svc sharing 1.5 get rid of PATH_MAX - 1.6 native IDN support on macOS + 1.6 thread-safe sharing 1.8 CURLOPT_RESOLVE for any port number 1.9 Cache negative name resolves 1.10 auto-detect proxy 1.11 minimize dependencies with dynamically loaded modules 1.12 updated DNS server while running 1.13 c-ares and CURLOPT_OPENSOCKETFUNCTION + 1.14 connect to multiple IPs in parallel 1.15 Monitor connections in the connection pool 1.16 Try to URL encode given URL 1.17 Add support for IRIs @@ -63,8 +64,7 @@ 4. FTP 4.1 HOST 4.2 Alter passive/active on failure and retry - 4.3 Earlier bad letter detection - 4.4 Support CURLOPT_PREQUOTE for dir listings too + 4.4 Support CURLOPT_PREQUOTE for directories listings 4.5 ASCII support 4.6 GSSAPI via Windows SSPI 4.7 STAT for LIST without data connection @@ -109,13 +109,12 @@ 11.4 Create remote directories 12. FILE - 12.1 Directory listing for FILE: + 12.1 Directory listing on non-POSIX 13. TLS 13.1 TLS-PSK with OpenSSL - 13.2 Provide mutex locking API + 13.2 TLS channel binding 13.3 Defeat TLS fingerprinting - 13.4 Cache/share OpenSSL contexts 13.5 Export session ids 13.6 Provide callback for cert verification 13.7 Less memory massaging with Schannel @@ -123,13 +122,11 @@ 13.9 TLS record padding 13.10 Support Authority Information Access certificate extension (AIA) 13.11 Some TLS options are not offered for HTTPS proxies - 13.12 Reduce CA certificate bundle reparsing 13.13 Make sure we forbid TLS 1.3 post-handshake authentication 13.14 Support the clienthello extension 13.15 Select signature algorithms - - 14. GnuTLS - 14.2 check connection + 13.16 Share the CA cache + 13.17 Add missing features to TLS backends 15. Schannel 15.1 Extend support for client certificate authentication @@ -151,28 +148,29 @@ 18. Command line tool 18.1 sync 18.2 glob posts + 18.3 -h option 18.4 --proxycommand 18.5 UTF-8 filenames in Content-Disposition 18.6 Option to make -Z merge lined based outputs on stdout - 18.8 Consider convenience options for JSON and XML? + 18.7 specify which response codes that make -f/--fail return error 18.9 Choose the name of file in braces for complex URLs 18.10 improve how curl works in a windows console window 18.11 Windows: set attribute 'archive' for completed downloads 18.12 keep running, read instructions from pipe/socket - 18.13 Ratelimit or wait between serial requests + 18.13 Acknowledge Ratelimit headers 18.14 --dry-run 18.15 --retry should resume 18.16 send only part of --data - 18.17 consider file name from the redirected URL with -O ? + 18.17 consider filename from the redirected URL with -O ? 18.18 retry on network is unreachable 18.19 expand ~/ in config files - 18.20 host name sections in config files + 18.20 hostname sections in config files 18.21 retry on the redirected-to URL 18.23 Set the modification date on an uploaded file 18.24 Use multiple parallel transfers for a single download 18.25 Prevent terminal injection when writing to terminal 18.26 Custom progress meter update interval - 18.27 -J and -O with %-encoded file names + 18.27 -J and -O with %-encoded filenames 18.28 -J with -C - 18.29 --retry and transfer timeouts @@ -188,16 +186,15 @@ 20.2 nicer lacking perl message 20.3 more protocols supported 20.4 more platforms supported - 20.5 Add support for concurrent connections 20.6 Use the RFC 6265 test suite - 20.7 Support LD_PRELOAD on macOS 20.8 Run web-platform-tests URL tests 21. MQTT 21.1 Support rate-limiting + 21.2 Support MQTTS 22. TFTP - 22.1 TFTP doesn't convert LF to CRLF for mode=netascii + 22.1 TFTP does not convert LF to CRLF for mode=netascii ============================================================================== @@ -226,7 +223,7 @@ SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. To support IPv6 interface addresses for network interfaces properly. -1.4 Better and more sharing +1.4 alt-svc sharing The share interface could benefit from allowing the alt-svc cache to be possible to share between easy handles. @@ -251,21 +248,18 @@ there we need libssh2 to properly tell us when we pass in a too small buffer and its current API (as of libssh2 1.2.7) does not. -1.6 native IDN support on macOS - - On recent macOS versions, the getaddrinfo() function itself has built-in IDN - support. By setting the AI_CANONNAME flag, the function will return the - encoded name in the ai_canonname struct field in the returned information. - This could be used by curl on macOS when built without a separate IDN library - and an IDN host name is used in a URL. +1.6 thread-safe sharing - See initial work in https://github.com/curl/curl/pull/5371 + Using the share interface users can share some data between easy handles but + several of the sharing options are documented as as not safe and supported to + share between multiple concurrent threads. Fixing this would enable more + users to share data in more powerful ways. 1.8 CURLOPT_RESOLVE for any port number This option allows applications to set a replacement IP address for a given host + port pair. Consider making support for providing a replacement address - for the host name on all port numbers. + for the hostname on all port numbers. See https://github.com/curl/curl/issues/1264 @@ -306,14 +300,26 @@ 1.13 c-ares and CURLOPT_OPENSOCKETFUNCTION - curl will create most sockets via the CURLOPT_OPENSOCKETFUNCTION callback and + curl creates most sockets via the CURLOPT_OPENSOCKETFUNCTION callback and close them with the CURLOPT_CLOSESOCKETFUNCTION callback. However, c-ares - does not use those functions and instead opens and closes the sockets - itself. This means that when curl passes the c-ares socket to the - CURLMOPT_SOCKETFUNCTION it is not owned by the application like other sockets. + does not use those functions and instead opens and closes the sockets itself. + This means that when curl passes the c-ares socket to the + CURLMOPT_SOCKETFUNCTION it is not owned by the application like other + sockets. See https://github.com/curl/curl/issues/2734 +1.14 connect to multiple IPs in parallel + + curl currently implements the happy eyeball algorithm for connecting to the + IPv4 and IPv6 alternatives for a host in parallel, sticking with the + connection that "wins". We could implement a similar algorithm per individual + IP family as well when there are multiple available addresses: start with the + first address, then start a second attempt N milliseconds after and then a + third another N milliseconds later. That way there would be less waiting when + the first IP has problems. It also improves the connection timeout value + handling for multiple address situations. + 1.15 Monitor connections in the connection pool libcurl's connection cache or pool holds a number of open connections for the @@ -496,8 +502,8 @@ 2.4 Split connect and authentication process The multi interface treats the authentication process as part of the connect - phase. As such any failures during authentication will not trigger the relevant - QUIT or LOGOFF for protocols such as IMAP, POP3 and SMTP. + phase. As such any failures during authentication does not trigger the + relevant QUIT or LOGOFF for protocols such as IMAP, POP3 and SMTP. 2.5 Edge-triggered sockets should work @@ -547,7 +553,7 @@ 4.1 HOST - HOST is a command for a client to tell which host name to use, to offer FTP + HOST is a command for a client to tell which hostname to use, to offer FTP servers named-based virtual hosting: https://datatracker.ietf.org/doc/html/rfc7151 @@ -559,12 +565,7 @@ connection. There could be a way to fallback to an active connection (and vice versa). https://curl.se/bug/feature.cgi?id=1754793 -4.3 Earlier bad letter detection - - Make the detection of (bad) %0d and %0a codes in FTP URL parts earlier in the - process to avoid doing a resolve and connect in vain. - -4.4 Support CURLOPT_PREQUOTE for dir listings too +4.4 Support CURLOPT_PREQUOTE for directions listings The lack of support is mostly an oversight and requires the FTP state machine to get updated to get fixed. @@ -605,10 +606,10 @@ 5.1 Provide the error body from a CONNECT response - When curl receives a body response from a CONNECT request to a proxy, it will - always just read and ignore it. It would make some users happy if curl - instead optionally would be able to make that responsible available. Via a new - callback? Through some other means? + When curl receives a body response from a CONNECT request to a proxy, it + always just reads and ignores it. It would make some users happy if curl + instead optionally would be able to make that responsible available. Via a + new callback? Through some other means? See https://github.com/curl/curl/issues/9513 @@ -635,7 +636,7 @@ 5.4 Allow SAN names in HTTP/2 server push curl only allows HTTP/2 push promise if the provided :authority header value - exactly matches the host name given in the URL. It could be extended to allow + exactly matches the hostname given in the URL. It could be extended to allow any name that would match the Subject Alternative Names in the server's TLS certificate. @@ -680,7 +681,7 @@ 6.2 ditch telnet-specific select Move the telnet support's network select() loop go away and merge the code - into the main transfer loop. Until this is done, the multi interface will not + into the main transfer loop. Until this is done, the multi interface does not work for telnet. 6.3 feature negotiation debug data @@ -786,11 +787,11 @@ 12. FILE -12.1 Directory listing for FILE: - - Add support for listing the contents of a directory accessed with FILE. The - output should probably be the same as/similar to FTP. +12.1 Directory listing on non-POSIX + Listing the contents of a directory accessed with FILE only works on + platforms with opendir. Support could be added for more systems, like + Windows. 13. TLS @@ -803,11 +804,22 @@ https://github.com/curl/curl/issues/5081 -13.2 Provide mutex locking API +13.2 TLS channel binding + + TLS 1.2 and 1.3 provide the ability to extract some secret data from the TLS + connection and use it in the client request (usually in some sort of + authentication) to ensure that the data sent is bound to the specific TLS + connection and cannot be successfully intercepted by a proxy. This + functionality can be used in a standard authentication mechanism such as + GSS-API or SCRAM, or in custom approaches like custom HTTP Authentication + headers. - Provide a libcurl API for setting mutex callbacks in the underlying SSL - library, so that the same application code can use mutex-locking - independently of OpenSSL or GnutTLS being used. + For TLS 1.2, the binding type is usually tls-unique, and for TLS 1.3 it is + tls-exporter. + + https://datatracker.ietf.org/doc/html/rfc5929 + https://datatracker.ietf.org/doc/html/rfc9266 + https://github.com/curl/curl/issues/9226 13.3 Defeat TLS fingerprinting @@ -817,22 +829,6 @@ See https://github.com/curl/curl/issues/8119 -13.4 Cache/share OpenSSL contexts - - "Look at SSL cafile - quick traces look to me like these are done on every - request as well, when they should only be necessary once per SSL context (or - once per handle)". The major improvement we can rather easily do is to make - sure we do not create and kill a new SSL "context" for every request, but - instead make one for every connection and reuse that SSL context in the same - style connections are reused. It will make us use slightly more memory but it - will libcurl do less creations and deletions of SSL contexts. - - Technically, the "caching" is probably best implemented by getting added to - the share interface so that easy handles who want to and can reuse the - context specify that by sharing with the right properties set. - - https://github.com/curl/curl/issues/1110 - 13.5 Export session ids Add an interface to libcurl that enables "session IDs" to get @@ -898,15 +894,6 @@ https://github.com/curl/curl/issues/12286 -13.12 Reduce CA certificate bundle reparsing - - When using the OpenSSL backend, curl will load and reparse the CA bundle at - the creation of the "SSL context" when it sets up a connection to do a TLS - handshake. A more effective way would be to somehow cache the CA bundle to - avoid it having to be repeatedly reloaded and reparsed. - - See https://github.com/curl/curl/issues/9379 - 13.13 Make sure we forbid TLS 1.3 post-handshake authentication RFC 8740 explains how using HTTP/2 must forbid the use of TLS 1.3 @@ -932,12 +919,18 @@ https://github.com/curl/curl/issues/12982 -14. GnuTLS +13.16 Share the CA cache + + For TLS backends that supports CA caching, it makes sense to allow the share + object to be used to store the CA cache as well via the share API. Would + allow multiple easy handles to reuse the CA cache and save themselves from a + lot of extra processing overhead. -14.2 check connection +13.17 Add missing features to TLS backends - Add a way to check if the connection seems to be alive, to correspond to the - SSL_peak() way we use with OpenSSL. + The feature matrix at https://curl.se/libcurl/c/tls-options.html shows which + features are supported by which TLS backends, and thus also where there are + feature gaps. 15. Schannel @@ -957,10 +950,10 @@ 15.4 Add option to allow abrupt server closure - libcurl w/schannel will error without a known termination point from the - server (such as length of transfer, or SSL "close notify" alert) to prevent - against a truncation attack. Really old servers may neglect to send any - termination point. An option could be added to ignore such abrupt closures. + libcurl w/schannel errors without a known termination point from the server + (such as length of transfer, or SSL "close notify" alert) to prevent against + a truncation attack. Really old servers may neglect to send any termination + point. An option could be added to ignore such abrupt closures. https://github.com/curl/curl/issues/4427 @@ -986,7 +979,7 @@ SSH is a perfectly fine multiplexed protocols which would allow libcurl to do multiple parallel transfers from the same host using the same connection, much in the same spirit as HTTP/2 does. libcurl however does not take - advantage of that ability but will instead always create a new connection for + advantage of that ability but does instead always create a new connection for new transfers even if an existing connection already exists to the host. To fix this, libcurl would have to detect an existing connection and "attach" @@ -996,7 +989,7 @@ The SFTP code in libcurl checks the file size *before* a transfer starts and then proceeds to transfer exactly that amount of data. If the remote file - grows while the transfer is in progress libcurl will not notice and will not + grows while the transfer is in progress libcurl does not notice and does not adapt. The OpenSSH SFTP command line tool does and libcurl could also just attempt to download more to see if there is more to get... @@ -1044,6 +1037,12 @@ Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'. This is easily scripted though. +18.3 -h option + + Support "curl -h --insecure" etc to output the manpage section for the + --insecure command line option in the terminal. Should be possible to work + with either long or short versions of command line options. + 18.4 --proxycommand Allow the user to make curl run a command and use its stdio to make requests @@ -1064,24 +1063,15 @@ 18.6 Option to make -Z merge lined based outputs on stdout When a user requests multiple lined based files using -Z and sends them to - stdout, curl will not "merge" and send complete lines fine but may send + stdout, curl does not "merge" and send complete lines fine but may send partial lines from several sources. https://github.com/curl/curl/issues/5175 -18.8 Consider convenience options for JSON and XML? - - Could we add `--xml` or `--json` to add headers needed to call rest API: - - `--xml` adds -H 'Content-Type: application/xml' -H "Accept: application/xml" and - `--json` adds -H 'Content-Type: application/json' -H "Accept: application/json" - - Setting Content-Type when doing a GET or any other method without a body - would be a bit strange I think - so maybe only add CT for requests with body? - Maybe plain `--xml` and ` --json` are a bit too brief and generic. Maybe - `--http-json` etc? +18.7 specify which response codes that make -f/--fail return error - See https://github.com/curl/curl/issues/5203 + Allows a user to better specify exacly which error code(s) that are fine + and which are errors for their specific uses cases 18.9 Choose the name of file in braces for complex URLs @@ -1107,7 +1097,7 @@ backed up from those that are either not ready or have not changed. Downloads in progress are neither ready to be backed up, nor should they be - opened by a different process. Only after a download has been completed it's + opened by a different process. Only after a download has been completed it is sensible to include it in any integer snapshot or backup of the system. See https://github.com/curl/curl/issues/3354 @@ -1120,12 +1110,10 @@ invoke can talk to the still running instance and ask for transfers to get done, and thus maintain its connection pool, DNS cache and more. -18.13 Ratelimit or wait between serial requests +18.13 Acknowledge Ratelimit headers Consider a command line option that can make curl do multiple serial requests - slow, potentially with a (random) wait between transfers. There is also a - proposed set of standard HTTP headers to let servers let the client adapt to - its rate limits: + while acknowledging server specified rate limits: https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/ See https://github.com/curl/curl/issues/5406 @@ -1155,22 +1143,22 @@ See https://github.com/curl/curl/issues/1200 -18.17 consider file name from the redirected URL with -O ? +18.17 consider filename from the redirected URL with -O ? When a user gives a URL and uses -O, and curl follows a redirect to a new - URL, the file name is not extracted and used from the newly redirected-to URL - even if the new URL may have a much more sensible file name. + URL, the filename is not extracted and used from the newly redirected-to URL + even if the new URL may have a much more sensible filename. 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 + to users which filename 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 + already allows for the server to decide what filename to use so it already provides the "may overwrite any file" risk. - This is extra tricky if the original URL has no file name part at all since - then the current code path will error out with an error message, and we cannot - *know* already at that point if curl will be redirected to a URL that has a - file name... + This is extra tricky if the original URL has no filename part at all since + then the current code path does error out with an error message, and we + cannot *know* already at that point if curl is redirected to a URL that has a + filename... See https://github.com/curl/curl/issues/1241 @@ -1192,10 +1180,10 @@ See https://github.com/curl/curl/issues/2317 -18.20 host name sections in config files +18.20 hostname sections in config files config files would be more powerful if they could set different - configurations depending on used URLs, host name or possibly origin. Then a + configurations depending on used URLs, hostname or possibly origin. Then a default .curlrc could a specific user-agent only when doing requests against a certain site. @@ -1233,7 +1221,7 @@ - If splitting up the work improves the transfer rate, it could then be done again. Then again, etc up to a limit. - This way, if transfer B fails (because Range: is not supported) it will let + This way, if transfer B fails (because Range: is not supported) it lets transfer A remain the single one. N and M could be set to some sensible defaults. @@ -1254,9 +1242,9 @@ 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 +18.27 -J and -O with %-encoded filenames - -J/--remote-header-name does not decode %-encoded file names. RFC 6266 details + -J/--remote-header-name does not decode %-encoded filenames. 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, @@ -1267,15 +1255,15 @@ -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. + Note that we do not decode -O without the user asking for it with some other + means, 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 + resume logic is worked out before the target filename (and thus its pre-transfer size) has been figured out. This can be improved. https://curl.se/bug/view.cgi?id=1169 @@ -1284,8 +1272,8 @@ 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 + downloaded in the previous attempt but truncates and restarts 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 @@ -1305,12 +1293,13 @@ curl. 19.3 Do not use GNU libtool on OpenBSD - When compiling curl on OpenBSD with "--enable-debug" it will give linking - errors when you use GNU libtool. This can be fixed by using the libtool - provided by OpenBSD itself. However for this the user always needs to invoke - make with "LIBTOOL=/usr/bin/libtool". It would be nice if the script could - have some magic to detect if this system is an OpenBSD host and then use the - OpenBSD libtool instead. + + When compiling curl on OpenBSD with "--enable-debug" it gives linking errors + when you use GNU libtool. This can be fixed by using the libtool provided by + OpenBSD itself. However for this the user always needs to invoke make with + "LIBTOOL=/usr/bin/libtool". It would be nice if the script could have some + magic to detect if this system is an OpenBSD host and then use the OpenBSD + libtool instead. See https://github.com/curl/curl/issues/5862 @@ -1355,35 +1344,15 @@ Make the test suite work on more platforms. OpenBSD and Mac OS. Remove fork()s and it should become even more portable. -20.5 Add support for concurrent connections - - Tests 836, 882 and 938 were designed to verify that separate connections are - not used when using different login credentials in protocols that should not - reuse a connection under such circumstances. - - Unfortunately, ftpserver.pl does not appear to support multiple concurrent - connections. The read while() loop seems to loop until it receives a - disconnect from the client, where it then enters the waiting for connections - loop. When the client opens a second connection to the server, the first - connection has not been dropped (unless it has been forced - which we - should not do in these tests) and thus the wait for connections loop is never - entered to receive the second connection. - 20.6 Use the RFC 6265 test suite A test suite made for HTTP cookies (RFC 6265) by Adam Barth is available at https://github.com/abarth/http-state/tree/master/tests - It'd be really awesome if someone would write a script/setup that would run - curl with that test suite and detect deviances. Ideally, that would even be + It would be good if someone would write a script/setup that would run curl + with that test suite and detect deviances. Ideally, that would even be incorporated into our regular test suite. -20.7 Support LD_PRELOAD on macOS - - LD_RELOAD does not work on macOS, but there are tests which require it to run - properly. Look into making the preload support in runtests.pl portable such - that it uses DYLD_INSERT_LIBRARIES on macOS. - 20.8 Run web-platform-tests URL tests Run web-platform-tests URL tests and compare results with browsers on wpt.fyi @@ -1400,9 +1369,11 @@ The rate-limiting logic is done in the PERFORMING state in multi.c but MQTT is not (yet) implemented to use that. +21.2 Support MQTTS + 22. TFTP -22.1 TFTP doesn't convert LF to CRLF for mode=netascii +22.1 TFTP does not convert LF to CRLF for mode=netascii RFC 3617 defines that an TFTP transfer can be done using "netascii" mode. curl does not support extracting that mode from the URL nor does it treat diff --git a/docs/TheArtOfHttpScripting.md b/docs/TheArtOfHttpScripting.md index 4e111a3e3..659fbdd11 100644 --- a/docs/TheArtOfHttpScripting.md +++ b/docs/TheArtOfHttpScripting.md @@ -1,3 +1,9 @@ + + # The Art Of Scripting HTTP Requests Using Curl ## Background @@ -572,12 +578,12 @@ ## Certificates - In the HTTPS world, you use certificates to validate that you are the one - you claim to be, as an addition to normal passwords. Curl supports client- - side certificates. All certificates are locked with a pass phrase, which you - need to enter before the certificate can be used by curl. The pass phrase - can be specified on the command line or if not, entered interactively when - curl queries for it. Use a certificate with curl on an HTTPS server like: + In the HTTPS world, you use certificates to validate that you are the one you + claim to be, as an addition to normal passwords. Curl supports client- side + certificates. All certificates are locked with a passphrase, which you need + to enter before the certificate can be used by curl. The passphrase can be + specified on the command line or if not, entered interactively when curl + queries for it. Use a certificate with curl on an HTTPS server like: curl --cert mycert.pem https://secure.example.com diff --git a/docs/URL-SYNTAX.md b/docs/URL-SYNTAX.md index 67f9bdbc6..30aaea9cf 100644 --- a/docs/URL-SYNTAX.md +++ b/docs/URL-SYNTAX.md @@ -1,3 +1,9 @@ + + # URL syntax and their use in curl ## Specifications @@ -61,7 +67,7 @@ and curl using scripts remain working. curl's URL parser allows a few deviations from the spec in order to inter-operate better with URLs that appear in the wild. -### spaces +### Spaces A URL provided to curl cannot contain spaces. They need to be provided URL encoded to be accepted in a URL by curl. @@ -71,12 +77,12 @@ client where a resource has been redirected to, sometimes contain spaces. This is a violation of RFC 3986 but is fine in the WHATWG spec. curl handles these by re-encoding them to `%20`. -### non-ASCII +### Non-ASCII Byte values in a provided URL that are outside of the printable ASCII range are percent-encoded by curl. -### multiple slashes +### Multiple slashes An absolute URL always starts with a "scheme" followed by a colon. For all the schemes curl supports, the colon must be followed by two slashes according to @@ -102,7 +108,7 @@ Based on what the hostname starts with, curl "guesses" what protocol to use: - `pop3.` means POP3 - all other means HTTP -### globbing letters +### Globbing letters The curl command line tool supports "globbing" of URLs. It means that you can create ranges and lists using `[N-M]` and `{one,two,three}` sequences. The diff --git a/docs/VERSIONS.md b/docs/VERSIONS.md index fc21749ee..a3159aa6c 100644 --- a/docs/VERSIONS.md +++ b/docs/VERSIONS.md @@ -1,3 +1,9 @@ + + Version Numbers and Releases ============================ diff --git a/docs/VULN-DISCLOSURE-POLICY.md b/docs/VULN-DISCLOSURE-POLICY.md index f18db6d52..e6d6f3450 100644 --- a/docs/VULN-DISCLOSURE-POLICY.md +++ b/docs/VULN-DISCLOSURE-POLICY.md @@ -1,3 +1,9 @@ + + # curl vulnerability disclosure policy This document describes how security vulnerabilities are handled in the curl @@ -292,3 +298,18 @@ 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. + +## NULL dereferences and crashes + +If a malicious server can trigger a NULL dereference in curl or otherwise +cause curl to crash (and nothing worse), chances are big that we do not +consider that a security problem. + +Malicious servers can already cause considerable harm and denial of service +like scenarios without having to trigger such code paths. For example by +stalling, being terribly slow or by delivering enormous amounts of data. +Additionally, applications are expected to handle "normal" crashes without +that being the end of the world. + +There need to be more and special circumstances to treat such problems as +security issues. diff --git a/docs/cmdline-opts/.gitignore b/docs/cmdline-opts/.gitignore deleted file mode 100644 index 8d42e2c53..000000000 --- a/docs/cmdline-opts/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -curl.txt diff --git a/docs/cmdline-opts/CMakeLists.txt b/docs/cmdline-opts/CMakeLists.txt index 99ec66c31..d165f841e 100644 --- a/docs/cmdline-opts/CMakeLists.txt +++ b/docs/cmdline-opts/CMakeLists.txt @@ -29,8 +29,9 @@ transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc. include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") add_custom_command(OUTPUT "${MANPAGE}" - COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && "${PERL_EXECUTABLE}" ${PROJECT_SOURCE_DIR}/scripts/managen mainpage ${DPAGES} > "${MANPAGE}" - COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && "${PERL_EXECUTABLE}" ${PROJECT_SOURCE_DIR}/scripts/managen ascii ${DPAGES} > "${ASCIIPAGE}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND "${PERL_EXECUTABLE}" ${PROJECT_SOURCE_DIR}/scripts/managen mainpage ${DPAGES} > "${MANPAGE}" + COMMAND "${PERL_EXECUTABLE}" ${PROJECT_SOURCE_DIR}/scripts/managen ascii ${DPAGES} > "${ASCIIPAGE}" VERBATIM ) add_custom_target(generate-curl.1 ALL DEPENDS "${MANPAGE}") diff --git a/docs/cmdline-opts/MANPAGE.md b/docs/cmdline-opts/MANPAGE.md index 1f9749bc5..3e2e7151f 100644 --- a/docs/cmdline-opts/MANPAGE.md +++ b/docs/cmdline-opts/MANPAGE.md @@ -45,7 +45,7 @@ A line that starts with ``. Help: (short text for the --help output for this option) Long: (long form name, without dashes) Magic: (description of "magic" options) - Multi: single/append/boolean/mutex/custom (if used more than once) + Multi: single/append/boolean/mutex/custom/per-URL (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) diff --git a/docs/cmdline-opts/Makefile.am b/docs/cmdline-opts/Makefile.am index 81a4afe1b..0aa8a44fa 100644 --- a/docs/cmdline-opts/Makefile.am +++ b/docs/cmdline-opts/Makefile.am @@ -27,8 +27,6 @@ AUTOMAKE_OPTIONS = foreign no-dependencies MANPAGE = curl.1 ASCIIPAGE = curl.txt -man_MANS = $(MANPAGE) - include Makefile.inc EXTRA_DIST = $(DPAGES) MANPAGE.md $(SUPPORT) CMakeLists.txt mainpage.idx @@ -38,23 +36,25 @@ GN_0 = @echo " GENERATE" $@; GN_1 = GN_ = $(GN_0) -MANAGEN=$(abs_top_srcdir)/scripts/managen +MANAGEN=$(top_srcdir)/scripts/managen +INCDIR=$(top_srcdir)/include if BUILD_DOCS CLEANFILES = $(MANPAGE) $(ASCIIPAGE) +man_MANS = $(MANPAGE) all: $(MANPAGE) $(ASCIIPAGE) endif $(MANPAGE): $(DPAGES) $(SUPPORT) mainpage.idx Makefile.inc $(MANAGEN) - $(GEN)(rm -f $(MANPAGE) && (cd $(srcdir) && @PERL@ $(MANAGEN) mainpage $(DPAGES)) > manpage.tmp.$$$$ && mv manpage.tmp.$$$$ $(MANPAGE)) + $(GEN)(rm -f $(MANPAGE) && @PERL@ $(MANAGEN) -d $(srcdir) -I $(INCDIR) mainpage $(DPAGES) > manpage.tmp.$$$$ && mv manpage.tmp.$$$$ $(MANPAGE)) $(ASCIIPAGE): $(DPAGES) $(SUPPORT) mainpage.idx Makefile.inc $(MANAGEN) - $(GEN)(rm -f $(ASCIIPAGE) && (cd $(srcdir) && @PERL@ $(MANAGEN) ascii $(DPAGES)) > asciipage.tmp.$$$$ && mv asciipage.tmp.$$$$ $(ASCIIPAGE)) + $(GEN)(rm -f $(ASCIIPAGE) && @PERL@ $(MANAGEN) -d $(srcdir) -I $(INCDIR) ascii $(DPAGES) > asciipage.tmp.$$$$ && mv asciipage.tmp.$$$$ $(ASCIIPAGE)) listhelp: - $(MANAGEN) listhelp $(DPAGES) > $(top_builddir)/src/tool_listhelp.c + $(MANAGEN) -d $(srcdir) listhelp $(DPAGES) > $(top_builddir)/src/tool_listhelp.c listcats: @$(MANAGEN) listcats $(DPAGES) diff --git a/docs/cmdline-opts/Makefile.in b/docs/cmdline-opts/Makefile.in new file mode 100644 index 000000000..56080c8c2 --- /dev/null +++ b/docs/cmdline-opts/Makefile.in @@ -0,0 +1,1013 @@ +# 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, , et al. +# +# This software is licensed 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, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# Shared between Makefile.am and CMakeLists.txt +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 = docs/cmdline-opts +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-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 = +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 = +depcomp = +am__maybe_remake_depfiles = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(man_MANS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc +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@ +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_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_QUIC = @HAVE_OPENSSL_QUIC@ +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@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ +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@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +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_LIBPSL = @USE_LIBPSL@ +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_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ +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_NGTCP2_H3 = @USE_NGTCP2_H3@ +USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ +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@ +VSFTPD = @VSFTPD@ +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 no-dependencies +MANPAGE = curl.1 +ASCIIPAGE = curl.txt +SUPPORT = \ + _AUTHORS.md \ + _BUGS.md \ + _DESCRIPTION.md \ + _ENVIRONMENT.md \ + _EXITCODES.md \ + _FILES.md \ + _GLOBBING.md \ + _NAME.md \ + _OPTIONS.md \ + _OUTPUT.md \ + _PROGRESS.md \ + _PROTOCOLS.md \ + _PROXYPREFIX.md \ + _SEEALSO.md \ + _SYNOPSIS.md \ + _URL.md \ + _VARIABLES.md \ + _VERSION.md \ + _WWW.md + +DPAGES = \ + abstract-unix-socket.md \ + alt-svc.md \ + anyauth.md \ + append.md \ + aws-sigv4.md \ + basic.md \ + ca-native.md \ + cacert.md \ + capath.md \ + cert-status.md \ + cert-type.md \ + cert.md \ + ciphers.md \ + compressed-ssh.md \ + compressed.md \ + config.md \ + connect-timeout.md \ + connect-to.md \ + continue-at.md \ + cookie-jar.md \ + cookie.md \ + create-dirs.md \ + create-file-mode.md \ + crlf.md \ + crlfile.md \ + curves.md \ + data-ascii.md \ + data-binary.md \ + data-raw.md \ + data-urlencode.md \ + data.md \ + delegation.md \ + digest.md \ + disable-eprt.md \ + disable-epsv.md \ + disable.md \ + disallow-username-in-url.md \ + dns-interface.md \ + dns-ipv4-addr.md \ + dns-ipv6-addr.md \ + dns-servers.md \ + doh-cert-status.md \ + doh-insecure.md \ + doh-url.md \ + dump-header.md \ + ech.md \ + egd-file.md \ + engine.md \ + etag-compare.md \ + etag-save.md \ + expect100-timeout.md \ + fail-early.md \ + fail-with-body.md \ + fail.md \ + false-start.md \ + form-escape.md \ + form-string.md \ + form.md \ + ftp-account.md \ + ftp-alternative-to-user.md \ + ftp-create-dirs.md \ + ftp-method.md \ + ftp-pasv.md \ + ftp-port.md \ + ftp-pret.md \ + ftp-skip-pasv-ip.md \ + ftp-ssl-ccc-mode.md \ + ftp-ssl-ccc.md \ + ftp-ssl-control.md \ + get.md \ + globoff.md \ + happy-eyeballs-timeout-ms.md \ + haproxy-protocol.md \ + haproxy-clientip.md \ + head.md \ + header.md \ + help.md \ + hostpubmd5.md \ + hostpubsha256.md \ + hsts.md \ + http0.9.md \ + http1.0.md \ + http1.1.md \ + http2-prior-knowledge.md \ + http2.md \ + http3.md \ + http3-only.md \ + ignore-content-length.md \ + include.md \ + insecure.md \ + interface.md \ + ip-tos.md \ + ipfs-gateway.md \ + ipv4.md \ + ipv6.md \ + json.md \ + junk-session-cookies.md \ + keepalive-cnt.md \ + keepalive-time.md \ + key-type.md \ + key.md \ + krb.md \ + libcurl.md \ + limit-rate.md \ + list-only.md \ + local-port.md \ + location-trusted.md \ + location.md \ + login-options.md \ + mail-auth.md \ + mail-from.md \ + mail-rcpt-allowfails.md \ + mail-rcpt.md \ + manual.md \ + max-filesize.md \ + max-redirs.md \ + max-time.md \ + metalink.md \ + mptcp.md \ + negotiate.md \ + netrc-file.md \ + netrc-optional.md \ + netrc.md \ + next.md \ + no-alpn.md \ + no-buffer.md \ + no-clobber.md \ + no-keepalive.md \ + no-npn.md \ + no-progress-meter.md \ + no-sessionid.md \ + noproxy.md \ + ntlm-wb.md \ + ntlm.md \ + oauth2-bearer.md \ + output-dir.md \ + output.md \ + parallel-immediate.md \ + parallel-max.md \ + parallel.md \ + pass.md \ + path-as-is.md \ + pinnedpubkey.md \ + post301.md \ + post302.md \ + post303.md \ + preproxy.md \ + progress-bar.md \ + proto-default.md \ + proto-redir.md \ + proto.md \ + proxy-anyauth.md \ + proxy-basic.md \ + proxy-ca-native.md \ + proxy-cacert.md \ + proxy-capath.md \ + proxy-cert-type.md \ + proxy-cert.md \ + proxy-ciphers.md \ + proxy-crlfile.md \ + proxy-digest.md \ + proxy-header.md \ + proxy-http2.md \ + proxy-insecure.md \ + proxy-key-type.md \ + proxy-key.md \ + proxy-negotiate.md \ + proxy-ntlm.md \ + proxy-pass.md \ + proxy-pinnedpubkey.md \ + proxy-service-name.md \ + proxy-ssl-allow-beast.md \ + proxy-ssl-auto-client-cert.md \ + proxy-tls13-ciphers.md \ + proxy-tlsauthtype.md \ + proxy-tlspassword.md \ + proxy-tlsuser.md \ + proxy-tlsv1.md \ + proxy-user.md \ + proxy.md \ + proxy1.0.md \ + proxytunnel.md \ + pubkey.md \ + quote.md \ + random-file.md \ + range.md \ + rate.md \ + raw.md \ + referer.md \ + remote-header-name.md \ + remote-name-all.md \ + remote-name.md \ + remote-time.md \ + remove-on-error.md \ + request-target.md \ + request.md \ + resolve.md \ + retry-all-errors.md \ + retry-connrefused.md \ + retry-delay.md \ + retry-max-time.md \ + retry.md \ + sasl-authzid.md \ + sasl-ir.md \ + service-name.md \ + show-error.md \ + silent.md \ + socks4.md \ + socks4a.md \ + socks5-basic.md \ + socks5-gssapi-nec.md \ + socks5-gssapi-service.md \ + socks5-gssapi.md \ + socks5-hostname.md \ + socks5.md \ + speed-limit.md \ + speed-time.md \ + ssl-allow-beast.md \ + ssl-auto-client-cert.md \ + ssl-no-revoke.md \ + ssl-reqd.md \ + ssl-revoke-best-effort.md \ + ssl.md \ + sslv2.md \ + sslv3.md \ + stderr.md \ + styled-output.md \ + suppress-connect-headers.md \ + tcp-fastopen.md \ + tcp-nodelay.md \ + telnet-option.md \ + tftp-blksize.md \ + tftp-no-options.md \ + time-cond.md \ + tls-max.md \ + tls13-ciphers.md \ + tlsauthtype.md \ + tlspassword.md \ + tlsuser.md \ + tlsv1.0.md \ + tlsv1.1.md \ + tlsv1.2.md \ + tlsv1.3.md \ + tlsv1.md \ + tr-encoding.md \ + trace-ascii.md \ + trace-config.md \ + trace-ids.md \ + trace-time.md \ + trace.md \ + unix-socket.md \ + upload-file.md \ + url.md \ + url-query.md \ + use-ascii.md \ + user-agent.md \ + user.md \ + variable.md \ + verbose.md \ + version.md \ + vlan-priority.md \ + write-out.md \ + xattr.md + +EXTRA_DIST = $(DPAGES) MANPAGE.md $(SUPPORT) CMakeLists.txt mainpage.idx +GEN = $(GN_$(V)) +GN_0 = @echo " GENERATE" $@; +GN_1 = +GN_ = $(GN_0) +MANAGEN = $(top_srcdir)/scripts/managen +INCDIR = $(top_srcdir)/include +@BUILD_DOCS_TRUE@CLEANFILES = $(MANPAGE) $(ASCIIPAGE) +@BUILD_DOCS_TRUE@man_MANS = $(MANPAGE) +all: all-am + +.SUFFIXES: +$(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 docs/cmdline-opts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/cmdline-opts/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): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man1dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.1[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + +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 +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +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: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +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-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +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-man1 + +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 Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool 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-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags-am uninstall uninstall-am uninstall-man \ + uninstall-man1 + +.PRECIOUS: Makefile + + +@BUILD_DOCS_TRUE@all: $(MANPAGE) $(ASCIIPAGE) + +$(MANPAGE): $(DPAGES) $(SUPPORT) mainpage.idx Makefile.inc $(MANAGEN) + $(GEN)(rm -f $(MANPAGE) && @PERL@ $(MANAGEN) -d $(srcdir) -I $(INCDIR) mainpage $(DPAGES) > manpage.tmp.$$$$ && mv manpage.tmp.$$$$ $(MANPAGE)) + +$(ASCIIPAGE): $(DPAGES) $(SUPPORT) mainpage.idx Makefile.inc $(MANAGEN) + $(GEN)(rm -f $(ASCIIPAGE) && @PERL@ $(MANAGEN) -d $(srcdir) -I $(INCDIR) ascii $(DPAGES) > asciipage.tmp.$$$$ && mv asciipage.tmp.$$$$ $(ASCIIPAGE)) + +listhelp: + $(MANAGEN) -d $(srcdir) listhelp $(DPAGES) > $(top_builddir)/src/tool_listhelp.c + +listcats: + @$(MANAGEN) listcats $(DPAGES) + +# 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/docs/cmdline-opts/Makefile.inc b/docs/cmdline-opts/Makefile.inc index 428cc3bab..d69635e49 100644 --- a/docs/cmdline-opts/Makefile.inc +++ b/docs/cmdline-opts/Makefile.inc @@ -90,6 +90,7 @@ DPAGES = \ doh-insecure.md \ doh-url.md \ dump-header.md \ + ech.md \ egd-file.md \ engine.md \ etag-compare.md \ @@ -135,11 +136,13 @@ DPAGES = \ include.md \ insecure.md \ interface.md \ + ip-tos.md \ ipfs-gateway.md \ ipv4.md \ ipv6.md \ json.md \ junk-session-cookies.md \ + keepalive-cnt.md \ keepalive-time.md \ key-type.md \ key.md \ @@ -160,6 +163,7 @@ DPAGES = \ max-redirs.md \ max-time.md \ metalink.md \ + mptcp.md \ negotiate.md \ netrc-file.md \ netrc-optional.md \ @@ -301,5 +305,6 @@ DPAGES = \ variable.md \ verbose.md \ version.md \ + vlan-priority.md \ write-out.md \ xattr.md diff --git a/docs/cmdline-opts/_ENVIRONMENT.md b/docs/cmdline-opts/_ENVIRONMENT.md index af60ac8d0..1d40b87b8 100644 --- a/docs/cmdline-opts/_ENVIRONMENT.md +++ b/docs/cmdline-opts/_ENVIRONMENT.md @@ -101,8 +101,8 @@ if Schannel is used as the TLS backend. If you set this environment variable to a filename, 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. +works with the following TLS backends: OpenSSL, LibreSSL (TLS 1.2 max), +BoringSSL, GnuTLS and wolfSSL. ## `USERPROFILE` On Windows, this variable is used when trying to find the home directory. If diff --git a/docs/cmdline-opts/_PROTOCOLS.md b/docs/cmdline-opts/_PROTOCOLS.md index 0d4c2374e..af7019ab0 100644 --- a/docs/cmdline-opts/_PROTOCOLS.md +++ b/docs/cmdline-opts/_PROTOCOLS.md @@ -49,3 +49,5 @@ Fetching a telnet URL starts an interactive session where it sends what it reads on stdin and outputs what the server sends it. ## TFTP curl can do TFTP downloads and uploads. +## WS(S) +WebSocket done over HTTP/1. WSS implies that it works over HTTPS. diff --git a/docs/cmdline-opts/connect-timeout.md b/docs/cmdline-opts/connect-timeout.md index e1400811e..dc5f92704 100644 --- a/docs/cmdline-opts/connect-timeout.md +++ b/docs/cmdline-opts/connect-timeout.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: curl Long: connect-timeout Arg: Help: Maximum time allowed to connect -Category: connection +Category: connection timeout Added: 7.7 Multi: single See-also: diff --git a/docs/cmdline-opts/connect-to.md b/docs/cmdline-opts/connect-to.md index 360ef0da2..578256165 100644 --- a/docs/cmdline-opts/connect-to.md +++ b/docs/cmdline-opts/connect-to.md @@ -3,9 +3,9 @@ c: Copyright (C) Daniel Stenberg, , et al. SPDX-License-Identifier: curl Long: connect-to Arg: -Help: Connect to host +Help: Connect to host2 instead of host1 Added: 7.49.0 -Category: connection +Category: connection dns Multi: append See-also: - resolve @@ -28,3 +28,13 @@ original hostname and port number. A hostname specified to this option is compared as a string, so it needs to match the name used in request URL. It can be either numerical such as `127.0.0.1` or the full host name such as `example.org`. + +Example: redirect connects from the example.com hostname to 127.0.0.1 +independently of port number: + + curl --connect-to example.com::127.0.0.1: https://example.com/ + +Example: redirect connects from all hostnames to 127.0.0.1 independently of +port number: + + curl --connect-to ::127.0.0.1: http://example.com/ diff --git a/docs/cmdline-opts/cookie-jar.md b/docs/cmdline-opts/cookie-jar.md index f99368591..49a9440bf 100644 --- a/docs/cmdline-opts/cookie-jar.md +++ b/docs/cmdline-opts/cookie-jar.md @@ -11,6 +11,7 @@ Added: 7.9 Multi: single See-also: - cookie + - junk-session-cookies Example: - -c store-here.txt $URL - -c store-here.txt -b read-these $URL diff --git a/docs/cmdline-opts/create-dirs.md b/docs/cmdline-opts/create-dirs.md index fcbeb3343..c509efb0f 100644 --- a/docs/cmdline-opts/create-dirs.md +++ b/docs/cmdline-opts/create-dirs.md @@ -3,7 +3,7 @@ c: Copyright (C) Daniel Stenberg, , et al. SPDX-License-Identifier: curl Long: create-dirs Help: Create necessary local directory hierarchy -Category: curl +Category: output Added: 7.10.3 Multi: boolean See-also: diff --git a/docs/cmdline-opts/crlf.md b/docs/cmdline-opts/crlf.md index 81a14ef6f..c36884113 100644 --- a/docs/cmdline-opts/crlf.md +++ b/docs/cmdline-opts/crlf.md @@ -17,5 +17,3 @@ Example: 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/disable.md b/docs/cmdline-opts/disable.md index e22a2bb4a..1370b91d7 100644 --- a/docs/cmdline-opts/disable.md +++ b/docs/cmdline-opts/disable.md @@ -18,6 +18,3 @@ Example: 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/doh-insecure.md b/docs/cmdline-opts/doh-insecure.md index 684428ddf..72f3cb772 100644 --- a/docs/cmdline-opts/doh-insecure.md +++ b/docs/cmdline-opts/doh-insecure.md @@ -8,10 +8,20 @@ Category: dns tls Multi: boolean See-also: - doh-url + - insecure + - proxy-insecure Example: - --doh-insecure --doh-url https://doh.example $URL --- # `--doh-insecure` -Same as --insecure but used for DoH (DNS-over-HTTPS). +By default, every connection curl makes to a DoH server is verified to be +secure before the transfer takes place. This option tells curl to skip the +verification step and proceed without checking. + +**WARNING**: using this option makes the DoH transfer and name resolution +insecure. + +This option is equivalent to --insecure and --proxy-insecure but used for DoH +(DNS-over-HTTPS) only. diff --git a/docs/cmdline-opts/dump-header.md b/docs/cmdline-opts/dump-header.md index 42d3e85ed..925e6da66 100644 --- a/docs/cmdline-opts/dump-header.md +++ b/docs/cmdline-opts/dump-header.md @@ -13,12 +13,14 @@ See-also: - output Example: - --dump-header store.txt $URL + - --dump-header - $URL -o save --- # `--dump-header` Write the received protocol headers to the specified file. If no headers are -received, the use of this option creates an empty file. +received, the use of this option creates an empty file. Specify `-` as file +name (a single minus) to have it written to stdout. When used in FTP, the FTP server response lines are considered being "headers" and thus are saved there. diff --git a/docs/cmdline-opts/ech.md b/docs/cmdline-opts/ech.md new file mode 100644 index 000000000..6c2ba31cb --- /dev/null +++ b/docs/cmdline-opts/ech.md @@ -0,0 +1,53 @@ +--- +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ech +Arg: +Help: Configure ECH +Added: 8.8.0 +Category: tls +Protocols: HTTPS +Multi: single +See-also: + - doh-url +Example: + - --ech true $URL +--- + +# `--ech` + +Specifies how to do ECH (Encrypted Client Hello). + +The values allowed for \ can be: + +## "false" +Do not attempt ECH + +## "grease" + +Send a GREASE ECH extension + +## "true" + +Attempt ECH if possible, but do not fail if ECH is not attempted. +(The connection fails if ECH is attempted but fails.) + +## "hard" + +Attempt ECH and fail if that is not possible. +ECH only works with TLS 1.3 and also requires using +DoH or providing an ECHConfigList on the command line. + +## "ecl:" + +A base64 encoded ECHConfigList that is used for ECH. + +## "pn:" + +A name to use to over-ride the `public_name` field of an ECHConfigList +(only available with OpenSSL TLS support) + +## Errors + +Most errors cause error +*CURLE_ECH_REQUIRED* (101). diff --git a/docs/cmdline-opts/egd-file.md b/docs/cmdline-opts/egd-file.md index b68b7d496..ef16b9964 100644 --- a/docs/cmdline-opts/egd-file.md +++ b/docs/cmdline-opts/egd-file.md @@ -5,7 +5,7 @@ Long: egd-file Arg: Help: EGD socket path for random data Protocols: TLS -Category: tls +Category: deprecated Added: 7.7 Multi: single See-also: diff --git a/docs/cmdline-opts/expect100-timeout.md b/docs/cmdline-opts/expect100-timeout.md index ce69227ad..854761818 100644 --- a/docs/cmdline-opts/expect100-timeout.md +++ b/docs/cmdline-opts/expect100-timeout.md @@ -6,7 +6,7 @@ Arg: Help: How long to wait for 100-continue Protocols: HTTP Added: 7.47.0 -Category: http +Category: http timeout Multi: single See-also: - connect-timeout diff --git a/docs/cmdline-opts/fail-early.md b/docs/cmdline-opts/fail-early.md index bb22e1470..67edbf919 100644 --- a/docs/cmdline-opts/fail-early.md +++ b/docs/cmdline-opts/fail-early.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: curl Long: fail-early Help: Fail on first transfer error Added: 7.52.0 -Category: curl +Category: curl global Multi: boolean Scope: global See-also: diff --git a/docs/cmdline-opts/fail.md b/docs/cmdline-opts/fail.md index 8591e330d..0c8db1367 100644 --- a/docs/cmdline-opts/fail.md +++ b/docs/cmdline-opts/fail.md @@ -18,11 +18,17 @@ Example: # `--fail` -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 command line option -prevents curl from outputting that and return error 22. +Fail with error code 22 and with no response body output at all for HTTP +transfers returning HTTP response codes at 400 or greater. + +In normal cases when an HTTP server fails to deliver a document, it returns a +body of text stating so (which often also describes why and more) and a 4xx +HTTP response code. This command line option prevents curl from outputting +that data and instead returns error 22 early. By default, curl does not +consider HTTP response codes to indicate failure. + +To get both the error code and also save the content, use --fail-with-body +instead. This method is not fail-safe and there are occasions where non-successful response codes slip through, especially when authentication is involved diff --git a/docs/cmdline-opts/form-escape.md b/docs/cmdline-opts/form-escape.md index 083c29e16..0f93fde7e 100644 --- a/docs/cmdline-opts/form-escape.md +++ b/docs/cmdline-opts/form-escape.md @@ -3,9 +3,9 @@ c: Copyright (C) Daniel Stenberg, , et al. SPDX-License-Identifier: curl Long: form-escape Help: Escape form fields using backslash -Protocols: HTTP +Protocols: HTTP imap smtp Added: 7.81.0 -Category: http upload +Category: http upload post Multi: single See-also: - form diff --git a/docs/cmdline-opts/form-string.md b/docs/cmdline-opts/form-string.md index 3c1f7b532..e58ad625d 100644 --- a/docs/cmdline-opts/form-string.md +++ b/docs/cmdline-opts/form-string.md @@ -5,7 +5,7 @@ Long: form-string Help: Specify multipart MIME data Protocols: HTTP SMTP IMAP Arg: -Category: http upload +Category: http upload post smtp imap Added: 7.13.2 Multi: append See-also: diff --git a/docs/cmdline-opts/form.md b/docs/cmdline-opts/form.md index 8a4c91e5a..5daa571e6 100644 --- a/docs/cmdline-opts/form.md +++ b/docs/cmdline-opts/form.md @@ -7,7 +7,7 @@ Arg: Help: Specify multipart MIME data Protocols: HTTP SMTP IMAP Mutexed: data head upload-file -Category: http upload +Category: http upload post imap smtp Added: 5.0 Multi: append See-also: diff --git a/docs/cmdline-opts/ftp-create-dirs.md b/docs/cmdline-opts/ftp-create-dirs.md index 5151e336c..3e851ccae 100644 --- a/docs/cmdline-opts/ftp-create-dirs.md +++ b/docs/cmdline-opts/ftp-create-dirs.md @@ -4,7 +4,7 @@ SPDX-License-Identifier: curl Long: ftp-create-dirs Protocols: FTP SFTP Help: Create the remote dirs if not present -Category: ftp sftp curl +Category: ftp sftp Added: 7.10.7 Multi: boolean See-also: diff --git a/docs/cmdline-opts/gen.pl b/docs/cmdline-opts/gen.pl deleted file mode 100755 index f4dcce8ae..000000000 --- a/docs/cmdline-opts/gen.pl +++ /dev/null @@ -1,965 +0,0 @@ -#!/usr/bin/env perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -=begin comment - -This script generates the manpage. - -Example: gen.pl [files] > curl.1 - -Dev notes: - -We open *input* files in :crlf translation (a no-op on many platforms) in -case we have CRLF line endings in Windows but a perl that defaults to LF. -Unfortunately it seems some perls like msysgit cannot handle a global input-only -:crlf so it has to be specified on each file open for text input. - -=end comment -=cut - -my %optshort; -my %optlong; -my %helplong; -my %arglong; -my %redirlong; -my %protolong; -my %catlong; - -use POSIX qw(strftime); -my @ts; -if (defined($ENV{SOURCE_DATE_EPOCH})) { - @ts = localtime($ENV{SOURCE_DATE_EPOCH}); -} else { - @ts = localtime; -} -my $date = strftime "%B %d %Y", @ts; -my $year = strftime "%Y", @ts; -my $version = "unknown"; -my $globals; - -open(INC, "<../../include/curl/curlver.h"); -while() { - if($_ =~ /^#define LIBCURL_VERSION \"([0-9.]*)/) { - $version = $1; - last; - } -} -close(INC); - -# get the long name version, return the man page string -sub manpageify { - my ($k)=@_; - my $l; - my $klong = $k; - # quote "bare" minuses in the long name - $klong =~ s/-/\\-/g; - if($optlong{$k} ne "") { - # both short + long - $l = "\\fI-".$optlong{$k}.", \\-\\-$klong\\fP"; - } - else { - # only long - $l = "\\fI\\-\\-$klong\\fP"; - } - return $l; -} - -sub printdesc { - my @desc = @_; - my $exam = 0; - for my $d (@desc) { - print $d; - } -} - -sub seealso { - my($standalone, $data)=@_; - if($standalone) { - return sprintf - ".SH \"SEE ALSO\"\n$data\n"; - } - else { - return "See also $data. "; - } -} - -sub overrides { - my ($standalone, $data)=@_; - if($standalone) { - return ".SH \"OVERRIDES\"\n$data\n"; - } - else { - return $data; - } -} - -sub protocols { - my ($standalone, $data)=@_; - if($standalone) { - return ".SH \"PROTOCOLS\"\n$data\n"; - } - else { - return "($data) "; - } -} - -sub too_old { - my ($version)=@_; - my $a = 999999; - if($version =~ /^(\d+)\.(\d+)\.(\d+)/) { - $a = $1 * 1000 + $2 * 10 + $3; - } - elsif($version =~ /^(\d+)\.(\d+)/) { - $a = $1 * 1000 + $2 * 10; - } - if($a < 7500) { - # we consider everything before 7.50.0 to be too old to mention - # specific changes for - return 1; - } - return 0; -} - -sub added { - my ($standalone, $data)=@_; - if(too_old($data)) { - # do not mention ancient additions - return ""; - } - if($standalone) { - return ".SH \"ADDED\"\nAdded in curl version $data\n"; - } - else { - return "Added in $data. "; - } -} - -sub render { - my ($fh, $f, $line) = @_; - my @desc; - my $tablemode = 0; - my $header = 0; - # if $top is TRUE, it means a top-level page and not a command line option - my $top = ($line == 1); - my $quote; - $start = 0; - - while(<$fh>) { - my $d = $_; - $line++; - if($d =~ /^\.(SH|BR|IP|B)/) { - print STDERR "$f:$line:1:ERROR: nroff instruction in input: \".$1\"\n"; - return 4; - } - if(/^ * # NAME @@ -121,7 +122,7 @@ user running the libcurl application, SCP: or SFTP: URLs could access password or private-key protected resources, e.g. **sftp://user@some-internal-server/etc/passwd** -The CURLOPT_REDIR_PROTOCOLS(3) and CURLOPT_NETRC(3) options can be +The CURLOPT_REDIR_PROTOCOLS_STR(3) and CURLOPT_NETRC(3) options can be used to mitigate against this kind of attack. A redirect can also specify a location available only on the machine running @@ -132,7 +133,7 @@ E.g. **http://127.0.0.1/** or **http://intranet/delete-stuff.cgi?delete=all** or Applications can mitigate against this by disabling CURLOPT_FOLLOWLOCATION(3) and handling redirects itself, sanitizing URLs as necessary. Alternately, an app could leave CURLOPT_FOLLOWLOCATION(3) -enabled but set CURLOPT_REDIR_PROTOCOLS(3) and install a +enabled but set CURLOPT_REDIR_PROTOCOLS_STR(3) and install a CURLOPT_OPENSOCKETFUNCTION(3) or CURLOPT_PREREQFUNCTION(3) callback function in which addresses are sanitized before use. @@ -164,7 +165,7 @@ non-redirected URLs, if the user is allowed to specify an arbitrary URL that could point to a private resource. For example, a web app providing a translation service might happily translate **file://localhost/etc/passwd** and display the result. Applications can mitigate against this with the -CURLOPT_PROTOCOLS(3) option as well as by similar mitigation techniques +CURLOPT_PROTOCOLS_STR(3) option as well as by similar mitigation techniques for redirections. A malicious FTP server could in response to the PASV command return an IP @@ -308,9 +309,9 @@ Remedies: curl command lines can use *--proto* to limit what URL schemes it accepts -## Use CURLOPT_PROTOCOLS +## Use CURLOPT_PROTOCOLS_STR -libcurl programs can use CURLOPT_PROTOCOLS(3) to limit what URL schemes it accepts +libcurl programs can use CURLOPT_PROTOCOLS_STR(3) to limit what URL schemes it accepts ## consider not allowing the user to set the full URL @@ -380,10 +381,11 @@ CURLOPT_TIMEOUT(3) and/or CURLOPT_LOW_SPEED_LIMIT(3) options can be used to mitigate against this. A malicious server could cause libcurl to download an infinite amount of data, -potentially causing all of memory or disk to be filled. Setting the -CURLOPT_MAXFILESIZE_LARGE(3) option is not sufficient to guard against -this. Instead, applications should monitor the amount of data received within -the write or progress callback and abort once the limit is reached. +potentially causing system resources to be exhausted resulting in a system or +application crash. Setting the CURLOPT_MAXFILESIZE_LARGE(3) option is not +sufficient to guard against this. Instead, applications should monitor the +amount of data received within the write or progress callback and abort once +the limit is reached. A malicious HTTP server could cause an infinite redirection loop, causing a denial-of-service. This can be mitigated by using the diff --git a/docs/libcurl/libcurl-share.md b/docs/libcurl/libcurl-share.md index f820967df..6d00c9c67 100644 --- a/docs/libcurl/libcurl-share.md +++ b/docs/libcurl/libcurl-share.md @@ -13,6 +13,7 @@ See-also: - libcurl-multi (3) Protocol: - All +Added-in: n/a --- # NAME diff --git a/docs/libcurl/libcurl-symbols.md b/docs/libcurl/libcurl-symbols.md new file mode 100644 index 000000000..5e6a5a1f6 --- /dev/null +++ b/docs/libcurl/libcurl-symbols.md @@ -0,0 +1,3429 @@ +--- +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Title: libcurl-symbols +Section: 3 +Source: libcurl +Protocol: + - All +See-also: + - libcurl (3) + - libcurl-easy (3) + - libcurl-multi (3) + - libcurl-security (3) + - libcurl-thread (3) +Added-in: n/a +--- +# libcurl symbols + +This man page details version information for public symbols provided in the +libcurl header files. This lists the first version in which the symbol was +introduced and for some symbols two additional information pieces: + +The first version in which the symbol is marked "deprecated" - meaning that +since that version no new code should be written to use the symbol as it is +marked for getting removed in a future. + +The last version that featured the specific symbol. Using the symbol in source +code makes it no longer compile error-free after that specified version. + +This man page is automatically generated from the symbols-in-versions file. + +## CURL_AT_LEAST_VERSION +Introduced in 7.43.0. + +## CURL_BLOB_COPY +Introduced in 7.71.0. + +## CURL_BLOB_NOCOPY +Introduced in 7.71.0. + +## CURL_CHUNK_BGN_FUNC_FAIL +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURL_CHUNK_BGN_FUNC_OK +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURL_CHUNK_BGN_FUNC_SKIP +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURL_CHUNK_END_FUNC_FAIL +Introduced in 7.21.0. See CURLOPT_CHUNK_END_FUNCTION(3). + +## CURL_CHUNK_END_FUNC_OK +Introduced in 7.21.0. See CURLOPT_CHUNK_END_FUNCTION(3). + +## CURL_CSELECT_ERR +Introduced in 7.16.3. See curl_multi_socket_action(3). + +## CURL_CSELECT_IN +Introduced in 7.16.3. See curl_multi_socket_action(3). + +## CURL_CSELECT_OUT +Introduced in 7.16.3. See curl_multi_socket_action(3). + +## CURL_DEPRECATED +Introduced in 7.87.0. + +## CURL_DID_MEMORY_FUNC_TYPEDEFS +Introduced in 7.49.0. + +## CURL_EASY_NONE +Introduced in 7.14.0. Last used in 7.15.4. + +## CURL_EASY_TIMEOUT +Introduced in 7.14.0. Last used in 7.15.4. + +## CURL_ERROR_SIZE +Introduced in 7.1. + +## CURL_FNMATCHFUNC_FAIL +Introduced in 7.21.0. See CURLOPT_FNMATCH_FUNCTION(3). + +## CURL_FNMATCHFUNC_MATCH +Introduced in 7.21.0. See CURLOPT_FNMATCH_FUNCTION(3). + +## CURL_FNMATCHFUNC_NOMATCH +Introduced in 7.21.0. See CURLOPT_FNMATCH_FUNCTION(3). + +## CURL_FORMADD_DISABLED +Introduced in 7.12.1. Deprecated since 7.56.0. + +## CURL_FORMADD_ILLEGAL_ARRAY +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURL_FORMADD_INCOMPLETE +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURL_FORMADD_MEMORY +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURL_FORMADD_NULL +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURL_FORMADD_OK +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURL_FORMADD_OPTION_TWICE +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURL_FORMADD_UNKNOWN_OPTION +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURL_GLOBAL_ACK_EINTR +Introduced in 7.30.0. See curl_global_init(3). + +## CURL_GLOBAL_ALL +Introduced in 7.8. See curl_global_init(3). + +## CURL_GLOBAL_DEFAULT +Introduced in 7.8. See curl_global_init(3). + +## CURL_GLOBAL_NOTHING +Introduced in 7.8. See curl_global_init(3). + +## CURL_GLOBAL_SSL +Introduced in 7.8. See curl_global_init(3). + +## CURL_GLOBAL_WIN32 +Introduced in 7.8.1. See curl_global_init(3). + +## CURL_HET_DEFAULT +Introduced in 7.59.0. See CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS(3). + +## CURL_HTTP_VERSION_1_0 +Introduced in 7.9.1. See CURLOPT_HTTP_VERSION(3). + +## CURL_HTTP_VERSION_1_1 +Introduced in 7.9.1. See CURLOPT_HTTP_VERSION(3). + +## CURL_HTTP_VERSION_2 +Introduced in 7.43.0. See CURLOPT_HTTP_VERSION(3). + +## CURL_HTTP_VERSION_2_0 +Introduced in 7.33.0. See CURLOPT_HTTP_VERSION(3). + +## CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE +Introduced in 7.49.0. See CURLOPT_HTTP_VERSION(3). + +## CURL_HTTP_VERSION_2TLS +Introduced in 7.47.0. See CURLOPT_HTTP_VERSION(3). + +## CURL_HTTP_VERSION_3 +Introduced in 7.66.0. See CURLOPT_HTTP_VERSION(3). + +## CURL_HTTP_VERSION_3ONLY +Introduced in 7.88.0. See CURLOPT_HTTP_VERSION(3). + +## CURL_HTTP_VERSION_NONE +Introduced in 7.9.1. See CURLOPT_HTTP_VERSION(3). + +## CURL_HTTPPOST_BUFFER +Introduced in 7.46.0. See curl_formadd(3). + +## CURL_HTTPPOST_CALLBACK +Introduced in 7.46.0. See curl_formadd(3). + +## CURL_HTTPPOST_FILENAME +Introduced in 7.46.0. See curl_formadd(3). + +## CURL_HTTPPOST_LARGE +Introduced in 7.46.0. See curl_formadd(3). + +## CURL_HTTPPOST_PTRBUFFER +Introduced in 7.46.0. See curl_formadd(3). + +## CURL_HTTPPOST_PTRCONTENTS +Introduced in 7.46.0. See curl_formadd(3). + +## CURL_HTTPPOST_PTRNAME +Introduced in 7.46.0. See curl_formadd(3). + +## CURL_HTTPPOST_READFILE +Introduced in 7.46.0. See curl_formadd(3). + +## CURL_IGNORE_DEPRECATION +Introduced in 7.87.0. + +## CURL_IPRESOLVE_V4 +Introduced in 7.10.8. See CURLOPT_IPRESOLVE(3). + +## CURL_IPRESOLVE_V6 +Introduced in 7.10.8. See CURLOPT_IPRESOLVE(3). + +## CURL_IPRESOLVE_WHATEVER +Introduced in 7.10.8. See CURLOPT_IPRESOLVE(3). + +## CURL_ISOCPP +Introduced in 7.10.2. + +## CURL_LOCK_ACCESS_NONE +Introduced in 7.10.3. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_ACCESS_SHARED +Introduced in 7.10.3. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_ACCESS_SINGLE +Introduced in 7.10.3. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_DATA_CONNECT +Introduced in 7.10.3. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_DATA_COOKIE +Introduced in 7.10.3. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_DATA_DNS +Introduced in 7.10.3. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_DATA_HSTS +Introduced in 7.88.0. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_DATA_NONE +Introduced in 7.10.3. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_DATA_PSL +Introduced in 7.61.0. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_DATA_SHARE +Introduced in 7.10.4. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_DATA_SSL_SESSION +Introduced in 7.10.3. See CURLSHOPT_SHARE(3). + +## CURL_LOCK_TYPE_CONNECT +Introduced in 7.10. Last used in 7.10.2. + +## CURL_LOCK_TYPE_COOKIE +Introduced in 7.10. Last used in 7.10.2. + +## CURL_LOCK_TYPE_DNS +Introduced in 7.10. Last used in 7.10.2. + +## CURL_LOCK_TYPE_NONE +Introduced in 7.10. Last used in 7.10.2. + +## CURL_LOCK_TYPE_SSL_SESSION +Introduced in 7.10. Last used in 7.10.2. + +## CURL_MAX_HTTP_HEADER +Introduced in 7.19.7. + +## CURL_MAX_READ_SIZE +Introduced in 7.53.0. + +## CURL_MAX_WRITE_SIZE +Introduced in 7.9.7. + +## CURL_NETRC_IGNORED +Introduced in 7.9.8. + +## CURL_NETRC_OPTIONAL +Introduced in 7.9.8. + +## CURL_NETRC_REQUIRED +Introduced in 7.9.8. + +## CURL_POLL_IN +Introduced in 7.14.0. See CURLMOPT_SOCKETFUNCTION(3). + +## CURL_POLL_INOUT +Introduced in 7.14.0. See CURLMOPT_SOCKETFUNCTION(3). + +## CURL_POLL_NONE +Introduced in 7.14.0. See CURLMOPT_SOCKETFUNCTION(3). + +## CURL_POLL_OUT +Introduced in 7.14.0. See CURLMOPT_SOCKETFUNCTION(3). + +## CURL_POLL_REMOVE +Introduced in 7.14.0. See CURLMOPT_SOCKETFUNCTION(3). + +## CURL_PREREQFUNC_ABORT +Introduced in 7.79.0. + +## CURL_PREREQFUNC_OK +Introduced in 7.79.0. + +## CURL_PROGRESS_BAR +Introduced in 7.1.1. Last used in 7.4.1. + +## CURL_PROGRESS_STATS +Introduced in 7.1.1. Last used in 7.4.1. + +## CURL_PROGRESSFUNC_CONTINUE +Introduced in 7.68.0. + +## CURL_PULL_SYS_POLL_H +Introduced in 7.56.0. + +## CURL_PUSH_DENY +Introduced in 7.44.0. + +## CURL_PUSH_ERROROUT +Introduced in 7.72.0. + +## CURL_PUSH_OK +Introduced in 7.44.0. + +## CURL_READFUNC_ABORT +Introduced in 7.12.1. + +## CURL_READFUNC_PAUSE +Introduced in 7.18.0. + +## CURL_REDIR_GET_ALL +Introduced in 7.19.1. + +## CURL_REDIR_POST_301 +Introduced in 7.19.1. See CURLOPT_POSTREDIR(3). + +## CURL_REDIR_POST_302 +Introduced in 7.19.1. See CURLOPT_POSTREDIR(3). + +## CURL_REDIR_POST_303 +Introduced in 7.25.1. See CURLOPT_POSTREDIR(3). + +## CURL_REDIR_POST_ALL +Introduced in 7.19.1. See CURLOPT_POSTREDIR(3). + +## CURL_RTSPREQ_ANNOUNCE +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_DESCRIBE +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_GET_PARAMETER +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_NONE +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_OPTIONS +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_PAUSE +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_PLAY +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_RECEIVE +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_RECORD +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_SET_PARAMETER +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_SETUP +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_RTSPREQ_TEARDOWN +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURL_SEEKFUNC_CANTSEEK +Introduced in 7.19.5. See CURLOPT_SEEKFUNCTION(3). + +## CURL_SEEKFUNC_FAIL +Introduced in 7.19.5. See CURLOPT_SEEKFUNCTION(3). + +## CURL_SEEKFUNC_OK +Introduced in 7.19.5. See CURLOPT_SEEKFUNCTION(3). + +## CURL_SOCKET_BAD +Introduced in 7.14.0. + +## CURL_SOCKET_TIMEOUT +Introduced in 7.14.0. + +## CURL_SOCKOPT_ALREADY_CONNECTED +Introduced in 7.21.5. + +## CURL_SOCKOPT_ERROR +Introduced in 7.21.5. + +## CURL_SOCKOPT_OK +Introduced in 7.21.5. + +## CURL_SSLVERSION_DEFAULT +Introduced in 7.9.2. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_MAX_DEFAULT +Introduced in 7.54.0. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_MAX_NONE +Introduced in 7.54.0. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_MAX_TLSv1_0 +Introduced in 7.54.0. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_MAX_TLSv1_1 +Introduced in 7.54.0. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_MAX_TLSv1_2 +Introduced in 7.54.0. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_MAX_TLSv1_3 +Introduced in 7.54.0. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_SSLv2 +Introduced in 7.9.2. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_SSLv3 +Introduced in 7.9.2. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_TLSv1 +Introduced in 7.9.2. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_TLSv1_0 +Introduced in 7.34.0. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_TLSv1_1 +Introduced in 7.34.0. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_TLSv1_2 +Introduced in 7.34.0. See CURLOPT_SSLVERSION(3). + +## CURL_SSLVERSION_TLSv1_3 +Introduced in 7.52.0. See CURLOPT_SSLVERSION(3). + +## CURL_STRICTER +Introduced in 7.50.2. + +## CURL_TIMECOND_IFMODSINCE +Introduced in 7.9.7. See CURLOPT_TIMECONDITION(3). + +## CURL_TIMECOND_IFUNMODSINCE +Introduced in 7.9.7. See CURLOPT_TIMECONDITION(3). + +## CURL_TIMECOND_LASTMOD +Introduced in 7.9.7. See CURLOPT_TIMECONDITION(3). + +## CURL_TIMECOND_NONE +Introduced in 7.9.7. See CURLOPT_TIMECONDITION(3). + +## CURL_TLSAUTH_NONE +Introduced in 7.21.4. + +## CURL_TLSAUTH_SRP +Introduced in 7.21.4. + +## CURL_TRAILERFUNC_ABORT +Introduced in 7.64.0. See CURLOPT_TRAILERFUNCTION(3). + +## CURL_TRAILERFUNC_OK +Introduced in 7.64.0. See CURLOPT_TRAILERFUNCTION(3). + +## CURL_UPKEEP_INTERVAL_DEFAULT +Introduced in 7.62.0. + +## CURL_VERSION_ALTSVC +Introduced in 7.64.1. See curl_version_info(3). + +## CURL_VERSION_ASYNCHDNS +Introduced in 7.10.7. See curl_version_info(3). + +## CURL_VERSION_BITS +Introduced in 7.43.0. See curl_version_info(3). + +## CURL_VERSION_BROTLI +Introduced in 7.57.0. See curl_version_info(3). + +## CURL_VERSION_CONV +Introduced in 7.15.4. See curl_version_info(3). + +## CURL_VERSION_CURLDEBUG +Introduced in 7.19.6. See curl_version_info(3). + +## CURL_VERSION_DEBUG +Introduced in 7.10.6. See curl_version_info(3). + +## CURL_VERSION_GSASL +Introduced in 7.76.0. See curl_version_info(3). + +## CURL_VERSION_GSSAPI +Introduced in 7.38.0. See curl_version_info(3). + +## CURL_VERSION_GSSNEGOTIATE +Introduced in 7.10.6. Deprecated since 7.38.0. + +## CURL_VERSION_HSTS +Introduced in 7.74.0. See curl_version_info(3). + +## CURL_VERSION_HTTP2 +Introduced in 7.33.0. See curl_version_info(3). + +## CURL_VERSION_HTTP3 +Introduced in 7.66.0. See curl_version_info(3). + +## CURL_VERSION_HTTPS_PROXY +Introduced in 7.52.0. See curl_version_info(3). + +## CURL_VERSION_IDN +Introduced in 7.12.0. See curl_version_info(3). + +## CURL_VERSION_IPV6 +Introduced in 7.10. See curl_version_info(3). + +## CURL_VERSION_KERBEROS4 +Introduced in 7.10. Deprecated since 7.33.0. + +## CURL_VERSION_KERBEROS5 +Introduced in 7.40.0. See curl_version_info(3). + +## CURL_VERSION_LARGEFILE +Introduced in 7.11.1. See curl_version_info(3). + +## CURL_VERSION_LIBZ +Introduced in 7.10. See curl_version_info(3). + +## CURL_VERSION_MULTI_SSL +Introduced in 7.56.0. See curl_version_info(3). + +## CURL_VERSION_NTLM +Introduced in 7.10.6. See curl_version_info(3). + +## CURL_VERSION_NTLM_WB +Introduced in 7.22.0. See curl_version_info(3). + +## CURL_VERSION_PSL +Introduced in 7.47.0. See curl_version_info(3). + +## CURL_VERSION_SPNEGO +Introduced in 7.10.8. See curl_version_info(3). + +## CURL_VERSION_SSL +Introduced in 7.10. See curl_version_info(3). + +## CURL_VERSION_SSPI +Introduced in 7.13.2. See curl_version_info(3). + +## CURL_VERSION_THREADSAFE +Introduced in 7.84.0. See curl_version_info(3). + +## CURL_VERSION_TLSAUTH_SRP +Introduced in 7.21.4. See curl_version_info(3). + +## CURL_VERSION_UNICODE +Introduced in 7.72.0. See curl_version_info(3). + +## CURL_VERSION_UNIX_SOCKETS +Introduced in 7.40.0. See curl_version_info(3). + +## CURL_VERSION_ZSTD +Introduced in 7.72.0. See curl_version_info(3). + +## CURL_WAIT_POLLIN +Introduced in 7.28.0. + +## CURL_WAIT_POLLOUT +Introduced in 7.28.0. + +## CURL_WAIT_POLLPRI +Introduced in 7.28.0. + +## CURL_WIN32 +Introduced in 7.69.0. Last used in 8.5.0. + +## CURL_WRITEFUNC_ERROR +Introduced in 7.87.0. + +## CURL_WRITEFUNC_PAUSE +Introduced in 7.18.0. + +## CURL_ZERO_TERMINATED +Introduced in 7.56.0. + +## CURLALTSVC_H1 +Introduced in 7.64.1. See CURLOPT_ALTSVC_CTRL(3). + +## CURLALTSVC_H2 +Introduced in 7.64.1. See CURLOPT_ALTSVC_CTRL(3). + +## CURLALTSVC_H3 +Introduced in 7.64.1. See CURLOPT_ALTSVC_CTRL(3). + +## CURLALTSVC_READONLYFILE +Introduced in 7.64.1. See CURLOPT_ALTSVC_CTRL(3). + +## CURLAUTH_ANY +Introduced in 7.10.6. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_ANYSAFE +Introduced in 7.10.6. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_AWS_SIGV4 +Introduced in 7.75.0. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_BASIC +Introduced in 7.10.6. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_BEARER +Introduced in 7.61.0. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_DIGEST +Introduced in 7.10.6. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_DIGEST_IE +Introduced in 7.19.3. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_GSSAPI +Introduced in 7.55.0. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_GSSNEGOTIATE +Introduced in 7.10.6. Deprecated since 7.38.0. + +## CURLAUTH_NEGOTIATE +Introduced in 7.38.0. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_NONE +Introduced in 7.10.6. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_NTLM +Introduced in 7.10.6. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_NTLM_WB +Introduced in 7.22.0. See CURLOPT_HTTPAUTH(3). + +## CURLAUTH_ONLY +Introduced in 7.21.3. See CURLOPT_HTTPAUTH(3). + +## CURLCLOSEPOLICY_CALLBACK +Introduced in 7.7. Deprecated since 7.16.1. + +## CURLCLOSEPOLICY_LEAST_RECENTLY_USED +Introduced in 7.7. Deprecated since 7.16.1. + +## CURLCLOSEPOLICY_LEAST_TRAFFIC +Introduced in 7.7. Deprecated since 7.16.1. + +## CURLCLOSEPOLICY_NONE +Introduced in 7.7. Deprecated since 7.16.1. + +## CURLCLOSEPOLICY_OLDEST +Introduced in 7.7. Deprecated since 7.16.1. + +## CURLCLOSEPOLICY_SLOWEST +Introduced in 7.7. Deprecated since 7.16.1. + +## CURLE_ABORTED_BY_CALLBACK +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_AGAIN +Introduced in 7.18.2. See libcurl-errors(3). + +## CURLE_ALREADY_COMPLETE +Introduced in 7.7.2. Deprecated since 7.8. + +## CURLE_AUTH_ERROR +Introduced in 7.66.0. See libcurl-errors(3). + +## CURLE_BAD_CALLING_ORDER +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_BAD_CONTENT_ENCODING +Introduced in 7.10. See libcurl-errors(3). + +## CURLE_BAD_DOWNLOAD_RESUME +Introduced in 7.10. See libcurl-errors(3). + +## CURLE_BAD_FUNCTION_ARGUMENT +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_BAD_PASSWORD_ENTERED +Introduced in 7.4.2. Deprecated since 7.17.0. + +## CURLE_CHUNK_FAILED +Introduced in 7.21.0. See libcurl-errors(3). + +## CURLE_CONV_FAILED +Introduced in 7.15.4. Deprecated since 7.82.0. + +## CURLE_CONV_REQD +Introduced in 7.15.4. Deprecated since 7.82.0. + +## CURLE_COULDNT_CONNECT +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_COULDNT_RESOLVE_HOST +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_COULDNT_RESOLVE_PROXY +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FAILED_INIT +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FILE_COULDNT_READ_FILE +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FILESIZE_EXCEEDED +Introduced in 7.10.8. See libcurl-errors(3). + +## CURLE_FTP_ACCEPT_FAILED +Introduced in 7.24.0. See libcurl-errors(3). + +## CURLE_FTP_ACCEPT_TIMEOUT +Introduced in 7.24.0. See libcurl-errors(3). + +## CURLE_FTP_ACCESS_DENIED +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_FTP_BAD_DOWNLOAD_RESUME +Introduced in 7.1. Deprecated since 7.1. + +## CURLE_FTP_BAD_FILE_LIST +Introduced in 7.21.0. See libcurl-errors(3). + +## CURLE_FTP_CANT_GET_HOST +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FTP_CANT_RECONNECT +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_FTP_COULDNT_GET_SIZE +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_FTP_COULDNT_RETR_FILE +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FTP_COULDNT_SET_ASCII +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_FTP_COULDNT_SET_BINARY +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_FTP_COULDNT_SET_TYPE +Introduced in 7.17.0. See libcurl-errors(3). + +## CURLE_FTP_COULDNT_STOR_FILE +Introduced in 7.1. Deprecated since 7.16.3. + +## CURLE_FTP_COULDNT_USE_REST +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FTP_PARTIAL_FILE +Introduced in 7.1. Deprecated since 7.1. + +## CURLE_FTP_PORT_FAILED +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FTP_PRET_FAILED +Introduced in 7.20.0. See libcurl-errors(3). + +## CURLE_FTP_QUOTE_ERROR +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_FTP_SSL_FAILED +Introduced in 7.11.0. Deprecated since 7.17.0. + +## CURLE_FTP_USER_PASSWORD_INCORRECT +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_FTP_WEIRD_227_FORMAT +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FTP_WEIRD_PASS_REPLY +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FTP_WEIRD_PASV_REPLY +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_FTP_WEIRD_SERVER_REPLY +Introduced in 7.1. Deprecated since 7.51.0. + +## CURLE_FTP_WEIRD_USER_REPLY +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_FTP_WRITE_ERROR +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_FUNCTION_NOT_FOUND +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_GOT_NOTHING +Introduced in 7.9.1. See libcurl-errors(3). + +## CURLE_HTTP2 +Introduced in 7.38.0. See libcurl-errors(3). + +## CURLE_HTTP2_STREAM +Introduced in 7.49.0. See libcurl-errors(3). + +## CURLE_HTTP3 +Introduced in 7.68.0. See libcurl-errors(3). + +## CURLE_HTTP_NOT_FOUND +Introduced in 7.1. Deprecated since 7.10.3. + +## CURLE_HTTP_PORT_FAILED +Introduced in 7.3. Deprecated since 7.12.0. + +## CURLE_HTTP_POST_ERROR +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_HTTP_RANGE_ERROR +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_HTTP_RETURNED_ERROR +Introduced in 7.10.3. See libcurl-errors(3). + +## CURLE_INTERFACE_FAILED +Introduced in 7.12.0. See libcurl-errors(3). + +## CURLE_LDAP_CANNOT_BIND +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_LDAP_INVALID_URL +Introduced in 7.10.8. Deprecated since 7.82.0. + +## CURLE_LDAP_SEARCH_FAILED +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_LIBRARY_NOT_FOUND +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_LOGIN_DENIED +Introduced in 7.13.1. See libcurl-errors(3). + +## CURLE_MALFORMAT_USER +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_NO_CONNECTION_AVAILABLE +Introduced in 7.30.0. See libcurl-errors(3). + +## CURLE_NOT_BUILT_IN +Introduced in 7.21.5. See libcurl-errors(3). + +## CURLE_OK +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_OPERATION_TIMEDOUT +Introduced in 7.10.2. See libcurl-errors(3). + +## CURLE_OPERATION_TIMEOUTED +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_OUT_OF_MEMORY +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_PARTIAL_FILE +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_PEER_FAILED_VERIFICATION +Introduced in 7.17.1. See libcurl-errors(3). + +## CURLE_PROXY +Introduced in 7.73.0. See libcurl-errors(3). + +## CURLE_QUIC_CONNECT_ERROR +Introduced in 7.69.0. See libcurl-errors(3). + +## CURLE_QUOTE_ERROR +Introduced in 7.17.0. See libcurl-errors(3). + +## CURLE_RANGE_ERROR +Introduced in 7.17.0. See libcurl-errors(3). + +## CURLE_READ_ERROR +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_RECURSIVE_API_CALL +Introduced in 7.59.0. See libcurl-errors(3). + +## CURLE_RECV_ERROR +Introduced in 7.10. See libcurl-errors(3). + +## CURLE_REMOTE_ACCESS_DENIED +Introduced in 7.17.0. See libcurl-errors(3). + +## CURLE_REMOTE_DISK_FULL +Introduced in 7.17.0. See libcurl-errors(3). + +## CURLE_REMOTE_FILE_EXISTS +Introduced in 7.17.0. See libcurl-errors(3). + +## CURLE_REMOTE_FILE_NOT_FOUND +Introduced in 7.16.1. See libcurl-errors(3). + +## CURLE_RTSP_CSEQ_ERROR +Introduced in 7.20.0. See libcurl-errors(3). + +## CURLE_RTSP_SESSION_ERROR +Introduced in 7.20.0. See libcurl-errors(3). + +## CURLE_SEND_ERROR +Introduced in 7.10. See libcurl-errors(3). + +## CURLE_SEND_FAIL_REWIND +Introduced in 7.12.3. See libcurl-errors(3). + +## CURLE_SETOPT_OPTION_SYNTAX +Introduced in 7.78.0. See libcurl-errors(3). + +## CURLE_SHARE_IN_USE +Introduced in 7.9.6. Deprecated since 7.17.0. + +## CURLE_SSH +Introduced in 7.16.1. See libcurl-errors(3). + +## CURLE_SSL_CACERT +Introduced in 7.10. Deprecated since 7.62.0. + +## CURLE_SSL_CACERT_BADFILE +Introduced in 7.16.0. See libcurl-errors(3). + +## CURLE_SSL_CERTPROBLEM +Introduced in 7.10. See libcurl-errors(3). + +## CURLE_SSL_CIPHER +Introduced in 7.10. See libcurl-errors(3). + +## CURLE_SSL_CLIENTCERT +Introduced in 7.77.0. See libcurl-errors(3). + +## CURLE_SSL_CONNECT_ERROR +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_SSL_CRL_BADFILE +Introduced in 7.19.0. See libcurl-errors(3). + +## CURLE_SSL_ENGINE_INITFAILED +Introduced in 7.12.3. See libcurl-errors(3). + +## CURLE_SSL_ENGINE_NOTFOUND +Introduced in 7.9.3. See libcurl-errors(3). + +## CURLE_SSL_ENGINE_SETFAILED +Introduced in 7.9.3. See libcurl-errors(3). + +## CURLE_SSL_INVALIDCERTSTATUS +Introduced in 7.41.0. See libcurl-errors(3). + +## CURLE_SSL_ISSUER_ERROR +Introduced in 7.19.0. See libcurl-errors(3). + +## CURLE_SSL_PEER_CERTIFICATE +Introduced in 7.8. Deprecated since 7.17.1. + +## CURLE_SSL_PINNEDPUBKEYNOTMATCH +Introduced in 7.39.0. See libcurl-errors(3). + +## CURLE_SSL_SHUTDOWN_FAILED +Introduced in 7.16.1. See libcurl-errors(3). + +## CURLE_TELNET_OPTION_SYNTAX +Introduced in 7.7. See libcurl-errors(3). + +## CURLE_TFTP_DISKFULL +Introduced in 7.15.0. Deprecated since 7.17.0. + +## CURLE_TFTP_EXISTS +Introduced in 7.15.0. Deprecated since 7.17.0. + +## CURLE_TFTP_ILLEGAL +Introduced in 7.15.0. See libcurl-errors(3). + +## CURLE_TFTP_NOSUCHUSER +Introduced in 7.15.0. See libcurl-errors(3). + +## CURLE_TFTP_NOTFOUND +Introduced in 7.15.0. See libcurl-errors(3). + +## CURLE_TFTP_PERM +Introduced in 7.15.0. See libcurl-errors(3). + +## CURLE_TFTP_UNKNOWNID +Introduced in 7.15.0. See libcurl-errors(3). + +## CURLE_TOO_LARGE +Introduced in 8.6.0. See libcurl-errors(3). + +## CURLE_TOO_MANY_REDIRECTS +Introduced in 7.5. See libcurl-errors(3). + +## CURLE_UNKNOWN_OPTION +Introduced in 7.21.5. See libcurl-errors(3). + +## CURLE_UNKNOWN_TELNET_OPTION +Introduced in 7.7. Deprecated since 7.21.5. + +## CURLE_UNRECOVERABLE_POLL +Introduced in 7.84.0. See libcurl-errors(3). + +## CURLE_UNSUPPORTED_PROTOCOL +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_UPLOAD_FAILED +Introduced in 7.16.3. See libcurl-errors(3). + +## CURLE_URL_MALFORMAT +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_URL_MALFORMAT_USER +Introduced in 7.1. Deprecated since 7.17.0. + +## CURLE_USE_SSL_FAILED +Introduced in 7.17.0. See libcurl-errors(3). + +## CURLE_WEIRD_SERVER_REPLY +Introduced in 7.51.0. See libcurl-errors(3). + +## CURLE_WRITE_ERROR +Introduced in 7.1. See libcurl-errors(3). + +## CURLE_ECH_REQUIRED +Introduced in 8.8.0. See libcurl-errors(3). + +## CURLFILETYPE_DEVICE_BLOCK +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFILETYPE_DEVICE_CHAR +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFILETYPE_DIRECTORY +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFILETYPE_DOOR +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFILETYPE_FILE +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFILETYPE_NAMEDPIPE +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFILETYPE_SOCKET +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFILETYPE_SYMLINK +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFILETYPE_UNKNOWN +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFINFOFLAG_KNOWN_FILENAME +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFINFOFLAG_KNOWN_FILETYPE +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFINFOFLAG_KNOWN_GID +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFINFOFLAG_KNOWN_HLINKCOUNT +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFINFOFLAG_KNOWN_PERM +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFINFOFLAG_KNOWN_SIZE +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFINFOFLAG_KNOWN_TIME +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFINFOFLAG_KNOWN_UID +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLFORM_ARRAY +Introduced in 7.9.1. Deprecated since 7.56.0. + +## CURLFORM_ARRAY_END +Introduced in 7.9.1. Deprecated since 7.9.5. + +## CURLFORM_ARRAY_START +Introduced in 7.9.1. Deprecated since 7.9.5. + +## CURLFORM_BUFFER +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURLFORM_BUFFERLENGTH +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURLFORM_BUFFERPTR +Introduced in 7.9.8. Deprecated since 7.56.0. + +## CURLFORM_CONTENTHEADER +Introduced in 7.9.3. Deprecated since 7.56.0. + +## CURLFORM_CONTENTLEN +Introduced in 7.46.0. Deprecated since 7.56.0. + +## CURLFORM_CONTENTSLENGTH +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_CONTENTTYPE +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_COPYCONTENTS +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_COPYNAME +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_END +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_FILE +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_FILECONTENT +Introduced in 7.9.1. Deprecated since 7.56.0. + +## CURLFORM_FILENAME +Introduced in 7.9.6. Deprecated since 7.56.0. + +## CURLFORM_NAMELENGTH +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_NOTHING +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_PTRCONTENTS +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_PTRNAME +Introduced in 7.9. Deprecated since 7.56.0. + +## CURLFORM_STREAM +Introduced in 7.18.2. Deprecated since 7.56.0. + +## CURLFTP_CREATE_DIR +Introduced in 7.19.4. See CURLOPT_FTP_CREATE_MISSING_DIRS(3). + +## CURLFTP_CREATE_DIR_NONE +Introduced in 7.19.4. See CURLOPT_FTP_CREATE_MISSING_DIRS(3). + +## CURLFTP_CREATE_DIR_RETRY +Introduced in 7.19.4. See CURLOPT_FTP_CREATE_MISSING_DIRS(3). + +## CURLFTPAUTH_DEFAULT +Introduced in 7.12.2. See CURLOPT_FTPSSLAUTH(3). + +## CURLFTPAUTH_SSL +Introduced in 7.12.2. See CURLOPT_FTPSSLAUTH(3). + +## CURLFTPAUTH_TLS +Introduced in 7.12.2. See CURLOPT_FTPSSLAUTH(3). + +## CURLFTPMETHOD_DEFAULT +Introduced in 7.15.3. See CURLOPT_FTP_FILEMETHOD(3). + +## CURLFTPMETHOD_MULTICWD +Introduced in 7.15.3. See CURLOPT_FTP_FILEMETHOD(3). + +## CURLFTPMETHOD_NOCWD +Introduced in 7.15.3. See CURLOPT_FTP_FILEMETHOD(3). + +## CURLFTPMETHOD_SINGLECWD +Introduced in 7.15.3. See CURLOPT_FTP_FILEMETHOD(3). + +## CURLFTPSSL_ALL +Introduced in 7.11.0. Deprecated since 7.17.0. + +## CURLFTPSSL_CCC_ACTIVE +Introduced in 7.16.2. See CURLOPT_USE_SSL(3). + +## CURLFTPSSL_CCC_NONE +Introduced in 7.16.2. See CURLOPT_USE_SSL(3). + +## CURLFTPSSL_CCC_PASSIVE +Introduced in 7.16.1. See CURLOPT_USE_SSL(3). + +## CURLFTPSSL_CONTROL +Introduced in 7.11.0. Deprecated since 7.17.0. + +## CURLFTPSSL_NONE +Introduced in 7.11.0. Deprecated since 7.17.0. + +## CURLFTPSSL_TRY +Introduced in 7.11.0. Deprecated since 7.17.0. + +## CURLGSSAPI_DELEGATION_FLAG +Introduced in 7.22.0. See CURLOPT_GSSAPI_DELEGATION(3). + +## CURLGSSAPI_DELEGATION_NONE +Introduced in 7.22.0. See CURLOPT_GSSAPI_DELEGATION(3). + +## CURLGSSAPI_DELEGATION_POLICY_FLAG +Introduced in 7.22.0. See CURLOPT_GSSAPI_DELEGATION(3). + +## CURLH_1XX +Introduced in 7.83.0. See curl_easy_header(3). + +## CURLH_CONNECT +Introduced in 7.83.0. See curl_easy_header(3). + +## CURLH_HEADER +Introduced in 7.83.0. See curl_easy_header(3). + +## CURLH_PSEUDO +Introduced in 7.83.0. See curl_easy_header(3). + +## CURLH_TRAILER +Introduced in 7.83.0. See curl_easy_header(3). + +## CURLHE_BAD_ARGUMENT +Introduced in 7.83.0. See libcurl-errors(3). + +## CURLHE_BADINDEX +Introduced in 7.83.0. See libcurl-errors(3). + +## CURLHE_MISSING +Introduced in 7.83.0. See libcurl-errors(3). + +## CURLHE_NOHEADERS +Introduced in 7.83.0. See libcurl-errors(3). + +## CURLHE_NOREQUEST +Introduced in 7.83.0. See libcurl-errors(3). + +## CURLHE_NOT_BUILT_IN +Introduced in 7.83.0. See libcurl-errors(3). + +## CURLHE_OK +Introduced in 7.83.0. See libcurl-errors(3). + +## CURLHE_OUT_OF_MEMORY +Introduced in 7.83.0. See libcurl-errors(3). + +## CURLHEADER_SEPARATE +Introduced in 7.37.0. See CURLOPT_HEADEROPT(3). + +## CURLHEADER_UNIFIED +Introduced in 7.37.0. See CURLOPT_HEADEROPT(3). + +## CURLHSTS_ENABLE +Introduced in 7.74.0. See CURLOPT_HSTS_CTRL(3). + +## CURLHSTS_READONLYFILE +Introduced in 7.74.0. See CURLOPT_HSTS_CTRL(3). + +## CURLINFO_ACTIVESOCKET +Introduced in 7.45.0. + +## CURLINFO_APPCONNECT_TIME +Introduced in 7.19.0. + +## CURLINFO_APPCONNECT_TIME_T +Introduced in 7.61.0. + +## CURLINFO_CAINFO +Introduced in 7.84.0. + +## CURLINFO_CAPATH +Introduced in 7.84.0. + +## CURLINFO_CERTINFO +Introduced in 7.19.1. + +## CURLINFO_CONDITION_UNMET +Introduced in 7.19.4. + +## CURLINFO_CONN_ID +Introduced in 8.2.0. + +## CURLINFO_CONNECT_TIME +Introduced in 7.4.1. + +## CURLINFO_CONNECT_TIME_T +Introduced in 7.61.0. + +## CURLINFO_CONTENT_LENGTH_DOWNLOAD +Introduced in 7.6.1. Deprecated since 7.55.0. + +## CURLINFO_CONTENT_LENGTH_DOWNLOAD_T +Introduced in 7.55.0. + +## CURLINFO_CONTENT_LENGTH_UPLOAD +Introduced in 7.6.1. Deprecated since 7.55.0. + +## CURLINFO_CONTENT_LENGTH_UPLOAD_T +Introduced in 7.55.0. + +## CURLINFO_CONTENT_TYPE +Introduced in 7.9.4. + +## CURLINFO_COOKIELIST +Introduced in 7.14.1. + +## CURLINFO_DATA_IN +Introduced in 7.9.6. See CURLOPT_DEBUGFUNCTION(3). + +## CURLINFO_DATA_OUT +Introduced in 7.9.6. See CURLOPT_DEBUGFUNCTION(3). + +## CURLINFO_DOUBLE +Introduced in 7.4.1. + +## CURLINFO_EFFECTIVE_METHOD +Introduced in 7.72.0. + +## CURLINFO_EFFECTIVE_URL +Introduced in 7.4. + +## CURLINFO_END +Introduced in 7.9.6. + +## CURLINFO_FILETIME +Introduced in 7.5. + +## CURLINFO_FILETIME_T +Introduced in 7.59.0. + +## CURLINFO_FTP_ENTRY_PATH +Introduced in 7.15.4. + +## CURLINFO_HEADER_IN +Introduced in 7.9.6. See CURLOPT_DEBUGFUNCTION(3). + +## CURLINFO_HEADER_OUT +Introduced in 7.9.6. See CURLOPT_DEBUGFUNCTION(3). + +## CURLINFO_HEADER_SIZE +Introduced in 7.4.1. + +## CURLINFO_HTTP_CODE +Introduced in 7.4.1. Deprecated since 7.10.8. + +## CURLINFO_HTTP_CONNECTCODE +Introduced in 7.10.7. + +## CURLINFO_HTTP_VERSION +Introduced in 7.50.0. + +## CURLINFO_HTTPAUTH_AVAIL +Introduced in 7.10.8. + +## CURLINFO_LASTONE +Introduced in 7.4.1. + +## CURLINFO_LASTSOCKET +Introduced in 7.15.2. Deprecated since 7.45.0. + +## CURLINFO_LOCAL_IP +Introduced in 7.21.0. + +## CURLINFO_LOCAL_PORT +Introduced in 7.21.0. + +## CURLINFO_LONG +Introduced in 7.4.1. + +## CURLINFO_MASK +Introduced in 7.4.1. + +## CURLINFO_NAMELOOKUP_TIME +Introduced in 7.4.1. + +## CURLINFO_NAMELOOKUP_TIME_T +Introduced in 7.61.0. + +## CURLINFO_NONE +Introduced in 7.4.1. + +## CURLINFO_NUM_CONNECTS +Introduced in 7.12.3. + +## CURLINFO_OFF_T +Introduced in 7.55.0. + +## CURLINFO_OS_ERRNO +Introduced in 7.12.2. + +## CURLINFO_PRETRANSFER_TIME +Introduced in 7.4.1. + +## CURLINFO_PRETRANSFER_TIME_T +Introduced in 7.61.0. + +## CURLINFO_PRIMARY_IP +Introduced in 7.19.0. + +## CURLINFO_PRIMARY_PORT +Introduced in 7.21.0. + +## CURLINFO_PRIVATE +Introduced in 7.10.3. + +## CURLINFO_PROTOCOL +Introduced in 7.52.0. Deprecated since 7.85.0. + +## CURLINFO_PROXY_ERROR +Introduced in 7.73.0. + +## CURLINFO_PROXY_SSL_VERIFYRESULT +Introduced in 7.52.0. + +## CURLINFO_PROXYAUTH_AVAIL +Introduced in 7.10.8. + +## CURLINFO_PTR +Introduced in 7.54.1. + +## CURLINFO_QUEUE_TIME_T +Introduced in 8.6.0. + +## CURLINFO_REDIRECT_COUNT +Introduced in 7.9.7. + +## CURLINFO_REDIRECT_TIME +Introduced in 7.9.7. + +## CURLINFO_REDIRECT_TIME_T +Introduced in 7.61.0. + +## CURLINFO_REDIRECT_URL +Introduced in 7.18.2. + +## CURLINFO_REFERER +Introduced in 7.76.0. + +## CURLINFO_REQUEST_SIZE +Introduced in 7.4.1. + +## CURLINFO_RESPONSE_CODE +Introduced in 7.10.8. + +## CURLINFO_RETRY_AFTER +Introduced in 7.66.0. + +## CURLINFO_RTSP_CLIENT_CSEQ +Introduced in 7.20.0. + +## CURLINFO_RTSP_CSEQ_RECV +Introduced in 7.20.0. + +## CURLINFO_RTSP_SERVER_CSEQ +Introduced in 7.20.0. + +## CURLINFO_RTSP_SESSION_ID +Introduced in 7.20.0. + +## CURLINFO_SCHEME +Introduced in 7.52.0. + +## CURLINFO_SIZE_DOWNLOAD +Introduced in 7.4.1. Deprecated since 7.55.0. + +## CURLINFO_SIZE_DOWNLOAD_T +Introduced in 7.55.0. + +## CURLINFO_SIZE_UPLOAD +Introduced in 7.4.1. Deprecated since 7.55.0. + +## CURLINFO_SIZE_UPLOAD_T +Introduced in 7.55.0. + +## CURLINFO_SLIST +Introduced in 7.12.3. + +## CURLINFO_SOCKET +Introduced in 7.45.0. + +## CURLINFO_SPEED_DOWNLOAD +Introduced in 7.4.1. Deprecated since 7.55.0. + +## CURLINFO_SPEED_DOWNLOAD_T +Introduced in 7.55.0. + +## CURLINFO_SPEED_UPLOAD +Introduced in 7.4.1. Deprecated since 7.55.0. + +## CURLINFO_SPEED_UPLOAD_T +Introduced in 7.55.0. + +## CURLINFO_SSL_DATA_IN +Introduced in 7.12.1. See CURLOPT_DEBUGFUNCTION(3). + +## CURLINFO_SSL_DATA_OUT +Introduced in 7.12.1. See CURLOPT_DEBUGFUNCTION(3). + +## CURLINFO_SSL_ENGINES +Introduced in 7.12.3. + +## CURLINFO_SSL_VERIFYRESULT +Introduced in 7.5. + +## CURLINFO_STARTTRANSFER_TIME +Introduced in 7.9.2. + +## CURLINFO_STARTTRANSFER_TIME_T +Introduced in 7.61.0. + +## CURLINFO_STRING +Introduced in 7.4.1. + +## CURLINFO_TEXT +Introduced in 7.9.6. See CURLOPT_DEBUGFUNCTION(3). + +## CURLINFO_TLS_SESSION +Introduced in 7.34.0. Deprecated since 7.48.0. + +## CURLINFO_TLS_SSL_PTR +Introduced in 7.48.0. + +## CURLINFO_TOTAL_TIME +Introduced in 7.4.1. + +## CURLINFO_TOTAL_TIME_T +Introduced in 7.61.0. + +## CURLINFO_TYPEMASK +Introduced in 7.4.1. + +## CURLINFO_USED_PROXY +Introduced in 8.7.0. + +## CURLINFO_XFER_ID +Introduced in 8.2.0. + +## CURLIOCMD_NOP +Introduced in 7.12.3. See CURLOPT_IOCTLFUNCTION(3). + +## CURLIOCMD_RESTARTREAD +Introduced in 7.12.3. See CURLOPT_IOCTLFUNCTION(3). + +## CURLIOE_FAILRESTART +Introduced in 7.12.3. See CURLOPT_IOCTLFUNCTION(3). + +## CURLIOE_OK +Introduced in 7.12.3. See CURLOPT_IOCTLFUNCTION(3). + +## CURLIOE_UNKNOWNCMD +Introduced in 7.12.3. See CURLOPT_IOCTLFUNCTION(3). + +## CURLKHMATCH_MISMATCH +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHMATCH_MISSING +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHMATCH_OK +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHSTAT_DEFER +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHSTAT_FINE +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHSTAT_FINE_ADD_TO_FILE +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHSTAT_FINE_REPLACE +Introduced in 7.73.0. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHSTAT_REJECT +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHTYPE_DSS +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHTYPE_ECDSA +Introduced in 7.58.0. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHTYPE_ED25519 +Introduced in 7.58.0. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHTYPE_RSA +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHTYPE_RSA1 +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLKHTYPE_UNKNOWN +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLM_ABORTED_BY_CALLBACK +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLM_ADDED_ALREADY +Introduced in 7.32.1. See libcurl-errors(3). + +## CURLM_BAD_EASY_HANDLE +Introduced in 7.9.6. See libcurl-errors(3). + +## CURLM_BAD_FUNCTION_ARGUMENT +Introduced in 7.69.0. See libcurl-errors(3). + +## CURLM_BAD_HANDLE +Introduced in 7.9.6. See libcurl-errors(3). + +## CURLM_BAD_SOCKET +Introduced in 7.15.4. See libcurl-errors(3). + +## CURLM_CALL_MULTI_PERFORM +Introduced in 7.9.6. See libcurl-errors(3). + +## CURLM_CALL_MULTI_SOCKET +Introduced in 7.15.5. See libcurl-errors(3). + +## CURLM_INTERNAL_ERROR +Introduced in 7.9.6. See libcurl-errors(3). + +## CURLM_OK +Introduced in 7.9.6. See libcurl-errors(3). + +## CURLM_OUT_OF_MEMORY +Introduced in 7.9.6. See libcurl-errors(3). + +## CURLM_RECURSIVE_API_CALL +Introduced in 7.59.0. See libcurl-errors(3). + +## CURLM_UNKNOWN_OPTION +Introduced in 7.15.4. See libcurl-errors(3). + +## CURLM_UNRECOVERABLE_POLL +Introduced in 7.84.0. See libcurl-errors(3). + +## CURLM_WAKEUP_FAILURE +Introduced in 7.68.0. See libcurl-errors(3). + +## CURLMIMEOPT_FORMESCAPE +Introduced in 7.81.0. See CURLOPT_MIME_OPTIONS(3). + +## CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE +Introduced in 7.30.0. See CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3). + +## CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE +Introduced in 7.30.0. See CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3). + +## CURLMOPT_MAX_CONCURRENT_STREAMS +Introduced in 7.67.0. See CURLMOPT_MAX_CONCURRENT_STREAMS(3). + +## CURLMOPT_MAX_HOST_CONNECTIONS +Introduced in 7.30.0. See CURLMOPT_MAX_HOST_CONNECTIONS(3). + +## CURLMOPT_MAX_PIPELINE_LENGTH +Introduced in 7.30.0. See CURLMOPT_MAX_PIPELINE_LENGTH(3). + +## CURLMOPT_MAX_TOTAL_CONNECTIONS +Introduced in 7.30.0. See CURLMOPT_MAX_TOTAL_CONNECTIONS(3). + +## CURLMOPT_MAXCONNECTS +Introduced in 7.16.3. See CURLMOPT_MAXCONNECTS(3). + +## CURLMOPT_PIPELINING +Introduced in 7.16.0. See CURLMOPT_PIPELINING(3). + +## CURLMOPT_PIPELINING_SERVER_BL +Introduced in 7.30.0. See CURLMOPT_PIPELINING_SERVER_BL(3). + +## CURLMOPT_PIPELINING_SITE_BL +Introduced in 7.30.0. See CURLMOPT_PIPELINING_SITE_BL(3). + +## CURLMOPT_PUSHDATA +Introduced in 7.44.0. See CURLMOPT_PUSHDATA(3). + +## CURLMOPT_PUSHFUNCTION +Introduced in 7.44.0. See CURLMOPT_PUSHFUNCTION(3). + +## CURLMOPT_SOCKETDATA +Introduced in 7.15.4. See CURLMOPT_SOCKETDATA(3). + +## CURLMOPT_SOCKETFUNCTION +Introduced in 7.15.4. See CURLMOPT_SOCKETFUNCTION(3). + +## CURLMOPT_TIMERDATA +Introduced in 7.16.0. See CURLMOPT_TIMERDATA(3). + +## CURLMOPT_TIMERFUNCTION +Introduced in 7.16.0. See CURLMOPT_TIMERFUNCTION(3). + +## CURLMSG_DONE +Introduced in 7.9.6. See curl_multi_info_read(3). + +## CURLMSG_NONE +Introduced in 7.9.6. See curl_multi_info_read(3). + +## CURLOPT +Introduced in 7.69.0. + +## CURLOPT_ABSTRACT_UNIX_SOCKET +Introduced in 7.53.0. See CURLOPT_ABSTRACT_UNIX_SOCKET(3). + +## CURLOPT_ACCEPT_ENCODING +Introduced in 7.21.6. See CURLOPT_ACCEPT_ENCODING(3). + +## CURLOPT_ACCEPTTIMEOUT_MS +Introduced in 7.24.0. See CURLOPT_ACCEPTTIMEOUT_MS(3). + +## CURLOPT_ADDRESS_SCOPE +Introduced in 7.19.0. See CURLOPT_ADDRESS_SCOPE(3). + +## CURLOPT_ALTSVC +Introduced in 7.64.1. See CURLOPT_ALTSVC(3). + +## CURLOPT_ALTSVC_CTRL +Introduced in 7.64.1. See CURLOPT_ALTSVC_CTRL(3). + +## CURLOPT_APPEND +Introduced in 7.17.0. See CURLOPT_APPEND(3). + +## CURLOPT_AUTOREFERER +Introduced in 7.1. See CURLOPT_AUTOREFERER(3). + +## CURLOPT_AWS_SIGV4 +Introduced in 7.75.0. See CURLOPT_AWS_SIGV4(3). + +## CURLOPT_BUFFERSIZE +Introduced in 7.10. See CURLOPT_BUFFERSIZE(3). + +## CURLOPT_CAINFO +Introduced in 7.4.2. See CURLOPT_CAINFO(3). + +## CURLOPT_CAINFO_BLOB +Introduced in 7.77.0. See CURLOPT_CAINFO_BLOB(3). + +## CURLOPT_CAPATH +Introduced in 7.9.8. See CURLOPT_CAPATH(3). + +## CURLOPT_CA_CACHE_TIMEOUT +Introduced in 7.87.0. See CURLOPT_CA_CACHE_TIMEOUT(3). + +## CURLOPT_CERTINFO +Introduced in 7.19.1. See CURLOPT_CERTINFO(3). + +## CURLOPT_CHUNK_BGN_FUNCTION +Introduced in 7.21.0. See CURLOPT_CHUNK_BGN_FUNCTION(3). + +## CURLOPT_CHUNK_DATA +Introduced in 7.21.0. See CURLOPT_CHUNK_DATA(3). + +## CURLOPT_CHUNK_END_FUNCTION +Introduced in 7.21.0. See CURLOPT_CHUNK_END_FUNCTION(3). + +## CURLOPT_CLOSEFUNCTION +Introduced in 7.7. Deprecated since 7.11.1. + +## CURLOPT_CLOSEPOLICY +Introduced in 7.7. Deprecated since 7.16.1. + +## CURLOPT_CLOSESOCKETDATA +Introduced in 7.21.7. See CURLOPT_CLOSESOCKETDATA(3). + +## CURLOPT_CLOSESOCKETFUNCTION +Introduced in 7.21.7. See CURLOPT_CLOSESOCKETFUNCTION(3). + +## CURLOPT_CONNECT_ONLY +Introduced in 7.15.2. See CURLOPT_CONNECT_ONLY(3). + +## CURLOPT_CONNECT_TO +Introduced in 7.49.0. See CURLOPT_CONNECT_TO(3). + +## CURLOPT_CONNECTTIMEOUT +Introduced in 7.7. See CURLOPT_CONNECTTIMEOUT(3). + +## CURLOPT_CONNECTTIMEOUT_MS +Introduced in 7.16.2. See CURLOPT_CONNECTTIMEOUT_MS(3). + +## CURLOPT_CONV_FROM_NETWORK_FUNCTION +Introduced in 7.15.4. Deprecated since 7.82.0. + +## CURLOPT_CONV_FROM_UTF8_FUNCTION +Introduced in 7.15.4. Deprecated since 7.82.0. + +## CURLOPT_CONV_TO_NETWORK_FUNCTION +Introduced in 7.15.4. Deprecated since 7.82.0. + +## CURLOPT_COOKIE +Introduced in 7.1. See CURLOPT_COOKIE(3). + +## CURLOPT_COOKIEFILE +Introduced in 7.1. See CURLOPT_COOKIEFILE(3). + +## CURLOPT_COOKIEJAR +Introduced in 7.9. See CURLOPT_COOKIEJAR(3). + +## CURLOPT_COOKIELIST +Introduced in 7.14.1. See CURLOPT_COOKIELIST(3). + +## CURLOPT_COOKIESESSION +Introduced in 7.9.7. See CURLOPT_COOKIESESSION(3). + +## CURLOPT_COPYPOSTFIELDS +Introduced in 7.17.1. See CURLOPT_COPYPOSTFIELDS(3). + +## CURLOPT_CRLF +Introduced in 7.1. See CURLOPT_CRLF(3). + +## CURLOPT_CRLFILE +Introduced in 7.19.0. See CURLOPT_CRLFILE(3). + +## CURLOPT_CURLU +Introduced in 7.63.0. See CURLOPT_CURLU(3). + +## CURLOPT_CUSTOMREQUEST +Introduced in 7.1. See CURLOPT_CUSTOMREQUEST(3). + +## CURLOPT_DEBUGDATA +Introduced in 7.9.6. See CURLOPT_DEBUGDATA(3). + +## CURLOPT_DEBUGFUNCTION +Introduced in 7.9.6. See CURLOPT_DEBUGFUNCTION(3). + +## CURLOPT_DEFAULT_PROTOCOL +Introduced in 7.45.0. See CURLOPT_DEFAULT_PROTOCOL(3). + +## CURLOPT_DIRLISTONLY +Introduced in 7.17.0. See CURLOPT_DIRLISTONLY(3). + +## CURLOPT_DISALLOW_USERNAME_IN_URL +Introduced in 7.61.0. See CURLOPT_DISALLOW_USERNAME_IN_URL(3). + +## CURLOPT_DNS_CACHE_TIMEOUT +Introduced in 7.9.3. See CURLOPT_DNS_CACHE_TIMEOUT(3). + +## CURLOPT_DNS_INTERFACE +Introduced in 7.33.0. See CURLOPT_DNS_INTERFACE(3). + +## CURLOPT_DNS_LOCAL_IP4 +Introduced in 7.33.0. See CURLOPT_DNS_LOCAL_IP4(3). + +## CURLOPT_DNS_LOCAL_IP6 +Introduced in 7.33.0. See CURLOPT_DNS_LOCAL_IP6(3). + +## CURLOPT_DNS_SERVERS +Introduced in 7.24.0. See CURLOPT_DNS_SERVERS(3). + +## CURLOPT_DNS_SHUFFLE_ADDRESSES +Introduced in 7.60.0. See CURLOPT_DNS_SHUFFLE_ADDRESSES(3). + +## CURLOPT_DNS_USE_GLOBAL_CACHE +Introduced in 7.9.3. Deprecated since 7.11.1. + +## CURLOPT_DOH_SSL_VERIFYHOST +Introduced in 7.76.0. See CURLOPT_DOH_SSL_VERIFYHOST(3). + +## CURLOPT_DOH_SSL_VERIFYPEER +Introduced in 7.76.0. See CURLOPT_DOH_SSL_VERIFYPEER(3). + +## CURLOPT_DOH_SSL_VERIFYSTATUS +Introduced in 7.76.0. See CURLOPT_DOH_SSL_VERIFYSTATUS(3). + +## CURLOPT_DOH_URL +Introduced in 7.62.0. See CURLOPT_DOH_URL(3). + +## CURLOPT_ECH +Introduced in 8.8.0. See CURLOPT_ECH(3). + +## CURLOPT_EGDSOCKET +Introduced in 7.7. Deprecated since 7.84.0. + +## CURLOPT_ENCODING +Introduced in 7.10. Deprecated since 7.21.6. + +## CURLOPT_ERRORBUFFER +Introduced in 7.1. See CURLOPT_ERRORBUFFER(3). + +## CURLOPT_EXPECT_100_TIMEOUT_MS +Introduced in 7.36.0. See CURLOPT_EXPECT_100_TIMEOUT_MS(3). + +## CURLOPT_FAILONERROR +Introduced in 7.1. See CURLOPT_FAILONERROR(3). + +## CURLOPT_FILE +Introduced in 7.1. Deprecated since 7.9.7. + +## CURLOPT_FILETIME +Introduced in 7.5. See CURLOPT_FILETIME(3). + +## CURLOPT_FNMATCH_DATA +Introduced in 7.21.0. See CURLOPT_FNMATCH_DATA(3). + +## CURLOPT_FNMATCH_FUNCTION +Introduced in 7.21.0. See CURLOPT_FNMATCH_FUNCTION(3). + +## CURLOPT_FOLLOWLOCATION +Introduced in 7.1. See CURLOPT_FOLLOWLOCATION(3). + +## CURLOPT_FORBID_REUSE +Introduced in 7.7. See CURLOPT_FORBID_REUSE(3). + +## CURLOPT_FRESH_CONNECT +Introduced in 7.7. See CURLOPT_FRESH_CONNECT(3). + +## CURLOPT_FTP_ACCOUNT +Introduced in 7.13.0. See CURLOPT_FTP_ACCOUNT(3). + +## CURLOPT_FTP_ALTERNATIVE_TO_USER +Introduced in 7.15.5. See CURLOPT_FTP_ALTERNATIVE_TO_USER(3). + +## CURLOPT_FTP_CREATE_MISSING_DIRS +Introduced in 7.10.7. See CURLOPT_FTP_CREATE_MISSING_DIRS(3). + +## CURLOPT_FTP_FILEMETHOD +Introduced in 7.15.1. See CURLOPT_FTP_FILEMETHOD(3). + +## CURLOPT_FTP_RESPONSE_TIMEOUT +Introduced in 7.10.8. Deprecated since 7.85.0. + +## CURLOPT_FTP_SKIP_PASV_IP +Introduced in 7.15.0. See CURLOPT_FTP_SKIP_PASV_IP(3). + +## CURLOPT_FTP_SSL +Introduced in 7.11.0. Deprecated since 7.16.4. + +## CURLOPT_FTP_SSL_CCC +Introduced in 7.16.1. See CURLOPT_FTP_SSL_CCC(3). + +## CURLOPT_FTP_USE_EPRT +Introduced in 7.10.5. See CURLOPT_FTP_USE_EPRT(3). + +## CURLOPT_FTP_USE_EPSV +Introduced in 7.9.2. See CURLOPT_FTP_USE_EPSV(3). + +## CURLOPT_FTP_USE_PRET +Introduced in 7.20.0. See CURLOPT_FTP_USE_PRET(3). + +## CURLOPT_FTPAPPEND +Introduced in 7.1. Deprecated since 7.16.4. + +## CURLOPT_FTPASCII +Introduced in 7.1. Deprecated since 7.11.1. + +## CURLOPT_FTPLISTONLY +Introduced in 7.1. Deprecated since 7.16.4. + +## CURLOPT_FTPPORT +Introduced in 7.1. See CURLOPT_FTPPORT(3). + +## CURLOPT_FTPSSLAUTH +Introduced in 7.12.2. See CURLOPT_FTPSSLAUTH(3). + +## CURLOPT_GSSAPI_DELEGATION +Introduced in 7.22.0. See CURLOPT_GSSAPI_DELEGATION(3). + +## CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS +Introduced in 7.59.0. See CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS(3). + +## CURLOPT_HAPROXYPROTOCOL +Introduced in 7.60.0. See CURLOPT_HAPROXYPROTOCOL(3). + +## CURLOPT_HAPROXY_CLIENT_IP +Introduced in 8.2.0. See CURLOPT_HAPROXY_CLIENT_IP(3). + +## CURLOPT_HEADER +Introduced in 7.1. See CURLOPT_HEADER(3). + +## CURLOPT_HEADERDATA +Introduced in 7.10. See CURLOPT_HEADERDATA(3). + +## CURLOPT_HEADERFUNCTION +Introduced in 7.7.2. See CURLOPT_HEADERFUNCTION(3). + +## CURLOPT_HEADEROPT +Introduced in 7.37.0. See CURLOPT_HEADEROPT(3). + +## CURLOPT_HSTS +Introduced in 7.74.0. See CURLOPT_HSTS(3). + +## CURLOPT_HSTS_CTRL +Introduced in 7.74.0. See CURLOPT_HSTS_CTRL(3). + +## CURLOPT_HSTSREADDATA +Introduced in 7.74.0. See CURLOPT_HSTSREADDATA(3). + +## CURLOPT_HSTSREADFUNCTION +Introduced in 7.74.0. See CURLOPT_HSTSREADFUNCTION(3). + +## CURLOPT_HSTSWRITEDATA +Introduced in 7.74.0. See CURLOPT_HSTSWRITEDATA(3). + +## CURLOPT_HSTSWRITEFUNCTION +Introduced in 7.74.0. See CURLOPT_HSTSWRITEFUNCTION(3). + +## CURLOPT_HTTP09_ALLOWED +Introduced in 7.64.0. See CURLOPT_HTTP09_ALLOWED(3). + +## CURLOPT_HTTP200ALIASES +Introduced in 7.10.3. See CURLOPT_HTTP200ALIASES(3). + +## CURLOPT_HTTP_CONTENT_DECODING +Introduced in 7.16.2. See CURLOPT_HTTP_CONTENT_DECODING(3). + +## CURLOPT_HTTP_TRANSFER_DECODING +Introduced in 7.16.2. See CURLOPT_HTTP_TRANSFER_DECODING(3). + +## CURLOPT_HTTP_VERSION +Introduced in 7.9.1. See CURLOPT_HTTP_VERSION(3). + +## CURLOPT_HTTPAUTH +Introduced in 7.10.6. See CURLOPT_HTTPAUTH(3). + +## CURLOPT_HTTPGET +Introduced in 7.8.1. See CURLOPT_HTTPGET(3). + +## CURLOPT_HTTPHEADER +Introduced in 7.1. See CURLOPT_HTTPHEADER(3). + +## CURLOPT_HTTPPOST +Introduced in 7.1. Deprecated since 7.56.0. + +## CURLOPT_HTTPPROXYTUNNEL +Introduced in 7.3. See CURLOPT_HTTPPROXYTUNNEL(3). + +## CURLOPT_HTTPREQUEST +Introduced in 7.1. Last used in 7.15.5. + +## CURLOPT_IGNORE_CONTENT_LENGTH +Introduced in 7.14.1. See CURLOPT_IGNORE_CONTENT_LENGTH(3). + +## CURLOPT_INFILE +Introduced in 7.1. Deprecated since 7.9.7. + +## CURLOPT_INFILESIZE +Introduced in 7.1. See CURLOPT_INFILESIZE(3). + +## CURLOPT_INFILESIZE_LARGE +Introduced in 7.11.0. See CURLOPT_INFILESIZE_LARGE(3). + +## CURLOPT_INTERFACE +Introduced in 7.3. See CURLOPT_INTERFACE(3). + +## CURLOPT_INTERLEAVEDATA +Introduced in 7.20.0. See CURLOPT_INTERLEAVEDATA(3). + +## CURLOPT_INTERLEAVEFUNCTION +Introduced in 7.20.0. See CURLOPT_INTERLEAVEFUNCTION(3). + +## CURLOPT_IOCTLDATA +Introduced in 7.12.3. Deprecated since 7.18.0. + +## CURLOPT_IOCTLFUNCTION +Introduced in 7.12.3. Deprecated since 7.18.0. + +## CURLOPT_IPRESOLVE +Introduced in 7.10.8. See CURLOPT_IPRESOLVE(3). + +## CURLOPT_ISSUERCERT +Introduced in 7.19.0. See CURLOPT_ISSUERCERT(3). + +## CURLOPT_ISSUERCERT_BLOB +Introduced in 7.71.0. See CURLOPT_ISSUERCERT_BLOB(3). + +## CURLOPT_KEEP_SENDING_ON_ERROR +Introduced in 7.51.0. See CURLOPT_KEEP_SENDING_ON_ERROR(3). + +## CURLOPT_KEYPASSWD +Introduced in 7.17.0. See CURLOPT_KEYPASSWD(3). + +## CURLOPT_KRB4LEVEL +Introduced in 7.3. Deprecated since 7.17.0. + +## CURLOPT_KRBLEVEL +Introduced in 7.16.4. See CURLOPT_KRBLEVEL(3). + +## CURLOPT_LOCALPORT +Introduced in 7.15.2. See CURLOPT_LOCALPORT(3). + +## CURLOPT_LOCALPORTRANGE +Introduced in 7.15.2. See CURLOPT_LOCALPORTRANGE(3). + +## CURLOPT_LOGIN_OPTIONS +Introduced in 7.34.0. See CURLOPT_LOGIN_OPTIONS(3). + +## CURLOPT_LOW_SPEED_LIMIT +Introduced in 7.1. See CURLOPT_LOW_SPEED_LIMIT(3). + +## CURLOPT_LOW_SPEED_TIME +Introduced in 7.1. See CURLOPT_LOW_SPEED_TIME(3). + +## CURLOPT_MAIL_AUTH +Introduced in 7.25.0. See CURLOPT_MAIL_AUTH(3). + +## CURLOPT_MAIL_FROM +Introduced in 7.20.0. See CURLOPT_MAIL_FROM(3). + +## CURLOPT_MAIL_RCPT +Introduced in 7.20.0. See CURLOPT_MAIL_RCPT(3). + +## CURLOPT_MAIL_RCPT_ALLLOWFAILS +Introduced in 7.69.0. Deprecated since 8.2.0. + +## CURLOPT_MAIL_RCPT_ALLOWFAILS +Introduced in 8.2.0. See CURLOPT_MAIL_RCPT_ALLOWFAILS(3). + +## CURLOPT_QUICK_EXIT +Introduced in 7.87.0. See CURLOPT_QUICK_EXIT(3). + +## CURLOPT_MAX_RECV_SPEED_LARGE +Introduced in 7.15.5. See CURLOPT_MAX_RECV_SPEED_LARGE(3). + +## CURLOPT_MAX_SEND_SPEED_LARGE +Introduced in 7.15.5. See CURLOPT_MAX_SEND_SPEED_LARGE(3). + +## CURLOPT_MAXAGE_CONN +Introduced in 7.65.0. See CURLOPT_MAXAGE_CONN(3). + +## CURLOPT_MAXCONNECTS +Introduced in 7.7. See CURLOPT_MAXCONNECTS(3). + +## CURLOPT_MAXFILESIZE +Introduced in 7.10.8. See CURLOPT_MAXFILESIZE(3). + +## CURLOPT_MAXFILESIZE_LARGE +Introduced in 7.11.0. See CURLOPT_MAXFILESIZE_LARGE(3). + +## CURLOPT_MAXLIFETIME_CONN +Introduced in 7.80.0. See CURLOPT_MAXLIFETIME_CONN(3). + +## CURLOPT_MAXREDIRS +Introduced in 7.5. See CURLOPT_MAXREDIRS(3). + +## CURLOPT_MIME_OPTIONS +Introduced in 7.81.0. See CURLOPT_MIME_OPTIONS(3). + +## CURLOPT_MIMEPOST +Introduced in 7.56.0. See CURLOPT_MIMEPOST(3). + +## CURLOPT_MUTE +Introduced in 7.1. Deprecated since 7.8. + +## CURLOPT_NETRC +Introduced in 7.1. See CURLOPT_NETRC(3). + +## CURLOPT_NETRC_FILE +Introduced in 7.11.0. See CURLOPT_NETRC_FILE(3). + +## CURLOPT_NEW_DIRECTORY_PERMS +Introduced in 7.16.4. See CURLOPT_NEW_DIRECTORY_PERMS(3). + +## CURLOPT_NEW_FILE_PERMS +Introduced in 7.16.4. See CURLOPT_NEW_FILE_PERMS(3). + +## CURLOPT_NOBODY +Introduced in 7.1. See CURLOPT_NOBODY(3). + +## CURLOPT_NOPROGRESS +Introduced in 7.1. See CURLOPT_NOPROGRESS(3). + +## CURLOPT_NOPROXY +Introduced in 7.19.4. See CURLOPT_NOPROXY(3). + +## CURLOPT_NOSIGNAL +Introduced in 7.10. See CURLOPT_NOSIGNAL(3). + +## CURLOPT_NOTHING +Introduced in 7.1.1. Deprecated since 7.11.1. + +## CURLOPT_OPENSOCKETDATA +Introduced in 7.17.1. See CURLOPT_OPENSOCKETDATA(3). + +## CURLOPT_OPENSOCKETFUNCTION +Introduced in 7.17.1. See CURLOPT_OPENSOCKETFUNCTION(3). + +## CURLOPT_PASSWDDATA +Introduced in 7.4.2. Deprecated since 7.11.1. + +## CURLOPT_PASSWDFUNCTION +Introduced in 7.4.2. Deprecated since 7.11.1. + +## CURLOPT_PASSWORD +Introduced in 7.19.1. See CURLOPT_PASSWORD(3). + +## CURLOPT_PASV_HOST +Introduced in 7.12.1. Deprecated since 7.16.0. + +## CURLOPT_PATH_AS_IS +Introduced in 7.42.0. See CURLOPT_PATH_AS_IS(3). + +## CURLOPT_PINNEDPUBLICKEY +Introduced in 7.39.0. See CURLOPT_PINNEDPUBLICKEY(3). + +## CURLOPT_PIPEWAIT +Introduced in 7.43.0. See CURLOPT_PIPEWAIT(3). + +## CURLOPT_PORT +Introduced in 7.1. See CURLOPT_PORT(3). + +## CURLOPT_POST +Introduced in 7.1. See CURLOPT_POST(3). + +## CURLOPT_POST301 +Introduced in 7.17.1. Deprecated since 7.19.1. + +## CURLOPT_POSTFIELDS +Introduced in 7.1. See CURLOPT_POSTFIELDS(3). + +## CURLOPT_POSTFIELDSIZE +Introduced in 7.2. See CURLOPT_POSTFIELDSIZE(3). + +## CURLOPT_POSTFIELDSIZE_LARGE +Introduced in 7.11.1. See CURLOPT_POSTFIELDSIZE_LARGE(3). + +## CURLOPT_POSTQUOTE +Introduced in 7.1. See CURLOPT_POSTQUOTE(3). + +## CURLOPT_POSTREDIR +Introduced in 7.19.1. See CURLOPT_POSTREDIR(3). + +## CURLOPT_PRE_PROXY +Introduced in 7.52.0. See CURLOPT_PRE_PROXY(3). + +## CURLOPT_PREQUOTE +Introduced in 7.9.5. See CURLOPT_PREQUOTE(3). + +## CURLOPT_PREREQDATA +Introduced in 7.80.0. See CURLOPT_PREREQDATA(3). + +## CURLOPT_PREREQFUNCTION +Introduced in 7.80.0. See CURLOPT_PREREQFUNCTION(3). + +## CURLOPT_PRIVATE +Introduced in 7.10.3. See CURLOPT_PRIVATE(3). + +## CURLOPT_PROGRESSDATA +Introduced in 7.1. See CURLOPT_PROGRESSDATA(3). + +## CURLOPT_PROGRESSFUNCTION +Introduced in 7.1. Deprecated since 7.32.0. + +## CURLOPT_PROTOCOLS +Introduced in 7.19.4. Deprecated since 7.85.0. + +## CURLOPT_PROTOCOLS_STR +Introduced in 7.85.0. See CURLOPT_PROTOCOLS_STR(3). + +## CURLOPT_PROXY +Introduced in 7.1. See CURLOPT_PROXY(3). + +## CURLOPT_PROXY_CAINFO +Introduced in 7.52.0. See CURLOPT_PROXY_CAINFO(3). + +## CURLOPT_PROXY_CAINFO_BLOB +Introduced in 7.77.0. See CURLOPT_PROXY_CAINFO_BLOB(3). + +## CURLOPT_PROXY_CAPATH +Introduced in 7.52.0. See CURLOPT_PROXY_CAPATH(3). + +## CURLOPT_PROXY_CRLFILE +Introduced in 7.52.0. See CURLOPT_PROXY_CRLFILE(3). + +## CURLOPT_PROXY_ISSUERCERT +Introduced in 7.71.0. See CURLOPT_PROXY_ISSUERCERT(3). + +## CURLOPT_PROXY_ISSUERCERT_BLOB +Introduced in 7.71.0. See CURLOPT_PROXY_ISSUERCERT_BLOB(3). + +## CURLOPT_PROXY_KEYPASSWD +Introduced in 7.52.0. See CURLOPT_PROXY_KEYPASSWD(3). + +## CURLOPT_PROXY_PINNEDPUBLICKEY +Introduced in 7.52.0. See CURLOPT_PROXY_PINNEDPUBLICKEY(3). + +## CURLOPT_PROXY_SERVICE_NAME +Introduced in 7.43.0. See CURLOPT_PROXY_SERVICE_NAME(3). + +## CURLOPT_PROXY_SSL_CIPHER_LIST +Introduced in 7.52.0. See CURLOPT_PROXY_SSL_CIPHER_LIST(3). + +## CURLOPT_PROXY_SSL_OPTIONS +Introduced in 7.52.0. See CURLOPT_PROXY_SSL_OPTIONS(3). + +## CURLOPT_PROXY_SSL_VERIFYHOST +Introduced in 7.52.0. See CURLOPT_PROXY_SSL_VERIFYHOST(3). + +## CURLOPT_PROXY_SSL_VERIFYPEER +Introduced in 7.52.0. See CURLOPT_PROXY_SSL_VERIFYPEER(3). + +## CURLOPT_PROXY_SSLCERT +Introduced in 7.52.0. See CURLOPT_PROXY_SSLCERT(3). + +## CURLOPT_PROXY_SSLCERT_BLOB +Introduced in 7.71.0. See CURLOPT_PROXY_SSLCERT_BLOB(3). + +## CURLOPT_PROXY_SSLCERTTYPE +Introduced in 7.52.0. See CURLOPT_PROXY_SSLCERTTYPE(3). + +## CURLOPT_PROXY_SSLKEY +Introduced in 7.52.0. See CURLOPT_PROXY_SSLKEY(3). + +## CURLOPT_PROXY_SSLKEY_BLOB +Introduced in 7.71.0. See CURLOPT_PROXY_SSLKEY_BLOB(3). + +## CURLOPT_PROXY_SSLKEYTYPE +Introduced in 7.52.0. See CURLOPT_PROXY_SSLKEYTYPE(3). + +## CURLOPT_PROXY_SSLVERSION +Introduced in 7.52.0. See CURLOPT_PROXY_SSLVERSION(3). + +## CURLOPT_PROXY_TLS13_CIPHERS +Introduced in 7.61.0. See CURLOPT_PROXY_TLS13_CIPHERS(3). + +## CURLOPT_PROXY_TLSAUTH_PASSWORD +Introduced in 7.52.0. See CURLOPT_PROXY_TLSAUTH_PASSWORD(3). + +## CURLOPT_PROXY_TLSAUTH_TYPE +Introduced in 7.52.0. See CURLOPT_PROXY_TLSAUTH_TYPE(3). + +## CURLOPT_PROXY_TLSAUTH_USERNAME +Introduced in 7.52.0. See CURLOPT_PROXY_TLSAUTH_USERNAME(3). + +## CURLOPT_PROXY_TRANSFER_MODE +Introduced in 7.18.0. See CURLOPT_PROXY_TRANSFER_MODE(3). + +## CURLOPT_PROXYAUTH +Introduced in 7.10.7. See CURLOPT_PROXYAUTH(3). + +## CURLOPT_PROXYHEADER +Introduced in 7.37.0. See CURLOPT_PROXYHEADER(3). + +## CURLOPT_PROXYPASSWORD +Introduced in 7.19.1. See CURLOPT_PROXYPASSWORD(3). + +## CURLOPT_PROXYPORT +Introduced in 7.1. See CURLOPT_PROXYPORT(3). + +## CURLOPT_PROXYTYPE +Introduced in 7.10. See CURLOPT_PROXYTYPE(3). + +## CURLOPT_PROXYUSERNAME +Introduced in 7.19.1. See CURLOPT_PROXYUSERNAME(3). + +## CURLOPT_PROXYUSERPWD +Introduced in 7.1. See CURLOPT_PROXYUSERPWD(3). + +## CURLOPT_PUT +Introduced in 7.1. Deprecated since 7.12.1. + +## CURLOPT_QUOTE +Introduced in 7.1. See CURLOPT_QUOTE(3). + +## CURLOPT_RANDOM_FILE +Introduced in 7.7. Deprecated since 7.84.0. + +## CURLOPT_RANGE +Introduced in 7.1. See CURLOPT_RANGE(3). + +## CURLOPT_READDATA +Introduced in 7.9.7. See CURLOPT_READDATA(3). + +## CURLOPT_READFUNCTION +Introduced in 7.1. See CURLOPT_READFUNCTION(3). + +## CURLOPT_REDIR_PROTOCOLS +Introduced in 7.19.4. Deprecated since 7.85.0. + +## CURLOPT_REDIR_PROTOCOLS_STR +Introduced in 7.85.0. See CURLOPT_REDIR_PROTOCOLS_STR(3). + +## CURLOPT_REFERER +Introduced in 7.1. See CURLOPT_REFERER(3). + +## CURLOPT_REQUEST_TARGET +Introduced in 7.55.0. See CURLOPT_REQUEST_TARGET(3). + +## CURLOPT_RESOLVE +Introduced in 7.21.3. See CURLOPT_RESOLVE(3). + +## CURLOPT_RESOLVER_START_DATA +Introduced in 7.59.0. See CURLOPT_RESOLVER_START_DATA(3). + +## CURLOPT_RESOLVER_START_FUNCTION +Introduced in 7.59.0. See CURLOPT_RESOLVER_START_FUNCTION(3). + +## CURLOPT_RESUME_FROM +Introduced in 7.1. See CURLOPT_RESUME_FROM(3). + +## CURLOPT_RESUME_FROM_LARGE +Introduced in 7.11.0. See CURLOPT_RESUME_FROM_LARGE(3). + +## CURLOPT_RTSP_CLIENT_CSEQ +Introduced in 7.20.0. See CURLOPT_RTSP_CLIENT_CSEQ(3). + +## CURLOPT_RTSP_REQUEST +Introduced in 7.20.0. See CURLOPT_RTSP_REQUEST(3). + +## CURLOPT_RTSP_SERVER_CSEQ +Introduced in 7.20.0. See CURLOPT_RTSP_SERVER_CSEQ(3). + +## CURLOPT_RTSP_SESSION_ID +Introduced in 7.20.0. See CURLOPT_RTSP_SESSION_ID(3). + +## CURLOPT_RTSP_STREAM_URI +Introduced in 7.20.0. See CURLOPT_RTSP_STREAM_URI(3). + +## CURLOPT_RTSP_TRANSPORT +Introduced in 7.20.0. See CURLOPT_RTSP_TRANSPORT(3). + +## CURLOPT_RTSPHEADER +Introduced in 7.20.0. See CURLOPT_HTTPHEADER. + +## CURLOPT_SASL_AUTHZID +Introduced in 7.66.0. See CURLOPT_SASL_AUTHZID(3). + +## CURLOPT_SASL_IR +Introduced in 7.31.0. See CURLOPT_SASL_IR(3). + +## CURLOPT_SEEKDATA +Introduced in 7.18.0. See CURLOPT_SEEKDATA(3). + +## CURLOPT_SEEKFUNCTION +Introduced in 7.18.0. See CURLOPT_SEEKFUNCTION(3). + +## CURLOPT_SERVER_RESPONSE_TIMEOUT +Introduced in 7.20.0. See CURLOPT_SERVER_RESPONSE_TIMEOUT(3). + +## CURLOPT_SERVER_RESPONSE_TIMEOUT_MS +Introduced in 8.6.0. See CURLOPT_SERVER_RESPONSE_TIMEOUT_MS(3). + +## CURLOPT_SERVICE_NAME +Introduced in 7.43.0. See CURLOPT_SERVICE_NAME(3). + +## CURLOPT_SHARE +Introduced in 7.10. See CURLOPT_SHARE(3). + +## CURLOPT_SOCKOPTDATA +Introduced in 7.16.0. See CURLOPT_SOCKOPTDATA(3). + +## CURLOPT_SOCKOPTFUNCTION +Introduced in 7.16.0. See CURLOPT_SOCKOPTFUNCTION(3). + +## CURLOPT_SOCKS5_AUTH +Introduced in 7.55.0. See CURLOPT_SOCKS5_AUTH(3). + +## CURLOPT_SOCKS5_GSSAPI_NEC +Introduced in 7.19.4. See CURLOPT_SOCKS5_GSSAPI_NEC(3). + +## CURLOPT_SOCKS5_GSSAPI_SERVICE +Introduced in 7.19.4. Deprecated since 7.49.0. + +## CURLOPT_SOURCE_HOST +Introduced in 7.12.1. Last used in 7.15.5. + +## CURLOPT_SOURCE_PATH +Introduced in 7.12.1. Last used in 7.15.5. + +## CURLOPT_SOURCE_PORT +Introduced in 7.12.1. Last used in 7.15.5. + +## CURLOPT_SOURCE_POSTQUOTE +Introduced in 7.12.1. Last used in 7.15.5. + +## CURLOPT_SOURCE_PREQUOTE +Introduced in 7.12.1. Last used in 7.15.5. + +## CURLOPT_SOURCE_QUOTE +Introduced in 7.13.0. Last used in 7.15.5. + +## CURLOPT_SOURCE_URL +Introduced in 7.13.0. Last used in 7.15.5. + +## CURLOPT_SOURCE_USERPWD +Introduced in 7.12.1. Last used in 7.15.5. + +## CURLOPT_SSH_AUTH_TYPES +Introduced in 7.16.1. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLOPT_SSH_COMPRESSION +Introduced in 7.56.0. See CURLOPT_SSH_COMPRESSION(3). + +## CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 +Introduced in 7.17.1. See CURLOPT_SSH_HOST_PUBLIC_KEY_MD5(3). + +## CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 +Introduced in 7.80.0. See CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256(3). + +## CURLOPT_SSH_HOSTKEYDATA +Introduced in 7.84.0. See CURLOPT_SSH_HOSTKEYDATA(3). + +## CURLOPT_SSH_HOSTKEYFUNCTION +Introduced in 7.84.0. See CURLOPT_SSH_HOSTKEYFUNCTION(3). + +## CURLOPT_SSH_KEYDATA +Introduced in 7.19.6. See CURLOPT_SSH_KEYDATA(3). + +## CURLOPT_SSH_KEYFUNCTION +Introduced in 7.19.6. See CURLOPT_SSH_KEYFUNCTION(3). + +## CURLOPT_SSH_KNOWNHOSTS +Introduced in 7.19.6. See CURLOPT_SSH_KNOWNHOSTS(3). + +## CURLOPT_SSH_PRIVATE_KEYFILE +Introduced in 7.16.1. See CURLOPT_SSH_PRIVATE_KEYFILE(3). + +## CURLOPT_SSH_PUBLIC_KEYFILE +Introduced in 7.16.1. See CURLOPT_SSH_PUBLIC_KEYFILE(3). + +## CURLOPT_SSL_CIPHER_LIST +Introduced in 7.9. See CURLOPT_SSL_CIPHER_LIST(3). + +## CURLOPT_SSL_CTX_DATA +Introduced in 7.10.6. See CURLOPT_SSL_CTX_DATA(3). + +## CURLOPT_SSL_CTX_FUNCTION +Introduced in 7.10.6. See CURLOPT_SSL_CTX_FUNCTION(3). + +## CURLOPT_SSL_EC_CURVES +Introduced in 7.73.0. See CURLOPT_SSL_EC_CURVES(3). + +## CURLOPT_SSL_ENABLE_ALPN +Introduced in 7.36.0. See CURLOPT_SSL_ENABLE_ALPN(3). + +## CURLOPT_SSL_ENABLE_NPN +Introduced in 7.36.0. Deprecated since 7.86.0. + +## CURLOPT_SSL_FALSESTART +Introduced in 7.42.0. See CURLOPT_SSL_FALSESTART(3). + +## CURLOPT_SSL_OPTIONS +Introduced in 7.25.0. See CURLOPT_SSL_OPTIONS(3). + +## CURLOPT_SSL_SESSIONID_CACHE +Introduced in 7.16.0. See CURLOPT_SSL_SESSIONID_CACHE(3). + +## CURLOPT_SSL_VERIFYHOST +Introduced in 7.8.1. See CURLOPT_SSL_VERIFYHOST(3). + +## CURLOPT_SSL_VERIFYPEER +Introduced in 7.4.2. See CURLOPT_SSL_VERIFYPEER(3). + +## CURLOPT_SSL_VERIFYSTATUS +Introduced in 7.41.0. See CURLOPT_SSL_VERIFYSTATUS(3). + +## CURLOPT_SSLCERT +Introduced in 7.1. See CURLOPT_SSLCERT(3). + +## CURLOPT_SSLCERT_BLOB +Introduced in 7.71.0. See CURLOPT_SSLCERT_BLOB(3). + +## CURLOPT_SSLCERTPASSWD +Introduced in 7.1.1. Deprecated since 7.17.0. + +## CURLOPT_SSLCERTTYPE +Introduced in 7.9.3. See CURLOPT_SSLCERTTYPE(3). + +## CURLOPT_SSLENGINE +Introduced in 7.9.3. See CURLOPT_SSLENGINE(3). + +## CURLOPT_SSLENGINE_DEFAULT +Introduced in 7.9.3. See CURLOPT_SSLENGINE_DEFAULT(3). + +## CURLOPT_SSLKEY +Introduced in 7.9.3. See CURLOPT_SSLKEY(3). + +## CURLOPT_SSLKEY_BLOB +Introduced in 7.71.0. See CURLOPT_SSLKEY_BLOB(3). + +## CURLOPT_SSLKEYPASSWD +Introduced in 7.9.3. Deprecated since 7.17.0. + +## CURLOPT_SSLKEYTYPE +Introduced in 7.9.3. See CURLOPT_SSLKEYTYPE(3). + +## CURLOPT_SSLVERSION +Introduced in 7.1. See CURLOPT_SSLVERSION(3). + +## CURLOPT_STDERR +Introduced in 7.1. See CURLOPT_STDERR(3). + +## CURLOPT_STREAM_DEPENDS +Introduced in 7.46.0. See CURLOPT_STREAM_DEPENDS(3). + +## CURLOPT_STREAM_DEPENDS_E +Introduced in 7.46.0. See CURLOPT_STREAM_DEPENDS_E(3). + +## CURLOPT_STREAM_WEIGHT +Introduced in 7.46.0. See CURLOPT_STREAM_WEIGHT(3). + +## CURLOPT_SUPPRESS_CONNECT_HEADERS +Introduced in 7.54.0. See CURLOPT_SUPPRESS_CONNECT_HEADERS(3). + +## CURLOPT_TCP_FASTOPEN +Introduced in 7.49.0. See CURLOPT_TCP_FASTOPEN(3). + +## CURLOPT_TCP_KEEPALIVE +Introduced in 7.25.0. See CURLOPT_TCP_KEEPALIVE(3). + +## CURLOPT_TCP_KEEPIDLE +Introduced in 7.25.0. See CURLOPT_TCP_KEEPIDLE(3). + +## CURLOPT_TCP_KEEPINTVL +Introduced in 7.25.0. See CURLOPT_TCP_KEEPINTVL(3). + +## CURLOPT_TCP_KEEPCNT +Introduced in 8.9.0. See CURLOPT_TCP_KEEPCNT(3). + +## CURLOPT_TCP_NODELAY +Introduced in 7.11.2. See CURLOPT_TCP_NODELAY(3). + +## CURLOPT_TELNETOPTIONS +Introduced in 7.7. See CURLOPT_TELNETOPTIONS(3). + +## CURLOPT_TFTP_BLKSIZE +Introduced in 7.19.4. See CURLOPT_TFTP_BLKSIZE(3). + +## CURLOPT_TFTP_NO_OPTIONS +Introduced in 7.48.0. See CURLOPT_TFTP_NO_OPTIONS(3). + +## CURLOPT_TIMECONDITION +Introduced in 7.1. See CURLOPT_TIMECONDITION(3). + +## CURLOPT_TIMEOUT +Introduced in 7.1. See CURLOPT_TIMEOUT(3). + +## CURLOPT_TIMEOUT_MS +Introduced in 7.16.2. See CURLOPT_TIMEOUT_MS(3). + +## CURLOPT_TIMEVALUE +Introduced in 7.1. See CURLOPT_TIMEVALUE(3). + +## CURLOPT_TIMEVALUE_LARGE +Introduced in 7.59.0. See CURLOPT_TIMEVALUE_LARGE(3). + +## CURLOPT_TLS13_CIPHERS +Introduced in 7.61.0. See CURLOPT_TLS13_CIPHERS(3). + +## CURLOPT_TLSAUTH_PASSWORD +Introduced in 7.21.4. See CURLOPT_TLSAUTH_PASSWORD(3). + +## CURLOPT_TLSAUTH_TYPE +Introduced in 7.21.4. See CURLOPT_TLSAUTH_TYPE(3). + +## CURLOPT_TLSAUTH_USERNAME +Introduced in 7.21.4. See CURLOPT_TLSAUTH_USERNAME(3). + +## CURLOPT_TRAILERDATA +Introduced in 7.64.0. See CURLOPT_TRAILERDATA(3). + +## CURLOPT_TRAILERFUNCTION +Introduced in 7.64.0. See CURLOPT_TRAILERFUNCTION(3). + +## CURLOPT_TRANSFER_ENCODING +Introduced in 7.21.6. See CURLOPT_TRANSFER_ENCODING(3). + +## CURLOPT_TRANSFERTEXT +Introduced in 7.1.1. See CURLOPT_TRANSFERTEXT(3). + +## CURLOPT_UNIX_SOCKET_PATH +Introduced in 7.40.0. See CURLOPT_UNIX_SOCKET_PATH(3). + +## CURLOPT_UNRESTRICTED_AUTH +Introduced in 7.10.4. See CURLOPT_UNRESTRICTED_AUTH(3). + +## CURLOPT_UPKEEP_INTERVAL_MS +Introduced in 7.62.0. See CURLOPT_UPKEEP_INTERVAL_MS(3). + +## CURLOPT_UPLOAD +Introduced in 7.1. See CURLOPT_UPLOAD(3). + +## CURLOPT_UPLOAD_BUFFERSIZE +Introduced in 7.62.0. See CURLOPT_UPLOAD_BUFFERSIZE(3). + +## CURLOPT_URL +Introduced in 7.1. See CURLOPT_URL(3). + +## CURLOPT_USE_SSL +Introduced in 7.17.0. See CURLOPT_USE_SSL(3). + +## CURLOPT_USERAGENT +Introduced in 7.1. See CURLOPT_USERAGENT(3). + +## CURLOPT_USERNAME +Introduced in 7.19.1. See CURLOPT_USERNAME(3). + +## CURLOPT_USERPWD +Introduced in 7.1. See CURLOPT_USERPWD(3). + +## CURLOPT_VERBOSE +Introduced in 7.1. See CURLOPT_VERBOSE(3). + +## CURLOPT_WILDCARDMATCH +Introduced in 7.21.0. See CURLOPT_WILDCARDMATCH(3). + +## CURLOPT_WRITEDATA +Introduced in 7.9.7. See CURLOPT_WRITEDATA(3). + +## CURLOPT_WRITEFUNCTION +Introduced in 7.1. See CURLOPT_WRITEFUNCTION(3). + +## CURLOPT_WRITEHEADER +Introduced in 7.1. See CURLOPT_HEADERDATA. + +## CURLOPT_WRITEINFO +Introduced in 7.1. + +## CURLOPT_WS_OPTIONS +Introduced in 7.86.0. See CURLOPT_WS_OPTIONS(3). + +## CURLOPT_XFERINFODATA +Introduced in 7.32.0. See CURLOPT_XFERINFODATA(3). + +## CURLOPT_XFERINFOFUNCTION +Introduced in 7.32.0. See CURLOPT_XFERINFOFUNCTION(3). + +## CURLOPT_XOAUTH2_BEARER +Introduced in 7.33.0. See CURLOPT_XOAUTH2_BEARER(3). + +## CURLOPTDEPRECATED +Introduced in 7.87.0. + +## CURLOPTTYPE_BLOB +Introduced in 7.71.0. + +## CURLOPTTYPE_CBPOINT +Introduced in 7.73.0. + +## CURLOPTTYPE_FUNCTIONPOINT +Introduced in 7.1. + +## CURLOPTTYPE_LONG +Introduced in 7.1. + +## CURLOPTTYPE_OBJECTPOINT +Introduced in 7.1. + +## CURLOPTTYPE_OFF_T +Introduced in 7.11.0. + +## CURLOPTTYPE_SLISTPOINT +Introduced in 7.65.2. + +## CURLOPTTYPE_STRINGPOINT +Introduced in 7.46.0. + +## CURLOPTTYPE_VALUES +Introduced in 7.73.0. + +## CURLOT_BLOB +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLOT_CBPTR +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLOT_FLAG_ALIAS +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLOT_FUNCTION +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLOT_LONG +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLOT_OBJECT +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLOT_OFF_T +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLOT_SLIST +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLOT_STRING +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLOT_VALUES +Introduced in 7.73.0. See curl_easy_option_next(3). + +## CURLPAUSE_ALL +Introduced in 7.18.0. See curl_easy_pause(3). + +## CURLPAUSE_CONT +Introduced in 7.18.0. See curl_easy_pause(3). + +## CURLPAUSE_RECV +Introduced in 7.18.0. See curl_easy_pause(3). + +## CURLPAUSE_RECV_CONT +Introduced in 7.18.0. See curl_easy_pause(3). + +## CURLPAUSE_SEND +Introduced in 7.18.0. See curl_easy_pause(3). + +## CURLPAUSE_SEND_CONT +Introduced in 7.18.0. See curl_easy_pause(3). + +## CURLPIPE_HTTP1 +Introduced in 7.43.0. See CURLMOPT_PIPELINING(3). + +## CURLPIPE_MULTIPLEX +Introduced in 7.43.0. See CURLMOPT_PIPELINING(3). + +## CURLPIPE_NOTHING +Introduced in 7.43.0. See CURLMOPT_PIPELINING(3). + +## CURLPROTO_ALL +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_DICT +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_FILE +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_FTP +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_FTPS +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_GOPHER +Introduced in 7.21.2. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_GOPHERS +Introduced in 7.75.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_HTTP +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_HTTPS +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_IMAP +Introduced in 7.20.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_IMAPS +Introduced in 7.20.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_LDAP +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_LDAPS +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_MQTT +Introduced in 7.71.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_POP3 +Introduced in 7.20.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_POP3S +Introduced in 7.20.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_RTMP +Introduced in 7.21.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_RTMPE +Introduced in 7.21.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_RTMPS +Introduced in 7.21.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_RTMPT +Introduced in 7.21.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_RTMPTE +Introduced in 7.21.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_RTMPTS +Introduced in 7.21.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_RTSP +Introduced in 7.20.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_SCP +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_SFTP +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_SMB +Introduced in 7.40.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_SMBS +Introduced in 7.40.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_SMTP +Introduced in 7.20.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_SMTPS +Introduced in 7.20.0. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_TELNET +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROTO_TFTP +Introduced in 7.19.4. See CURLINFO_PROTOCOL(3). + +## CURLPROXY_HTTP +Introduced in 7.10. See CURLOPT_PROXYTYPE(3). + +## CURLPROXY_HTTP_1_0 +Introduced in 7.19.4. See CURLOPT_PROXYTYPE(3). + +## CURLPROXY_HTTPS +Introduced in 7.52.0. See CURLOPT_PROXYTYPE(3). + +## CURLPROXY_HTTPS2 +Introduced in 8.1.0. See CURLOPT_PROXYTYPE(3). + +## CURLPROXY_SOCKS4 +Introduced in 7.10. See CURLOPT_PROXYTYPE(3). + +## CURLPROXY_SOCKS4A +Introduced in 7.18.0. See CURLOPT_PROXYTYPE(3). + +## CURLPROXY_SOCKS5 +Introduced in 7.10. See CURLOPT_PROXYTYPE(3). + +## CURLPROXY_SOCKS5_HOSTNAME +Introduced in 7.18.0. See CURLOPT_PROXYTYPE(3). + +## CURLPX_BAD_ADDRESS_TYPE +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_BAD_VERSION +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_CLOSED +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_GSSAPI +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_GSSAPI_PERMSG +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_GSSAPI_PROTECTION +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_IDENTD +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_IDENTD_DIFFER +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_LONG_HOSTNAME +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_LONG_PASSWD +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_LONG_USER +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_NO_AUTH +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_OK +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_RECV_ADDRESS +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_RECV_AUTH +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_RECV_CONNECT +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_RECV_REQACK +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REPLY_ADDRESS_TYPE_NOT_SUPPORTED +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REPLY_COMMAND_NOT_SUPPORTED +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REPLY_CONNECTION_REFUSED +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REPLY_GENERAL_SERVER_FAILURE +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REPLY_HOST_UNREACHABLE +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REPLY_NETWORK_UNREACHABLE +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REPLY_NOT_ALLOWED +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REPLY_TTL_EXPIRED +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REPLY_UNASSIGNED +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_REQUEST_FAILED +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_RESOLVE_HOST +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_SEND_AUTH +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_SEND_CONNECT +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_SEND_REQUEST +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_UNKNOWN_FAIL +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_UNKNOWN_MODE +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLPX_USER_REJECTED +Introduced in 7.73.0. See CURLINFO_PROXY_ERROR(3). + +## CURLSHE_BAD_OPTION +Introduced in 7.10.3. See libcurl-errors(3). + +## CURLSHE_IN_USE +Introduced in 7.10.3. See libcurl-errors(3). + +## CURLSHE_INVALID +Introduced in 7.10.3. See libcurl-errors(3). + +## CURLSHE_NOMEM +Introduced in 7.12.0. See libcurl-errors(3). + +## CURLSHE_NOT_BUILT_IN +Introduced in 7.23.0. See libcurl-errors(3). + +## CURLSHE_OK +Introduced in 7.10.3. See libcurl-errors(3). + +## CURLSHOPT_LOCKFUNC +Introduced in 7.10.3. See CURLSHOPT_LOCKFUNC(3). + +## CURLSHOPT_NONE +Introduced in 7.10.3. See curl_share_setopt(3). + +## CURLSHOPT_SHARE +Introduced in 7.10.3. See CURLSHOPT_SHARE(3). + +## CURLSHOPT_UNLOCKFUNC +Introduced in 7.10.3. See CURLSHOPT_UNLOCKFUNC(3). + +## CURLSHOPT_UNSHARE +Introduced in 7.10.3. See CURLSHOPT_UNSHARE(3). + +## CURLSHOPT_USERDATA +Introduced in 7.10.3. See CURLSHOPT_USERDATA(3). + +## CURLSOCKTYPE_ACCEPT +Introduced in 7.28.0. See CURLOPT_SOCKOPTFUNCTION(3). + +## CURLSOCKTYPE_IPCXN +Introduced in 7.16.0. See CURLOPT_SOCKOPTFUNCTION(3). + +## CURLSSH_AUTH_AGENT +Introduced in 7.28.0. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLSSH_AUTH_ANY +Introduced in 7.16.1. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLSSH_AUTH_DEFAULT +Introduced in 7.16.1. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLSSH_AUTH_GSSAPI +Introduced in 7.58.0. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLSSH_AUTH_HOST +Introduced in 7.16.1. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLSSH_AUTH_KEYBOARD +Introduced in 7.16.1. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLSSH_AUTH_NONE +Introduced in 7.16.1. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLSSH_AUTH_PASSWORD +Introduced in 7.16.1. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLSSH_AUTH_PUBLICKEY +Introduced in 7.16.1. See CURLOPT_SSH_AUTH_TYPES(3). + +## CURLSSLBACKEND_AWSLC +Introduced in 8.1.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_AXTLS +Introduced in 7.38.0. Deprecated since 7.61.0. + +## CURLSSLBACKEND_BEARSSL +Introduced in 7.68.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_BORINGSSL +Introduced in 7.49.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_CYASSL +Introduced in 7.34.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_DARWINSSL +Introduced in 7.34.0. Deprecated since 7.64.1. + +## CURLSSLBACKEND_GNUTLS +Introduced in 7.34.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_GSKIT +Introduced in 7.34.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_LIBRESSL +Introduced in 7.49.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_MBEDTLS +Introduced in 7.46.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_MESALINK +Introduced in 7.62.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_NONE +Introduced in 7.34.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_NSS +Introduced in 7.34.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_OPENSSL +Introduced in 7.34.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_POLARSSL +Introduced in 7.34.0. Deprecated since 7.69.0. + +## CURLSSLBACKEND_QSOSSL +Introduced in 7.34.0. Last used in 7.38.0. + +## CURLSSLBACKEND_RUSTLS +Introduced in 7.76.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_SCHANNEL +Introduced in 7.34.0. See curl_global_sslset(3). + +## CURLSSLBACKEND_SECURETRANSPORT +Introduced in 7.64.1. See curl_global_sslset(3). + +## CURLSSLBACKEND_WOLFSSL +Introduced in 7.49.0. See curl_global_sslset(3). + +## CURLSSLOPT_ALLOW_BEAST +Introduced in 7.25.0. See CURLOPT_SSL_OPTIONS(3). + +## CURLSSLOPT_AUTO_CLIENT_CERT +Introduced in 7.77.0. See CURLOPT_SSL_OPTIONS(3). + +## CURLSSLOPT_NATIVE_CA +Introduced in 7.71.0. See CURLOPT_SSL_OPTIONS(3). + +## CURLSSLOPT_NO_PARTIALCHAIN +Introduced in 7.68.0. See CURLOPT_SSL_OPTIONS(3). + +## CURLSSLOPT_NO_REVOKE +Introduced in 7.44.0. See CURLOPT_SSL_OPTIONS(3). + +## CURLSSLOPT_REVOKE_BEST_EFFORT +Introduced in 7.70.0. See CURLOPT_SSL_OPTIONS(3). + +## CURLSSLSET_NO_BACKENDS +Introduced in 7.56.0. See curl_global_sslset(3). + +## CURLSSLSET_OK +Introduced in 7.56.0. See curl_global_sslset(3). + +## CURLSSLSET_TOO_LATE +Introduced in 7.56.0. See curl_global_sslset(3). + +## CURLSSLSET_UNKNOWN_BACKEND +Introduced in 7.56.0. See curl_global_sslset(3). + +## CURLSTS_DONE +Introduced in 7.74.0. See CURLOPT_HSTSREADFUNCTION(3). + +## CURLSTS_FAIL +Introduced in 7.74.0. See CURLOPT_HSTSREADFUNCTION(3). + +## CURLSTS_OK +Introduced in 7.74.0. See CURLOPT_HSTSREADFUNCTION(3). + +## CURLU_ALLOW_SPACE +Introduced in 7.78.0. See curl_url_get(3). + +## CURLU_APPENDQUERY +Introduced in 7.62.0. See curl_url_get(3). + +## CURLU_DEFAULT_PORT +Introduced in 7.62.0. See curl_url_get(3). + +## CURLU_DEFAULT_SCHEME +Introduced in 7.62.0. See curl_url_get(3). + +## CURLU_DISALLOW_USER +Introduced in 7.62.0. See curl_url_get(3). + +## CURLU_GET_EMPTY +Introduced in 8.8.0. See curl_url_get(3). + +## CURLU_GUESS_SCHEME +Introduced in 7.62.0. See curl_url_get(3). + +## CURLU_NO_AUTHORITY +Introduced in 7.67.0. See curl_url_get(3). + +## CURLU_NO_DEFAULT_PORT +Introduced in 7.62.0. See curl_url_get(3). + +## CURLU_NO_GUESS_SCHEME +Introduced in 8.9.0. See curl_url_get(3). + +## CURLU_NON_SUPPORT_SCHEME +Introduced in 7.62.0. See curl_url_get(3). + +## CURLU_PATH_AS_IS +Introduced in 7.62.0. See curl_url_get(3). + +## CURLU_PUNY2IDN +Introduced in 8.3.0. See curl_url_get(3). + +## CURLU_PUNYCODE +Introduced in 7.88.0. See curl_url_get(3). + +## CURLU_URLDECODE +Introduced in 7.62.0. See curl_url_get(3). + +## CURLU_URLENCODE +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUE_BAD_FILE_URL +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_FRAGMENT +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_HANDLE +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_BAD_HOSTNAME +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_IPV6 +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_LOGIN +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_PARTPOINTER +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_BAD_PASSWORD +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_PATH +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_PORT_NUMBER +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_BAD_QUERY +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_SCHEME +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_SLASHES +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_BAD_USER +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_LACKS_IDN +Introduced in 7.88.0. See libcurl-errors(3). + +## CURLUE_MALFORMED_INPUT +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_NO_FRAGMENT +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_NO_HOST +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_NO_OPTIONS +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_NO_PASSWORD +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_NO_PORT +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_NO_QUERY +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_NO_SCHEME +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_NO_USER +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_NO_ZONEID +Introduced in 7.81.0. See libcurl-errors(3). + +## CURLUE_OK +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_OUT_OF_MEMORY +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_TOO_LARGE +Introduced in 8.6.0. See libcurl-errors(3). + +## CURLUE_UNKNOWN_PART +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_UNSUPPORTED_SCHEME +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_URLDECODE +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUE_USER_NOT_ALLOWED +Introduced in 7.62.0. See libcurl-errors(3). + +## CURLUPART_FRAGMENT +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_HOST +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_OPTIONS +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_PASSWORD +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_PATH +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_PORT +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_QUERY +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_SCHEME +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_URL +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_USER +Introduced in 7.62.0. See curl_url_get(3). + +## CURLUPART_ZONEID +Introduced in 7.65.0. See curl_url_get(3). + +## CURLUSESSL_ALL +Introduced in 7.17.0. See CURLOPT_USE_SSL(3). + +## CURLUSESSL_CONTROL +Introduced in 7.17.0. See CURLOPT_USE_SSL(3). + +## CURLUSESSL_NONE +Introduced in 7.17.0. See CURLOPT_USE_SSL(3). + +## CURLUSESSL_TRY +Introduced in 7.17.0. See CURLOPT_USE_SSL(3). + +## CURLVERSION_EIGHTH +Introduced in 7.72.0. See curl_version_info(3). + +## CURLVERSION_ELEVENTH +Introduced in 7.87.0. See curl_version_info(3). + +## CURLVERSION_FIFTH +Introduced in 7.57.0. See curl_version_info(3). + +## CURLVERSION_FIRST +Introduced in 7.10. See curl_version_info(3). + +## CURLVERSION_FOURTH +Introduced in 7.16.1. See curl_version_info(3). + +## CURLVERSION_NINTH +Introduced in 7.75.0. See curl_version_info(3). + +## CURLVERSION_NOW +Introduced in 7.10. See curl_version_info(3). + +## CURLVERSION_SECOND +Introduced in 7.11.1. See curl_version_info(3). + +## CURLVERSION_SEVENTH +Introduced in 7.70.0. See curl_version_info(3). + +## CURLVERSION_SIXTH +Introduced in 7.66.0. See curl_version_info(3). + +## CURLVERSION_TENTH +Introduced in 7.77.0. See curl_version_info(3). + +## CURLVERSION_THIRD +Introduced in 7.12.0. See curl_version_info(3). + +## CURLVERSION_TWELFTH +Introduced in 8.8.0. See curl_version_info(3). + +## CURLWARNING +Introduced in 7.66.0. + +## CURLWS_BINARY +Introduced in 7.86.0. See curl_ws_send(3). + +## CURLWS_CLOSE +Introduced in 7.86.0. See curl_ws_send(3). + +## CURLWS_CONT +Introduced in 7.86.0. See curl_ws_send(3). + +## CURLWS_OFFSET +Introduced in 7.86.0. See curl_ws_send(3). + +## CURLWS_PING +Introduced in 7.86.0. See curl_ws_send(3). + +## CURLWS_PONG +Introduced in 7.86.0. See curl_ws_send(3). + +## CURLWS_RAW_MODE +Introduced in 7.86.0. See curl_ws_send(3). + +## CURLWS_TEXT +Introduced in 7.86.0. See curl_ws_send(3). diff --git a/docs/libcurl/libcurl-thread.md b/docs/libcurl/libcurl-thread.md index 4ca783af1..ef7ae9b7d 100644 --- a/docs/libcurl/libcurl-thread.md +++ b/docs/libcurl/libcurl-thread.md @@ -8,6 +8,7 @@ See-also: - libcurl-security (3) Protocol: - All +Added-in: n/a --- # NAME @@ -37,10 +38,28 @@ share API (the connection pool and HSTS cache for example). # 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. +All current TLS libraries libcurl supports are thread-safe. + +## 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. For older versions of +OpenSSL, the user must set mutex callbacks. + +libcurl may not be able to fully clean up after multi-threaded OpenSSL +depending on how OpenSSL was built and loaded as a library. It is possible in +some rare circumstances a memory leak could occur unless you implement your own +OpenSSL thread cleanup. + +For example, on Windows if both libcurl and OpenSSL are linked statically to a +DLL or application then OpenSSL may leak memory unless the DLL or application +calls OPENSSL_thread_stop() before each thread terminates. If OpenSSL is built +as a DLL then it does this cleanup automatically and there is no leak. If +libcurl is built as a DLL and OpenSSL is linked statically to it then libcurl +does this cleanup automatically and there is no leak (added in libcurl 8.8.0). + +Please review the OpenSSL documentation for a full list of circumstances: +https://docs.openssl.org/3.0/man3/OPENSSL_init_crypto/#notes # Signals diff --git a/docs/libcurl/libcurl-tutorial.md b/docs/libcurl/libcurl-tutorial.md index c51d9f13c..4e16e38aa 100644 --- a/docs/libcurl/libcurl-tutorial.md +++ b/docs/libcurl/libcurl-tutorial.md @@ -11,6 +11,7 @@ See-also: - libcurl-url (3) Protocol: - All +Added-in: n/a --- # NAME diff --git a/docs/libcurl/libcurl-url.md b/docs/libcurl/libcurl-url.md index e673873b4..1d9e59247 100644 --- a/docs/libcurl/libcurl-url.md +++ b/docs/libcurl/libcurl-url.md @@ -1,7 +1,7 @@ --- c: Copyright (C) Daniel Stenberg, , et al. SPDX-License-Identifier: curl -Title: libcurl +Title: libcurl-url Section: 3 Source: libcurl See-also: @@ -14,6 +14,7 @@ See-also: - curl_url_strerror (3) Protocol: - All +Added-in: 7.62.0 --- # NAME @@ -156,9 +157,7 @@ Now the URL looks like https://example.com/?shoes=2&hat=1&candy=N%26N ~~~ -# AVAILABILITY - -The URL API was introduced in libcurl 7.62.0. +# NOTES A URL with a literal IPv6 address can be parsed even when IPv6 support is not enabled. diff --git a/docs/libcurl/libcurl-ws.md b/docs/libcurl/libcurl-ws.md index 25550ecd6..60c9fa59a 100644 --- a/docs/libcurl/libcurl-ws.md +++ b/docs/libcurl/libcurl-ws.md @@ -1,7 +1,7 @@ --- c: Copyright (C) Daniel Stenberg, , et al. SPDX-License-Identifier: curl -Title: libcurl +Title: libcurl-ws Section: 3 Source: libcurl See-also: @@ -14,6 +14,7 @@ See-also: - curl_ws_send (3) Protocol: - All +Added-in: 7.86.0 --- # NAME @@ -115,7 +116,7 @@ Once such a setup has been successfully performed, the application can proceed and use curl_ws_recv(3) and curl_ws_send(3) freely to exchange WebSocket messages with the server. -# AVAILABILITY +# EXPERIMENTAL The WebSocket API was introduced as experimental in 7.86.0 and is still experimental today. diff --git a/docs/libcurl/libcurl.md b/docs/libcurl/libcurl.md index 9031451cc..2f3a45197 100644 --- a/docs/libcurl/libcurl.md +++ b/docs/libcurl/libcurl.md @@ -11,6 +11,7 @@ See-also: - libcurl-thread (3) Protocol: - All +Added-in: n/a --- # NAME diff --git a/docs/libcurl/mksymbolsmanpage.pl b/docs/libcurl/mksymbolsmanpage.pl index fc9a8b704..c1a6b9d61 100755 --- a/docs/libcurl/mksymbolsmanpage.pl +++ b/docs/libcurl/mksymbolsmanpage.pl @@ -48,6 +48,7 @@ - libcurl-multi (3) - libcurl-security (3) - libcurl-thread (3) +Added-in: n/a --- # libcurl symbols @@ -60,7 +61,7 @@ marked for getting removed in a future. The last version that featured the specific symbol. Using the symbol in source -code will make it no longer compile error-free after that specified version. +code makes it no longer compile error-free after that specified version. This man page is automatically generated from the symbols-in-versions file. HEADER diff --git a/docs/libcurl/opts/CMakeLists.txt b/docs/libcurl/opts/CMakeLists.txt index a20d0b9bf..2037793fc 100644 --- a/docs/libcurl/opts/CMakeLists.txt +++ b/docs/libcurl/opts/CMakeLists.txt @@ -26,8 +26,8 @@ transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc. include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") add_manual_pages(man_MANS) -add_custom_target(opts-man DEPENDS ${man_MANS}) -add_dependencies(man opts-man) +add_custom_target(curl-opts-man DEPENDS ${man_MANS}) +add_dependencies(curl-man curl-opts-man) if(NOT CURL_DISABLE_INSTALL) unset(_src) foreach(_f ${man_MANS}) diff --git a/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.md b/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.md index 92567e627..2b849afc5 100644 --- a/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.md +++ b/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.45.0 --- # NAME @@ -40,6 +41,8 @@ CURLOPT_CONNECT_ONLY(3), which skips the transfer phase. CURLINFO_ACTIVESOCKET(3) was added as a replacement for CURLINFO_LASTSOCKET(3) since that one is not working on all platforms. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,21 +57,24 @@ int main(void) /* Do not do the transfer - only connect to host */ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); res = curl_easy_perform(curl); - - /* Extract the socket from the curl handle */ - res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd); - if(res != CURLE_OK) { printf("Error: %s\n", curl_easy_strerror(res)); + curl_easy_cleanup(curl); return 1; } + + /* Extract the socket from the curl handle */ + res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd); + if(!res && sockfd != CURL_SOCKET_BAD) { + /* operate on sockfd */ + } + + curl_easy_cleanup(curl); } } ~~~ -# AVAILABILITY - -Added in 7.45.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.md b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.md index a40f6d02e..61ea7ba8b 100644 --- a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.md +++ b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.19.0 --- # NAME @@ -29,14 +30,16 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, Pass a pointer to a double to receive the time, in seconds, it took from the start until the SSL/SSH connect/handshake to the remote host was completed. -This time is most often close to the CURLINFO_PRETRANSFER_TIME(3) time, -except for cases such as HTTP pipelining where the pretransfer time can be -delayed due to waits in line for the pipeline and more. +This time is most often close to the CURLINFO_PRETRANSFER_TIME(3) time, except +for cases such as HTTP multiplexing where the pretransfer time can be delayed +due to waits in line for the stream and more. When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.md b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.md index 0d61f05d2..4490fd032 100644 --- a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.md +++ b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.61.0 --- # NAME @@ -29,15 +30,16 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME_T, Pass a pointer to a curl_off_t to receive the time, in microseconds, it took from the start until the SSL/SSH connect/handshake to the remote host was -completed. This time is most often close to the -CURLINFO_PRETRANSFER_TIME_T(3) time, except for cases such as HTTP -pipelining where the pretransfer time can be delayed due to waits in line for -the pipeline and more. +completed. This time is most often close to the CURLINFO_PRETRANSFER_TIME_T(3) +time, except for cases such as HTTP multiplexing where the pretransfer time +can be delayed due to waits in line for the stream and more. When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.61.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CAINFO.md b/docs/libcurl/opts/CURLINFO_CAINFO.md index ea61a1a74..60c131d9e 100644 --- a/docs/libcurl/opts/CURLINFO_CAINFO.md +++ b/docs/libcurl/opts/CURLINFO_CAINFO.md @@ -12,6 +12,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.84.0 --- # NAME @@ -40,6 +41,8 @@ This is a path identifying a single file containing CA certificates. The **path** pointer is set to NULL if there is no default path. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.84.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CAPATH.md b/docs/libcurl/opts/CURLINFO_CAPATH.md index 8b6f8bf77..6211859a5 100644 --- a/docs/libcurl/opts/CURLINFO_CAPATH.md +++ b/docs/libcurl/opts/CURLINFO_CAPATH.md @@ -15,6 +15,7 @@ TLS-backend: - GnuTLS - mbedTLS - wolfSSL +Added-in: 7.84.0 --- # NAME @@ -43,6 +44,8 @@ This is a path identifying a directory. The **path** pointer is set to NULL if there is no default path. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.84.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CERTINFO.md b/docs/libcurl/opts/CURLINFO_CERTINFO.md index 633beed17..e73b2aee7 100644 --- a/docs/libcurl/opts/CURLINFO_CERTINFO.md +++ b/docs/libcurl/opts/CURLINFO_CERTINFO.md @@ -15,6 +15,7 @@ TLS-backend: - GnuTLS - Schannel - Secure Transport +Added-in: 7.19.1 --- # NAME @@ -50,6 +51,8 @@ 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. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -91,13 +94,12 @@ int main(void) See also the *certinfo.c* example. -# AVAILABILITY +# HISTORY -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. +GnuTLS support added in 7.42.0. Schannel support added in 7.50.0. Secure +Transport support added in 7.79.0. mbedTLS support added in 8.9.0. -Added in 7.19.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.md b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.md index 00cbd5308..6befaf8a0 100644 --- a/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.md +++ b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.19.4 --- # NAME @@ -36,6 +37,8 @@ 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. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -69,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CONNECT_TIME.md b/docs/libcurl/opts/CURLINFO_CONNECT_TIME.md index 7a5b4bdfc..dbf1a56fc 100644 --- a/docs/libcurl/opts/CURLINFO_CONNECT_TIME.md +++ b/docs/libcurl/opts/CURLINFO_CONNECT_TIME.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -33,6 +34,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.4.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.md b/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.md index 00d582388..073a93b9c 100644 --- a/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.md +++ b/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.61.0 --- # NAME @@ -35,6 +36,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.61.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CONN_ID.md b/docs/libcurl/opts/CURLINFO_CONN_ID.md index 3face4207..41a3b16fc 100644 --- a/docs/libcurl/opts/CURLINFO_CONN_ID.md +++ b/docs/libcurl/opts/CURLINFO_CONN_ID.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 8.2.0 --- # NAME @@ -34,6 +35,8 @@ 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. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 8.2.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.md b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.md index 0cb1b47d1..77b7be406 100644 --- a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.md +++ b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.6.1 --- # NAME @@ -34,6 +35,8 @@ is the value read from the Content-Length: field. Since 7.19.4, this returns CURLINFO_CONTENT_LENGTH_DOWNLOAD_T(3) is a newer replacement that returns a more sensible variable type. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.55.0. -Added in 7.6.1. Deprecated since 7.55.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md index 15b4f631f..ea08eb931 100644 --- a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md +++ b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.55.0 --- # NAME @@ -31,6 +32,8 @@ Pass a pointer to a *curl_off_t* to receive the content-length of the download. This is the value read from the Content-Length: field. Stores -1 if the size is not known. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.55.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.md b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.md index 7cba9aa33..322a84a56 100644 --- a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.md +++ b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.6.1 --- # NAME @@ -33,6 +34,8 @@ Pass a pointer to a double to receive the specified size of the upload. Since CURLINFO_CONTENT_LENGTH_UPLOAD_T(3) is a newer replacement that returns a more sensible variable type. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.55.0. -Added in 7.6.1. Deprecated since 7.55.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.md b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.md index babd796e3..4f018711a 100644 --- a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.md +++ b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.55.0 --- # NAME @@ -30,6 +31,8 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD_T, Pass a pointer to a *curl_off_t* to receive the specified size of the upload. Stores -1 if the size is not known. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,9 +58,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.55.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.md b/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.md index 25cb737e0..9e1800f8d 100644 --- a/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.md +++ b/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.9.4 --- # NAME @@ -39,6 +40,8 @@ corresponding CURL handle. The modern way to get this header from a response is to instead use the curl_easy_header(3) function. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.9.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_COOKIELIST.md b/docs/libcurl/opts/CURLINFO_COOKIELIST.md index 64e9f4a65..0481c1277 100644 --- a/docs/libcurl/opts/CURLINFO_COOKIELIST.md +++ b/docs/libcurl/opts/CURLINFO_COOKIELIST.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.14.1 --- # NAME @@ -36,6 +37,8 @@ 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. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -71,9 +74,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.14.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.md b/docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.md index e10142f5d..86080c579 100644 --- a/docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.md +++ b/docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.72.0 --- # NAME @@ -38,6 +39,8 @@ The **methodp** pointer is NULL or points to private memory. You MUST NOT free - it gets freed when you call curl_easy_cleanup(3) on the corresponding CURL handle. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.72.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.md b/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.md index 3892bd7bc..c1f395227 100644 --- a/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.md +++ b/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.4 --- # NAME @@ -35,6 +36,8 @@ The **urlp** pointer is NULL or points to private memory. You MUST NOT free - it gets freed when you call curl_easy_cleanup(3) on the corresponding CURL handle. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_FILETIME.md b/docs/libcurl/opts/CURLINFO_FILETIME.md index 4e4d7f190..40482e36f 100644 --- a/docs/libcurl/opts/CURLINFO_FILETIME.md +++ b/docs/libcurl/opts/CURLINFO_FILETIME.md @@ -12,6 +12,7 @@ Protocol: - HTTP - FTP - SFTP +Added-in: 7.5 --- # NAME @@ -34,12 +35,13 @@ in number of seconds since January 1 1970 in the GMT/UTC time zone. If you get hide it or the server does not support the command that tells document time etc) and the time of the document is unknown. -You must tell libcurl to collect this information before the transfer is made, -by using the CURLOPT_FILETIME(3) option to curl_easy_setopt(3) or -you this unconditionally gets a -1 back. +You must ask libcurl to collect this information before the transfer is made, +by using the CURLOPT_FILETIME(3) option or you unconditionally get a -1 back. -Consider using CURLINFO_FILETIME_T(3) to be able to extract dates beyond -the year 2038 on systems using 32 bit longs (Windows). +Consider CURLINFO_FILETIME_T(3) instead to be able to extract dates beyond the +year 2038 on systems using 32-bit longs (Windows). + +# %PROTOCOLS% # EXAMPLE @@ -67,9 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.5 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_FILETIME_T.md b/docs/libcurl/opts/CURLINFO_FILETIME_T.md index 0ba24d61f..7cdec9b4c 100644 --- a/docs/libcurl/opts/CURLINFO_FILETIME_T.md +++ b/docs/libcurl/opts/CURLINFO_FILETIME_T.md @@ -1,7 +1,7 @@ --- c: Copyright (C) Daniel Stenberg, , et al. SPDX-License-Identifier: curl -Title: CURLINFO_FILETIME +Title: CURLINFO_FILETIME_T Section: 3 Source: libcurl See-also: @@ -12,6 +12,7 @@ Protocol: - HTTP - FTP - SFTP +Added-in: 7.59.0 --- # NAME @@ -30,18 +31,18 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME_T, # DESCRIPTION Pass a pointer to a curl_off_t to receive the remote time of the retrieved -document in number of seconds since January 1 1970 in the GMT/UTC time -zone. If you get -1, it can be because of many reasons (it might be unknown, -the server might hide it or the server does not support the command that tells +document in number of seconds since January 1 1970 in the GMT/UTC time zone. +If you get -1, it can be because of many reasons (it might be unknown, the +server might hide it or the server does not support the command that tells document time etc) and the time of the document is unknown. You must ask libcurl to collect this information before the transfer is made, -by using the CURLOPT_FILETIME(3) option to curl_easy_setopt(3) or -you unconditionally get a -1 back. +by using the CURLOPT_FILETIME(3) option or you unconditionally get a -1 back. -This option is an alternative to CURLINFO_FILETIME(3) to allow systems -with 32 bit long variables to extract dates outside of the 32bit timestamp -range. +This option is an alternative to CURLINFO_FILETIME(3) to allow systems with 32 +bit long variables to extract dates outside of the 32-bit timestamp range. + +# %PROTOCOLS% # EXAMPLE @@ -69,9 +70,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.59.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.md b/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.md index 2276a5513..245a84936 100644 --- a/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.md +++ b/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.md @@ -9,6 +9,7 @@ See-also: - curl_easy_setopt (3) Protocol: - FTP +Added-in: 7.15.4 --- # NAME @@ -34,6 +35,8 @@ The **path** pointer is NULL or points to private memory. You MUST NOT free - it gets freed when you call curl_easy_cleanup(3) on the corresponding CURL handle. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,11 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +Works for SFTP since 7.21.4 -Added in 7.15.4. Works for SFTP since 7.21.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_HEADER_SIZE.md b/docs/libcurl/opts/CURLINFO_HEADER_SIZE.md index f60ab5245..ce8764c96 100644 --- a/docs/libcurl/opts/CURLINFO_HEADER_SIZE.md +++ b/docs/libcurl/opts/CURLINFO_HEADER_SIZE.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -33,6 +34,8 @@ received. Measured in number of bytes. The total includes the size of any received headers suppressed by CURLOPT_SUPPRESS_CONNECT_HEADERS(3). +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.4.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.md b/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.md index 21d92c323..b0b229eb3 100644 --- a/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.md +++ b/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.10.8 --- # NAME @@ -29,8 +30,9 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp); Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available according to the previous response. The meaning of the -bits is explained in the CURLOPT_HTTPAUTH(3) option for -curl_easy_setopt(3). +bits is explained in the CURLOPT_HTTPAUTH(3) option for curl_easy_setopt(3). + +# %PROTOCOLS% # EXAMPLE @@ -65,10 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added RFC 2617 in 7.10.8 -Added RFC 7616 in 7.57.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.md b/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.md index d5fb41c3d..b93f9d6f5 100644 --- a/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.md +++ b/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.10.7 --- # NAME @@ -30,6 +31,8 @@ Pass a pointer to a long to receive the last received HTTP proxy response code to a CONNECT request. The returned value is zero if no such response code was available. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10.7 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_HTTP_VERSION.md b/docs/libcurl/opts/CURLINFO_HTTP_VERSION.md index 8ca341fe2..2721eb3fc 100644 --- a/docs/libcurl/opts/CURLINFO_HTTP_VERSION.md +++ b/docs/libcurl/opts/CURLINFO_HTTP_VERSION.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.50.0 --- # NAME @@ -31,6 +32,8 @@ 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. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -50,9 +53,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.50.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_LASTSOCKET.md b/docs/libcurl/opts/CURLINFO_LASTSOCKET.md index 8e98df90e..5a7188624 100644 --- a/docs/libcurl/opts/CURLINFO_LASTSOCKET.md +++ b/docs/libcurl/opts/CURLINFO_LASTSOCKET.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.15.2 --- # NAME @@ -40,6 +41,8 @@ NOTE: this API is deprecated since it is not working on win64 where the SOCKET type is 64 bits large while its 'long' is 32 bits. Use the CURLINFO_ACTIVESOCKET(3) instead, if possible. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,21 +57,24 @@ int main(void) /* Do not do the transfer - only connect to host */ curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L); res = curl_easy_perform(curl); - - /* Extract the socket from the curl handle */ - res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd); - if(res != CURLE_OK) { printf("Error: %s\n", curl_easy_strerror(res)); + curl_easy_cleanup(curl); return 1; } + + /* Extract the socket from the curl handle */ + res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd); + if(!res && sockfd != -1) { + /* operate on sockfd */ + } + + curl_easy_cleanup(curl); } } ~~~ -# AVAILABILITY - -Added in 7.15.2 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_LOCAL_IP.md b/docs/libcurl/opts/CURLINFO_LOCAL_IP.md index d3e2118b1..ace1b7189 100644 --- a/docs/libcurl/opts/CURLINFO_LOCAL_IP.md +++ b/docs/libcurl/opts/CURLINFO_LOCAL_IP.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.21.0 --- # NAME @@ -37,6 +38,8 @@ The **ip** pointer is NULL or points to private memory. You MUST NOT free - it gets freed when you call curl_easy_cleanup(3) on the corresponding CURL handle. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_LOCAL_PORT.md b/docs/libcurl/opts/CURLINFO_LOCAL_PORT.md index 470341600..ff4bcbab3 100644 --- a/docs/libcurl/opts/CURLINFO_LOCAL_PORT.md +++ b/docs/libcurl/opts/CURLINFO_LOCAL_PORT.md @@ -11,6 +11,7 @@ See-also: - CURLINFO_PRIMARY_PORT (3) - curl_easy_getinfo (3) - curl_easy_setopt (3) +Added-in: 7.21.0 --- # NAME @@ -30,6 +31,8 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp); Pass a pointer to a long to receive the local port number of the most recent connection done with this **curl** handle. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.md b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.md index 29dd375a5..349e300e8 100644 --- a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.md +++ b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -34,6 +35,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.4.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.md b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.md index eb0bae797..d263eb612 100644 --- a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.md +++ b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.61.0 --- # NAME @@ -34,6 +35,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.61.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.md b/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.md index 5488fcc42..1a0a83f8f 100644 --- a/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.md +++ b/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.md @@ -9,6 +9,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.12.3 --- # NAME @@ -32,6 +33,8 @@ many times libcurl successfully reused existing connection(s) or not. See the connection options of curl_easy_setopt(3) to see how libcurl tries to make persistent connections to save time. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -46,7 +49,7 @@ int main(void) if(res == CURLE_OK) { long connects; res = curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &connects); - if(res) + if(!res) printf("It needed %ld connects\n", connects); } curl_easy_cleanup(curl); @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.12.3 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_OS_ERRNO.md b/docs/libcurl/opts/CURLINFO_OS_ERRNO.md index 85084778a..969f1a36c 100644 --- a/docs/libcurl/opts/CURLINFO_OS_ERRNO.md +++ b/docs/libcurl/opts/CURLINFO_OS_ERRNO.md @@ -9,6 +9,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.12.2 --- # NAME @@ -29,6 +30,16 @@ Pass a pointer to a long to receive the errno variable from a connect failure. Note that the value is only set on failure, it is not reset upon a successful operation. The number is OS and system specific. +libcurl network-related errors that may have a saved errno are: +CURLE_COULDNT_CONNECT, CURLE_FAILED_INIT, CURLE_INTERFACE_FAILED, +CURLE_OPERATION_TIMEDOUT, CURLE_RECV_ERROR, CURLE_SEND_ERROR. + +Since 8.8.0 libcurl clears the easy handle's saved errno before performing the +transfer. Prior versions did not clear the saved errno, which means if a saved +errno is retrieved it could be from a previous transfer on the same handle. + +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -42,7 +53,7 @@ int main(void) if(res != CURLE_OK) { long error; res = curl_easy_getinfo(curl, CURLINFO_OS_ERRNO, &error); - if(res && error) { + if(!res && error) { printf("Errno: %ld\n", error); } } @@ -51,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.12.2 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.md b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.md index 04adf5aa6..0d3e3304d 100644 --- a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.md +++ b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -39,6 +40,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.4.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.md b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.md index b1049a663..0300312de 100644 --- a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.md +++ b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.61.0 --- # NAME @@ -39,6 +40,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.61.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_PRIMARY_IP.md b/docs/libcurl/opts/CURLINFO_PRIMARY_IP.md index 31237f656..83f431fd8 100644 --- a/docs/libcurl/opts/CURLINFO_PRIMARY_IP.md +++ b/docs/libcurl/opts/CURLINFO_PRIMARY_IP.md @@ -12,6 +12,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.19.0 --- # NAME @@ -38,6 +39,8 @@ The **ip** pointer is NULL or points to private memory. You MUST NOT free - it gets freed when you call curl_easy_cleanup(3) on the corresponding CURL handle. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.md b/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.md index a1de51db3..d44594e33 100644 --- a/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.md +++ b/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.21.0 --- # NAME @@ -35,6 +36,8 @@ If a proxy was used for the most recent transfer, this is the port number of the proxy, if no proxy was used it is the port number of the most recently accessed URL. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_PRIVATE.md b/docs/libcurl/opts/CURLINFO_PRIVATE.md index 4a4d35150..0ce649924 100644 --- a/docs/libcurl/opts/CURLINFO_PRIVATE.md +++ b/docs/libcurl/opts/CURLINFO_PRIVATE.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.10.3 --- # NAME @@ -31,6 +32,8 @@ associated with the curl handle (set with the CURLOPT_PRIVATE(3)). Please note that for internal reasons, the value is returned as a char pointer, although effectively being a 'void *'. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10.3 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_PROTOCOL.md b/docs/libcurl/opts/CURLINFO_PROTOCOL.md index 13c597381..9dadae91c 100644 --- a/docs/libcurl/opts/CURLINFO_PROTOCOL.md +++ b/docs/libcurl/opts/CURLINFO_PROTOCOL.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.52.0 --- # NAME @@ -43,6 +44,8 @@ CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_SMB, CURLPROTO_SMBS, CURLPROTO_SMTP, CURLPROTO_SMTPS, CURLPROTO_TELNET, CURLPROTO_TFTP, CURLPROTO_MQTT ~~~ +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.85.0. -Added in 7.52.0. Deprecated since 7.85.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.md b/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.md index 823bdd385..201c0d996 100644 --- a/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.md +++ b/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.10.8 --- # NAME @@ -29,8 +30,9 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available according to the previous response. The meaning of the -bits is explained in the CURLOPT_PROXYAUTH(3) option for -curl_easy_setopt(3). +bits is explained in the CURLOPT_PROXYAUTH(3) option for curl_easy_setopt(3). + +# %PROTOCOLS% # EXAMPLE @@ -66,10 +68,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added RFC 2617 in 7.10.8 -Added RFC 7616 in 7.57.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_PROXY_ERROR.md b/docs/libcurl/opts/CURLINFO_PROXY_ERROR.md index 1d8855f37..52572b99b 100644 --- a/docs/libcurl/opts/CURLINFO_PROXY_ERROR.md +++ b/docs/libcurl/opts/CURLINFO_PROXY_ERROR.md @@ -11,6 +11,7 @@ See-also: - libcurl-errors (3) Protocol: - All +Added-in: 7.73.0 --- # NAME @@ -71,6 +72,8 @@ transfer returned a **CURLE_PROXY** error. That error code matches the The error code is zero (**CURLPX_OK**) if no response code was available. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -94,9 +97,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.73.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.md b/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.md index 073de0aa5..f1aeb052c 100644 --- a/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.md +++ b/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.md @@ -13,6 +13,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.52.0 --- # NAME @@ -34,6 +35,10 @@ Pass a pointer to a long to receive the result of the certificate verification that was requested (using the CURLOPT_PROXY_SSL_VERIFYPEER(3) option. This is only used for HTTPS proxies. +0 is a positive result. Non-zero is an error. + +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -43,22 +48,29 @@ int main(void) 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) + 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); + return 1; + } + + res = curl_easy_getinfo(curl, CURLINFO_PROXY_SSL_VERIFYRESULT, + &verifyresult); + if(!res) { + printf("The peer verification said %s\n", + (verifyresult ? "bad" : "fine")); + } curl_easy_cleanup(curl); } } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_QUEUE_TIME_T.md b/docs/libcurl/opts/CURLINFO_QUEUE_TIME_T.md index c61ca2faa..c066e4ca5 100644 --- a/docs/libcurl/opts/CURLINFO_QUEUE_TIME_T.md +++ b/docs/libcurl/opts/CURLINFO_QUEUE_TIME_T.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 8.6.0 --- # NAME @@ -35,6 +36,8 @@ connection etc due to set conditions and limits imposed by the application. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 8.6.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.md b/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.md index bcfaa362d..c5999247e 100644 --- a/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.md +++ b/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.9.7 --- # NAME @@ -31,6 +32,8 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, Pass a pointer to a long to receive the total number of redirections that were actually followed. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,9 +54,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.9.7 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.md b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.md index 202343d61..f60b5e541 100644 --- a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.md +++ b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.md @@ -12,6 +12,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.9.7 --- # NAME @@ -36,6 +37,8 @@ the complete execution time for multiple redirections. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.9.7 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.md b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.md index 0ccafa077..1c69bfcf1 100644 --- a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.md +++ b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.md @@ -12,6 +12,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.61.0 --- # NAME @@ -37,6 +38,8 @@ multiple redirections. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.61.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_URL.md b/docs/libcurl/opts/CURLINFO_REDIRECT_URL.md index 70a4f6cc3..9926a5edb 100644 --- a/docs/libcurl/opts/CURLINFO_REDIRECT_URL.md +++ b/docs/libcurl/opts/CURLINFO_REDIRECT_URL.md @@ -12,6 +12,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.18.2 --- # NAME @@ -28,14 +29,16 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp); # DESCRIPTION -Pass a pointer to a char pointer to receive the URL a redirect *would* -take you to if you would enable CURLOPT_FOLLOWLOCATION(3). This can come -handy if you think using the built-in libcurl redirect logic is not good enough -for you but you would still prefer to avoid implementing all the magic of -figuring out the new URL. +Pass a pointer to a char pointer to receive the URL a redirect *would* take +you to if you would enable CURLOPT_FOLLOWLOCATION(3). This can come handy if +you think using the built-in libcurl redirect logic is not good enough for you +but you would still prefer to avoid implementing all the magic of figuring out +the new URL. -This URL is also set if the CURLOPT_MAXREDIRS(3) limit prevented a -redirect to happen (since 7.54.1). +This URL is also set if the CURLOPT_MAXREDIRS(3) limit prevented a redirect to +happen (since 7.54.1). + +# %PROTOCOLS% # EXAMPLE @@ -58,9 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.18.2 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_REFERER.md b/docs/libcurl/opts/CURLINFO_REFERER.md index 6850b6de7..b74a7016b 100644 --- a/docs/libcurl/opts/CURLINFO_REFERER.md +++ b/docs/libcurl/opts/CURLINFO_REFERER.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - HTTP +Added-in: 7.76.0 --- # NAME @@ -34,6 +35,8 @@ The **hdrp** pointer is NULL or points to private memory you MUST NOT free - it gets freed when you call curl_easy_cleanup(3) on the corresponding CURL handle. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.76.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.md b/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.md index 89452d32b..3b0c66dc9 100644 --- a/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.md +++ b/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -31,6 +32,8 @@ Pass a pointer to a long to receive the total size of the issued requests. This is so far only for HTTP requests. Note that this may be more than one request if CURLOPT_FOLLOWLOCATION(3) is enabled. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -52,9 +55,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.4.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.md b/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.md index ea7d8f3f4..05e88387c 100644 --- a/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.md +++ b/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.md @@ -13,6 +13,7 @@ Protocol: - FTP - SMTP - LDAP +Added-in: 7.10.8 --- # NAME @@ -37,6 +38,8 @@ no server response code has been received. Note that a proxy's CONNECT response should be read with CURLINFO_HTTP_CONNECTCODE(3) and not this. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,10 +59,12 @@ int main(void) } ~~~ -# AVAILABILITY +# NOTES + +The former name, CURLINFO_HTTP_CODE, was added in 7.4.1. Support for SMTP +responses added in 7.25.0, for OpenLDAP in 7.81.0. -Added in 7.10.8. CURLINFO_HTTP_CODE was added in 7.4.1. -Support for SMTP responses added in 7.25.0, for OpenLDAP in 7.81.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_RETRY_AFTER.md b/docs/libcurl/opts/CURLINFO_RETRY_AFTER.md index b194fc922..0dca2e509 100644 --- a/docs/libcurl/opts/CURLINFO_RETRY_AFTER.md +++ b/docs/libcurl/opts/CURLINFO_RETRY_AFTER.md @@ -10,6 +10,7 @@ See-also: - curl_easy_header (3) Protocol: - All +Added-in: 7.66.0 --- # NAME @@ -37,7 +38,9 @@ or zero if there was no header or the header could not be parsed. # DEFAULT -Returns zero delay if there was no header. +Zero if there was no header. + +# %PROTOCOLS% # EXAMPLE @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.66.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.md b/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.md index d79e2cc70..52640e998 100644 --- a/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.md +++ b/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -31,6 +32,8 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, Pass a pointer to a long to receive the next CSeq that is expected to be used by the application. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -50,9 +53,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.md b/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.md index 3e9d17fcc..4eb11b411 100644 --- a/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.md +++ b/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -31,6 +32,8 @@ server. If your application encounters a *CURLE_RTSP_CSEQ_ERROR* then you may wish to troubleshoot and/or fix the CSeq mismatch by peeking at this value. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -50,9 +53,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.md b/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.md index 5b866c571..1b1d73d88 100644 --- a/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.md +++ b/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -35,6 +36,8 @@ Listening for server initiated requests is not implemented! Applications wishing to resume an RTSP session on another connection should retrieve this info before closing the active connection. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.md b/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.md index 24a2b1d57..04feb1b6b 100644 --- a/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.md +++ b/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -36,6 +37,8 @@ The **id** pointer is NULL or points to private memory. You MUST NOT free - it gets freed when you call curl_easy_cleanup(3) on the corresponding CURL handle. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,9 +58,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SCHEME.md b/docs/libcurl/opts/CURLINFO_SCHEME.md index 5b89bfc14..8c109839e 100644 --- a/docs/libcurl/opts/CURLINFO_SCHEME.md +++ b/docs/libcurl/opts/CURLINFO_SCHEME.md @@ -12,6 +12,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.52.0 --- # NAME @@ -33,8 +34,13 @@ string holding the URL scheme used for the most recent connection done with this CURL **handle**. The **scheme** pointer is NULL or points to private memory. You MUST NOT -free - it gets freed when you call curl_easy_cleanup(3) on the -corresponding CURL handle. +free - it gets freed when you call curl_easy_cleanup(3) on the corresponding +CURL handle. + +The returned scheme might be upper or lowercase. Do comparisons case +insensitively. + +# %PROTOCOLS% # EXAMPLE @@ -57,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.md b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.md index 6eaad7b7c..9c9866496 100644 --- a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.md +++ b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.md @@ -12,6 +12,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -37,6 +38,8 @@ number. CURLINFO_SIZE_DOWNLOAD_T(3) is a newer replacement that returns a more sensible variable type. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.55.0. -Added in 7.4.1. Deprecated since 7.55.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.md b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.md index 9c2a9cea6..e886f2c11 100644 --- a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.md +++ b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.md @@ -12,6 +12,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.55.0 --- # NAME @@ -34,6 +35,8 @@ 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 is excluded from this amount. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.55.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.md b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.md index fa3989eed..1ecbddbea 100644 --- a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.md +++ b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -34,6 +35,8 @@ uploaded. CURLINFO_SIZE_UPLOAD_T(3) is a newer replacement that returns a more sensible variable type. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.55.0. -Added in 7.4.1. Deprecated since 7.55.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.md b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.md index bea4078ca..06ee47dab 100644 --- a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.md +++ b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.55.0 --- # NAME @@ -31,6 +32,8 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD_T, Pass a pointer to a *curl_off_t* to receive the total amount of bytes that were uploaded. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,9 +58,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.55.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.md b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.md index 98ada9adf..52e7cd0cb 100644 --- a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.md +++ b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -34,6 +35,8 @@ measured for the complete download. Measured in bytes/second. CURLINFO_SPEED_DOWNLOAD_T(3) is a newer replacement that returns a more sensible variable type. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.55.0. -Added in 7.4.1. Deprecated since 7.55.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.md b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.md index a1f8178bd..a42356b36 100644 --- a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.md +++ b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.55.0 --- # NAME @@ -31,6 +32,8 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD_T, Pass a pointer to a *curl_off_t* to receive the average download speed that curl measured for the complete download. Measured in bytes/second. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.55.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.md b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.md index f963eca19..15d8cf23c 100644 --- a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.md +++ b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -32,6 +33,8 @@ measured for the complete upload. Measured in bytes/second. CURLINFO_SPEED_UPLOAD_T(3) is a newer replacement that returns a more sensible variable type. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.55.0. -Added in 7.4.1. Deprecated since 7.55.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.md b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.md index 45cb6bf2d..446943433 100644 --- a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.md +++ b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.55.0 --- # NAME @@ -30,6 +31,8 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD_T, Pass a pointer to a *curl_off_t* to receive the average upload speed that curl measured for the complete upload. Measured in bytes/second. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.55.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SSL_ENGINES.md b/docs/libcurl/opts/CURLINFO_SSL_ENGINES.md index 9a4108734..553bd039b 100644 --- a/docs/libcurl/opts/CURLINFO_SSL_ENGINES.md +++ b/docs/libcurl/opts/CURLINFO_SSL_ENGINES.md @@ -12,6 +12,7 @@ Protocol: - TLS TLS-backend: - OpenSSL +Added-in: 7.12.3 --- # NAME @@ -36,6 +37,8 @@ available at runtime. **NOTE:** you must call curl_slist_free_all(3) on the list pointer once you are done with it, as libcurl does not free this data for you. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.12.3. Available in OpenSSL builds with "engine" support. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.md b/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.md index 27cbfde71..69726b352 100644 --- a/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.md +++ b/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.md @@ -13,6 +13,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.5 --- # NAME @@ -36,6 +37,8 @@ option). 0 is a positive result. Non-zero is an error. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -45,21 +48,28 @@ int main(void) if(curl) { CURLcode res; long verifyresult; + curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); + res = curl_easy_perform(curl); - if(res) + 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); + return 1; + } + + res = curl_easy_getinfo(curl, CURLINFO_SSL_VERIFYRESULT, + &verifyresult); + if(!res) { + printf("The peer verification said %s\n", + (verifyresult ? "bad" : "fine")); + } curl_easy_cleanup(curl); } } ~~~ -# AVAILABILITY - -Added in 7.5. Only set by the OpenSSL/libressl/boringssl and GnuTLS backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.md b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.md index b58e41ac5..0e64ba8bf 100644 --- a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.md +++ b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.9.2 --- # NAME @@ -37,6 +38,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.9.2 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.md b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.md index 27c55bfc8..39894d6f7 100644 --- a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.md +++ b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.61.0 --- # NAME @@ -38,6 +39,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.61.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_TLS_SESSION.md b/docs/libcurl/opts/CURLINFO_TLS_SESSION.md index 2dc710a4a..e990ec6ec 100644 --- a/docs/libcurl/opts/CURLINFO_TLS_SESSION.md +++ b/docs/libcurl/opts/CURLINFO_TLS_SESSION.md @@ -13,6 +13,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.34.0 --- # NAME @@ -47,6 +48,8 @@ function *SSL_get_SSL_CTX(3)*. Therefore unless you need compatibility with older versions of libcurl use CURLINFO_TLS_SSL_PTR(3). Refer to that document for more information. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -66,10 +69,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.48.0 -Added in 7.34.0. Deprecated since 7.48.0 and supported by OpenSSL and GnuTLS -only up until this version was released. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.md b/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.md index 097bf98b3..de8965a19 100644 --- a/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.md +++ b/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.md @@ -18,6 +18,7 @@ TLS-backend: - Schannel - Secure Transport - wolfSSL +Added-in: 7.48.0 --- # NAME @@ -60,8 +61,8 @@ struct curl_tlssessioninfo { The *backend* 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_MBEDTLS, CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL, -CURLSSLBACKEND_SCHANNEL or CURLSSLBACKEND_MESALINK. (Note that the OpenSSL +CURLSSLBACKEND_MBEDTLS, CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL or +CURLSSLBACKEND_SCHANNEL. (Note that the OpenSSL forks are all reported as just OpenSSL here.) The *internals* struct member points to a TLS library specific pointer for @@ -95,6 +96,8 @@ as well: **SSL *** +## + If the *internals* 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(3) has @@ -131,6 +134,8 @@ How are you using this option? Are you affected by any of these limitations? Please let us know by making a comment at https://github.com/curl/curl/issues/685 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -164,13 +169,13 @@ int main(int argc, char **argv) } ~~~ -# AVAILABILITY - -Added in 7.48.0. +# HISTORY This option supersedes CURLINFO_TLS_SESSION(3) which was added in 7.34.0. This option is exactly the same as that option except in the case of OpenSSL. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLINFO_TOTAL_TIME.md b/docs/libcurl/opts/CURLINFO_TOTAL_TIME.md index 022960590..f752a23de 100644 --- a/docs/libcurl/opts/CURLINFO_TOTAL_TIME.md +++ b/docs/libcurl/opts/CURLINFO_TOTAL_TIME.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.4.1 --- # NAME @@ -35,6 +36,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.4.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.md b/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.md index 0bff41bd4..0b0d16ab7 100644 --- a/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.md +++ b/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 7.61.0 --- # NAME @@ -35,6 +36,8 @@ When a redirect is followed, the time from each request is added together. See also the TIMES overview in the curl_easy_getinfo(3) man page. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.61.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_USED_PROXY.md b/docs/libcurl/opts/CURLINFO_USED_PROXY.md index 7b38ea027..aeabb97af 100644 --- a/docs/libcurl/opts/CURLINFO_USED_PROXY.md +++ b/docs/libcurl/opts/CURLINFO_USED_PROXY.md @@ -11,6 +11,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 8.7.0 --- # NAME @@ -31,6 +32,8 @@ CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_USED_PROXY, Pass a pointer to a long. It gets set to zero set if no proxy was used in the previous transfer or a non-zero value if a proxy was used. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,7 @@ int main(int argc, char *argv[]) } ~~~ -# AVAILABILITY - -Added in 8.7.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLINFO_XFER_ID.md b/docs/libcurl/opts/CURLINFO_XFER_ID.md index 0855ac9a1..f87559321 100644 --- a/docs/libcurl/opts/CURLINFO_XFER_ID.md +++ b/docs/libcurl/opts/CURLINFO_XFER_ID.md @@ -10,6 +10,7 @@ See-also: - curl_easy_setopt (3) Protocol: - All +Added-in: 8.2.0 --- # NAME @@ -35,6 +36,8 @@ 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. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 8.2.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md b/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md index e292792ee..ff232ed64 100644 --- a/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md +++ b/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.md @@ -10,6 +10,7 @@ See-also: - CURLMOPT_PIPELINING (3) Protocol: - HTTP +Added-in: 7.30.0 --- # NAME @@ -37,7 +38,9 @@ than CURLMOPT_MAX_PIPELINE_LENGTH(3). # DEFAULT -The default value is 0, which means that the penalization is inactive. +0, which means that penalization is inactive. + +# %PROTOCOLS% # EXAMPLE @@ -50,9 +53,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.30.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md b/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md index 8f0783b60..bbd90553e 100644 --- a/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md +++ b/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.md @@ -9,6 +9,7 @@ See-also: - CURLMOPT_PIPELINING (3) Protocol: - HTTP +Added-in: 7.30.0 --- # NAME @@ -36,7 +37,9 @@ CURLMOPT_MAX_PIPELINE_LENGTH(3). # DEFAULT -The default value is 0, which means that the size penalization is inactive. +0, which means that the size penalization is inactive. + +# %PROTOCOLS% # EXAMPLE @@ -49,9 +52,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.30.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.md b/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.md index 1e5a947ed..d4223f126 100644 --- a/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.md +++ b/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_MAXCONNECTS (3) Protocol: - All +Added-in: 7.16.3 --- # NAME @@ -52,6 +53,8 @@ ones to get made. See DESCRIPTION +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -63,9 +66,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.3 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.md b/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.md index b8e7fefdb..c628ca2bc 100644 --- a/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.md +++ b/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_MAXCONNECTS (3) Protocol: - HTTP +Added-in: 7.67.0 --- # NAME @@ -37,6 +38,8 @@ value passed here would be honored based on other system resources properties. 100 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -48,9 +51,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.67.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.md b/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.md index f798a4626..39567f1e2 100644 --- a/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.md +++ b/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.md @@ -9,6 +9,7 @@ See-also: - CURLMOPT_MAX_TOTAL_CONNECTIONS (3) Protocol: - All +Added-in: 7.30.0 --- # NAME @@ -55,6 +56,8 @@ ones to get made. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -66,9 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.30.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.md b/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.md index 84ab65e62..9da9994ab 100644 --- a/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.md +++ b/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.md @@ -9,6 +9,7 @@ See-also: - CURLMOPT_PIPELINING (3) Protocol: - All +Added-in: 7.30.0 --- # NAME @@ -42,6 +43,8 @@ CURLMOPT_MAX_PIPELINE_LENGTH(3). 5 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +56,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.30.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.md b/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.md index a227a9cce..1a7fe170f 100644 --- a/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.md +++ b/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.md @@ -9,6 +9,7 @@ See-also: - CURLMOPT_MAX_HOST_CONNECTIONS (3) Protocol: - All +Added-in: 7.30.0 --- # NAME @@ -45,8 +46,10 @@ timeout is however treated as a per-connect timeout. # DEFAULT -The default value is 0, which means that there is no limit. It is then simply -controlled by the number of easy handles added. +0, which means that there is no limit. It is then simply controlled by the +number of easy handles added. + +# %PROTOCOLS% # EXAMPLE @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.30.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING.md b/docs/libcurl/opts/CURLMOPT_PIPELINING.md index 66570a823..caee088dd 100644 --- a/docs/libcurl/opts/CURLMOPT_PIPELINING.md +++ b/docs/libcurl/opts/CURLMOPT_PIPELINING.md @@ -13,11 +13,12 @@ See-also: - CURLMOPT_PIPELINING_SITE_BL (3) Protocol: - HTTP +Added-in: 7.16.0 --- # NAME -CURLMOPT_PIPELINING - enable HTTP pipelining and multiplexing +CURLMOPT_PIPELINING - enable HTTP multiplexing # SYNOPSIS @@ -29,8 +30,8 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask); # DESCRIPTION -Pass in the correct value in the **bitmask** parameter to instruct libcurl -to enable multiplexing for this multi handle. +Pass in the correct value in the **bitmask** parameter to instruct libcurl to +enable multiplexing for this multi handle. With multiplexing enabled, libcurl attempts to do multiple transfers over the same connection when doing parallel transfers to the same hosts. @@ -50,9 +51,9 @@ existing connection if possible. This requires HTTP/2 or HTTP/3. # DEFAULT -Since 7.62.0, **CURLPIPE_MULTIPLEX** is enabled by default. +**CURLPIPE_MULTIPLEX** -Before that, default was **CURLPIPE_NOTHING**. +# %PROTOCOLS% # EXAMPLE @@ -65,10 +66,16 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +The multiplex support bit was added in 7.43.0. HTTP/1 Pipelining support was +disabled in 7.62.0. + +Since 7.62.0, **CURLPIPE_MULTIPLEX** is enabled by default. + +Before that, default was **CURLPIPE_NOTHING**. -Added in 7.16.0. Multiplex support bit added in 7.43.0. HTTP/1 Pipelining -support was disabled in 7.62.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.md b/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.md index 0fc11fdc3..b009de81c 100644 --- a/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.md +++ b/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.md @@ -9,6 +9,7 @@ See-also: - CURLMOPT_PIPELINING_SITE_BL (3) Protocol: - HTTP +Added-in: 7.30.0 --- # NAME @@ -41,7 +42,9 @@ Pass a NULL pointer to clear the block list. # DEFAULT -The default value is NULL, which means that there is no block list. +NULL, which means that there is no block list. + +# %PROTOCOLS% # EXAMPLE @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.30.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.md b/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.md index dc009a27d..9e9e20ac1 100644 --- a/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.md +++ b/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.md @@ -9,6 +9,7 @@ See-also: - CURLMOPT_PIPELINING_SERVER_BL (3) Protocol: - HTTP +Added-in: 7.30.0 --- # NAME @@ -36,7 +37,9 @@ Pass a NULL pointer to clear the block list. # DEFAULT -The default value is NULL, which means that there is no block list. +NULL, which means that there is no block list. + +# %PROTOCOLS% # EXAMPLE @@ -55,9 +58,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.30.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_PUSHDATA.md b/docs/libcurl/opts/CURLMOPT_PUSHDATA.md index 23399d17d..5499225da 100644 --- a/docs/libcurl/opts/CURLMOPT_PUSHDATA.md +++ b/docs/libcurl/opts/CURLMOPT_PUSHDATA.md @@ -11,6 +11,7 @@ See-also: - RFC 7540 Protocol: - HTTP +Added-in: 7.44.0 --- # NAME @@ -35,6 +36,8 @@ libcurl itself, only passed on to the callback function. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -76,9 +79,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.44.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.md b/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.md index c80112839..d8f800380 100644 --- a/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.md +++ b/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.md @@ -11,6 +11,7 @@ See-also: - RFC 7540 Protocol: - HTTP +Added-in: 7.44.0 --- # NAME @@ -96,6 +97,8 @@ All other return codes are reserved for future use. NULL, no callback +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -137,9 +140,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.44.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_SOCKETDATA.md b/docs/libcurl/opts/CURLMOPT_SOCKETDATA.md index 7aea20c44..aade927a1 100644 --- a/docs/libcurl/opts/CURLMOPT_SOCKETDATA.md +++ b/docs/libcurl/opts/CURLMOPT_SOCKETDATA.md @@ -10,6 +10,7 @@ See-also: - curl_multi_socket_action (3) Protocol: - All +Added-in: 7.15.4 --- # NAME @@ -36,6 +37,8 @@ callback's **clientp** argument. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -71,9 +74,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.15.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.md b/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.md index a16747c04..a53ee43d3 100644 --- a/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.md +++ b/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.md @@ -10,6 +10,7 @@ See-also: - curl_multi_socket_action (3) Protocol: - All +Added-in: 7.15.4 --- # NAME @@ -89,6 +90,8 @@ active transfer. It might soon be added again. NULL (no callback) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -124,9 +127,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.15.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_TIMERDATA.md b/docs/libcurl/opts/CURLMOPT_TIMERDATA.md index fb830b1fb..4f0ce4e73 100644 --- a/docs/libcurl/opts/CURLMOPT_TIMERDATA.md +++ b/docs/libcurl/opts/CURLMOPT_TIMERDATA.md @@ -9,6 +9,7 @@ See-also: - CURLMOPT_TIMERFUNCTION (3) Protocol: - All +Added-in: 7.16.0 --- # NAME @@ -35,6 +36,8 @@ callback's **clientp** argument. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.md b/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.md index 85f9957a7..40ec76eb9 100644 --- a/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.md +++ b/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLMOPT_TIMERDATA (3) Protocol: - All +Added-in: 7.16.0 --- # NAME @@ -63,6 +64,8 @@ callback with a zero timeout... NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -92,9 +95,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.md b/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.md index c34acbd63..c2b3a3ca1 100644 --- a/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.md +++ b/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.md @@ -9,6 +9,7 @@ See-also: - unix (7) Protocol: - All +Added-in: 7.53.0 --- # NAME @@ -42,7 +43,9 @@ share the same storage and therefore only one of them can be set per handle. # DEFAULT -Default is NULL. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.53.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.md b/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.md index f1db8fa69..90c1060e6 100644 --- a/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.md +++ b/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_STDERR (3) Protocol: - FTP +Added-in: 7.24.0 --- # NAME @@ -33,6 +34,8 @@ server to connect back to libcurl when an active FTP connection is used. 60000 milliseconds +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -50,9 +53,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.24.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.md b/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.md index c090ef318..bd80d842f 100644 --- a/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.md +++ b/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_TRANSFER_ENCODING (3) Protocol: - HTTP +Added-in: 7.21.6 --- # NAME @@ -71,10 +72,23 @@ sending the length of the non-compressed content is a common server mistake). The application does not have to keep the string around after setting this option. +# HISTORY + +This option was called CURLOPT_ENCODING before 7.21.6 + +# NOTES + +The specific libcurl you are using must have been built with zlib to be able to +decompress gzip and deflate responses, with the brotli library to +decompress brotli responses and with the zstd library to decompress zstd +responses. + # DEFAULT NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -93,14 +107,7 @@ int main(void) } ~~~ -# AVAILABILITY - -This option was called CURLOPT_ENCODING before 7.21.6 - -The specific libcurl you are using must have been built with zlib to be able to -decompress gzip and deflate responses, with the brotli library to -decompress brotli responses and with the zstd library to decompress zstd -responses. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.md b/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.md index 24ea2e581..e8ac90c0e 100644 --- a/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.md +++ b/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_STDERR (3) Protocol: - All +Added-in: 7.19.0 --- # NAME @@ -31,6 +32,8 @@ Pass a long specifying the scope id value to use when connecting to IPv6 address 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,9 +54,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_ALTSVC.md b/docs/libcurl/opts/CURLOPT_ALTSVC.md index 8ca2de4be..43c52a47e 100644 --- a/docs/libcurl/opts/CURLOPT_ALTSVC.md +++ b/docs/libcurl/opts/CURLOPT_ALTSVC.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_RESOLVE (3) Protocol: - HTTP +Added-in: 7.64.1 --- # NAME @@ -38,6 +39,8 @@ Specify a blank filename ("") to make libcurl not load from a file at all. NULL. The alt-svc cache is not read nor written to file. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -100,9 +103,7 @@ Boolean (1 or 0) if "persist" was set for this entry Integer priority value (not currently used) -# AVAILABILITY - -Added in 7.64.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.md b/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.md index 971f33fcb..225585443 100644 --- a/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.md +++ b/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_RESOLVE (3) Protocol: - HTTP +Added-in: 7.64.1 --- # NAME @@ -43,6 +44,11 @@ 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 is preferred. +If CURLOPT_ALTSVC(3) is set, CURLOPT_ALTSVC_CTRL(3) gets a default value +corresponding to CURLALTSVC_H1 | CURLALTSVC_H2 | CURLALTSVC_H3 - the HTTP/2 +and HTTP/3 bits are only set if libcurl was built with support for those +versions. + Setting any bit enables the alt-svc engine. ## CURLALTSVC_READONLYFILE @@ -67,10 +73,9 @@ was also built to actually support HTTP/3, otherwise this bit is ignored. # DEFAULT -Alt-Svc handling is disabled by default. If CURLOPT_ALTSVC(3) is set, -CURLOPT_ALTSVC_CTRL(3) has a default value corresponding to -CURLALTSVC_H1 | CURLALTSVC_H2 | CURLALTSVC_H3 - the HTTP/2 and HTTP/3 bits are -only set if libcurl was built with support for those versions. +0 - Alt-Svc handling is disabled + +# %PROTOCOLS% # EXAMPLE @@ -86,9 +91,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.64.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_APPEND.md b/docs/libcurl/opts/CURLOPT_APPEND.md index 6c5142b49..857f88012 100644 --- a/docs/libcurl/opts/CURLOPT_APPEND.md +++ b/docs/libcurl/opts/CURLOPT_APPEND.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_UPLOAD (3) Protocol: - FTP +Added-in: 7.17.0 --- # NAME @@ -33,6 +34,8 @@ instead of overwrite it. This is only useful when uploading to an FTP site. 0 (disabled) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -50,10 +53,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY This option was known as CURLOPT_FTPAPPEND up to 7.16.4 +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_AUTOREFERER.md b/docs/libcurl/opts/CURLOPT_AUTOREFERER.md index 754dee3ba..5106d84c8 100644 --- a/docs/libcurl/opts/CURLOPT_AUTOREFERER.md +++ b/docs/libcurl/opts/CURLOPT_AUTOREFERER.md @@ -12,6 +12,7 @@ See-also: - CURLOPT_REFERER (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -43,6 +44,8 @@ referer header after the transfer. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -66,9 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_AWS_SIGV4.md b/docs/libcurl/opts/CURLOPT_AWS_SIGV4.md index adb6d6afd..2e61e897c 100644 --- a/docs/libcurl/opts/CURLOPT_AWS_SIGV4.md +++ b/docs/libcurl/opts/CURLOPT_AWS_SIGV4.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_PROXYAUTH (3) Protocol: - HTTP +Added-in: 7.75.0 --- # NAME @@ -50,23 +51,28 @@ It is extracted from the hostname specified in the URL if omitted. The argument is a function provided by a cloud. It is extracted from the hostname specified in the URL if omitted. -NOTE: This call set CURLOPT_HTTPAUTH(3) to CURLAUTH_AWS_SIGV4. -Calling CURLOPT_HTTPAUTH(3) with CURLAUTH_AWS_SIGV4 is the same -as calling this with **"aws:amz"** in parameter. +## + +NOTE: This call set CURLOPT_HTTPAUTH(3) to CURLAUTH_AWS_SIGV4. Calling +CURLOPT_HTTPAUTH(3) with CURLAUTH_AWS_SIGV4 is the same as calling this with +**"aws:amz"** in parameter. Example with "Test:Try", when curl uses the algorithm, it generates -**"TEST-HMAC-SHA256"** for "Algorithm", **"x-try-date"** and -**"X-Try-Date"** for "date", **"test4_request"** for "request type", +**"TEST-HMAC-SHA256"** for "Algorithm", **"x-try-date"** and **"X-Try-Date"** +for "date", **"test4_request"** for "request type", **"SignedHeaders=content-type;host;x-try-date"** for "signed headers" If you use just "test", instead of "test:try", test is used for every generated string. +Setting CURLOPT_HTTPAUTH(3) with the CURLAUTH_AWS_SIGV4 bit set is the same as +setting this option with a **"aws:amz"** parameter. + # DEFAULT -By default, the value of this parameter is NULL. -Calling CURLOPT_HTTPAUTH(3) with CURLAUTH_AWS_SIGV4 is the same -as calling this with **"aws:amz"** in parameter. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -91,19 +97,11 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.75.0 - -# RETURN VALUE - -Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. - # NOTES This option overrides the other auth types you might have set in -CURLOPT_HTTPAUTH(3) which should be highlighted as this makes this auth -method special. This method cannot be combined with other auth types. +CURLOPT_HTTPAUTH(3) which should be highlighted as this makes this auth method +special. This method cannot be combined with other auth types. 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 @@ -111,6 +109,12 @@ CURLOPT_POSTFIELDS(3). Otherwise, it is the checksum of an empty buffer. For requests like PUT, you can provide your own checksum in an HTTP header named **x-provider2-content-sha256**. -For **aws:s3**, a **x-amz-content-sha256** header is added to every request -if not already present. For s3 requests with unknown payload, this header takes +For **aws:s3**, a **x-amz-content-sha256** header is added to every request if +not already present. For s3 requests with unknown payload, this header takes the special value "UNSIGNED-PAYLOAD". + +# %AVAILABILITY% + +# RETURN VALUE + +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_BUFFERSIZE.md b/docs/libcurl/opts/CURLOPT_BUFFERSIZE.md index d2c13b6b3..5225dedf3 100644 --- a/docs/libcurl/opts/CURLOPT_BUFFERSIZE.md +++ b/docs/libcurl/opts/CURLOPT_BUFFERSIZE.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_WRITEFUNCTION (3) Protocol: - All +Added-in: 7.10 --- # NAME @@ -53,6 +54,8 @@ allocated as long as there are active transfers. CURL_MAX_WRITE_SIZE (16kB) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -73,9 +76,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10. Growing the buffer was added in 7.53.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CAINFO.md b/docs/libcurl/opts/CURLOPT_CAINFO.md index 87d1a8809..2eeedd508 100644 --- a/docs/libcurl/opts/CURLOPT_CAINFO.md +++ b/docs/libcurl/opts/CURLOPT_CAINFO.md @@ -15,6 +15,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.4.2 --- # NAME @@ -60,6 +61,8 @@ The default value for this can be figured out with CURLINFO_CAINFO(3). Built-in system specific. When curl is built with Secure Transport or Schannel, this option is not set by default. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -75,10 +78,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY Schannel support added in libcurl 7.60. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_CAINFO_BLOB.md b/docs/libcurl/opts/CURLOPT_CAINFO_BLOB.md index d65024325..efb071737 100644 --- a/docs/libcurl/opts/CURLOPT_CAINFO_BLOB.md +++ b/docs/libcurl/opts/CURLOPT_CAINFO_BLOB.md @@ -19,6 +19,7 @@ TLS-backend: - wolfSSL - Secure Transport - Schannel +Added-in: 7.77.0 --- # NAME @@ -53,6 +54,8 @@ This option overrides CURLOPT_CAINFO(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -76,14 +79,14 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.77.0. +# HISTORY This option is supported by the BearSSL (since 7.79.0), mbedTLS (since 7.81.0), rustls (since 7.82.0), wolfSSL (since 8.2.0), OpenSSL, Secure Transport and Schannel backends. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_CAPATH.md b/docs/libcurl/opts/CURLOPT_CAPATH.md index 08caf762a..3094bf8b5 100644 --- a/docs/libcurl/opts/CURLOPT_CAPATH.md +++ b/docs/libcurl/opts/CURLOPT_CAPATH.md @@ -16,6 +16,7 @@ TLS-backend: - GnuTLS - mbedTLS - wolfSSL +Added-in: 7.9.8 --- # NAME @@ -48,7 +49,9 @@ The default value for this can be figured out with CURLINFO_CAPATH(3). # DEFAULT -A default path detected at build time. +A path detected at build time. + +# %PROTOCOLS% # EXAMPLE @@ -66,9 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -This option is supported by the OpenSSL, GnuTLS, mbedTLS and wolfSSL backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.md b/docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.md index aa479b6be..725efc365 100644 --- a/docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.md +++ b/docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.md @@ -13,7 +13,11 @@ See-also: Protocol: - TLS TLS-backend: + - GnuTLS - OpenSSL + - Schannel + - wolfSSL +Added-in: 7.87.0 --- # NAME @@ -31,21 +35,24 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CA_CACHE_TIMEOUT, long age); # 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. +time any cached CA certificate store it has in memory may be kept and reused +for new connections. Once the timeout has expired, a subsequent fetch +requiring a CA certificate has to reload it. -Building a certificate store from a CURLOPT_CAINFO(3) file is a slow -operation so curl may cache the generated certificate store internally to speed -up future connections. +Building a CA certificate store from a CURLOPT_CAINFO(3) 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. +Set the timeout 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. # DEFAULT 86400 (24 hours) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -70,12 +77,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY -This option was added in curl 7.87.0. +This option is supported by OpenSSL and its forks (since 7.87.0), Schannel +(since 8.5.0), wolfSSL (since 8.9.0) and GnuTLS (since 8.9.0). -This option is supported by OpenSSL and its forks (since 7.87.0) and Schannel -(since 8.5.0). +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CERTINFO.md b/docs/libcurl/opts/CURLOPT_CERTINFO.md index 71339cd03..abceeb46d 100644 --- a/docs/libcurl/opts/CURLOPT_CERTINFO.md +++ b/docs/libcurl/opts/CURLOPT_CERTINFO.md @@ -17,6 +17,7 @@ TLS-backend: - GnuTLS - Schannel - Secure Transport +Added-in: 7.19.1 --- # NAME @@ -43,6 +44,8 @@ its option CURLINFO_CERTINFO(3). 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -82,9 +85,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY Schannel support added in 7.50.0. Secure Transport support added in 7.79.0. +mbedTLS support added in 8.9.0. + +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.md b/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.md index 01b6f78dc..5882a9e25 100644 --- a/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_WILDCARDMATCH (3) Protocol: - FTP +Added-in: 7.21.0 --- # NAME @@ -83,6 +84,8 @@ Return *CURL_CHUNK_BGN_FUNC_OK* if everything is fine, NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -141,9 +144,7 @@ int main() } ~~~ -# AVAILABILITY - -This was added in 7.21.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_DATA.md b/docs/libcurl/opts/CURLOPT_CHUNK_DATA.md index b501138e9..5a7ebd6a3 100644 --- a/docs/libcurl/opts/CURLOPT_CHUNK_DATA.md +++ b/docs/libcurl/opts/CURLOPT_CHUNK_DATA.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_WILDCARDMATCH (3) Protocol: - FTP +Added-in: 7.21.0 --- # NAME @@ -33,6 +34,8 @@ CURLOPT_CHUNK_END_FUNCTION(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -91,9 +94,7 @@ int main() } ~~~ -# AVAILABILITY - -Added in 7.21.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.md b/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.md index 295e29ea9..30a2efb12 100644 --- a/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_WILDCARDMATCH (3) Protocol: - FTP +Added-in: 7.21.0 --- # NAME @@ -41,6 +42,8 @@ Return *CURL_CHUNK_END_FUNC_OK* if everything is fine or NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -71,9 +74,7 @@ int main() } ~~~ -# AVAILABILITY - -Added in 7.21.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.md b/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.md index 7353af9ae..deea601cf 100644 --- a/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.md +++ b/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_OPENSOCKETFUNCTION (3) Protocol: - All +Added-in: 7.21.7 --- # NAME @@ -32,7 +33,9 @@ CURLOPT_CLOSESOCKETFUNCTION(3). # DEFAULT -The default value of this parameter is NULL. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.7 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.md b/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.md index 18e3bfe71..060df3a05 100644 --- a/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_OPENSOCKETFUNCTION (3) Protocol: - All +Added-in: 7.21.7 --- # NAME @@ -43,7 +44,9 @@ closed. # DEFAULT -By default libcurl uses the standard socket close function. +Use the standard socket close function. + +# %PROTOCOLS% # EXAMPLE @@ -75,9 +78,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.7 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.md b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.md index f8e51d88e..0106be8bd 100644 --- a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.md +++ b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.md @@ -5,12 +5,12 @@ Title: CURLOPT_CONNECTTIMEOUT Section: 3 Source: libcurl See-also: - - CURLOPT_CONNECTTIMEOUT_MS (3) - CURLOPT_LOW_SPEED_LIMIT (3) - CURLOPT_MAX_RECV_SPEED_LARGE (3) - CURLOPT_TIMEOUT (3) Protocol: - All +Added-in: 7.7 --- # NAME @@ -27,22 +27,22 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout); # DESCRIPTION -Pass a long. It should contain the maximum time in seconds that you allow 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 -CURLOPT_TIMEOUT(3) option. +Pass a long. It sets the maximum time in seconds that you allow the connection +phase to take. This timeout only limits the connection phase, it has no impact +once libcurl has connected. The connection phase includes the name resolve +(DNS) and all protocol handshakes and negotiations until there is an +established connection with the remote side. + +Set this option to zero to switch to the default built-in connection timeout - +300 seconds. See also the CURLOPT_TIMEOUT(3) option. CURLOPT_CONNECTTIMEOUT_MS(3) is the same function but set in milliseconds. If both CURLOPT_CONNECTTIMEOUT(3) and CURLOPT_CONNECTTIMEOUT_MS(3) 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 CURLOPT_CONNECTTIMEOUT(3) is included in -the general all-covering CURLOPT_TIMEOUT(3). +The connection timeout is included in the general all-covering +CURLOPT_TIMEOUT(3): With CURLOPT_CONNECTTIMEOUT(3) set to 3 and CURLOPT_TIMEOUT(3) set to 5, the operation can never last longer than 5 seconds, and the connection @@ -60,6 +60,8 @@ signals to be used unless CURLOPT_NOSIGNAL(3) is set. 300 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -77,9 +79,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.md b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.md index 1c22fd872..0baad3e61 100644 --- a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.md +++ b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.md @@ -5,11 +5,12 @@ Title: CURLOPT_CONNECTTIMEOUT_MS Section: 3 Source: libcurl See-also: - - CURLOPT_CONNECTTIMEOUT (3) - CURLOPT_LOW_SPEED_LIMIT (3) - - CURLOPT_TIMEOUT (3) + - CURLOPT_MAX_RECV_SPEED_LARGE (3) + - CURLOPT_TIMEOUT_MS (3) Protocol: - All +Added-in: 7.16.2 --- # NAME @@ -27,15 +28,41 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS, # DESCRIPTION -Pass a long. It should contain the maximum time in milliseconds that you allow -the connection phase to the server to take. +Pass a long. It sets the maximum time in milliseconds that you allow the +connection phase to take. This timeout only limits the connection phase, it +has no impact once libcurl has connected. The connection phase includes the +name resolve (DNS) and all protocol handshakes and negotiations until there is +an established connection with the remote side. -See CURLOPT_CONNECTTIMEOUT(3) for details. +Set this option to zero to switch to the default built-in connection timeout - +300 seconds. See also the CURLOPT_TIMEOUT_MS(3) option. + +CURLOPT_CONNECTTIMEOUT(3) is the same function but set in seconds. + +If both CURLOPT_CONNECTTIMEOUT(3) and CURLOPT_CONNECTTIMEOUT_MS(3) are set, +the value set last is used. + +The connection timeout is included in the general all-covering +CURLOPT_TIMEOUT_MS(3): + +With CURLOPT_CONNECTTIMEOUT_MS(3) set to 3000 and CURLOPT_TIMEOUT_MS(3) set to +5000, the operation can never last longer than 5000 milliseconds, and the +connection phase cannot last longer than 3000 milliseconds. + +With CURLOPT_CONNECTTIMEOUT_MS(3) set to 4000 and CURLOPT_TIMEOUT_MS(3) set to +2000, the operation can never last longer than 2000 milliseconds. 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 CURLOPT_NOSIGNAL(3) is set. # DEFAULT 300000 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +80,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.md b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.md index 8fcb5a3b7..f5a87f00a 100644 --- a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.md +++ b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.md @@ -11,6 +11,7 @@ See-also: - curl_easy_send (3) Protocol: - All +Added-in: 7.15.2 --- # NAME @@ -54,6 +55,8 @@ curl_easy_recv(3) do not function. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -72,9 +75,11 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +WS and WSS support added in 7.86.0. -Added in 7.15.2. WS and WSS support added in 7.86.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CONNECT_TO.md b/docs/libcurl/opts/CURLOPT_CONNECT_TO.md index 4714cb2bd..933e3b6a3 100644 --- a/docs/libcurl/opts/CURLOPT_CONNECT_TO.md +++ b/docs/libcurl/opts/CURLOPT_CONNECT_TO.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_URL (3) Protocol: - All +Added-in: 7.49.0 --- # NAME @@ -79,6 +80,8 @@ a transfer before you call curl_slist_free_all(3) on the list. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -103,9 +106,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.49.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.md b/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.md index 6cde80b1f..6d233ef3a 100644 --- a/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_CONV_TO_NETWORK_FUNCTION (3) Protocol: - All +Added-in: 7.15.4 --- # NAME @@ -72,6 +73,8 @@ You need to override these definitions if they are different on your system. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -100,13 +103,15 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED Not available and deprecated since 7.82.0. Available only if **CURL_DOES_CONVERSIONS** was defined when libcurl was built. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.md b/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.md index 60cdcd0ed..9ea257f2b 100644 --- a/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_CONV_FROM_NETWORK_FUNCTION (3) - CURLOPT_CONV_TO_NETWORK_FUNCTION (3) +Added-in: 7.15.4 --- # NAME @@ -69,6 +70,8 @@ You need to override these definitions if they are different on your system. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -93,13 +96,15 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED Not available and deprecated since 7.82.0. Available only if **CURL_DOES_CONVERSIONS** was defined when libcurl was built. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.md b/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.md index a8d22ed54..8644885ce 100644 --- a/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_CONV_FROM_UTF8_FUNCTION (3) Protocol: - All +Added-in: 7.15.4 --- # NAME @@ -71,6 +72,8 @@ You need to override these definitions if they are different on your system. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -96,13 +99,15 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED Not available and deprecated since 7.82.0. Available only if **CURL_DOES_CONVERSIONS** was defined when libcurl was built. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_COOKIE.md b/docs/libcurl/opts/CURLOPT_COOKIE.md index 7c6ae67c7..12d947020 100644 --- a/docs/libcurl/opts/CURLOPT_COOKIE.md +++ b/docs/libcurl/opts/CURLOPT_COOKIE.md @@ -12,6 +12,7 @@ See-also: - CURLOPT_HTTPHEADER (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -69,6 +70,8 @@ ability to stop super cookies. PSL support is identified by the NULL, no cookies +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -85,9 +88,7 @@ int main(void) } ~~~ -# AVAILABILITY - -If HTTP is enabled +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_COOKIEFILE.md b/docs/libcurl/opts/CURLOPT_COOKIEFILE.md index 89ec0a43e..09c75d014 100644 --- a/docs/libcurl/opts/CURLOPT_COOKIEFILE.md +++ b/docs/libcurl/opts/CURLOPT_COOKIEFILE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_COOKIESESSION (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -67,6 +68,8 @@ run. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -92,9 +95,7 @@ int main(void) The cookie file format and general cookie concepts in curl are described online here: https://curl.se/docs/http-cookies.html -# AVAILABILITY - -As long as HTTP is supported +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_COOKIEJAR.md b/docs/libcurl/opts/CURLOPT_COOKIEJAR.md index f08e8078f..8fa3680aa 100644 --- a/docs/libcurl/opts/CURLOPT_COOKIEJAR.md +++ b/docs/libcurl/opts/CURLOPT_COOKIEJAR.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_COOKIELIST (3) Protocol: - HTTP +Added-in: 7.9 --- # NAME @@ -53,6 +54,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -74,9 +77,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_COOKIELIST.md b/docs/libcurl/opts/CURLOPT_COOKIELIST.md index 7be0c1deb..d7a6c0b12 100644 --- a/docs/libcurl/opts/CURLOPT_COOKIELIST.md +++ b/docs/libcurl/opts/CURLOPT_COOKIELIST.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_COOKIEJAR (3) Protocol: - HTTP +Added-in: 7.14.1 --- # NAME @@ -69,6 +70,8 @@ loads all cookies from the files specified by CURLOPT_COOKIEFILE(3) NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -118,7 +121,7 @@ int main(void) The cookie file format and general cookie concepts in curl are described online here: https://curl.se/docs/http-cookies.html -# AVAILABILITY +# HISTORY **ALL** was added in 7.14.1 @@ -128,6 +131,8 @@ online here: https://curl.se/docs/http-cookies.html **RELOAD** was added in 7.39.0 +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_COOKIESESSION.md b/docs/libcurl/opts/CURLOPT_COOKIESESSION.md index 705b1b7d8..19b9a301d 100644 --- a/docs/libcurl/opts/CURLOPT_COOKIESESSION.md +++ b/docs/libcurl/opts/CURLOPT_COOKIESESSION.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_COOKIEJAR (3) Protocol: - HTTP +Added-in: 7.9.7 --- # NAME @@ -41,6 +42,8 @@ the same session. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.md b/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.md index a48374014..6650008a6 100644 --- a/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.md +++ b/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_UPLOAD (3) Protocol: - HTTP +Added-in: 7.17.1 --- # NAME @@ -45,6 +46,8 @@ CURLOPT_COPYPOSTFIELDS(3) option is issued. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -66,9 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.17.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CRLF.md b/docs/libcurl/opts/CURLOPT_CRLF.md index e49be9893..8c0c9a592 100644 --- a/docs/libcurl/opts/CURLOPT_CRLF.md +++ b/docs/libcurl/opts/CURLOPT_CRLF.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_CONV_TO_NETWORK_FUNCTION (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -35,6 +36,8 @@ This is a legacy option of questionable use. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,9 +54,7 @@ int main(void) } ~~~ -# AVAILABILITY - -SMTP since 7.40.0, other protocols since they were introduced +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CRLFILE.md b/docs/libcurl/opts/CURLOPT_CRLFILE.md index b544f3777..1a6b21109 100644 --- a/docs/libcurl/opts/CURLOPT_CRLFILE.md +++ b/docs/libcurl/opts/CURLOPT_CRLFILE.md @@ -14,6 +14,7 @@ TLS-backend: - GnuTLS - mbedTLS - OpenSSL +Added-in: 7.19.0 --- # NAME @@ -58,6 +59,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -74,9 +77,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CURLU.md b/docs/libcurl/opts/CURLOPT_CURLU.md index 2bb1e73a9..f9a3020b3 100644 --- a/docs/libcurl/opts/CURLOPT_CURLU.md +++ b/docs/libcurl/opts/CURLOPT_CURLU.md @@ -14,6 +14,7 @@ See-also: - curl_url_strerror (3) Protocol: - All +Added-in: 7.63.0 --- # NAME @@ -44,7 +45,9 @@ updated contents is used. # DEFAULT -The default value of this parameter is NULL. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -68,9 +71,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.63.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.md b/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.md index 62c8cf87c..39da7ca00 100644 --- a/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.md +++ b/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.md @@ -15,6 +15,7 @@ Protocol: - IMAP - POP3 - SMTP +Added-in: 7.1 --- # NAME @@ -95,13 +96,12 @@ with CURLOPT_MAIL_RCPT(3), to specify an EXPN request. If the CURLOPT_NOBODY(3) option is specified then the request can be used to issue **NOOP** and **RSET** commands. -The application does not have to keep the string around after setting this -option. - # DEFAULT NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -122,9 +122,7 @@ int main(void) } ~~~ -# AVAILABILITY - -IMAP is supported since 7.30.0, POP3 since 7.26.0 and SMTP since 7.34.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DEBUGDATA.md b/docs/libcurl/opts/CURLOPT_DEBUGDATA.md index 0864388c2..3df122d6a 100644 --- a/docs/libcurl/opts/CURLOPT_DEBUGDATA.md +++ b/docs/libcurl/opts/CURLOPT_DEBUGDATA.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_STDERR (3) Protocol: - All +Added-in: 7.9.6 --- # NAME @@ -33,6 +34,8 @@ not used by libcurl, it is only passed to the callback. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -75,9 +78,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.md b/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.md index a0927e202..4887f6272 100644 --- a/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.md @@ -12,6 +12,7 @@ See-also: - curl_global_trace (3) Protocol: - All +Added-in: 7.9.6 --- # NAME @@ -91,16 +92,20 @@ The data is SSL/TLS (binary) data sent to the peer. The data is SSL/TLS (binary) data received from the peer. -WARNING: This callback may be called with the curl *handle* set to an -internal handle. (Added in 8.4.0) +## -If you need to distinguish your curl *handle* from internal handles then -set CURLOPT_PRIVATE(3) on your handle. +WARNING: This callback may be called with the curl *handle* set to an internal +handle. (Added in 8.4.0) + +If you need to distinguish your curl *handle* from internal handles then set +CURLOPT_PRIVATE(3) on your handle. # DEFAULT NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -205,9 +210,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.md b/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.md index 7da62e18a..3787ff951 100644 --- a/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.md +++ b/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_URL (3) Protocol: - All +Added-in: 7.45.0 --- # NAME @@ -55,6 +56,8 @@ option. NULL (make a guess based on the host) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -74,9 +77,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.45.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DIRLISTONLY.md b/docs/libcurl/opts/CURLOPT_DIRLISTONLY.md index 8775d16f1..1c5ee14c7 100644 --- a/docs/libcurl/opts/CURLOPT_DIRLISTONLY.md +++ b/docs/libcurl/opts/CURLOPT_DIRLISTONLY.md @@ -11,6 +11,7 @@ Protocol: - FTP - SFTP - POP3 +Added-in: 7.17.0 --- # NAME @@ -36,6 +37,9 @@ messages on the POP3 server. This can be used to change the default behavior of libcurl, when combined with a URL that contains a message ID, to perform a "scan listing" which can then be used to determine the size of an email. +For FILE, this option has no effect yet as directories are always listed in +this mode. + Note: For FTP this causes a NLST command to be sent to the FTP server. Beware that some FTP servers list only files in their response to NLST; they might not include subdirectories and symbolic links. @@ -50,6 +54,8 @@ effectively breaks that feature. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -70,11 +76,13 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY This option was known as CURLOPT_FTPLISTONLY up to 7.16.4. POP3 is supported since 7.21.5. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.md b/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.md index 788ef3018..66a5948bb 100644 --- a/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.md +++ b/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.md @@ -5,12 +5,13 @@ Title: CURLOPT_DISALLOW_USERNAME_IN_URL Section: 3 Source: libcurl See-also: - - CURLOPT_PROTOCOLS (3) + - CURLOPT_PROTOCOLS_STR (3) - CURLOPT_URL (3) - curl_url_set (3) - libcurl-security (3) Protocol: - All +Added-in: 7.61.0 --- # NAME @@ -36,7 +37,9 @@ curl_url_set(3) function. # DEFAULT -0 (disabled) - usernames are allowed by default. +0 (disabled) + +# %PROTOCOLS% # EXAMPLE @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.61.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.md b/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.md index ca0c896e4..6ae904d65 100644 --- a/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.md +++ b/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.md @@ -12,6 +12,7 @@ See-also: - CURLOPT_RESOLVE (3) Protocol: - All +Added-in: 7.9.3 --- # NAME @@ -54,6 +55,8 @@ Since version 8.1.0, libcurl prunes entries from the DNS cache if it exceeds 60 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -78,9 +81,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.md b/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.md index 20dc86edc..0d7f435ed 100644 --- a/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.md +++ b/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_INTERFACE (3) Protocol: - All +Added-in: 7.33.0 --- # NAME @@ -39,6 +40,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,11 +58,12 @@ int main(void) } ~~~ -# AVAILABILITY +# NOTES + +This option requires that libcurl was built with a resolver backend that +supports this operation. The c-ares backend is the only such one. -Added in 7.33.0. This option also requires that libcurl was built with a -resolver backend that supports this operation. The c-ares backend is the only -such one. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.md b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.md index 67a6bd204..cf3aae80e 100644 --- a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.md +++ b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_DNS_SERVERS (3) Protocol: - All +Added-in: 7.33.0 --- # NAME @@ -38,6 +39,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,12 +57,12 @@ int main(void) } ~~~ -# AVAILABILITY +# NOTES This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one. -Added in 7.33.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.md b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.md index 332debd6b..4750367de 100644 --- a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.md +++ b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_DNS_SERVERS (3) Protocol: - All +Added-in: 7.33.0 --- # NAME @@ -38,6 +39,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,12 +57,12 @@ int main(void) } ~~~ -# AVAILABILITY +# NOTES This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one. -Added in 7.33.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DNS_SERVERS.md b/docs/libcurl/opts/CURLOPT_DNS_SERVERS.md index 42874bd53..f345e3265 100644 --- a/docs/libcurl/opts/CURLOPT_DNS_SERVERS.md +++ b/docs/libcurl/opts/CURLOPT_DNS_SERVERS.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_DNS_LOCAL_IP6 (3) Protocol: - All +Added-in: 7.24.0 --- # NAME @@ -40,7 +41,9 @@ option. # DEFAULT -NULL - use system default +NULL + +# %PROTOCOLS% # EXAMPLE @@ -59,12 +62,12 @@ int main(void) } ~~~ -# AVAILABILITY +# NOTES This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one. -Added in 7.24.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.md b/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.md index 33dcb0f06..2074fff87 100644 --- a/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.md +++ b/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_IPRESOLVE (3) Protocol: - All +Added-in: 7.60.0 --- # NAME @@ -46,6 +47,8 @@ performance impacts and may cause IPv4 to be used before IPv6 or vice versa. 0 (disabled) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.60.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.md b/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.md index 616ddb951..f236c3885 100644 --- a/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.md +++ b/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_SHARE (3) Protocol: - All +Added-in: 7.9.3 --- # NAME @@ -39,6 +40,8 @@ cache between transfers. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,11 @@ int main(void) ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.11.1. Functionality removed in 7.62.0. -Deprecated since 7.11.1. Function removed in 7.62.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.md b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.md index 4211f03cb..bcde0e106 100644 --- a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.md +++ b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.md @@ -14,6 +14,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.76.0 --- # NAME @@ -59,6 +60,8 @@ of the DoH server certificate. 2 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -79,11 +82,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.76.0 - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.md b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.md index b35fa5272..e8674e06f 100644 --- a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.md +++ b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.md @@ -16,6 +16,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.76.0 --- # NAME @@ -71,6 +72,8 @@ the correct end-point. 1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -91,11 +94,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.76.0 - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.md b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.md index 8135cb4c7..fb861ae74 100644 --- a/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.md +++ b/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.md @@ -13,6 +13,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.76.0 --- # NAME @@ -46,6 +47,8 @@ the verification fails. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -66,9 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.76.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_DOH_URL.md b/docs/libcurl/opts/CURLOPT_DOH_URL.md index d382ca67d..bd4372fb0 100644 --- a/docs/libcurl/opts/CURLOPT_DOH_URL.md +++ b/docs/libcurl/opts/CURLOPT_DOH_URL.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_VERBOSE (3) Protocol: - All +Added-in: 7.62.0 --- # NAME @@ -63,8 +64,9 @@ CURLOPT_FTPPORT(3), a proxy type set to **CURLPROXY_SOCKS4** or # DEFAULT -NULL - there is no default DoH URL. If this option is not set, libcurl uses -the default name resolver. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -80,9 +82,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.62.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_ECH.md b/docs/libcurl/opts/CURLOPT_ECH.md new file mode 100644 index 000000000..a637b98be --- /dev/null +++ b/docs/libcurl/opts/CURLOPT_ECH.md @@ -0,0 +1,95 @@ +--- +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Title: CURLOPT_ECH +Section: 3 +Source: libcurl +See-also: + - CURLOPT_DOH_URL (3) +Protocol: + - TLS +TLS-backend: + - OpenSSL + - wolfSSL +Added-in: 8.8.0 +--- + +# NAME + +CURLOPT_ECH - configuration for Encrypted Client Hello + +# SYNOPSIS + +~~~c +#include + +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ECH, char *config); +~~~ + +# DESCRIPTION + +ECH is only compatible with TLSv1.3. + +This experimental feature requires a special build of OpenSSL, as ECH is not +yet supported in OpenSSL releases. In contrast ECH is supported by the latest +BoringSSL and wolfSSL releases. + +There is also a known issue with using wolfSSL which does not support ECH when +the HelloRetryRequest mechanism is used. + +Pass a string that specifies configuration details for ECH. In all cases, if +ECH is attempted, it may fail for various reasons. The keywords supported are: + +## false + +Turns off ECH. + +## grease + +Instructs client to emit a GREASE ECH extension. (The connection fails if ECH +is attempted but fails.) + +## true + +Instructs client to attempt ECH, if possible, but to not fail if attempting +ECH is not possible. + +## hard + +Instructs client to attempt ECH and fail if attempting ECH is not possible. + +## ecl:\ + +If the string starts with `ecl:` then the remainder of the string should be a +base64-encoded ECHConfigList that is used for ECH rather than attempting to +download such a value from the DNS. + +## pn:\ + +If the string starts with `pn:` then the remainder of the string should be a +DNS/hostname that is used to over-ride the public_name field of the +ECHConfigList that is used for ECH. + +# DEFAULT + +NULL, meaning ECH is disabled. + +# %PROTOCOLS% + +# EXAMPLE + +~~~c +CURL *curl = curl_easy_init(); + +const char *config ="ecl:AED+DQA87wAgACB/RuzUCsW3uBbSFI7mzD63TUXpI8sGDTnFTbFCDpa+CAAEAAEAAQANY292ZXIuZGVmby5pZQAA"; +if(curl) { + curl_easy_setopt(curl, CURLOPT_ECH, config); + curl_easy_perform(curl); +} +~~~ +# %AVAILABILITY% + +# RETURN VALUE + +Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient +heap space. diff --git a/docs/libcurl/opts/CURLOPT_EGDSOCKET.md b/docs/libcurl/opts/CURLOPT_EGDSOCKET.md index 32ae012e5..05fb76ed0 100644 --- a/docs/libcurl/opts/CURLOPT_EGDSOCKET.md +++ b/docs/libcurl/opts/CURLOPT_EGDSOCKET.md @@ -10,6 +10,7 @@ Protocol: - TLS TLS-backend: - OpenSSL +Added-in: 7.7 --- # NAME @@ -28,39 +29,16 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path); Deprecated option. It serves no purpose anymore. -Pass a char pointer to the null-terminated path name to the Entropy Gathering -Daemon 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. - # DEFAULT NULL -# EXAMPLE - -~~~c -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); - } -} -~~~ - -# AVAILABILITY - -Only with OpenSSL versions before 1.1.0. +# DEPRECATED This option was deprecated in 7.84.0. +# %AVAILABILITY% + # 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. +Returns CURLE_OK. diff --git a/docs/libcurl/opts/CURLOPT_ERRORBUFFER.md b/docs/libcurl/opts/CURLOPT_ERRORBUFFER.md index 7a90f1d6c..4b8366840 100644 --- a/docs/libcurl/opts/CURLOPT_ERRORBUFFER.md +++ b/docs/libcurl/opts/CURLOPT_ERRORBUFFER.md @@ -13,6 +13,7 @@ See-also: - curl_url_strerror (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -51,6 +52,8 @@ debug and trace why errors happen. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -90,9 +93,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.md b/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.md index 7f6f274b4..45997dcc1 100644 --- a/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.md +++ b/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_POST (3) Protocol: - HTTP +Added-in: 7.36.0 --- # NAME @@ -36,6 +37,8 @@ sent anyway. 1000 milliseconds +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +56,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.36.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FAILONERROR.md b/docs/libcurl/opts/CURLOPT_FAILONERROR.md index aabee4e4d..d865b637c 100644 --- a/docs/libcurl/opts/CURLOPT_FAILONERROR.md +++ b/docs/libcurl/opts/CURLOPT_FAILONERROR.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_KEEP_SENDING_ON_ERROR (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -45,6 +46,8 @@ get closed and *CURLE_HTTP_RETURNED_ERROR* is returned. 0, do not fail on error +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -63,9 +66,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FILETIME.md b/docs/libcurl/opts/CURLOPT_FILETIME.md index 1f4782e3e..bca79ab90 100644 --- a/docs/libcurl/opts/CURLOPT_FILETIME.md +++ b/docs/libcurl/opts/CURLOPT_FILETIME.md @@ -13,6 +13,7 @@ Protocol: - SFTP - FILE - SMB +Added-in: 7.5 --- # NAME @@ -39,6 +40,8 @@ transfer to extract the received time (if any). 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -65,9 +68,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always, for SFTP since 7.49.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.md b/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.md index 33dce7b0c..866333f14 100644 --- a/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.md +++ b/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_WILDCARDMATCH (3) Protocol: - FTP +Added-in: 7.21.0 --- # NAME @@ -33,6 +34,8 @@ the CURLOPT_FNMATCH_FUNCTION(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -69,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.md b/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.md index 16526931e..f9ff1d3b2 100644 --- a/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_WILDCARDMATCH (3) Protocol: - FTP +Added-in: 7.21.0 --- # NAME @@ -44,6 +45,8 @@ error occurred. NULL == an internal function for wildcard matching. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -77,9 +80,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.md b/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.md index 9dee48bef..bfbb3b545 100644 --- a/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.md +++ b/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.md @@ -8,10 +8,11 @@ See-also: - CURLINFO_REDIRECT_COUNT (3) - CURLINFO_REDIRECT_URL (3) - CURLOPT_POSTREDIR (3) - - CURLOPT_PROTOCOLS (3) - - CURLOPT_REDIR_PROTOCOLS (3) + - CURLOPT_PROTOCOLS_STR (3) + - CURLOPT_REDIR_PROTOCOLS_STR (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -38,7 +39,7 @@ maximum limit is reached. CURLOPT_MAXREDIRS(3) is used to limit the number of redirects libcurl follows. libcurl restricts what protocols it automatically follow redirects to. The -accepted target protocols are set with CURLOPT_REDIR_PROTOCOLS(3). By +accepted target protocols are set with CURLOPT_REDIR_PROTOCOLS_STR(3). By default libcurl allows HTTP, HTTPS, FTP and FTPS on redirects. When following a redirect, the specific 30x response code also dictates which @@ -65,6 +66,8 @@ would otherwise select internally. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -82,9 +85,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FORBID_REUSE.md b/docs/libcurl/opts/CURLOPT_FORBID_REUSE.md index bbd1c48f7..2f452ff59 100644 --- a/docs/libcurl/opts/CURLOPT_FORBID_REUSE.md +++ b/docs/libcurl/opts/CURLOPT_FORBID_REUSE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_MAXLIFETIME_CONN (3) Protocol: - All +Added-in: 7.7 --- # NAME @@ -39,6 +40,8 @@ Set to 0 to have libcurl keep the connection open for possible later reuse 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.md b/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.md index f7ffbe89a..f64c6adc7 100644 --- a/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.md +++ b/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_FORBID_REUSE (3) - CURLOPT_MAXAGE_CONN (3) - CURLOPT_MAXLIFETIME_CONN (3) +Added-in: 7.7 --- # NAME @@ -41,6 +42,8 @@ Set *fresh* to 0 to have libcurl attempt reusing an existing connection 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTPPORT.md b/docs/libcurl/opts/CURLOPT_FTPPORT.md index 869a862f9..d2f3eae7d 100644 --- a/docs/libcurl/opts/CURLOPT_FTPPORT.md +++ b/docs/libcurl/opts/CURLOPT_FTPPORT.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_FTP_USE_EPRT (3) - CURLOPT_FTP_USE_EPSV (3) +Added-in: 7.1 --- # NAME @@ -70,6 +71,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -87,9 +90,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Port range support was added in 7.19.5 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.md b/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.md index d40c75fe4..5e1300dd6 100644 --- a/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.md +++ b/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_FTP_SSL_CCC (3) - CURLOPT_USE_SSL (3) +Added-in: 7.12.2 --- # NAME @@ -47,6 +48,8 @@ Try "AUTH TLS" first, and only if that fails try "AUTH SSL". CURLFTPAUTH_DEFAULT +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -65,9 +68,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.12.2 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.md b/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.md index de6b2a50e..da6835cc7 100644 --- a/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.md +++ b/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_PASSWORD (3) - CURLOPT_USERNAME (3) +Added-in: 7.13.0 --- # NAME @@ -36,6 +37,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,9 +58,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.13.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.md b/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.md index 7d334f545..54fd80b6e 100644 --- a/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.md +++ b/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_FTP_SKIP_PASV_IP (3) - CURLOPT_SERVER_RESPONSE_TIMEOUT (3) - CURLOPT_USERNAME (3) +Added-in: 7.15.5 --- # NAME @@ -41,6 +42,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.15.5 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.md b/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.md index 5a6dbf696..7601278e4 100644 --- a/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.md +++ b/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_FTP_FILEMETHOD (3) - CURLOPT_FTP_USE_EPSV (3) +Added-in: 7.10.7 --- # NAME @@ -55,6 +56,8 @@ but then another connection does **MKD** before this connection and thus CURLFTP_CREATE_DIR_NONE (0) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -75,10 +78,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10.7. SFTP support added in 7.16.3. The retry option was added in -7.19.4. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.md b/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.md index 351dfe10e..342f72f7c 100644 --- a/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.md +++ b/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_DIRLISTONLY (3) - CURLOPT_FTP_SKIP_PASV_IP (3) +Added-in: 7.15.1 --- # NAME @@ -56,6 +57,8 @@ compliant than 'nocwd' but without the full penalty of 'multicwd'. CURLFTPMETHOD_MULTICWD +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -75,9 +78,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.15.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.md b/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.md index cdec3371b..65f88192a 100644 --- a/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.md +++ b/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_FTPPORT (3) - CURLOPT_FTP_USE_EPRT (3) +Added-in: 7.15.0 --- # NAME @@ -42,6 +43,8 @@ This option has no effect if PORT, EPRT or EPSV is used instead of PASV. 1 since 7.74.0, was 0 before then. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.14.2 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.md b/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.md index 6155c4aed..ccccc8c21 100644 --- a/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.md +++ b/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_FTPSSLAUTH (3) - CURLOPT_PROTOCOLS_STR (3) - CURLOPT_USE_SSL (3) +Added-in: 7.16.1 --- # NAME @@ -49,6 +50,8 @@ Initiate the shutdown and wait for a reply. CURLFTPSSL_CCC_NONE +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -67,9 +70,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.md b/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.md index 54df92573..c651fe949 100644 --- a/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.md +++ b/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_FTPPORT (3) - CURLOPT_FTP_USE_EPSV (3) +Added-in: 7.10.5 --- # NAME @@ -41,6 +42,8 @@ then. # DEFAULT +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10.5 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.md b/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.md index 41d8f9ed0..8b8051fd8 100644 --- a/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.md +++ b/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_FTPPORT (3) - CURLOPT_FTP_USE_EPRT (3) +Added-in: 7.9.2 --- # NAME @@ -41,6 +42,8 @@ If the server is an IPv6 host, this option has no effect. 1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with FTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.md b/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.md index 1d9507c78..1e078581f 100644 --- a/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.md +++ b/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_FTP_USE_EPSV (3) Protocol: - FTP +Added-in: 7.20.0 --- # NAME @@ -34,6 +35,8 @@ no effect when using the active FTP transfers mode. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,9 +58,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.md b/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.md index 01bf42d17..e60b503b7 100644 --- a/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.md +++ b/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_HTTPAUTH (3) - CURLOPT_PROXYAUTH (3) +Added-in: 7.22.0 --- # NAME @@ -37,6 +38,8 @@ available at compile-time. CURLGSSAPI_DELEGATION_NONE +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.22.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.md b/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.md index 5f51f9422..f13abddbd 100644 --- a/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.md +++ b/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_CONNECTTIMEOUT_MS (3) - CURLOPT_LOW_SPEED_LIMIT (3) - CURLOPT_TIMEOUT (3) +Added-in: 7.59.0 --- # NAME @@ -42,6 +43,8 @@ currently defaults to 200 ms. Firefox and Chrome currently default to 300 ms. CURL_HET_DEFAULT (currently defined as 200L) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.59.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.md b/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.md index da4f35ce5..99e7fce58 100644 --- a/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.md +++ b/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.md @@ -8,6 +8,7 @@ See-also: - CURLOPT_PROXY (3) Protocol: - All +Added-in: 7.60.0 --- # NAME @@ -38,6 +39,8 @@ Most applications do not need this option. 0, do not send any HAProxy PROXY protocol header +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +56,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP. Added in 7.60.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.md b/docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.md index fdb16fe64..64e0085fd 100644 --- a/docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.md +++ b/docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_HAPROXYPROTOCOL (3) - CURLOPT_PROXY (3) +Added-in: 8.2.0 --- # NAME @@ -37,6 +38,8 @@ cannot use a specified address. NULL, no HAProxy header is sent +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -52,9 +55,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP. Added in 8.2.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HEADER.md b/docs/libcurl/opts/CURLOPT_HEADER.md index 09262f697..348f4d99a 100644 --- a/docs/libcurl/opts/CURLOPT_HEADER.md +++ b/docs/libcurl/opts/CURLOPT_HEADER.md @@ -13,6 +13,7 @@ Protocol: See-also: - CURLOPT_HEADERFUNCTION (3) - CURLOPT_HTTPHEADER (3) +Added-in: 7.1 --- # NAME @@ -53,6 +54,8 @@ custom HTTP headers! 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -69,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Provided in all libcurl versions. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HEADERDATA.md b/docs/libcurl/opts/CURLOPT_HEADERDATA.md index 84d232eb8..865cbb74d 100644 --- a/docs/libcurl/opts/CURLOPT_HEADERDATA.md +++ b/docs/libcurl/opts/CURLOPT_HEADERDATA.md @@ -10,6 +10,7 @@ See-also: - curl_easy_header (3) Protocol: - All +Added-in: 7.10 --- # NAME @@ -43,6 +44,8 @@ this option or you might experience crashes. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -78,9 +81,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.md b/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.md index 6668c82c2..688f1f3ba 100644 --- a/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.md @@ -14,6 +14,7 @@ Protocol: - POP3 - IMAP - SMTP +Added-in: 7.7.2 --- # NAME @@ -100,6 +101,8 @@ although strictly they are just continuations of the previous lines. Nothing. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -124,9 +127,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HEADEROPT.md b/docs/libcurl/opts/CURLOPT_HEADEROPT.md index 833fda063..bf2a6f6bc 100644 --- a/docs/libcurl/opts/CURLOPT_HEADEROPT.md +++ b/docs/libcurl/opts/CURLOPT_HEADEROPT.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_HTTPHEADER (3) - CURLOPT_PROXYHEADER (3) +Added-in: 7.37.0 --- # NAME @@ -44,6 +45,8 @@ proxy and then CURLOPT_HTTPHEADER(3) headers only to the server. CURLHEADER_SEPARATE (changed in 7.42.1, used CURLHEADER_UNIFIED before then) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -70,9 +73,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.37.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HSTS.md b/docs/libcurl/opts/CURLOPT_HSTS.md index b71476e5b..b838c9e95 100644 --- a/docs/libcurl/opts/CURLOPT_HSTS.md +++ b/docs/libcurl/opts/CURLOPT_HSTS.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_ALTSVC (3) - CURLOPT_HSTS_CTRL (3) - CURLOPT_RESOLVE (3) +Added-in: 7.74.0 --- # NAME @@ -59,6 +60,8 @@ currently no length or size limit. NULL, no filename +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -72,9 +75,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.74.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HSTSREADDATA.md b/docs/libcurl/opts/CURLOPT_HSTSREADDATA.md index 8c3230982..eda180e30 100644 --- a/docs/libcurl/opts/CURLOPT_HSTSREADDATA.md +++ b/docs/libcurl/opts/CURLOPT_HSTSREADDATA.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_HSTSREADFUNCTION (3) - CURLOPT_HSTSWRITEDATA (3) - CURLOPT_HSTSWRITEFUNCTION (3) +Added-in: 7.74.0 --- # NAME @@ -38,6 +39,8 @@ do that. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.74.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.md b/docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.md index fe55ab8de..5d03607fa 100644 --- a/docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_HSTSREADDATA (3) - CURLOPT_HSTSWRITEFUNCTION (3) - CURLOPT_HSTS_CTRL (3) +Added-in: 7.74.0 --- # NAME @@ -63,6 +64,8 @@ do that. NULL - no callback. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -95,9 +98,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.74.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.md b/docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.md index 23c7302f0..6be5582db 100644 --- a/docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.md +++ b/docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_HSTSREADDATA (3) - CURLOPT_HSTSREADFUNCTION (3) - CURLOPT_HSTSWRITEFUNCTION (3) +Added-in: 7.74.0 --- # NAME @@ -38,6 +39,8 @@ do that. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.74.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.md b/docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.md index 8fa621510..621268ea5 100644 --- a/docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_HSTSWRITEDATA (3) - CURLOPT_HSTSWRITEFUNCTION (3) - CURLOPT_HSTS_CTRL (3) +Added-in: 7.74.0 --- # NAME @@ -67,6 +68,8 @@ do that. NULL - no callback. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -99,9 +102,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.74.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HSTS_CTRL.md b/docs/libcurl/opts/CURLOPT_HSTS_CTRL.md index dec7a3844..8dee60867 100644 --- a/docs/libcurl/opts/CURLOPT_HSTS_CTRL.md +++ b/docs/libcurl/opts/CURLOPT_HSTS_CTRL.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_CONNECT_TO (3) - CURLOPT_HSTS (3) - CURLOPT_RESOLVE (3) +Added-in: 7.74.0 --- # NAME @@ -52,7 +53,9 @@ to the file when closing the handle. # DEFAULT -0. HSTS is disabled by default. +0 + +# %PROTOCOLS% # EXAMPLE @@ -67,9 +70,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.74.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.md b/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.md index 6312148c2..28fbe0a91 100644 --- a/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.md +++ b/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_HTTP_VERSION (3) - CURLOPT_SSLVERSION (3) +Added-in: 7.64.0 --- # NAME @@ -33,10 +34,9 @@ that curl might consider to be HTTP/0.9! # DEFAULT -curl allowed HTTP/0.9 responses by default before 7.66.0 +0 -Since 7.66.0, libcurl requires this option set to 1L to allow HTTP/0.9 -responses. +# %PROTOCOLS% # EXAMPLE @@ -53,9 +53,14 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +curl allowed HTTP/0.9 responses by default before 7.66.0 + +Since 7.66.0, libcurl requires this option set to 1L to allow HTTP/0.9 +responses. -Option added in 7.64.0, present along with HTTP. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.md b/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.md index 4363ef444..59cdfeef6 100644 --- a/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.md +++ b/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_HTTP09_ALLOWED (3) - CURLOPT_HTTP_VERSION (3) +Added-in: 7.10.3 --- # NAME @@ -44,6 +45,8 @@ assumed to match HTTP 1.0 when an alias match. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10.3 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HTTPAUTH.md b/docs/libcurl/opts/CURLOPT_HTTPAUTH.md index 9e29f7cae..e436e078c 100644 --- a/docs/libcurl/opts/CURLOPT_HTTPAUTH.md +++ b/docs/libcurl/opts/CURLOPT_HTTPAUTH.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_PASSWORD (3) - CURLOPT_PROXYAUTH (3) - CURLOPT_USERNAME (3) +Added-in: 7.10.6 --- # NAME @@ -84,6 +85,8 @@ option to work, or build libcurl on Windows with SSPI support. ## CURLAUTH_NTLM_WB +Support for this is removed since libcurl 8.8.0. + NTLM delegating to winbind helper. Authentication is performed by a separate binary application that is executed when needed. The name of the application is specified at compile time but is typically **/usr/bin/ntlm_auth**. @@ -123,6 +126,8 @@ see CURLOPT_AWS_SIGV4(3). CURLAUTH_BASIC +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -140,9 +145,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Option Added in 7.10.6. +# HISTORY CURLAUTH_DIGEST_IE was added in 7.19.3 @@ -154,6 +157,8 @@ CURLAUTH_BEARER was added in 7.61.0 CURLAUTH_AWS_SIGV4 was added in 7.74.0 +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_HTTPGET.md b/docs/libcurl/opts/CURLOPT_HTTPGET.md index 8f5c35463..109fe9ce4 100644 --- a/docs/libcurl/opts/CURLOPT_HTTPGET.md +++ b/docs/libcurl/opts/CURLOPT_HTTPGET.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_POST (3) - CURLOPT_UPLOAD (3) - curl_easy_reset (3) +Added-in: 7.8.1 --- # NAME @@ -42,6 +43,8 @@ reset a handle to default method, consider curl_easy_reset(3). 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HTTPHEADER.md b/docs/libcurl/opts/CURLOPT_HTTPHEADER.md index 7f060ea89..35a67a12a 100644 --- a/docs/libcurl/opts/CURLOPT_HTTPHEADER.md +++ b/docs/libcurl/opts/CURLOPT_HTTPHEADER.md @@ -15,6 +15,7 @@ See-also: - CURLOPT_MIMEPOST (3) - CURLOPT_PROXYHEADER (3) - curl_mime_init (3) +Added-in: 7.1 --- # NAME @@ -114,9 +115,11 @@ MIME mail is only composed of alternative representations of the same data In all cases the value must be of the form "multipart/*" to respect the document structure and may not include the "boundary=" parameter. +## + 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 +These are `From:`, `To:`, `Date:` and `Subject:` among others and their presence and value is generally checked by anti-spam utilities. # SECURITY CONCERNS @@ -148,6 +151,8 @@ with the CURLOPT_UNRESTRICTED_AUTH(3) option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -172,9 +177,11 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +Use for MIME mail added in 7.56.0. -As long as HTTP is enabled. Use in MIME mail added in 7.56.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HTTPPOST.md b/docs/libcurl/opts/CURLOPT_HTTPPOST.md index 0c3947147..e9381c376 100644 --- a/docs/libcurl/opts/CURLOPT_HTTPPOST.md +++ b/docs/libcurl/opts/CURLOPT_HTTPPOST.md @@ -13,6 +13,7 @@ See-also: - curl_formadd (3) - curl_formfree (3) - curl_mime_init (3) +Added-in: 7.1 --- # NAME @@ -49,6 +50,8 @@ CURLOPT_NOBODY(3) to 0. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -89,9 +92,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated in 7.56.0. -As long as HTTP is enabled. Deprecated in 7.56.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.md b/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.md index 9591892df..60b4e6a80 100644 --- a/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.md +++ b/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_PROXY (3) - CURLOPT_PROXYPORT (3) - CURLOPT_PROXYTYPE (3) +Added-in: 7.3 --- # NAME @@ -49,6 +50,8 @@ rarely works through the proxy anyway). 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.md b/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.md index 10ff5ab4d..3c3e381ac 100644 --- a/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.md +++ b/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_ACCEPT_ENCODING (3) - CURLOPT_DEBUGFUNCTION (3) - CURLOPT_STDERR (3) +Added-in: 7.16.2 --- # NAME @@ -36,6 +37,8 @@ CURLOPT_ACCEPT_ENCODING(3) for that. 1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,9 +54,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.2 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.md b/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.md index c0b88b83f..52cee575b 100644 --- a/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.md +++ b/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_ACCEPT_ENCODING (3) - CURLOPT_HTTP_CONTENT_DECODING (3) +Added-in: 7.16.2 --- # NAME @@ -30,10 +31,17 @@ Pass a long to tell libcurl how to act on transfer decoding. If 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. +# NOTES + +This option does not work with the hyper backend as that always has transfer +decoding enabled. + # DEFAULT 1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -49,10 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.2 Does not work with the hyper backend (it always has transfer -decoding enabled). +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_HTTP_VERSION.md b/docs/libcurl/opts/CURLOPT_HTTP_VERSION.md index 88a7154b9..0a9215d8a 100644 --- a/docs/libcurl/opts/CURLOPT_HTTP_VERSION.md +++ b/docs/libcurl/opts/CURLOPT_HTTP_VERSION.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_HTTP09_ALLOWED (3) - CURLOPT_HTTP200ALIASES (3) - CURLOPT_SSLVERSION (3) +Added-in: 7.9.1 --- # NAME @@ -89,6 +90,8 @@ Since curl 7.62.0: CURL_HTTP_VERSION_2TLS Before that: CURL_HTTP_VERSION_1_1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -108,9 +111,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.md b/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.md index a39573e6a..4b8228b40 100644 --- a/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.md +++ b/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.md @@ -10,6 +10,7 @@ Protocol: See-also: - CURLOPT_HTTP_VERSION (3) - CURLOPT_MAXFILESIZE_LARGE (3) +Added-in: 7.14.1 --- # NAME @@ -45,6 +46,8 @@ Only use this option if strictly necessary. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,10 +65,16 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +Support for FTP added in 7.46.0. + +# NOTES + +This option is not working for HTTP when libcurl is built to use the hyper +backend. -Added in 7.14.1. Support for FTP added in 7.46.0. This option is not working -for HTTP when libcurl is built to use the hyper backend. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_INFILESIZE.md b/docs/libcurl/opts/CURLOPT_INFILESIZE.md index 522bdb41a..8c9ab6243 100644 --- a/docs/libcurl/opts/CURLOPT_INFILESIZE.md +++ b/docs/libcurl/opts/CURLOPT_INFILESIZE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_UPLOAD (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -50,6 +51,8 @@ and sending a different amount may lead to errors. Unset +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -74,10 +77,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY SMTP support added in 7.23.0 +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.md b/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.md index 712cd5802..2fb736484 100644 --- a/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.md +++ b/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_UPLOAD (3) Protocol: - All +Added-in: 7.11.0 --- # NAME @@ -47,6 +48,8 @@ and sending a different amount may lead to errors. Unset +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -70,10 +73,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY SMTP support added in 7.23.0 +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_INTERFACE.md b/docs/libcurl/opts/CURLOPT_INTERFACE.md index f79a43078..f1ca875fc 100644 --- a/docs/libcurl/opts/CURLOPT_INTERFACE.md +++ b/docs/libcurl/opts/CURLOPT_INTERFACE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_SOCKOPTFUNCTION (3) - CURLOPT_TCP_NODELAY (3) - CURLOPT_LOCALPORT (3) +Added-in: 7.3 --- # NAME @@ -28,15 +29,16 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERFACE, char *interface); Pass a char pointer as parameter. This sets the *interface* name to use as outgoing network interface. The name can be an interface name, an IP address, -or a hostname. +or a hostname. If you prefer one of these, you can use the following special +prefixes: -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!\` - Interface name +* `host!\` - IP address or hostname +* `ifhost!\!\` - Interface name and IP address or hostname -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 `if!` or `ifhost!` is specified but the parameter does not match an existing +interface, *CURLE_INTERFACE_FAILED* is returned from the libcurl function used +to perform the transfer. libcurl does not support using network interface names for this option on Windows. @@ -53,6 +55,8 @@ option. NULL, use whatever the TCP stack finds suitable +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -72,9 +76,13 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +The `if!` and `host!` syntax was added in 7.24.0. + +The `ifhost!` syntax was added in 8.9.0. -The "if!" and "host!" syntax was added in 7.24.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.md b/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.md index 508c76f13..15f1c8332 100644 --- a/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.md +++ b/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_INTERLEAVEFUNCTION (3) - CURLOPT_RTSP_REQUEST (3) +Added-in: 7.20.0 --- # NAME @@ -34,6 +35,8 @@ anywhere. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.md b/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.md index 7d2e52857..6f9754229 100644 --- a/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_RTSP_REQUEST (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -65,6 +66,8 @@ You can also abort the transfer by returning CURL_WRITEFUNC_ERROR. (7.87.0) NULL, the interleave data is then passed to the regular write function: CURLOPT_WRITEFUNCTION(3). +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -91,9 +94,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_IOCTLDATA.md b/docs/libcurl/opts/CURLOPT_IOCTLDATA.md index ef33d7ce5..b9cd9a509 100644 --- a/docs/libcurl/opts/CURLOPT_IOCTLDATA.md +++ b/docs/libcurl/opts/CURLOPT_IOCTLDATA.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_SEEKFUNCTION (3) Protocol: - All +Added-in: 7.12.3 --- # NAME @@ -30,7 +31,9 @@ argument in the ioctl callback set with CURLOPT_IOCTLFUNCTION(3). # DEFAULT -By default, the value of this parameter is NULL. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -61,9 +64,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.18.0. -Added in 7.12.3. Deprecated since 7.18.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.md b/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.md index 75e04c302..b26a542f7 100644 --- a/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.md @@ -9,6 +9,7 @@ Protocol: See-also: - CURLOPT_IOCTLDATA (3) - CURLOPT_SEEKFUNCTION (3) +Added-in: 7.12.3 --- # NAME @@ -61,7 +62,9 @@ parameter is ignored when seeking. # DEFAULT -By default, this parameter is set to NULL. Not used. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -92,9 +95,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.18.0. -Added in 7.12.3. Deprecated since 7.18.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_IPRESOLVE.md b/docs/libcurl/opts/CURLOPT_IPRESOLVE.md index acf0b3830..1b4369d22 100644 --- a/docs/libcurl/opts/CURLOPT_IPRESOLVE.md +++ b/docs/libcurl/opts/CURLOPT_IPRESOLVE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_SSLVERSION (3) Protocol: - All +Added-in: 7.10.8 --- # NAME @@ -52,6 +53,8 @@ Uses only IPv6 addresses. CURL_IPRESOLVE_WHATEVER +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -72,9 +75,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_ISSUERCERT.md b/docs/libcurl/opts/CURLOPT_ISSUERCERT.md index f9000559e..fa726b0cf 100644 --- a/docs/libcurl/opts/CURLOPT_ISSUERCERT.md +++ b/docs/libcurl/opts/CURLOPT_ISSUERCERT.md @@ -13,6 +13,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.19.0 --- # NAME @@ -52,6 +53,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -68,9 +71,7 @@ int main(void) } ~~~ -# AVAILABILITY - -If built TLS enabled +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.md b/docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.md index 142225da6..77f0d87bf 100644 --- a/docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.md +++ b/docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.md @@ -13,6 +13,7 @@ Protocol: - TLS TLS-backend: - OpenSSL +Added-in: 7.71.0 --- # NAME @@ -58,6 +59,8 @@ expects a filename as input. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -82,9 +85,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.71.0. This option is supported by the OpenSSL backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.md b/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.md index 6a48523e8..fb52799f4 100644 --- a/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.md +++ b/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_HTTPHEADER (3) Protocol: - HTTP +Added-in: 7.51.0 --- # NAME @@ -41,6 +42,8 @@ Most applications do not need this option. 0, stop sending on error +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP. Added in 7.51.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_KEYPASSWD.md b/docs/libcurl/opts/CURLOPT_KEYPASSWD.md index 408ccfbfb..79f31555a 100644 --- a/docs/libcurl/opts/CURLOPT_KEYPASSWD.md +++ b/docs/libcurl/opts/CURLOPT_KEYPASSWD.md @@ -14,6 +14,7 @@ TLS-backend: - mbedTLS - Schannel - wolfSSL +Added-in: 7.17.0 --- # NAME @@ -32,7 +33,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEYPASSWD, char *pwd); Pass a pointer to a null-terminated string as parameter. It is used as the password required to use the CURLOPT_SSLKEY(3) or -CURLOPT_SSH_PRIVATE_KEYFILE(3) private key. You never need a pass phrase to +CURLOPT_SSH_PRIVATE_KEYFILE(3) private key. You never need a passphrase 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 @@ -42,6 +43,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,11 +63,13 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY This option was known as CURLOPT_SSLKEYPASSWD up to 7.16.4 and CURLOPT_SSLCERTPASSWD up to 7.9.2. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_KRBLEVEL.md b/docs/libcurl/opts/CURLOPT_KRBLEVEL.md index dfadcf436..0c35b163f 100644 --- a/docs/libcurl/opts/CURLOPT_KRBLEVEL.md +++ b/docs/libcurl/opts/CURLOPT_KRBLEVEL.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_USE_SSL (3) Protocol: - FTP +Added-in: 7.16.4 --- # NAME @@ -38,6 +39,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,10 +57,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY This option was known as CURLOPT_KRB4LEVEL up to 7.16.3 +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_LOCALPORT.md b/docs/libcurl/opts/CURLOPT_LOCALPORT.md index 94b5d50f8..a7cc9fdc7 100644 --- a/docs/libcurl/opts/CURLOPT_LOCALPORT.md +++ b/docs/libcurl/opts/CURLOPT_LOCALPORT.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_LOCALPORTRANGE (3) Protocol: - All +Added-in: 7.15.2 --- # NAME @@ -35,6 +36,8 @@ this option is set. Valid port numbers are 1 - 65535. 0, disabled - use whatever the system thinks is fine +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +56,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.15.2 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.md b/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.md index 4549cafe3..5d8c8a267 100644 --- a/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.md +++ b/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_LOCALPORT (3) Protocol: - All +Added-in: 7.15.2 --- # NAME @@ -38,6 +39,8 @@ setup failures. 1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.15.2 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.md b/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.md index 5c879603a..44f392250 100644 --- a/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.md +++ b/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.md @@ -12,6 +12,7 @@ Protocol: - LDAP - POP3 - SMTP +Added-in: 7.34.0 --- # NAME @@ -51,6 +52,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -67,9 +70,11 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +Support for OpenLDAP added in 7.82.0. -Added in 7.34.0. Support for OpenLDAP added in 7.82.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.md b/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.md index d0131a4ee..58415df12 100644 --- a/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.md +++ b/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_TIMEOUT (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -37,6 +38,8 @@ slow and abort. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.md b/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.md index 06e38c194..04edef334 100644 --- a/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.md +++ b/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_TIMEOUT (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -34,6 +35,8 @@ library to consider it too slow and abort. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAIL_AUTH.md b/docs/libcurl/opts/CURLOPT_MAIL_AUTH.md index afe62b91c..44effd4ee 100644 --- a/docs/libcurl/opts/CURLOPT_MAIL_AUTH.md +++ b/docs/libcurl/opts/CURLOPT_MAIL_AUTH.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_MAIL_RCPT (3) Protocol: - SMTP +Added-in: 7.25.0 --- # NAME @@ -48,6 +49,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.25.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAIL_FROM.md b/docs/libcurl/opts/CURLOPT_MAIL_FROM.md index 52a8e51fc..b0b66355c 100644 --- a/docs/libcurl/opts/CURLOPT_MAIL_FROM.md +++ b/docs/libcurl/opts/CURLOPT_MAIL_FROM.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_MAIL_RCPT (3) Protocol: - SMTP +Added-in: 7.20.0 --- # NAME @@ -41,6 +42,8 @@ option. blank +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAIL_RCPT.md b/docs/libcurl/opts/CURLOPT_MAIL_RCPT.md index 98b640e2e..9910860f3 100644 --- a/docs/libcurl/opts/CURLOPT_MAIL_RCPT.md +++ b/docs/libcurl/opts/CURLOPT_MAIL_RCPT.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_MAIL_FROM (3) Protocol: - SMTP +Added-in: 7.20.0 --- # NAME @@ -48,6 +49,8 @@ should be specified using the mailing list name, such as `Friends` or NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -68,9 +71,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0. The **VRFY** and **EXPN** logic was added in 7.34.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.md b/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.md index d315d2bc8..f17d56151 100644 --- a/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.md +++ b/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_MAIL_RCPT (3) Protocol: - SMTP +Added-in: 8.2.0 --- # NAME @@ -44,6 +45,8 @@ RCPT TO command. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -68,11 +71,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY -This option was called CURLOPT_MAIL_RCPT_ALLLOWFAILS before 8.2.0 +This option was called CURLOPT_MAIL_RCPT_ALLLOWFAILS (with three instead of +two letter L) before 8.2.0 -Added in 7.69.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.md b/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.md index 6d92fa4af..c834d88c7 100644 --- a/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.md +++ b/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_TIMEOUT (3) Protocol: - All +Added-in: 7.65.0 --- # NAME @@ -41,7 +42,9 @@ cache that is older than this set *age*, it is closed instead. # DEFAULT -Default maximum age is set to 118 seconds. +118 seconds + +# %PROTOCOLS% # EXAMPLE @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.65.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAXCONNECTS.md b/docs/libcurl/opts/CURLOPT_MAXCONNECTS.md index cd8b18dd0..e1e0c2565 100644 --- a/docs/libcurl/opts/CURLOPT_MAXCONNECTS.md +++ b/docs/libcurl/opts/CURLOPT_MAXCONNECTS.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_MAXREDIRS (3) Protocol: - All +Added-in: 7.7 --- # NAME @@ -48,6 +49,8 @@ CURLMOPT_MAXCONNECTS(3) option. 5 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAXFILESIZE.md b/docs/libcurl/opts/CURLOPT_MAXFILESIZE.md index 36159709a..a90763012 100644 --- a/docs/libcurl/opts/CURLOPT_MAXFILESIZE.md +++ b/docs/libcurl/opts/CURLOPT_MAXFILESIZE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_MAX_RECV_SPEED_LARGE (3) Protocol: - All +Added-in: 7.10.8 --- # NAME @@ -28,6 +29,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE, long size); Pass a long as parameter. This specifies the maximum accepted *size* (in bytes) of a file to download. If the file requested is found larger than this value, the transfer is aborted and *CURLE_FILESIZE_EXCEEDED* is returned. +Passing a zero *size* disables this, and passing a negative *size* yields a +*CURLE_BAD_FUNCTION_ARGUMENT*. 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 @@ -40,7 +43,9 @@ threshold. # DEFAULT -None +0, meaning disabled. + +# %PROTOCOLS% # EXAMPLE @@ -58,10 +63,9 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE -Returns CURLE_OK +Returns CURLE_OK if the size passed is valid or CURLE_BAD_FUNCTION_ARGUMENT if +not. diff --git a/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.md b/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.md index d11a56225..ad6b10750 100644 --- a/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.md +++ b/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.md @@ -11,6 +11,7 @@ Protocol: - FTP - HTTP - MQTT +Added-in: 7.11.0 --- # NAME @@ -31,7 +32,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE_LARGE, Pass a curl_off_t as parameter. This specifies the maximum accepted *size* (in bytes) of a file to download. If the file requested is found larger than this value, the transfer is aborted and *CURLE_FILESIZE_EXCEEDED* is -returned. +returned. Passing a zero *size* disables this, and passing a negative *size* +yields a *CURLE_BAD_FUNCTION_ARGUMENT*. 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 @@ -42,7 +44,9 @@ threshold. # DEFAULT -None +0, meaning disabled. + +# %PROTOCOLS% # EXAMPLE @@ -61,10 +65,9 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.11.0 +# %AVAILABILITY% # RETURN VALUE -Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or +CURLE_BAD_FUNCTION_ARGUMENT if the size passed is invalid. diff --git a/docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.md b/docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.md index 79b87245b..5615f1fd1 100644 --- a/docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.md +++ b/docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_TIMEOUT (3) Protocol: - All +Added-in: 7.80.0 --- # NAME @@ -43,7 +44,9 @@ If set to 0, this behavior is disabled: all connections are eligible for reuse. # DEFAULT -Default *maxlifetime* is 0 seconds (i.e., disabled). +0 seconds (i.e., disabled) + +# %PROTOCOLS% # EXAMPLE @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.80.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAXREDIRS.md b/docs/libcurl/opts/CURLOPT_MAXREDIRS.md index 751b22ed0..4f94f8d37 100644 --- a/docs/libcurl/opts/CURLOPT_MAXREDIRS.md +++ b/docs/libcurl/opts/CURLOPT_MAXREDIRS.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_FOLLOWLOCATION (3) Protocol: - HTTP +Added-in: 7.5 --- # NAME @@ -40,6 +41,8 @@ to get stuck in never-ending redirect loops. 30 (since 8.3.0), it was previously unlimited. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.md b/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.md index 9e08a68dc..987693e84 100644 --- a/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.md +++ b/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_TIMEOUT (3) Protocol: - All +Added-in: 7.15.5 --- # NAME @@ -43,6 +44,8 @@ This option does not affect transfer speeds done with FILE:// URLs. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.15.5 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.md b/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.md index d8927269a..22f3cb065 100644 --- a/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.md +++ b/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_MAX_RECV_SPEED_LARGE (3) Protocol: - All +Added-in: 7.15.5 --- # NAME @@ -44,6 +45,8 @@ This option does not affect transfer speeds done with FILE:// URLs. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.15.5 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MIMEPOST.md b/docs/libcurl/opts/CURLOPT_MIMEPOST.md index 8a4edb10b..9e3b3806c 100644 --- a/docs/libcurl/opts/CURLOPT_MIMEPOST.md +++ b/docs/libcurl/opts/CURLOPT_MIMEPOST.md @@ -13,6 +13,7 @@ Protocol: - HTTP - SMTP - IMAP +Added-in: 7.56.0 --- # NAME @@ -43,6 +44,8 @@ When setting CURLOPT_MIMEPOST(3) 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. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -72,9 +75,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.56.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_MIME_OPTIONS.md b/docs/libcurl/opts/CURLOPT_MIME_OPTIONS.md index f1f5fe0da..5175570e5 100644 --- a/docs/libcurl/opts/CURLOPT_MIME_OPTIONS.md +++ b/docs/libcurl/opts/CURLOPT_MIME_OPTIONS.md @@ -11,6 +11,7 @@ Protocol: - HTTP - IMAP - SMTP +Added-in: 7.81.0 --- # NAME @@ -56,6 +57,8 @@ containing multipart form is sent, this is normally transmitted as 0, meaning disabled. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -88,9 +91,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Option added in 7.81.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_NETRC.md b/docs/libcurl/opts/CURLOPT_NETRC.md index 6b5e1d2e8..98568cc91 100644 --- a/docs/libcurl/opts/CURLOPT_NETRC.md +++ b/docs/libcurl/opts/CURLOPT_NETRC.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_USERPWD (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -30,8 +31,10 @@ This parameter controls the preference *level* of libcurl between using usernames and passwords from your *~/.netrc* file, relative to usernames and passwords in the URL supplied with CURLOPT_URL(3). -On Windows, libcurl uses the file as *%HOME%/_netrc*. If *%HOME%* is -not set on Windows, libcurl falls back to *%USERPROFILE%*. +On Windows, libcurl primarily checks for *.netrc* in *%HOME%*. If *%HOME%* is +not set on Windows, libcurl falls back to *%USERPROFILE%*. If the file does +not exist, it falls back to check if there is instead a file named *_netrc* - +using an underscore instead of period. You can also tell libcurl a different filename to use with CURLOPT_NETRC_FILE(3). @@ -115,6 +118,8 @@ done with "macdef" that it finds. CURL_NETRC_IGNORED +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -130,9 +135,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_NETRC_FILE.md b/docs/libcurl/opts/CURLOPT_NETRC_FILE.md index 57b2acb78..a27d470ae 100644 --- a/docs/libcurl/opts/CURLOPT_NETRC_FILE.md +++ b/docs/libcurl/opts/CURLOPT_NETRC_FILE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_USERNAME (3) Protocol: - All +Added-in: 7.11.0 --- # NAME @@ -38,6 +39,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10.9 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.md b/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.md index 51863440e..94c778c7e 100644 --- a/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.md +++ b/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.md @@ -12,6 +12,7 @@ Protocol: - SFTP - SCP - FILE +Added-in: 7.16.4 --- # NAME @@ -38,6 +39,8 @@ this are *sftp://*, *scp://*, and *file://*. 0755 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,9 +58,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.md b/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.md index a04b99585..f3fba5589 100644 --- a/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.md +++ b/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.md @@ -11,6 +11,7 @@ Protocol: - SFTP - SCP - FILE +Added-in: 7.16.4 --- # NAME @@ -36,6 +37,8 @@ The only protocols that can use this are *sftp://*, *scp://*, and *file://*. 0644 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,9 +54,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_NOBODY.md b/docs/libcurl/opts/CURLOPT_NOBODY.md index 319b9ed61..0168912ad 100644 --- a/docs/libcurl/opts/CURLOPT_NOBODY.md +++ b/docs/libcurl/opts/CURLOPT_NOBODY.md @@ -12,6 +12,7 @@ See-also: - CURLOPT_UPLOAD (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -49,6 +50,8 @@ URL you request). 0, the body is transferred +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -67,9 +70,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_NOPROGRESS.md b/docs/libcurl/opts/CURLOPT_NOPROGRESS.md index 6363b18c1..5f3d7322e 100644 --- a/docs/libcurl/opts/CURLOPT_NOPROGRESS.md +++ b/docs/libcurl/opts/CURLOPT_NOPROGRESS.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_XFERINFOFUNCTION (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -36,6 +37,8 @@ getting called. 1, meaning it normally runs without a progress meter. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_NOPROXY.md b/docs/libcurl/opts/CURLOPT_NOPROXY.md index 1f181c780..1412a9a58 100644 --- a/docs/libcurl/opts/CURLOPT_NOPROXY.md +++ b/docs/libcurl/opts/CURLOPT_NOPROXY.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_PROXY (3) - CURLOPT_PROXYAUTH (3) - CURLOPT_PROXYTYPE (3) +Added-in: 7.19.4 --- # NAME @@ -60,6 +61,8 @@ the same way. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -78,9 +81,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_NOSIGNAL.md b/docs/libcurl/opts/CURLOPT_NOSIGNAL.md index 7d147d0f9..3aaac34c9 100644 --- a/docs/libcurl/opts/CURLOPT_NOSIGNAL.md +++ b/docs/libcurl/opts/CURLOPT_NOSIGNAL.md @@ -8,6 +8,7 @@ See-also: - CURLOPT_TIMEOUT (3) Protocol: - All +Added-in: 7.10 --- # NAME @@ -40,14 +41,14 @@ ignore SIGPIPE signals, which otherwise are sent by the system when trying to send data to a socket which is closed in the other end. libcurl makes an effort to never cause such SIGPIPE signals to trigger, but some operating systems have no way to avoid them and even on those that have there are some -corner cases when they may still happen, contrary to our desire. In addition, -using *CURLAUTH_NTLM_WB* authentication could cause a SIGCHLD signal to be -raised. +corner cases when they may still happen, contrary to our desire. # DEFAULT 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -67,9 +68,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.md b/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.md index 5118ffe96..1a73f2f14 100644 --- a/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.md +++ b/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_SOCKOPTFUNCTION (3) Protocol: - All +Added-in: 7.17.1 --- # NAME @@ -32,7 +33,9 @@ CURLOPT_OPENSOCKETFUNCTION(3). # DEFAULT -The default value of this parameter is NULL. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -81,9 +84,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.17.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.md b/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.md index 554ac8822..47bb7e132 100644 --- a/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_SOCKOPTFUNCTION (3) Protocol: - All +Added-in: 7.17.1 --- # NAME @@ -70,11 +71,13 @@ CURLOPT_SOCKOPTFUNCTION(3) to signal that it already is connected. # DEFAULT -The default behavior is the equivalent of this: +The equivalent of this: ~~~c return socket(addr->family, addr->socktype, addr->protocol); ~~~ +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -121,9 +124,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.17.1. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PASSWORD.md b/docs/libcurl/opts/CURLOPT_PASSWORD.md index 3aa4489b6..94d90d0dc 100644 --- a/docs/libcurl/opts/CURLOPT_PASSWORD.md +++ b/docs/libcurl/opts/CURLOPT_PASSWORD.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_USERPWD (3) Protocol: - All +Added-in: 7.19.1 --- # NAME @@ -40,6 +41,8 @@ option. blank +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PATH_AS_IS.md b/docs/libcurl/opts/CURLOPT_PATH_AS_IS.md index 0c04b862b..744de5c3f 100644 --- a/docs/libcurl/opts/CURLOPT_PATH_AS_IS.md +++ b/docs/libcurl/opts/CURLOPT_PATH_AS_IS.md @@ -11,6 +11,7 @@ See-also: - curl_url_set (3) Protocol: - All +Added-in: 7.42.0 --- # NAME @@ -47,6 +48,8 @@ The corresponding flag for the curl_url_set(3) function is called 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.42.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.md b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.md index 357f387ef..10c7100cb 100644 --- a/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.md +++ b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.md @@ -18,6 +18,7 @@ TLS-backend: - mbedTLS - Secure Transport - Schannel +Added-in: 7.39.0 --- # NAME @@ -57,6 +58,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -116,7 +119,7 @@ footer: -----END PUBLIC KEY----- ~~~ -# AVAILABILITY +# HISTORY ## PEM/DER support @@ -142,6 +145,8 @@ footer: Other SSL backends not supported. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_PIPEWAIT.md b/docs/libcurl/opts/CURLOPT_PIPEWAIT.md index 6fdbcee84..8226791d4 100644 --- a/docs/libcurl/opts/CURLOPT_PIPEWAIT.md +++ b/docs/libcurl/opts/CURLOPT_PIPEWAIT.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_FRESH_CONNECT (3) Protocol: - HTTP +Added-in: 7.43.0 --- # NAME @@ -52,6 +53,8 @@ and support level. 0 (off) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -67,9 +70,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.43.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PORT.md b/docs/libcurl/opts/CURLOPT_PORT.md index 15d57f503..812311bfd 100644 --- a/docs/libcurl/opts/CURLOPT_PORT.md +++ b/docs/libcurl/opts/CURLOPT_PORT.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_URL (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -42,8 +43,10 @@ and therefore using a port number lower than zero or over 65535 causes a # DEFAULT -By default this is 0 which makes it not used. This also makes port number zero -impossible to set with this API. +0 which makes it not used. This also makes port number zero impossible to set +with this API. + +# %PROTOCOLS% # EXAMPLE @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_POST.md b/docs/libcurl/opts/CURLOPT_POST.md index b2aef4f30..fe4656f17 100644 --- a/docs/libcurl/opts/CURLOPT_POST.md +++ b/docs/libcurl/opts/CURLOPT_POST.md @@ -9,7 +9,8 @@ Protocol: See-also: - CURLOPT_HTTPPOST (3) - CURLOPT_POSTFIELDS (3) - - CURLOPT_PUT (3) + - CURLOPT_UPLOAD (3) +Added-in: 7.1 --- # NAME @@ -71,6 +72,8 @@ you should set a new request type explicitly as described above. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -91,9 +94,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDS.md b/docs/libcurl/opts/CURLOPT_POSTFIELDS.md index 11f64d7f7..edd932c4e 100644 --- a/docs/libcurl/opts/CURLOPT_POSTFIELDS.md +++ b/docs/libcurl/opts/CURLOPT_POSTFIELDS.md @@ -13,6 +13,7 @@ See-also: Protocol: - HTTP - MQTT +Added-in: 7.1 --- # NAME @@ -73,6 +74,8 @@ CURLOPT_MIMEPOST(3) option combined with curl_mime_init(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -115,9 +118,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.md b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.md index 6fa83fdef..b23a486a3 100644 --- a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.md +++ b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_POSTFIELDSIZE_LARGE (3) Protocol: - HTTP +Added-in: 7.2 --- # NAME @@ -37,6 +38,8 @@ If you post more than 2GB, use CURLOPT_POSTFIELDSIZE_LARGE(3). -1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.md b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.md index a7adceca5..d06bf1a7e 100644 --- a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.md +++ b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_POSTFIELDSIZE (3) Protocol: - HTTP +Added-in: 7.11.1 --- # NAME @@ -37,6 +38,8 @@ CURLOPT_READFUNCTION(3) (if used) to signal the end of data. -1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_POSTQUOTE.md b/docs/libcurl/opts/CURLOPT_POSTQUOTE.md index fbd55fc50..58c4d8710 100644 --- a/docs/libcurl/opts/CURLOPT_POSTQUOTE.md +++ b/docs/libcurl/opts/CURLOPT_POSTQUOTE.md @@ -10,6 +10,7 @@ See-also: Protocol: - FTP - SFTP +Added-in: 7.1 --- # NAME @@ -38,6 +39,8 @@ Disable this operation again by setting a NULL to this option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -If support for the protocols are built-in. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_POSTREDIR.md b/docs/libcurl/opts/CURLOPT_POSTREDIR.md index 4f63fd1cd..c56ba990a 100644 --- a/docs/libcurl/opts/CURLOPT_POSTREDIR.md +++ b/docs/libcurl/opts/CURLOPT_POSTREDIR.md @@ -12,6 +12,7 @@ See-also: - CURLOPT_POSTFIELDS (3) Protocol: - HTTP +Added-in: 7.19.1 --- # NAME @@ -48,6 +49,8 @@ when setting CURLOPT_FOLLOWLOCATION(3). 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -69,10 +72,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +This option was known as CURLOPT_POST301 up to 7.19.0 as it only supported the +301 then. CURL_REDIR_POST_303 was added in 7.26.0. -Added in 7.17.1. This option was known as CURLOPT_POST301 up to 7.19.0 as it -only supported the 301 then. CURL_REDIR_POST_303 was added in 7.26.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PREQUOTE.md b/docs/libcurl/opts/CURLOPT_PREQUOTE.md index 887845875..5291edf06 100644 --- a/docs/libcurl/opts/CURLOPT_PREQUOTE.md +++ b/docs/libcurl/opts/CURLOPT_PREQUOTE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_QUOTE (3) Protocol: - FTP +Added-in: 7.9.5 --- # NAME @@ -42,6 +43,8 @@ this option does not. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -65,9 +68,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with the protocol support +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PREREQDATA.md b/docs/libcurl/opts/CURLOPT_PREREQDATA.md index 821451bed..f94ecc6fc 100644 --- a/docs/libcurl/opts/CURLOPT_PREREQDATA.md +++ b/docs/libcurl/opts/CURLOPT_PREREQDATA.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_PREREQFUNCTION (3) Protocol: - All +Added-in: 7.80.0 --- # NAME @@ -33,6 +34,8 @@ argument in the pre-request callback set with CURLOPT_PREREQFUNCTION(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.80.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PREREQFUNCTION.md b/docs/libcurl/opts/CURLOPT_PREREQFUNCTION.md index 0ddd412b9..8024a9a89 100644 --- a/docs/libcurl/opts/CURLOPT_PREREQFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_PREREQFUNCTION.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_PREREQDATA (3) Protocol: - All +Added-in: 7.80.0 --- # NAME @@ -83,7 +84,9 @@ The pointer you set with CURLOPT_PREREQDATA(3). # DEFAULT -By default, this is NULL and unused. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -114,9 +117,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.80.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PRE_PROXY.md b/docs/libcurl/opts/CURLOPT_PRE_PROXY.md index 746a80833..f6e5dbff0 100644 --- a/docs/libcurl/opts/CURLOPT_PRE_PROXY.md +++ b/docs/libcurl/opts/CURLOPT_PRE_PROXY.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_PROXY (3) Protocol: - All +Added-in: 7.52.0 --- # NAME @@ -47,15 +48,17 @@ be used. Otherwise SOCKS4 is used as default. Setting the pre proxy string to "" (an empty string) explicitly disables the use of a pre proxy. +When you set a hostname to use, do not assume that there is any particular +single port number used widely for proxies. Specify it. + The application does not have to keep the string around after setting this option. # DEFAULT -Default is NULL, meaning no pre proxy is used. +NULL -When you set a hostname to use, do not assume that there is any particular -single port number used widely for proxies. Specify it! +# %PROTOCOLS% # EXAMPLE @@ -72,9 +75,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PRIVATE.md b/docs/libcurl/opts/CURLOPT_PRIVATE.md index 0af8fc2e8..580ba243d 100644 --- a/docs/libcurl/opts/CURLOPT_PRIVATE.md +++ b/docs/libcurl/opts/CURLOPT_PRIVATE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_VERBOSE (3) Protocol: - All +Added-in: 7.10.3 --- # NAME @@ -35,6 +36,8 @@ never does anything with this data. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10.3 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROGRESSDATA.md b/docs/libcurl/opts/CURLOPT_PROGRESSDATA.md index fc915750b..6f501f2ee 100644 --- a/docs/libcurl/opts/CURLOPT_PROGRESSDATA.md +++ b/docs/libcurl/opts/CURLOPT_PROGRESSDATA.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_XFERINFOFUNCTION (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -30,7 +31,9 @@ argument in the progress callback set with CURLOPT_PROGRESSFUNCTION(3). # DEFAULT -The default value of this parameter is NULL. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -69,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.md b/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.md index 7bf26d637..d9a24382b 100644 --- a/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_XFERINFOFUNCTION (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -74,8 +75,9 @@ get called. # DEFAULT -By default, libcurl has an internal progress meter. That is rarely wanted by -users. +NULL. libcurl has an internal progress meter. That is rarely wanted by users. + +# %PROTOCOLS% # EXAMPLE @@ -114,10 +116,12 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED Deprecated since 7.32.0. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK. diff --git a/docs/libcurl/opts/CURLOPT_PROTOCOLS.md b/docs/libcurl/opts/CURLOPT_PROTOCOLS.md index a63821713..e631bca9d 100644 --- a/docs/libcurl/opts/CURLOPT_PROTOCOLS.md +++ b/docs/libcurl/opts/CURLOPT_PROTOCOLS.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_URL (3) Protocol: - All +Added-in: 7.19.4 --- # NAME @@ -73,6 +74,8 @@ CURLPROTO_TFTP All protocols built-in. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -93,9 +96,11 @@ int main(int argc, char **argv) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.85.0. -Added in 7.19.4. Deprecated since 7.85.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.md b/docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.md index f004d8d77..1015b993c 100644 --- a/docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.md +++ b/docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.md @@ -12,6 +12,7 @@ See-also: - curl_version_info (3) Protocol: - All +Added-in: 7.85.0 --- # NAME @@ -56,6 +57,8 @@ way to figure out the protocol used in a previous transfer. All protocols built-in +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -75,9 +78,7 @@ int main(int argc, char **argv) } ~~~ -# AVAILABILITY - -Added in 7.85.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY.md b/docs/libcurl/opts/CURLOPT_PROXY.md index a48f54e33..abc42d7f1 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY.md +++ b/docs/libcurl/opts/CURLOPT_PROXY.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_PROXYTYPE (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -69,15 +70,16 @@ SOCKS5 Proxy. SOCKS5 Proxy. Proxy resolves URL hostname. -Without a scheme prefix, CURLOPT_PROXYTYPE(3) can be used to specify -which kind of proxy the string identifies. +## + +Without a scheme prefix, CURLOPT_PROXYTYPE(3) can be used to specify which +kind of proxy the string identifies. 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 -CURLOPT_QUOTE(3) and similar FTP specifics that do not work unless you -tunnel through the HTTP proxy. Such tunneling is activated with -CURLOPT_HTTPPROXYTUNNEL(3). +on what other features of the library you can use, such as CURLOPT_QUOTE(3) +and similar FTP specifics that do not work unless you tunnel through the HTTP +proxy. Such tunneling is activated with CURLOPT_HTTPPROXYTUNNEL(3). 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. @@ -88,8 +90,8 @@ user + password. Unix domain sockets are supported for socks proxies since 7.84.0. Set 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 you set a hostname to use, do not assume that there is any particular +single port number used widely for proxies. Specify it. When a proxy is used, the active FTP mode as set with *CUROPT_FTPPORT(3)*, cannot be used. @@ -109,10 +111,9 @@ variables. # DEFAULT -Default is NULL, meaning no proxy is used. +NULL -When you set a hostname to use, do not assume that there is any particular -single port number used widely for proxies. Specify it! +# %PROTOCOLS% # EXAMPLE @@ -128,7 +129,7 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY Since 7.14.1 the proxy environment variable names can include the protocol scheme. @@ -138,6 +139,8 @@ Since 7.21.7 the proxy string supports the socks protocols as "schemes". Since 7.50.2, unsupported schemes in proxy strings cause libcurl to return error. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if proxies are supported, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_PROXYAUTH.md b/docs/libcurl/opts/CURLOPT_PROXYAUTH.md index ca5204e5e..1609cbafa 100644 --- a/docs/libcurl/opts/CURLOPT_PROXYAUTH.md +++ b/docs/libcurl/opts/CURLOPT_PROXYAUTH.md @@ -12,6 +12,7 @@ See-also: - CURLOPT_PROXYUSERPWD (3) Protocol: - All +Added-in: 7.10.7 --- # NAME @@ -43,6 +44,8 @@ CURLOPT_HTTPAUTH(3) man page. CURLAUTH_BASIC +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10.7 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXYHEADER.md b/docs/libcurl/opts/CURLOPT_PROXYHEADER.md index 8fbb964c3..5bcd01767 100644 --- a/docs/libcurl/opts/CURLOPT_PROXYHEADER.md +++ b/docs/libcurl/opts/CURLOPT_PROXYHEADER.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_HTTPHEADER (3) Protocol: - All +Added-in: 7.37.0 --- # NAME @@ -44,6 +45,8 @@ Pass a NULL to this to reset back to no custom headers. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -69,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.37.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.md b/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.md index f108bbf93..1b371b22c 100644 --- a/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.md +++ b/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_PROXYUSERNAME (3) Protocol: - All +Added-in: 7.19.1 --- # NAME @@ -40,6 +41,8 @@ option. blank +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXYPORT.md b/docs/libcurl/opts/CURLOPT_PROXYPORT.md index 2a5b796af..b0113ac0e 100644 --- a/docs/libcurl/opts/CURLOPT_PROXYPORT.md +++ b/docs/libcurl/opts/CURLOPT_PROXYPORT.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_PROXYTYPE (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -30,15 +31,21 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPORT, long port); 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 CURLOPT_PROXY(3) or uses 443 for https -proxies and 1080 for all others as default. +specified in the proxy string CURLOPT_PROXY(3) or uses 443 for https proxies +and 1080 for all others as default. + +Disabling this option, setting it to zero, makes it not specified which makes +libcurl use the default proxy port number or the port number specified in the +proxy URL string. While this accepts a 'long', the port number is 16 bit so it cannot be larger than 65535. # DEFAULT -0, not specified which makes it use the default port +0 + +# %PROTOCOLS% # EXAMPLE @@ -57,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXYTYPE.md b/docs/libcurl/opts/CURLOPT_PROXYTYPE.md index 50af1d819..dafd99603 100644 --- a/docs/libcurl/opts/CURLOPT_PROXYTYPE.md +++ b/docs/libcurl/opts/CURLOPT_PROXYTYPE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_PROXYPORT (3) Protocol: - All +Added-in: 7.10 --- # NAME @@ -63,6 +64,8 @@ SOCKS5 Proxy. SOCKS5 Proxy. Proxy resolves URL hostname. +## + Often it is more convenient to specify the proxy type with the scheme part of the CURLOPT_PROXY(3) string. @@ -70,6 +73,8 @@ the CURLOPT_PROXY(3) string. CURLPROXY_HTTP +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -88,9 +93,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.md b/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.md index a2b7b2aec..7e0b0caba 100644 --- a/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.md +++ b/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_USERNAME (3) Protocol: - All +Added-in: 7.19.1 --- # NAME @@ -43,6 +44,8 @@ option. blank +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.md b/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.md index 315761647..38b1288eb 100644 --- a/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.md +++ b/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_PROXYUSERNAME (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -40,7 +41,9 @@ option. # DEFAULT -This is NULL by default. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.md b/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.md index 82b136170..ed0b5e6b3 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.md @@ -18,6 +18,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.52.0 --- # NAME @@ -61,6 +62,8 @@ The default value for this can be figured out with CURLINFO_CAINFO(3). Built-in system specific +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -79,14 +82,14 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# NOTES For TLS backends that do not support certificate files, the CURLOPT_PROXY_CAINFO(3) option is ignored. Refer to https://curl.se/docs/ssl-compared.html +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.md b/docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.md index dff93aab4..91ef9a7c8 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.md @@ -21,6 +21,7 @@ TLS-backend: - rustls - Secure Transport - Schannel +Added-in: 7.77.0 --- # NAME @@ -57,6 +58,8 @@ This option overrides CURLOPT_PROXY_CAINFO(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -82,12 +85,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.77.0. - -This option is supported by the rustls (since 7.82.0), OpenSSL, Secure -Transport and Schannel backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.md b/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.md index 4a4f46d14..fe680df09 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.md @@ -16,6 +16,7 @@ TLS-backend: - OpenSSL - GnuTLS - mbedTLS +Added-in: 7.52.0 --- # NAME @@ -47,6 +48,8 @@ The default value for this can be figured out with CURLINFO_CAPATH(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -65,11 +68,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 - -mbedTLS support added in 7.56.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.md b/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.md index 498259756..f0cb86db1 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.md @@ -15,6 +15,7 @@ TLS-backend: - GnuTLS - mbedTLS - OpenSSL +Added-in: 7.52.0 --- # NAME @@ -58,6 +59,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -75,9 +78,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.md b/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.md index 33714c9e1..954848b86 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.md @@ -15,6 +15,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.71.0 --- # NAME @@ -55,6 +56,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -73,9 +76,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.71.0. This option is supported by the OpenSSL and GnuTLS backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.md b/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.md index d8bcf09e6..002704fce 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.md @@ -14,6 +14,7 @@ Protocol: - TLS TLS-backend: - OpenSSL +Added-in: 7.71.0 --- # NAME @@ -59,6 +60,8 @@ instead expects a filename as input. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -85,9 +88,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.71.0. This option is supported by the OpenSSL backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.md b/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.md index cb1e4beca..1d7e2b050 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.md @@ -16,6 +16,7 @@ TLS-backend: - mbedTLS - Schannel - wolfSSL +Added-in: 7.52.0 --- # NAME @@ -35,9 +36,9 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_KEYPASSWD, char *pwd); This option is for connecting to an HTTPS proxy, not an HTTPS server. Pass a pointer to a null-terminated string as parameter. It is used as the -password required to use the CURLOPT_PROXY_SSLKEY(3) private key. You -never need a pass phrase to load a certificate but you need one to load your -private key. +password required to use the CURLOPT_PROXY_SSLKEY(3) private key. You never +need a passphrase 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. @@ -46,6 +47,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -63,9 +66,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.md b/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.md index a1a74258e..c2113a930 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.md @@ -17,6 +17,7 @@ TLS-backend: - GnuTLS - mbedTLS - wolfSSL +Added-in: 7.52.0 --- # NAME @@ -53,6 +54,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -109,7 +112,7 @@ footer: -----END PUBLIC KEY----- ~~~ -# AVAILABILITY +# HISTORY PEM/DER support: @@ -121,6 +124,8 @@ sha256 support: Other SSL backends not supported. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.md b/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.md index d1b9dd95b..b224557e1 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_SERVICE_NAME (3) Protocol: - All +Added-in: 7.43.0 --- # NAME @@ -38,6 +39,8 @@ option. See above +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +56,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.43.0 for HTTP proxies, 7.49.0 for SOCKS5 proxies. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.md b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.md index 4b510b264..1e8555ae1 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.md @@ -17,6 +17,7 @@ TLS-backend: - Schannel - Secure Transport - wolfSSL +Added-in: 7.52.0 --- # NAME @@ -55,6 +56,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -74,9 +77,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.md b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.md index f14b73a19..5002b3a11 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.md @@ -17,6 +17,7 @@ TLS-backend: - Schannel - Secure Transport - wolfSSL +Added-in: 7.52.0 --- # NAME @@ -48,6 +49,8 @@ option. "PEM" +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -68,11 +71,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.md b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.md index 05a41b9e7..2abbbb4df 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.md @@ -15,6 +15,7 @@ TLS-backend: - OpenSSL - Schannel - Secure Transport +Added-in: 7.71.0 --- # NAME @@ -49,6 +50,8 @@ expects a filename as input. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -76,9 +79,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.71.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.md b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.md index e954969ea..c355c947c 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.md @@ -17,6 +17,7 @@ TLS-backend: - mbedTLS - Schannel - wolfSSL +Added-in: 7.52.0 --- # NAME @@ -49,6 +50,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -68,11 +71,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.md b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.md index 16ddd035f..b59ee2623 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.md @@ -14,6 +14,7 @@ TLS-backend: - OpenSSL - BearSSL - wolfSSL +Added-in: 7.52.0 --- # NAME @@ -38,6 +39,8 @@ the format of your private key. Supported formats are "PEM", "DER" and "ENG". The application does not have to keep the string around after setting this option. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.md b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.md index 7f3554442..06ccac498 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.md @@ -12,6 +12,7 @@ Protocol: - TLS TLS-backend: - OpenSSL +Added-in: 7.71.0 --- # NAME @@ -42,6 +43,8 @@ setting this. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -76,9 +79,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.71.0. This option is supported by the OpenSSL backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.md b/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.md index 9fb935f24..1b1795210 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.md @@ -13,6 +13,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.52.0 --- # NAME @@ -59,10 +60,13 @@ TLSv1.2 ## CURL_SSLVERSION_TLSv1_3 TLSv1.3 -The maximum TLS version can be set by using *one* of the -CURL_SSLVERSION_MAX_ macros below. It is also possible to OR *one* of the -CURL_SSLVERSION_ macros with *one* of the CURL_SSLVERSION_MAX_ macros. -The MAX macros are not supported for WolfSSL. + +## + +The maximum TLS version can be set by using *one* of the CURL_SSLVERSION_MAX_ +macros below. It is also possible to OR *one* of the CURL_SSLVERSION_ macros +with *one* of the CURL_SSLVERSION_MAX_ macros. The MAX macros are not +supported for wolfSSL. ## CURL_SSLVERSION_MAX_DEFAULT @@ -90,6 +94,8 @@ The flag defines maximum supported TLS version as TLSv1.2. The flag defines maximum supported TLS version as TLSv1.3. (Added in 7.54.0) +## + In versions of curl prior to 7.54 the CURL_SSLVERSION_TLS options were documented to allow *only* the specified TLS version, but behavior was inconsistent depending on the TLS library. @@ -98,6 +104,8 @@ inconsistent depending on the TLS library. CURL_SSLVERSION_DEFAULT +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -116,9 +124,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.md b/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.md index ce6a778b9..0c64abbc9 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.md @@ -19,6 +19,8 @@ TLS-backend: - Secure Transport - wolfSSL - GnuTLS + - mbedTLS +Added-in: 7.52.0 --- # NAME @@ -46,15 +48,16 @@ For OpenSSL and GnuTLS valid examples of cipher lists include **RC4-SHA**, **SHA1+DES**, **TLSv1** and **DEFAULT**. The default list is normally set when you compile OpenSSL. -For WolfSSL, valid examples of cipher lists include **ECDHE-RSA-RC4-SHA**, +For wolfSSL, valid examples of cipher lists include **ECDHE-RSA-RC4-SHA**, **AES256-SHA:AES256-SHA256**, etc. -For BearSSL, valid examples of cipher lists include -**ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256**, or when using IANA names +For mbedTLS and BearSSL, valid examples of cipher lists include +**ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256**, or when using +IANA names **TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256**, -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. +etc. With mbedTLS and 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. Find more details about cipher lists on this URL: @@ -65,7 +68,9 @@ option. # DEFAULT -NULL, use internal default +NULL, use internal built-in list. + +# %PROTOCOLS% # EXAMPLE @@ -84,11 +89,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0, in 7.83.0 for BearSSL - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.md b/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.md index 541b13cb8..02bc267c9 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.md @@ -13,6 +13,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.52.0 --- # NAME @@ -91,6 +92,8 @@ could be a privacy violation and unexpected. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -110,9 +113,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.md b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.md index 01cbdb913..d97cd74bf 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.md @@ -13,6 +13,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.52.0 --- # NAME @@ -64,6 +65,8 @@ of the proxy certificate. 2 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -81,11 +84,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0. - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.md b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.md index 86afeb72b..b29a4235f 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.md @@ -12,6 +12,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.52.0 --- # NAME @@ -66,6 +67,8 @@ the correct end-point. 1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -83,11 +86,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.md b/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.md index 90b6166ef..42a871d09 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.md @@ -14,8 +14,8 @@ Protocol: - TLS TLS-backend: - OpenSSL - - rustls - Schannel +Added-in: 7.61.0 --- # NAME @@ -51,7 +51,9 @@ option. # DEFAULT -NULL, use internal default +NULL, use internal built-in list + +# %PROTOCOLS% # EXAMPLE @@ -70,10 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.61.0. -Available when built with OpenSSL \>= 1.1.1. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.md b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.md index e45f69e9b..edff372af 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.md @@ -14,6 +14,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.52.0 --- # NAME @@ -43,6 +44,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.md b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.md index a10d78c5e..f67edd9f5 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.md @@ -14,6 +14,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.52.0 --- # NAME @@ -40,16 +41,15 @@ method is "SRP". TLS-SRP authentication. Secure Remote Password authentication for TLS is defined in RFC 5054 and provides mutual authentication if both sides have a shared secret. To use TLS-SRP, you must also set the -CURLOPT_PROXY_TLSAUTH_USERNAME(3) and -CURLOPT_PROXY_TLSAUTH_PASSWORD(3) options. - -The application does not have to keep the string around after setting this -option. +CURLOPT_PROXY_TLSAUTH_USERNAME(3) and CURLOPT_PROXY_TLSAUTH_PASSWORD(3) +options. # DEFAULT blank +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -69,12 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0 - -You need to build libcurl with GnuTLS or OpenSSL with TLS-SRP support for this -to work. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.md b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.md index 8d7b221b8..db66735ad 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.md @@ -14,6 +14,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.52.0 --- # NAME @@ -43,6 +44,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.52.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.md b/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.md index 5daf5df37..a0ac94912 100644 --- a/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.md +++ b/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_TRANSFERTEXT (3) Protocol: - All +Added-in: 7.18.0 --- # NAME @@ -38,6 +39,8 @@ doing FTP via a proxy. Beware that not all proxies support this feature. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.18.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_PUT.md b/docs/libcurl/opts/CURLOPT_PUT.md index 6eb3a6bb1..43bf645de 100644 --- a/docs/libcurl/opts/CURLOPT_PUT.md +++ b/docs/libcurl/opts/CURLOPT_PUT.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_UPLOAD (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -37,6 +38,8 @@ This option is **deprecated** since version 7.12.1. Use CURLOPT_UPLOAD(3). 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -78,9 +81,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.12.1. -Deprecated since 7.12.1. Do not use. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_QUICK_EXIT.md b/docs/libcurl/opts/CURLOPT_QUICK_EXIT.md index 3e0d64ced..e13b43ca0 100644 --- a/docs/libcurl/opts/CURLOPT_QUICK_EXIT.md +++ b/docs/libcurl/opts/CURLOPT_QUICK_EXIT.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_RESOLVE (3) Protocol: - All +Added-in: 7.87.0 --- # NAME @@ -37,6 +38,8 @@ possible (though short-lived) leak of associated resources. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,9 +54,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.87.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_QUOTE.md b/docs/libcurl/opts/CURLOPT_QUOTE.md index 4bdc1913c..58742b7b3 100644 --- a/docs/libcurl/opts/CURLOPT_QUOTE.md +++ b/docs/libcurl/opts/CURLOPT_QUOTE.md @@ -12,6 +12,7 @@ See-also: Protocol: - FTP - SFTP +Added-in: 7.1 --- # NAME @@ -127,6 +128,8 @@ See ln. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -151,10 +154,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY SFTP support added in 7.16.3. *-prefix for SFTP added in 7.24.0 +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK diff --git a/docs/libcurl/opts/CURLOPT_RANDOM_FILE.md b/docs/libcurl/opts/CURLOPT_RANDOM_FILE.md index 6840fbc29..41cc75f20 100644 --- a/docs/libcurl/opts/CURLOPT_RANDOM_FILE.md +++ b/docs/libcurl/opts/CURLOPT_RANDOM_FILE.md @@ -10,6 +10,7 @@ Protocol: - TLS TLS-backend: - OpenSSL +Added-in: 7.7 --- # NAME @@ -28,39 +29,16 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANDOM_FILE, char *path); Deprecated option. It serves no purpose anymore. -Pass a char pointer to a null-terminated filename. The file might be used to -read from to seed the random engine for SSL and more. - -The application does not have to keep the string around after setting this -option. - # DEFAULT NULL, not used -# EXAMPLE - -~~~c -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); - } -} -~~~ - -# AVAILABILITY +# DEPRECATED -Only with OpenSSL versions before 1.1.0. +Deprecated since 7.84.0. -This option was deprecated in 7.84.0. +# %AVAILABILITY% # RETURN VALUE -Returns CURLE_OK on success or -CURLE_OUT_OF_MEMORY if there was insufficient heap space. +Returns CURLE_OK. diff --git a/docs/libcurl/opts/CURLOPT_RANGE.md b/docs/libcurl/opts/CURLOPT_RANGE.md index 0a8343db3..417e77022 100644 --- a/docs/libcurl/opts/CURLOPT_RANGE.md +++ b/docs/libcurl/opts/CURLOPT_RANGE.md @@ -15,6 +15,7 @@ Protocol: - FILE - RTSP - SFTP +Added-in: 7.1 --- # NAME @@ -58,6 +59,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -76,10 +79,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY FILE since 7.18.0, RTSP since 7.20.0 +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK on success or diff --git a/docs/libcurl/opts/CURLOPT_READDATA.md b/docs/libcurl/opts/CURLOPT_READDATA.md index 20eb3c6d4..ae3ac3c48 100644 --- a/docs/libcurl/opts/CURLOPT_READDATA.md +++ b/docs/libcurl/opts/CURLOPT_READDATA.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_WRITEFUNCTION (3) Protocol: - All +Added-in: 7.9.7 --- # NAME @@ -40,7 +41,9 @@ might experience crashes. # DEFAULT -By default, this is a FILE * to stdin. +stdin + +# %PROTOCOLS% # EXAMPLE @@ -65,11 +68,13 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY This option was once known by the older name CURLOPT_INFILE, the name CURLOPT_READDATA(3) was introduced in 7.9.7. +# %AVAILABILITY% + # RETURN VALUE This returns CURLE_OK. diff --git a/docs/libcurl/opts/CURLOPT_READFUNCTION.md b/docs/libcurl/opts/CURLOPT_READFUNCTION.md index 06d2e638a..72e9e75bf 100644 --- a/docs/libcurl/opts/CURLOPT_READFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_READFUNCTION.md @@ -13,6 +13,7 @@ See-also: - CURLOPT_WRITEFUNCTION (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -72,7 +73,9 @@ and it allows for better error checking. # DEFAULT -The default internal read callback is fread(). +fread(3) + +# %PROTOCOLS% # EXAMPLE @@ -111,11 +114,13 @@ int main(int argc, char **argv) } ~~~ -# AVAILABILITY +# HISTORY CURL_READFUNC_PAUSE return code was added in 7.18.0 and CURL_READFUNC_ABORT was added in 7.12.1. +# %AVAILABILITY% + # RETURN VALUE This returns CURLE_OK. diff --git a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.md b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.md index df6cb7163..278e4dcd0 100644 --- a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.md +++ b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_REDIR_PROTOCOLS_STR (3) Protocol: - HTTP +Added-in: 7.19.4 --- # NAME @@ -83,6 +84,8 @@ HTTP, HTTPS, FTP and FTPS (Added in 7.65.2). Older versions defaulted to all protocols except FILE, SCP and since 7.40.0 SMB and SMBS. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -103,10 +106,11 @@ int main(int argc, char **argv) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.85.0. -Added in 7.19.4, before then it would follow all protocols. Deprecated -since 7.85.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.md b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.md index 69c2e7c9f..ea3a78cab 100644 --- a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.md +++ b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.md @@ -12,6 +12,7 @@ See-also: - CURLOPT_REDIR_PROTOCOLS (3) Protocol: - HTTP +Added-in: 7.85.0 --- # NAME @@ -62,6 +63,8 @@ HTTP, HTTPS, FTP and FTPS (Added in 7.65.2). Older versions defaulted to all protocols except FILE, SCP and since 7.40.0 SMB and SMBS. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -81,9 +84,7 @@ int main(int argc, char **argv) } ~~~ -# AVAILABILITY - -Added in 7.85.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_REFERER.md b/docs/libcurl/opts/CURLOPT_REFERER.md index f5ac9a8b3..e4054e4ab 100644 --- a/docs/libcurl/opts/CURLOPT_REFERER.md +++ b/docs/libcurl/opts/CURLOPT_REFERER.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_USERAGENT (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -38,6 +39,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,9 +58,7 @@ int main(void) } ~~~ -# AVAILABILITY - -If built with HTTP support +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.md b/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.md index 582b88fa1..c96f0c352 100644 --- a/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.md +++ b/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_URL (3) Protocol: - HTTP +Added-in: 7.55.0 --- # NAME @@ -37,6 +38,8 @@ other safe guards. That includes white space and control characters. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.55.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RESOLVE.md b/docs/libcurl/opts/CURLOPT_RESOLVE.md index 800e3a82d..f290a1c02 100644 --- a/docs/libcurl/opts/CURLOPT_RESOLVE.md +++ b/docs/libcurl/opts/CURLOPT_RESOLVE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_IPRESOLVE (3) Protocol: - All +Added-in: 7.21.3 --- # NAME @@ -45,13 +46,17 @@ 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. +Specify the host as a single ampersand (`*`) to match all names. This wildcard +is resolved last so any resolve with a specific host and port number is given +priority. + 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 never times out whereas entries added -with "+HOST:..." times out just like ordinary DNS cache entries. +The optional leading plus (`+`) specifies that the new entry should timeout. +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 overrides the former one. @@ -62,7 +67,7 @@ setting of CURLOPT_IPRESOLVE(3) to a different IP version. To remove names from the DNS cache again, to stop providing these fake resolves, include a string in the linked list that uses the format -~~~c +~~~ -HOST:PORT ~~~ @@ -73,6 +78,8 @@ number must exactly match what was added previously. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -97,7 +104,7 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY Added in 7.21.3. Removal support added in 7.42.0. @@ -108,6 +115,8 @@ Support for providing multiple IP addresses per entry was added in 7.59.0. Support for adding non-permanent entries by using the "+" prefix was added in 7.75.0. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.md b/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.md index f1fdc4e98..e6ec836a0 100644 --- a/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.md +++ b/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_RESOLVER_START_FUNCTION (3) Protocol: - All +Added-in: 7.59.0 --- # NAME @@ -34,6 +35,8 @@ CURLOPT_RESOLVER_START_FUNCTION(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.59.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.md b/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.md index 3ff66168d..2be7bcde6 100644 --- a/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_RESOLVER_START_DATA (3) Protocol: - All +Added-in: 7.59.0 --- # NAME @@ -52,6 +53,8 @@ resolve to fail. NULL (No callback) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -77,9 +80,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.59.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RESUME_FROM.md b/docs/libcurl/opts/CURLOPT_RESUME_FROM.md index 34f84e3b8..681c1ace2 100644 --- a/docs/libcurl/opts/CURLOPT_RESUME_FROM.md +++ b/docs/libcurl/opts/CURLOPT_RESUME_FROM.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_RESUME_FROM_LARGE (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -43,6 +44,8 @@ CURLOPT_RESUME_FROM_LARGE(3) instead. 0, not used +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -69,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.md b/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.md index 7326a3df5..061890dd8 100644 --- a/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.md +++ b/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_RESUME_FROM (3) Protocol: - All +Added-in: 7.11.0 --- # NAME @@ -41,6 +42,8 @@ file to the remote target file. 0, not used +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -68,9 +71,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.11.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.md b/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.md index a02cd85ab..7b00069e0 100644 --- a/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.md +++ b/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_RTSP_SERVER_CSEQ (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -35,6 +36,8 @@ increments from this new number henceforth. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,9 +54,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.md b/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.md index 1a2603486..99a94bce4 100644 --- a/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.md +++ b/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_RTSP_STREAM_URI (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -111,6 +112,8 @@ application a chance to run. # DEFAULT +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -128,9 +131,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.md b/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.md index 096132bb3..01ea910a7 100644 --- a/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.md +++ b/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_RTSP_STREAM_URI (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -34,6 +35,8 @@ unimplemented. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -50,9 +53,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.md b/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.md index 39fd1621e..7ff0f7725 100644 --- a/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.md +++ b/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_RTSP_STREAM_URI (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -39,6 +40,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.md b/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.md index ecd2eff2a..5e06afc43 100644 --- a/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.md +++ b/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_RTSP_TRANSPORT (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -43,6 +44,8 @@ option. "*" +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.md b/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.md index da98ee900..6e28650ca 100644 --- a/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.md +++ b/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_RTSP_SESSION_ID (3) Protocol: - RTSP +Added-in: 7.20.0 --- # NAME @@ -38,6 +39,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.20.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.md b/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.md index f7012f27e..751141206 100644 --- a/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.md +++ b/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_USERPWD (3) Protocol: - IMAP +Added-in: 7.66.0 --- # NAME @@ -43,6 +44,8 @@ access to, or a shared mailbox for example. blank +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.66.0. Support for OpenLDAP added in 7.82.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SASL_IR.md b/docs/libcurl/opts/CURLOPT_SASL_IR.md index ebc4c4aff..25d849500 100644 --- a/docs/libcurl/opts/CURLOPT_SASL_IR.md +++ b/docs/libcurl/opts/CURLOPT_SASL_IR.md @@ -11,6 +11,7 @@ See-also: Protocol: - SMTP - IMAP +Added-in: 7.31.0 --- # NAME @@ -46,6 +47,8 @@ SASL-IR CAPABILITY. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -62,9 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.31.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SEEKDATA.md b/docs/libcurl/opts/CURLOPT_SEEKDATA.md index e660cb6a3..fd93aacd2 100644 --- a/docs/libcurl/opts/CURLOPT_SEEKDATA.md +++ b/docs/libcurl/opts/CURLOPT_SEEKDATA.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_STDERR (3) Protocol: - All +Added-in: 7.18.0 --- # NAME @@ -34,6 +35,8 @@ CURLOPT_SEEKFUNCTION(3) option, this is the pointer you get as input. If you do not set this, NULL is passed to the callback. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,8 +64,6 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.18.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.md b/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.md index ac37cc596..120b254d5 100644 --- a/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_STDERR (3) Protocol: - All +Added-in: 7.18.0 --- # NAME @@ -63,7 +64,9 @@ many systems! # DEFAULT -By default, this is NULL and unused. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -91,9 +94,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.18.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.md b/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.md index 6c7d74fc8..03f8eddf3 100644 --- a/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.md +++ b/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.md @@ -15,6 +15,7 @@ Protocol: - SMTP - SFTP - SCP +Added-in: 7.20.0 --- # NAME @@ -46,6 +47,8 @@ This option was formerly known as CURLOPT_FTP_RESPONSE_TIMEOUT. None +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,12 +67,7 @@ int main(void) } ~~~ -# 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. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.md b/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.md index 87e2820ca..57071d6d3 100644 --- a/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.md +++ b/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.md @@ -15,6 +15,7 @@ Protocol: - SMTP - SFTP - SCP +Added-in: 8.6.0 --- # NAME @@ -48,6 +49,8 @@ This is the millisecond version of CURLOPT_SERVER_RESPONSE_TIMEOUT(3). None +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -66,9 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 8.6.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SERVICE_NAME.md b/docs/libcurl/opts/CURLOPT_SERVICE_NAME.md index 8276253b5..87d6c5c0e 100644 --- a/docs/libcurl/opts/CURLOPT_SERVICE_NAME.md +++ b/docs/libcurl/opts/CURLOPT_SERVICE_NAME.md @@ -15,6 +15,7 @@ Protocol: - POP3 - SMTP - LDAP +Added-in: 7.43.0 --- # NAME @@ -43,6 +44,8 @@ option. See above +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,10 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.43.0 for HTTP, 7.49.0 for FTP, IMAP, POP3 and SMTP, -7.82.0 for OpenLDAP. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SHARE.md b/docs/libcurl/opts/CURLOPT_SHARE.md index 308d57af3..4e64cc748 100644 --- a/docs/libcurl/opts/CURLOPT_SHARE.md +++ b/docs/libcurl/opts/CURLOPT_SHARE.md @@ -9,6 +9,7 @@ See-also: - CURLSHOPT_SHARE (3) Protocol: - All +Added-in: 7.10 --- # NAME @@ -47,6 +48,8 @@ Set this option to NULL again to stop using that share object. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -77,9 +80,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.md b/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.md index 678073745..dbf75da3b 100644 --- a/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.md +++ b/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_SOCKOPTFUNCTION (3) Protocol: - All +Added-in: 7.16.0 --- # NAME @@ -30,7 +31,9 @@ argument in the sockopt callback set with CURLOPT_SOCKOPTFUNCTION(3). # DEFAULT -The default value of this parameter is NULL. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.md b/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.md index e35934be1..fbc3d8804 100644 --- a/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_SOCKOPTDATA (3) Protocol: - All +Added-in: 7.16.0 --- # NAME @@ -72,7 +73,9 @@ not attempt to connect (again). # DEFAULT -By default, this callback is NULL and unused. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -120,10 +123,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.0. The *CURL_SOCKOPT_ALREADY_CONNECTED* return code was -added in 7.21.5. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.md b/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.md index 937da2c02..9a965933f 100644 --- a/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.md +++ b/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_PROXYTYPE (3) Protocol: - All +Added-in: 7.55.0 --- # NAME @@ -36,6 +37,8 @@ password with the CURLOPT_PROXYUSERPWD(3) option. CURLAUTH_BASIC|CURLAUTH_GSSAPI +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.55.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.md b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.md index b46713017..5bb2e42e5 100644 --- a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.md +++ b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.md @@ -6,9 +6,10 @@ Section: 3 Source: libcurl See-also: - CURLOPT_PROXY (3) - - CURLOPT_SOCKS5_GSSAPI_SERVICE (3) + - CURLOPT_PROXY_SERVICE_NAME (3) Protocol: - All +Added-in: 7.19.4 --- # NAME @@ -35,6 +36,8 @@ negotiation. ? +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -52,9 +55,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.md b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.md index 86879589b..fe0c22df6 100644 --- a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.md +++ b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_PROXYTYPE (3) Protocol: - All +Added-in: 7.19.4 --- # NAME @@ -39,6 +40,8 @@ option. See above +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -56,9 +59,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.49.0 -Added in 7.19.4, deprecated in 7.49.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.md b/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.md index e83d0a088..f111efe64 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.md +++ b/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.md @@ -11,6 +11,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.16.1 --- # NAME @@ -40,6 +41,8 @@ authentication. CURLSSH_AUTH_ANY (all available) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -CURLSSH_AUTH_HOST was added in 7.16.1, CURLSSH_AUTH_AGENT was added in 7.28.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.md b/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.md index 884ef28e2..749dedf20 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.md +++ b/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.md @@ -10,6 +10,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.56.0 --- # NAME @@ -35,6 +36,8 @@ may or may not do it. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +56,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.56.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.md b/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.md index 858c59e5e..4629bb632 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.md +++ b/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.md @@ -1,7 +1,7 @@ --- c: Copyright (C) Daniel Stenberg, , et al. SPDX-License-Identifier: curl -Title: CURLOPT_SSH_KEYDATA +Title: CURLOPT_SSH_HOSTKEYDATA Section: 3 Source: libcurl See-also: @@ -9,6 +9,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.84.0 --- # NAME @@ -32,6 +33,8 @@ the callback set with CURLOPT_SSH_HOSTKEYFUNCTION(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -63,9 +66,11 @@ int main(void) } ~~~ -# AVAILABILITY +# NOTES + +Works only with the libssh2 backend. -Added in 7.84.0, works only with libssh2 backend. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.md b/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.md index 2c12fb877..ecaa078a1 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.md @@ -10,6 +10,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.84.0 --- # NAME @@ -58,6 +59,8 @@ the host key is rejected, the connection is canceled. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -88,9 +91,11 @@ int main(void) } ~~~ -# AVAILABILITY +# NOTES + +Work only with the libssh2 backend. -Added in 7.84.0 , work only with libssh2 backend. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.md b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.md index fd045f9f3..403570a4e 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.md +++ b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.md @@ -12,6 +12,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.17.1 --- # NAME @@ -43,6 +44,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.17.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.md b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.md index 15e12d3f6..878e012e0 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.md +++ b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.md @@ -11,6 +11,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.80.0 --- # NAME @@ -36,6 +37,8 @@ does not match the hash the remote host provides. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,11 +56,12 @@ int main(void) } ~~~ -# AVAILABILITY +# NOTES -Added in 7.80.0 Requires the libssh2 backend. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.md b/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.md index 8e35a9315..64d98c41f 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.md +++ b/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.md @@ -10,6 +10,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.19.6 --- # NAME @@ -33,6 +34,8 @@ callback set with CURLOPT_SSH_KEYFUNCTION(3). NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -65,9 +68,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.6 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.md b/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.md index ce71cf419..bf7f03710 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.md @@ -10,6 +10,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.19.6 --- # NAME @@ -109,6 +110,8 @@ up from scratch again. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -142,9 +145,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.6 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.md b/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.md index 86828c0a6..a099af3a2 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.md +++ b/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.md @@ -10,6 +10,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.19.6 --- # NAME @@ -40,6 +41,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.6 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.md b/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.md index fc24eb00b..fe7e5207e 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.md +++ b/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.md @@ -10,6 +10,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.16.1 --- # NAME @@ -47,6 +48,8 @@ option. As explained above +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -65,9 +68,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.md b/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.md index 0c27b7edf..f6d2fb3c1 100644 --- a/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.md +++ b/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.md @@ -10,6 +10,7 @@ See-also: Protocol: - SFTP - SCP +Added-in: 7.16.1 --- # NAME @@ -43,6 +44,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,10 +63,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY The "" trick was added in 7.26.0 +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or diff --git a/docs/libcurl/opts/CURLOPT_SSLCERT.md b/docs/libcurl/opts/CURLOPT_SSLCERT.md index f7d3b28f1..c9b3ab64b 100644 --- a/docs/libcurl/opts/CURLOPT_SSLCERT.md +++ b/docs/libcurl/opts/CURLOPT_SSLCERT.md @@ -17,6 +17,7 @@ TLS-backend: - Schannel - Secure Transport - wolfSSL +Added-in: 7.1 --- # NAME @@ -65,6 +66,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -83,9 +86,7 @@ int main(void) } ~~~ -# AVAILABILITY - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.md b/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.md index debbcd160..d08273550 100644 --- a/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.md +++ b/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.md @@ -16,6 +16,7 @@ TLS-backend: - Schannel - Secure Transport - wolfSSL +Added-in: 7.9.3 --- # NAME @@ -47,6 +48,8 @@ option. "PEM" +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -66,9 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -If built TLS enabled. Added in 7.9.3 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.md b/docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.md index 80a50c72f..88f60eb2a 100644 --- a/docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.md +++ b/docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.md @@ -15,6 +15,7 @@ TLS-backend: - Secure Transport - Schannel - mbedTLS +Added-in: 7.71.0 --- # NAME @@ -49,6 +50,8 @@ expects a filename as input. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -75,10 +78,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.71.0. This option is supported by the OpenSSL, Secure Transport, -Schannel and mbedTLS (since 7.78.0) backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSLENGINE.md b/docs/libcurl/opts/CURLOPT_SSLENGINE.md index 44cd44cbe..2e66aa8d0 100644 --- a/docs/libcurl/opts/CURLOPT_SSLENGINE.md +++ b/docs/libcurl/opts/CURLOPT_SSLENGINE.md @@ -12,6 +12,7 @@ Protocol: - TLS TLS-backend: - OpenSSL +Added-in: 7.9.3 --- # NAME @@ -38,6 +39,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Only if OpenSSL is built with engine support. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.md b/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.md index 963b9c1af..72e908b76 100644 --- a/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.md +++ b/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.md @@ -11,6 +11,7 @@ Protocol: - TLS TLS-backend: - OpenSSL +Added-in: 7.9.3 --- # NAME @@ -36,6 +37,8 @@ This option has no effect unless set after CURLOPT_SSLENGINE(3). None +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +56,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Only if the SSL backend is OpenSSL built with engine support. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSLKEY.md b/docs/libcurl/opts/CURLOPT_SSLKEY.md index f87e8eb67..27f0f347c 100644 --- a/docs/libcurl/opts/CURLOPT_SSLKEY.md +++ b/docs/libcurl/opts/CURLOPT_SSLKEY.md @@ -15,6 +15,7 @@ TLS-backend: - mbedTLS - Schannel - wolfSSL +Added-in: 7.9.3 --- # NAME @@ -46,6 +47,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.md b/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.md index 182f77748..73e1a7547 100644 --- a/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.md +++ b/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.md @@ -14,6 +14,7 @@ TLS-backend: - OpenSSL - BearSSL - wolfSSL +Added-in: 7.9.3 --- # NAME @@ -45,6 +46,8 @@ option. "PEM" +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.md b/docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.md index 4ef3b0751..10b047984 100644 --- a/docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.md +++ b/docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.md @@ -11,6 +11,7 @@ Protocol: - TLS TLS-backend: - OpenSSL +Added-in: 7.71.0 --- # NAME @@ -43,6 +44,8 @@ filename as input. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -77,9 +80,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.71.0. This option is supported by the OpenSSL backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSLVERSION.md b/docs/libcurl/opts/CURLOPT_SSLVERSION.md index c483b8268..e39159696 100644 --- a/docs/libcurl/opts/CURLOPT_SSLVERSION.md +++ b/docs/libcurl/opts/CURLOPT_SSLVERSION.md @@ -13,6 +13,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.1 --- # NAME @@ -71,10 +72,12 @@ TLS v1.2 or later (Added in 7.34.0) TLS v1.3 or later (Added in 7.52.0) +## + The maximum TLS version can be set by using *one* of the CURL_SSLVERSION_MAX_ macros below. It is also possible to OR *one* of the CURL_SSLVERSION_ macros with *one* of the CURL_SSLVERSION_MAX_ macros. -The MAX macros are not supported for WolfSSL. +The MAX macros are not supported for wolfSSL. ## CURL_SSLVERSION_MAX_DEFAULT @@ -103,6 +106,8 @@ The flag defines maximum supported TLS version as TLS v1.2. The flag defines maximum supported TLS version as TLS v1.3. (Added in 7.54.0) +## + In versions of curl prior to 7.54 the CURL_SSLVERSION_TLS options were documented to allow *only* the specified TLS version, but behavior was inconsistent depending on the TLS library. @@ -111,6 +116,8 @@ inconsistent depending on the TLS library. CURL_SSLVERSION_DEFAULT +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -129,7 +136,7 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY SSLv2 and SSLv3 are refused completely since curl 7.77.0 @@ -138,6 +145,8 @@ vary depending on which backend libcurl has been built to use. SSLv3 is disabled by default since 7.39.0. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.md b/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.md index 3bf09d8db..c8923e66b 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.md +++ b/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.md @@ -19,6 +19,8 @@ TLS-backend: - Secure Transport - wolfSSL - GnuTLS + - mbedTLS +Added-in: 7.9 --- # NAME @@ -45,15 +47,16 @@ For OpenSSL and GnuTLS valid examples of cipher lists include **RC4-SHA**, **SHA1+DES**, **TLSv1** and **DEFAULT**. The default list is normally set when you compile OpenSSL. -For WolfSSL, valid examples of cipher lists include **ECDHE-RSA-RC4-SHA**, +For wolfSSL, valid examples of cipher lists include **ECDHE-RSA-RC4-SHA**, **AES256-SHA:AES256-SHA256**, etc. -For BearSSL, valid examples of cipher lists include +For mbedTLS and BearSSL, valid examples of cipher lists include **ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256**, or when using IANA names **TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256**, -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. +etc. With mbedTLS and 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. For Schannel, you can use this option to set algorithms but not specific cipher suites. Refer to the ciphers lists document for algorithms. @@ -67,7 +70,9 @@ option. # DEFAULT -NULL, use internal default +NULL, use built-in list + +# %PROTOCOLS% # EXAMPLE @@ -85,11 +90,11 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY -Added in 7.9, in 7.83.0 for BearSSL +Added in 7.9, in 7.83.0 for BearSSL, in 8.8.0 for mbedTLS -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.md b/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.md index 5e74f5a36..2dcdd57e1 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.md +++ b/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.md @@ -14,6 +14,7 @@ TLS-backend: - wolfSSL - mbedTLS - BearSSL +Added-in: 7.10.6 --- # NAME @@ -38,6 +39,8 @@ parameter. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -113,11 +116,13 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY Added in 7.11.0 for OpenSSL, in 7.42.0 for wolfSSL, in 7.54.0 for mbedTLS, in 7.83.0 in BearSSL. +# %AVAILABILITY% + # RETURN VALUE CURLE_OK if supported; or an error such as: diff --git a/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.md b/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.md index 64732c1a7..f461209bc 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.md @@ -5,9 +5,12 @@ Title: CURLOPT_SSL_CTX_FUNCTION Section: 3 Source: libcurl See-also: + - CURLOPT_CA_CACHE_TIMEOUT (3) + - CURLOPT_CAINFO (3) + - CURLOPT_CAINFO_BLOB (3) - CURLOPT_SSL_CTX_DATA (3) + - CURLOPT_SSL_VERIFYHOST (3) - CURLOPT_SSL_VERIFYPEER (3) - - CURLOPT_CAINFO (3) Protocol: - TLS TLS-backend: @@ -15,6 +18,7 @@ TLS-backend: - wolfSSL - mbedTLS - BearSSL +Added-in: 7.10.6 --- # NAME @@ -78,10 +82,16 @@ callback function has returned. Your application must not assume that it can keep using the SSL context or data derived from it once this function is completed. +For libcurl builds using TLS backends that support CA caching and +CURLOPT_CA_CACHE_TIMEOUT(3) is not set to zero, multiple calls to this +callback may be done with the same CA store in memory. + # DEFAULT NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -157,10 +167,7 @@ int main(void) } ~~~ -# AVAILABILITY - -OpenSSL (added in 7.11.0), wolfSSL (added in 7.42.0), mbedTLS (added in -7.54.0) or BearSSL (added in 7.83.0) +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.md b/docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.md index e68ac37cd..d1459c420 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.md +++ b/docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.md @@ -13,6 +13,7 @@ Protocol: TLS-backend: - OpenSSL - wolfSSL +Added-in: 7.73.0 --- # NAME @@ -37,6 +38,8 @@ the SSL backend libcurl is built to use supports it). "", embedded in SSL backend +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +56,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.73.0. Supported by the OpenSSL backend. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.md b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.md index f53a6fc8d..e521c543d 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.md +++ b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.md @@ -11,6 +11,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.36.0 --- # NAME @@ -35,6 +36,8 @@ is built to use supports it), which can be used to negotiate http2. 1, enabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,9 +54,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.36.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.md b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.md index 26c79f33d..65ade8bd4 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.md +++ b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.md @@ -11,6 +11,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.36.0 --- # NAME @@ -27,7 +28,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_NPN, long npn); # DESCRIPTION -Deprecated in 7.86.0. Setting this option has no function. +Deprecated since 7.86.0. Setting this option has no function. Pass a long as parameter, 0 or 1 where 1 is for enable and 0 for disable. This option enables/disables NPN in the SSL handshake (if the SSL backend libcurl @@ -37,6 +38,8 @@ is built to use supports it), which can be used to negotiate http2. 1, enabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,9 +56,11 @@ int main(void) } ~~~ -# AVAILABILITY +# DEPRECATED + +Deprecated since 7.86.0. -Added in 7.36.0. Deprecated in 7.86.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.md b/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.md index 7758f0d90..83b6b69da 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.md +++ b/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.md @@ -10,6 +10,7 @@ Protocol: - TLS TLS-backend: - Secure Transport +Added-in: 7.42.0 --- # NAME @@ -37,6 +38,8 @@ when performing a full handshake. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,10 +54,7 @@ int main(void) } ~~~ -# AVAILABILITY - -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. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.md b/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.md index ddf278e6f..21e0d75e3 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.md +++ b/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.md @@ -12,6 +12,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.25.0 --- # NAME @@ -89,6 +90,8 @@ could be a privacy violation and unexpected. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -107,9 +110,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.25.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.md b/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.md index 364eb0409..1ed5a91f1 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.md +++ b/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.md @@ -13,6 +13,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.16.0 --- # NAME @@ -40,6 +41,8 @@ wild that may require you to disable this in order for you to succeed. 1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.16.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.md b/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.md index f432fecbd..30b1525fe 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.md +++ b/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.md @@ -12,6 +12,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.8.1 --- # NAME @@ -28,40 +29,27 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYHOST, long verify); # DESCRIPTION -Pass a long as parameter specifying what to *verify*. +Pass a long set to 2L to make libcurl verify the host in the server's TLS +certificate. -This option determines whether libcurl verifies that the server cert is for -the server it is known as. +When negotiating a TLS connection, the server sends a certificate indicating +its identity. -When negotiating TLS and SSL connections, the server sends a certificate -indicating its identity. +When CURLOPT_SSL_VERIFYHOST(3) is set to 1 or 2, the server certificate must +indicate that it was made for the hostname or address curl connects to, or the +connection fails. Simply put, it means it has to have the same name in the +certificate as is used in the URL you operate against. -When CURLOPT_SSL_VERIFYHOST(3) is 2, that certificate must indicate that -the server is the server to which you meant to connect, or the connection -fails. Simply put, it means it has to have the same name in the certificate as -is in the URL you operate against. - -Curl considers the server the intended one when the Common Name field or a +curl considers the server the intended one when the Common Name field or a Subject Alternate Name field in the certificate matches the hostname in the -URL to which you told Curl to connect. - -If *verify* 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. +URL to which you told curl to connect. -From 7.28.1 to 7.65.3: setting it to 1 made curl_easy_setopt(3) return -an error and leaving the flag untouched. +When the *verify* value is 0, the connection succeeds regardless of the names +in the certificate. Use that ability with caution, -From 7.66.0: treats 1 and 2 the same. - -When the *verify* value is 0, the connection succeeds regardless of the -names in the certificate. Use that ability with caution! - -The default value for this option is 2. - -This option controls checking the server's certificate's claimed identity. -The server could be lying. To control lying, see CURLOPT_SSL_VERIFYPEER(3). +This option controls checking the server's certificate's claimed identity. The +separate CURLOPT_SSL_VERIFYPEER(3) options enables/disables verification that +the certificate is signed by a trusted Certificate Authority. WARNING: disabling verification of the certificate allows bad guys to man-in-the-middle the communication without you knowing it. Disabling @@ -74,18 +62,31 @@ 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. +# MATCHING + +A certificate can have the name as a wildcard. The only asterisk (`*`) must +then be the left-most character and it must be followed by a period. The +wildcard must further contain more than one period as it cannot be set for a +top-level domain. + +A certificate can be set for a numerical IP address (IPv4 or IPv6), but then +it should be a Subject Alternate Name kind and its type should correctly +identify the field as an IP address. + # LIMITATIONS -Secure Transport: If *verify* 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 +Secure Transport: If *verify* 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. +hostname, or forwarding the request to a specific origin server. Some +hostnames may be inaccessible if SNI is not sent. # DEFAULT 2 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -103,12 +104,18 @@ int main(void) } ~~~ -# AVAILABILITY +# %AVAILABILITY% -If built TLS enabled. +# HISTORY + +In 7.28.0 and earlier: the value 1 was 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(3) return +an error and leaving the flag untouched. + +From 7.66.0: libcurl treats 1 and 2 to this option the same. # RETURN VALUE Returns CURLE_OK if TLS is supported, and CURLE_UNKNOWN_OPTION if not. - -If 1 is set as argument, *CURLE_BAD_FUNCTION_ARGUMENT* is returned. diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.md b/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.md index 214da41cf..4d4bf7c6b 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.md +++ b/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.md @@ -15,6 +15,7 @@ Protocol: - TLS TLS-backend: - All +Added-in: 7.4.2 --- # NAME @@ -72,6 +73,8 @@ malicious servers. 1 - enabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -89,9 +92,7 @@ int main(void) } ~~~ -# AVAILABILITY - -If built TLS enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.md b/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.md index 7f6b1a019..d9ee57c0d 100644 --- a/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.md +++ b/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.md @@ -13,6 +13,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.41.0 --- # NAME @@ -41,6 +42,8 @@ extension, the verification fails. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,10 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.41.0. This option is currently only supported by the OpenSSL and -GnuTLS TLS backends. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_STDERR.md b/docs/libcurl/opts/CURLOPT_STDERR.md index f38aba25e..368944334 100644 --- a/docs/libcurl/opts/CURLOPT_STDERR.md +++ b/docs/libcurl/opts/CURLOPT_STDERR.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_VERBOSE (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -38,6 +39,8 @@ application. A work-around is to instead use CURLOPT_DEBUGFUNCTION(3). stderr +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.md b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.md index 7342f3bcf..99664423d 100644 --- a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.md +++ b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_STREAM_WEIGHT (3) Protocol: - HTTP +Added-in: 7.46.0 --- # NAME @@ -47,6 +48,8 @@ option to have an actual effect. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -66,9 +69,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.46.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.md b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.md index 8d109fb19..158c831a1 100644 --- a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.md +++ b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_STREAM_WEIGHT (3) Protocol: - HTTP +Added-in: 7.46.0 --- # NAME @@ -50,6 +51,8 @@ option to have an actual effect. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -69,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.46.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.md b/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.md index fdd2a1840..99558a199 100644 --- a/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.md +++ b/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_STREAM_DEPENDS_E (3) Protocol: - HTTP +Added-in: 7.46.0 --- # NAME @@ -47,8 +48,9 @@ streams). # DEFAULT -If nothing is set, the HTTP/2 protocol itself uses its own default which is -16. +16 + +# %PROTOCOLS% # EXAMPLE @@ -70,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.46.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.md b/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.md index b6357b503..b05824630 100644 --- a/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.md +++ b/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_PROXY (3) Protocol: - All +Added-in: 7.54.0 --- # NAME @@ -70,6 +71,8 @@ Content-Type: application/json 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -92,9 +95,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.54.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.md b/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.md index 42b44a567..8665c39d2 100644 --- a/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.md +++ b/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.md @@ -8,6 +8,7 @@ See-also: - CURLOPT_SSL_FALSESTART (3) Protocol: - All +Added-in: 7.49.0 --- # NAME @@ -37,6 +38,8 @@ Fast Open is also known to be problematic on or across certain networks. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -51,10 +54,11 @@ int main(void) } ~~~ -# AVAILABILITY +# NOTES + +This option is only supported on Linux and macOS 10.11 or later. -Added in 7.49.0. This option is currently only supported on Linux and macOS -10.11 or later. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.md b/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.md index e9e80ac6a..3d9da660d 100644 --- a/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.md +++ b/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.md @@ -9,8 +9,10 @@ See-also: - CURLOPT_MAX_RECV_SPEED_LARGE (3) - CURLOPT_TCP_KEEPIDLE (3) - CURLOPT_TCP_KEEPINTVL (3) + - CURLOPT_TCP_KEEPCNT (3) Protocol: - - All + - TCP +Added-in: 7.25.0 --- # NAME @@ -29,14 +31,16 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPALIVE, long probe); Pass a long. If set to 1, TCP keepalive probes are used. The delay and frequency of these probes can be controlled by the -CURLOPT_TCP_KEEPIDLE(3) and CURLOPT_TCP_KEEPINTVL(3) options, -provided the operating system supports them. Set to 0 (default behavior) to -disable keepalive probes +CURLOPT_TCP_KEEPIDLE(3), CURLOPT_TCP_KEEPINTVL(3), and CURLOPT_TCP_KEEPCNT(3) +options, provided the operating system supports them. Set to 0 (default behavior) +to disable keepalive probes. # DEFAULT 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,14 +59,15 @@ int main(void) /* interval time between keep-alive probes: 60 seconds */ curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L); + /* maximum number of keep-alive probes: 3 */ + curl_easy_setopt(curl, CURLOPT_TCP_KEEPCNT, 3L); + curl_easy_perform(curl); } } ~~~ -# AVAILABILITY - -Added in 7.25.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPCNT.md b/docs/libcurl/opts/CURLOPT_TCP_KEEPCNT.md new file mode 100644 index 000000000..5a03f3cff --- /dev/null +++ b/docs/libcurl/opts/CURLOPT_TCP_KEEPCNT.md @@ -0,0 +1,74 @@ +--- +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Title: CURLOPT_TCP_KEEPCNT +Section: 3 +Source: libcurl +See-also: + - CURLOPT_TCP_KEEPALIVE (3) + - CURLOPT_TCP_KEEPIDLE (3) + - CURLOPT_TCP_KEEPINTVL (3) +Protocol: + - TCP +Added-in: 8.9.0 +--- + +# NAME + +CURLOPT_TCP_KEEPCNT - Maximum number of TCP keep-alive probes + +# SYNOPSIS + +~~~c +#include + +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPCNT, long cnt); +~~~ + +# DESCRIPTION + +Pass a long. Sets the number of probes to send before dropping +the connection. Not all operating systems support this option. +(Added in 8.9.0) + +The maximum value this option accepts is INT_MAX or whatever your +system allows. +Any larger value is capped to this amount. + +# DEFAULT + +9 + +# %PROTOCOLS% + +# EXAMPLE + +~~~c +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); + + /* 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); + + /* maximum number of keep-alive probes: 3 */ + curl_easy_setopt(curl, CURLOPT_TCP_KEEPCNT, 3L); + + curl_easy_perform(curl); + } +} +~~~ + +# %AVAILABILITY% + +# RETURN VALUE + +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.md b/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.md index 5f8841747..370ace4a2 100644 --- a/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.md +++ b/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.md @@ -7,8 +7,10 @@ Source: libcurl See-also: - CURLOPT_TCP_KEEPALIVE (3) - CURLOPT_TCP_KEEPINTVL (3) + - CURLOPT_TCP_KEEPCNT (3) Protocol: - - All + - TCP +Added-in: 7.25.0 --- # NAME @@ -36,6 +38,8 @@ this amount. 60 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,14 +58,15 @@ int main(void) /* interval time between keep-alive probes: 60 seconds */ curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L); + /* maximum number of keep-alive probes: 3 */ + curl_easy_setopt(curl, CURLOPT_TCP_KEEPCNT, 3L); + curl_easy_perform(curl); } } ~~~ -# AVAILABILITY - -Added in 7.25.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.md b/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.md index 405b6ec82..9d0ebc7a8 100644 --- a/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.md +++ b/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.md @@ -7,8 +7,10 @@ Source: libcurl See-also: - CURLOPT_TCP_KEEPALIVE (3) - CURLOPT_TCP_KEEPIDLE (3) + - CURLOPT_TCP_KEEPCNT (3) Protocol: - - All + - TCP +Added-in: 7.25.0 --- # NAME @@ -35,6 +37,8 @@ this amount. 60 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -53,14 +57,15 @@ int main(void) /* interval time between keep-alive probes: 60 seconds */ curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L); + /* maximum number of keep-alive probes: 3 */ + curl_easy_setopt(curl, CURLOPT_TCP_KEEPCNT, 3L); + curl_easy_perform(curl); } } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TCP_NODELAY.md b/docs/libcurl/opts/CURLOPT_TCP_NODELAY.md index a5b15abbf..6b30b5465 100644 --- a/docs/libcurl/opts/CURLOPT_TCP_NODELAY.md +++ b/docs/libcurl/opts/CURLOPT_TCP_NODELAY.md @@ -9,7 +9,8 @@ See-also: - CURLOPT_SOCKOPTFUNCTION (3) - CURLOPT_TCP_KEEPALIVE (3) Protocol: - - All + - TCP +Added-in: 7.11.2 --- # NAME @@ -45,6 +46,8 @@ overdone. 1 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,11 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +The default was changed to 1 from 0 in 7.50.2. -Always. The default was changed to 1 from 0 in 7.50.2. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.md b/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.md index 9e45df837..34717cbed 100644 --- a/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.md +++ b/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_QUOTE (3) Protocol: - TELNET +Added-in: 7.7 --- # NAME @@ -35,6 +36,8 @@ standard for details. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -55,9 +58,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with TELNET +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.md b/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.md index 1b5c9ae6f..ab85fe45f 100644 --- a/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.md +++ b/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.md @@ -8,6 +8,7 @@ See-also: - CURLOPT_MAXFILESIZE (3) Protocol: - TFTP +Added-in: 7.19.4 --- # NAME @@ -35,6 +36,8 @@ is used. 512 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -52,9 +55,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.md b/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.md index 953702696..098ee3944 100644 --- a/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.md +++ b/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.md @@ -8,6 +8,7 @@ See-also: - CURLOPT_TFTP_BLKSIZE (3) Protocol: - TFTP +Added-in: 7.48.0 --- # NAME @@ -35,6 +36,8 @@ CURLOPT_TFTP_BLKSIZE(3) is ignored. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -67,9 +70,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.48.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TIMECONDITION.md b/docs/libcurl/opts/CURLOPT_TIMECONDITION.md index b4bdb4fa2..43c679bd6 100644 --- a/docs/libcurl/opts/CURLOPT_TIMECONDITION.md +++ b/docs/libcurl/opts/CURLOPT_TIMECONDITION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_TIMEVALUE (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -39,6 +40,8 @@ option can be used after a transfer to learn if a zero-byte successful CURL_TIMECOND_NONE (0) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TIMEOUT.md b/docs/libcurl/opts/CURLOPT_TIMEOUT.md index c35bb4076..0dc17f036 100644 --- a/docs/libcurl/opts/CURLOPT_TIMEOUT.md +++ b/docs/libcurl/opts/CURLOPT_TIMEOUT.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_TIMEOUT_MS (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -59,7 +60,9 @@ signals to be used unless CURLOPT_NOSIGNAL(3) is set. # DEFAULT -Default timeout is 0 (zero) which means it never times out during transfer. +0 (zero) which means it never times out during transfer. + +# %PROTOCOLS% # EXAMPLE @@ -78,9 +81,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.md b/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.md index 8f13480d3..e02261d5b 100644 --- a/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.md +++ b/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_TIMEOUT (3) Protocol: - All +Added-in: 7.16.2 --- # NAME @@ -34,7 +35,9 @@ See CURLOPT_TIMEOUT(3) for details. # DEFAULT -Default timeout is 0 (zero) which means it never times out during transfer. +0 (zero) which means it never times out during transfer. + +# %PROTOCOLS% # EXAMPLE @@ -53,9 +56,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TIMEVALUE.md b/docs/libcurl/opts/CURLOPT_TIMEVALUE.md index 5558e6d17..ef9b9dab1 100644 --- a/docs/libcurl/opts/CURLOPT_TIMEVALUE.md +++ b/docs/libcurl/opts/CURLOPT_TIMEVALUE.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_TIMEVALUE_LARGE (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -29,7 +30,7 @@ Pass a long *val* as parameter. This should be the time counted as seconds since 1 Jan 1970, and the time is used in a condition as specified with CURLOPT_TIMECONDITION(3). -On systems with 32 bit 'long' variables (such as Windows), this option cannot +On systems with 32-bit 'long' variables (such as Windows), this option cannot set dates beyond the year 2038. Consider CURLOPT_TIMEVALUE_LARGE(3) instead. @@ -37,6 +38,8 @@ instead. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -58,9 +61,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.md b/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.md index cd16c7589..9ae16e4e0 100644 --- a/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.md +++ b/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_TIMEVALUE (3) Protocol: - HTTP +Added-in: 7.59.0 --- # NAME @@ -31,14 +32,16 @@ Pass a curl_off_t *val* as parameter. This should be the time counted as seconds since 1 Jan 1970, and the time is used in a condition as specified with CURLOPT_TIMECONDITION(3). -The difference between this option and CURLOPT_TIMEVALUE(3) is the type -of the argument. On systems where 'long' is only 32 bit wide, this option has -to be used to set dates beyond the year 2038. +The difference between this option and CURLOPT_TIMEVALUE(3) is the type of the +argument. On systems where 'long' is only 32 bits wide, this option has to be +used to set dates beyond the year 2038. # DEFAULT 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.59.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.md b/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.md index 779497243..f9320560d 100644 --- a/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.md +++ b/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.md @@ -15,8 +15,8 @@ Protocol: - TLS TLS-backend: - OpenSSL - - rustls - Schannel +Added-in: 7.61.0 --- # NAME @@ -52,7 +52,9 @@ option. # DEFAULT -NULL, use internal default +NULL, use internal built-in + +# %PROTOCOLS% # EXAMPLE @@ -71,12 +73,14 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY Added in 7.61.0 for OpenSSL. Available when built with OpenSSL \>= 1.1.1. Added in 7.85.0 for Schannel. +# %AVAILABILITY% + # RETURN VALUE Returns CURLE_OK if supported, CURLE_NOT_BUILT_IN otherwise. diff --git a/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.md b/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.md index 6a9a83829..f97108a96 100644 --- a/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.md +++ b/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.md @@ -13,6 +13,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.21.4 --- # NAME @@ -31,18 +32,20 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_PASSWORD, char *pwd); Pass a char pointer as parameter, which should point to the null-terminated password to use for the TLS authentication method specified with the -CURLOPT_TLSAUTH_TYPE(3) option. Requires that the -CURLOPT_TLSAUTH_USERNAME(3) option also be set. +CURLOPT_TLSAUTH_TYPE(3) option. Requires that the CURLOPT_TLSAUTH_USERNAME(3) +option also be set. The application does not have to keep the string around after setting this option. -This feature relies in TLS SRP which does not work with TLS 1.3. +This feature relies on TLS SRP which does not work with TLS 1.3. # DEFAULT NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -61,9 +64,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.4, with the OpenSSL and GnuTLS backends only +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.md b/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.md index 0611334e4..52c38a20d 100644 --- a/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.md +++ b/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.md @@ -12,6 +12,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.21.4 --- # NAME @@ -36,11 +37,7 @@ the method of the TLS authentication. Supported method is "SRP". TLS-SRP authentication. Secure Remote Password authentication for TLS is defined in RFC 5054 and provides mutual authentication if both sides have a shared secret. To use TLS-SRP, you must also set the -CURLOPT_TLSAUTH_USERNAME(3) and CURLOPT_TLSAUTH_PASSWORD(3) -options. - -The application does not have to keep the string around after setting this -option. +CURLOPT_TLSAUTH_USERNAME(3) and CURLOPT_TLSAUTH_PASSWORD(3) options. TLS SRP does not work with TLS 1.3. @@ -48,6 +45,8 @@ TLS SRP does not work with TLS 1.3. blank +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -66,10 +65,7 @@ int main(void) } ~~~ -# AVAILABILITY - -You need to build libcurl with GnuTLS or OpenSSL with TLS-SRP support for this -to work. Added in 7.21.4 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.md b/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.md index c69ac8167..6715f75f1 100644 --- a/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.md +++ b/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.md @@ -12,6 +12,7 @@ Protocol: TLS-backend: - OpenSSL - GnuTLS +Added-in: 7.21.4 --- # NAME @@ -30,18 +31,20 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_USERNAME, char *user); Pass a char pointer as parameter, which should point to the null-terminated username to use for the TLS authentication method specified with the -CURLOPT_TLSAUTH_TYPE(3) option. Requires that the -CURLOPT_TLSAUTH_PASSWORD(3) option also be set. +CURLOPT_TLSAUTH_TYPE(3) option. Requires that the CURLOPT_TLSAUTH_PASSWORD(3) +option also be set. The application does not have to keep the string around after setting this option. -This feature relies in TLS SRP which does not work with TLS 1.3. +This feature relies on TLS SRP which does not work with TLS 1.3. # DEFAULT NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.4, with the OpenSSL and GnuTLS backends only +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TRAILERDATA.md b/docs/libcurl/opts/CURLOPT_TRAILERDATA.md index 2eceb16e7..bcc675303 100644 --- a/docs/libcurl/opts/CURLOPT_TRAILERDATA.md +++ b/docs/libcurl/opts/CURLOPT_TRAILERDATA.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_WRITEFUNCTION (3) Protocol: - HTTP +Added-in: 7.64.0 --- # NAME @@ -31,6 +32,8 @@ Data pointer to be passed to the HTTP trailer callback function. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -48,9 +51,7 @@ int main(void) } ~~~ -# AVAILABILITY - -This option was added in curl 7.64.0 and is present if HTTP support is enabled +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.md b/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.md index a6cd7fa5f..9c06a598c 100644 --- a/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_WRITEFUNCTION (3) Protocol: - HTTP +Added-in: 7.64.0 --- # NAME @@ -59,6 +60,8 @@ without any interruptions. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c static int trailer_cb(struct curl_slist **tr, void *data) @@ -77,7 +80,7 @@ int main(void) /* Set the URL of the request */ curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/"); /* Now set it as a put */ - curl_easy_setopt(curl, CURLOPT_PUT, 1L); + curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); /* Assuming we have a function that returns the data to be pushed Let that function be read_cb */ @@ -99,9 +102,8 @@ int main(void) } } ~~~ -# AVAILABILITY -This option was added in curl 7.64.0 and is present if HTTP support is enabled. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.md b/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.md index 9506c96ed..bde3b3164 100644 --- a/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.md +++ b/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.md @@ -8,6 +8,7 @@ See-also: - CURLOPT_CRLF (3) Protocol: - All +Added-in: 7.1.1 --- # NAME @@ -38,6 +39,8 @@ simply sets the mode to ASCII and performs a standard transfer. 0, disabled +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with FTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.md b/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.md index 6494d45d4..a66784560 100644 --- a/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.md +++ b/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_HTTP_TRANSFER_DECODING (3) Protocol: - HTTP +Added-in: 7.21.6 --- # NAME @@ -43,6 +44,8 @@ by both HTTP clients and HTTP servers. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -57,9 +60,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.6 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.md b/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.md index fff993753..f5197ee62 100644 --- a/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.md +++ b/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.md @@ -10,6 +10,7 @@ See-also: - unix (7) Protocol: - All +Added-in: 7.40.0 --- # NAME @@ -47,7 +48,9 @@ option. # DEFAULT -Default is NULL, meaning that no Unix domain sockets are used. +NULL - no Unix domain sockets are used. + +# %PROTOCOLS% # EXAMPLE @@ -75,9 +78,7 @@ you can use the proc filesystem to bypass the limitation: /* Be sure to keep dirfd valid until you discard the handle */ ~~~ -# AVAILABILITY - -Added in 7.40.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.md b/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.md index 270ebd654..010ec09f2 100644 --- a/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.md +++ b/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.md @@ -12,6 +12,7 @@ See-also: - CURLOPT_USERPWD (3) Protocol: - HTTP +Added-in: 7.10.4 --- # NAME @@ -52,6 +53,8 @@ again and again as the following hosts can keep redirecting to new hosts. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -67,9 +70,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Along with HTTP +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.md b/docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.md index 4813904d3..d8cdb90e3 100644 --- a/docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.md +++ b/docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.md @@ -8,6 +8,7 @@ See-also: - CURLOPT_TCP_KEEPALIVE (3) Protocol: - All +Added-in: 7.62.0 --- # NAME @@ -41,6 +42,8 @@ is called, an HTTP/2 PING frame is sent on the connection. CURL_UPKEEP_INTERVAL_DEFAULT (currently defined as 60000L, which is 60 seconds) +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -71,9 +74,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.62.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_UPLOAD.md b/docs/libcurl/opts/CURLOPT_UPLOAD.md index de64ada85..4576d27ff 100644 --- a/docs/libcurl/opts/CURLOPT_UPLOAD.md +++ b/docs/libcurl/opts/CURLOPT_UPLOAD.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_READFUNCTION (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -27,23 +28,25 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD, long upload); # DESCRIPTION The long parameter *upload* set to 1 tells the library to prepare for and -perform an upload. The CURLOPT_READDATA(3) and -CURLOPT_INFILESIZE(3) or CURLOPT_INFILESIZE_LARGE(3) options are -also interesting for uploads. If the protocol is HTTP, uploading means using -the PUT request unless you tell libcurl otherwise. +perform an upload. The CURLOPT_READDATA(3) and CURLOPT_INFILESIZE(3) or +CURLOPT_INFILESIZE_LARGE(3) options are also interesting for uploads. If the +protocol is HTTP, uploading means using the PUT request unless you tell +libcurl otherwise. Using PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER(3) as usual. If you use PUT to an HTTP 1.1 server, you can upload data without knowing the 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 +"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 CURLOPT_INFILESIZE(3) or CURLOPT_INFILESIZE_LARGE(3). # DEFAULT -0, default is download +0 + +# %PROTOCOLS% # EXAMPLE @@ -86,9 +89,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.md b/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.md index e1cbf244a..72a4b64d5 100644 --- a/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.md +++ b/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_TCP_NODELAY (3) Protocol: - All +Added-in: 7.62.0 --- # NAME @@ -49,6 +50,8 @@ transfer as that may lead to unintended consequences. 65536 bytes +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -69,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.62.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_URL.md b/docs/libcurl/opts/CURLOPT_URL.md index 2522d96ba..45d823987 100644 --- a/docs/libcurl/opts/CURLOPT_URL.md +++ b/docs/libcurl/opts/CURLOPT_URL.md @@ -10,12 +10,13 @@ See-also: - CURLOPT_FORBID_REUSE (3) - CURLOPT_FRESH_CONNECT (3) - CURLOPT_PATH_AS_IS (3) - - CURLOPT_PROTOCOLS (3) + - CURLOPT_PROTOCOLS_STR (3) - curl_easy_perform (3) - curl_url_get (3) - curl_url_set (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -87,8 +88,7 @@ specified when passed to the name resolver functions. # DEFAULT -There is no default URL. If this option is not set, no transfer can be -performed. +NULL. If this option is not set, no transfer can be performed. # SECURITY CONCERNS @@ -109,11 +109,13 @@ custom port number can allow external users to play tricks with your local services. Accepting external URLs may also use other protocols than http:// or other -common ones. Restrict what accept with CURLOPT_PROTOCOLS(3). +common ones. Restrict what accept with CURLOPT_PROTOCOLS_STR(3). User provided URLs can also be made to point to sites that redirect further on (possibly to other protocols too). Consider your -CURLOPT_FOLLOWLOCATION(3) and CURLOPT_REDIR_PROTOCOLS(3) settings. +CURLOPT_FOLLOWLOCATION(3) and CURLOPT_REDIR_PROTOCOLS_STR(3) settings. + +# %PROTOCOLS% # EXAMPLE @@ -129,9 +131,7 @@ int main(void) } ~~~ -# AVAILABILITY - -POP3 and SMTP were added in 7.31.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_USERAGENT.md b/docs/libcurl/opts/CURLOPT_USERAGENT.md index 757f3edbd..1aeb1c9ab 100644 --- a/docs/libcurl/opts/CURLOPT_USERAGENT.md +++ b/docs/libcurl/opts/CURLOPT_USERAGENT.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_REQUEST_TARGET (3) Protocol: - HTTP +Added-in: 7.1 --- # NAME @@ -36,7 +37,9 @@ option. # DEFAULT -NULL, no User-Agent: header is used by default. +NULL, no User-Agent: header is used. + +# %PROTOCOLS% # EXAMPLE @@ -54,9 +57,7 @@ int main(void) } ~~~ -# AVAILABILITY - -As long as HTTP is supported +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_USERNAME.md b/docs/libcurl/opts/CURLOPT_USERNAME.md index 34d0a6793..727421946 100644 --- a/docs/libcurl/opts/CURLOPT_USERNAME.md +++ b/docs/libcurl/opts/CURLOPT_USERNAME.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_USERPWD (3) Protocol: - All +Added-in: 7.19.1 --- # NAME @@ -60,6 +61,8 @@ option. blank +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -79,9 +82,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.19.1 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_USERPWD.md b/docs/libcurl/opts/CURLOPT_USERPWD.md index 726ec3e72..3d5e34d01 100644 --- a/docs/libcurl/opts/CURLOPT_USERPWD.md +++ b/docs/libcurl/opts/CURLOPT_USERPWD.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_USERNAME (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -66,6 +67,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -85,9 +88,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_USE_SSL.md b/docs/libcurl/opts/CURLOPT_USE_SSL.md index acb99e080..c74be586b 100644 --- a/docs/libcurl/opts/CURLOPT_USE_SSL.md +++ b/docs/libcurl/opts/CURLOPT_USE_SSL.md @@ -13,6 +13,7 @@ Protocol: - SMTP - POP3 - IMAP +Added-in: 7.17.0 --- # NAME @@ -58,6 +59,8 @@ Require SSL for all communication or fail with *CURLE_USE_SSL_FAILED*. CURLUSESSL_NONE +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -76,11 +79,13 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +This option was known as CURLOPT_FTP_SSL up to 7.16.4, and the constants were +known as CURLFTPSSL_* Handled by LDAP since 7.81.0. Fully supported by the +OpenLDAP backend only. -Added in 7.11.0. This option was known as CURLOPT_FTP_SSL up to 7.16.4, and -the constants were known as CURLFTPSSL_* -Handled by LDAP since 7.81.0. Fully supported by the OpenLDAP backend only. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_VERBOSE.md b/docs/libcurl/opts/CURLOPT_VERBOSE.md index a144d29f9..b242fcbc4 100644 --- a/docs/libcurl/opts/CURLOPT_VERBOSE.md +++ b/docs/libcurl/opts/CURLOPT_VERBOSE.md @@ -11,6 +11,7 @@ See-also: - curl_global_trace (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -42,6 +43,8 @@ CURLOPT_DEBUGFUNCTION(3). 0, meaning disabled. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -60,9 +63,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Always +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.md b/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.md index bfcc82fc7..e6ca3d655 100644 --- a/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.md +++ b/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.md @@ -11,6 +11,7 @@ See-also: - CURLOPT_URL (3) Protocol: - FTP +Added-in: 7.21.0 --- # NAME @@ -76,6 +77,8 @@ Using the rules above, a filename pattern can be constructed: ftp://example.com/some/path/[a-z[:upper:]\\].jpg +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -100,9 +103,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.21.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_WRITEDATA.md b/docs/libcurl/opts/CURLOPT_WRITEDATA.md index 66744abbe..c042a19e0 100644 --- a/docs/libcurl/opts/CURLOPT_WRITEDATA.md +++ b/docs/libcurl/opts/CURLOPT_WRITEDATA.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_WRITEFUNCTION (3) Protocol: - All +Added-in: 7.9.7 --- # NAME @@ -41,20 +42,24 @@ crashes. # DEFAULT -By default, this is a FILE * to stdout. +stdout + +# %PROTOCOLS% # EXAMPLE A common technique is to use the write callback to store the incoming data into a dynamically growing allocated buffer, and then this -CURLOPT_WRITEDATA(3) is used to point to a struct or the buffer to store -data in. Like in the getinmemory example: +CURLOPT_WRITEDATA(3) is used to point to a struct or the buffer to store data +in. Like in the getinmemory example: https://curl.se/libcurl/c/getinmemory.html -# AVAILABILITY +# HISTORY + +This option was formerly known as CURLOPT_FILE, the name CURLOPT_WRITEDATA(3) +was added in 7.9.7. -Available in all libcurl versions. This option was formerly known as -CURLOPT_FILE, the name CURLOPT_WRITEDATA(3) was added in 7.9.7. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.md b/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.md index 61a02c4c5..022f5da0b 100644 --- a/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_WRITEDATA (3) Protocol: - All +Added-in: 7.1 --- # NAME @@ -72,7 +73,9 @@ do that. # DEFAULT -libcurl uses 'fwrite' as a callback by default. +fwrite(3) + +# %PROTOCOLS% # EXAMPLE @@ -85,7 +88,7 @@ struct memory { size_t size; }; -static size_t cb(void *data, size_t size, size_t nmemb, void *clientp) +static size_t cb(char *data, size_t size, size_t nmemb, void *clientp) { size_t realsize = size * nmemb; struct memory *mem = (struct memory *)clientp; @@ -125,10 +128,12 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY Support for the CURL_WRITEFUNC_PAUSE return code was added in version 7.18.0. +# %AVAILABILITY% + # RETURN VALUE This returns CURLE_OK. diff --git a/docs/libcurl/opts/CURLOPT_WS_OPTIONS.md b/docs/libcurl/opts/CURLOPT_WS_OPTIONS.md index 23db0a47b..3eba3705f 100644 --- a/docs/libcurl/opts/CURLOPT_WS_OPTIONS.md +++ b/docs/libcurl/opts/CURLOPT_WS_OPTIONS.md @@ -10,6 +10,7 @@ See-also: - curl_ws_send (3) Protocol: - WS +Added-in: 7.86.0 --- # NAME @@ -47,6 +48,8 @@ application. 0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.86.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_XFERINFODATA.md b/docs/libcurl/opts/CURLOPT_XFERINFODATA.md index 126dc11a4..4ed174eff 100644 --- a/docs/libcurl/opts/CURLOPT_XFERINFODATA.md +++ b/docs/libcurl/opts/CURLOPT_XFERINFODATA.md @@ -10,6 +10,7 @@ See-also: - CURLOPT_XFERINFOFUNCTION (3) Protocol: - All +Added-in: 7.32.0 --- # NAME @@ -33,7 +34,9 @@ This is an alias for CURLOPT_PROGRESSDATA(3). # DEFAULT -The default value of this parameter is NULL. +NULL + +# %PROTOCOLS% # EXAMPLE @@ -69,9 +72,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.32.0 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.md b/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.md index 7fcd0e06d..a7c130a50 100644 --- a/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.md +++ b/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.md @@ -9,6 +9,7 @@ See-also: - CURLOPT_XFERINFODATA (3) Protocol: - All +Added-in: 7.32.0 --- # NAME @@ -70,8 +71,9 @@ get called. # DEFAULT -By default, libcurl has an internal progress meter. That is rarely wanted by -users. +NULL - use the internal progress meter. That is rarely wanted by users. + +# %PROTOCOLS% # EXAMPLE @@ -104,14 +106,15 @@ int main(void) /* pass struct to callback */ curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &data); + /* enable progress callback getting called */ + curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L); + curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, progress_callback); } } ~~~ -# AVAILABILITY - -Added in 7.32.0. This callback replaces CURLOPT_PROGRESSFUNCTION(3) +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.md b/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.md index 8ae9901d6..061a1f69b 100644 --- a/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.md +++ b/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.md @@ -13,6 +13,7 @@ Protocol: - LDAP - POP3 - SMTP +Added-in: 7.33.0 --- # NAME @@ -43,6 +44,8 @@ option. NULL +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,11 @@ int main(void) } ~~~ -# AVAILABILITY +# HISTORY + +Support for OpenLDAP added in 7.82.0. -Added in 7.33.0. Support for OpenLDAP added in 7.82.0. +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLSHOPT_LOCKFUNC.md b/docs/libcurl/opts/CURLSHOPT_LOCKFUNC.md index 46e210ad5..208dfdd62 100644 --- a/docs/libcurl/opts/CURLSHOPT_LOCKFUNC.md +++ b/docs/libcurl/opts/CURLSHOPT_LOCKFUNC.md @@ -11,6 +11,7 @@ See-also: - curl_share_setopt (3) Protocol: - All +Added-in: 7.10.3 --- # NAME @@ -48,6 +49,8 @@ sure that the callback uses a different lock for each kind of data. *clientp* is the private pointer you set with CURLSHOPT_USERDATA(3). This pointer is not used by libcurl itself. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -64,9 +67,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLSHOPT_SHARE.md b/docs/libcurl/opts/CURLSHOPT_SHARE.md index 376d53cda..fa6838cb8 100644 --- a/docs/libcurl/opts/CURLSHOPT_SHARE.md +++ b/docs/libcurl/opts/CURLSHOPT_SHARE.md @@ -11,6 +11,7 @@ See-also: - curl_share_setopt (3) Protocol: - All +Added-in: 7.10.3 --- # NAME @@ -40,6 +41,8 @@ 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 CURLOPT_COOKIEFILE(3) for example. +It is not supported to share cookies between multiple concurrent threads. + ## CURL_LOCK_DATA_DNS Cached DNS hosts are shared across the easy handles using this shared @@ -54,6 +57,8 @@ 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. +It is not supported to share SSL sessions between multiple concurrent threads. + ## CURL_LOCK_DATA_CONNECT Put the connection cache in the share object and make all easy handles using @@ -61,9 +66,9 @@ this share object share the connection cache. 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 -the same multi or easy handle. libcurl does not support doing HTTP/2 streams +Connections that are used for HTTP/2 or HTTP/3 multiplexing only get +additional transfers added to them if the existing connection is held by the +same multi or easy handle. libcurl does not support doing multiplexed streams in different threads using a shared connection. Support for **CURL_LOCK_DATA_CONNECT** was added in 7.57.0, but the symbol @@ -91,6 +96,8 @@ It is not supported to share the HSTS between multiple concurrent threads. Added in 7.88.0 +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -104,9 +111,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.md b/docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.md index ae8ecb779..503918231 100644 --- a/docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.md +++ b/docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.md @@ -11,6 +11,7 @@ See-also: - curl_share_setopt (3) Protocol: - All +Added-in: 7.10.3 --- # NAME @@ -44,6 +45,8 @@ sure that the callback uses a different lock for each kind of data. *clientp* is the private pointer you set with CURLSHOPT_USERDATA(3). This pointer is not used by libcurl itself. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -59,9 +62,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLSHOPT_UNSHARE.md b/docs/libcurl/opts/CURLSHOPT_UNSHARE.md index 69ee517c7..43edb4d25 100644 --- a/docs/libcurl/opts/CURLSHOPT_UNSHARE.md +++ b/docs/libcurl/opts/CURLSHOPT_UNSHARE.md @@ -11,6 +11,7 @@ See-also: - curl_share_setopt (3) Protocol: - All +Added-in: 7.10.3 --- # NAME @@ -58,6 +59,8 @@ The connection cache is no longer shared. The Public Suffix List is no longer shared. +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -71,9 +74,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/CURLSHOPT_USERDATA.md b/docs/libcurl/opts/CURLSHOPT_USERDATA.md index 9cd042ec5..5796ce21b 100644 --- a/docs/libcurl/opts/CURLSHOPT_USERDATA.md +++ b/docs/libcurl/opts/CURLSHOPT_USERDATA.md @@ -11,6 +11,7 @@ See-also: - curl_share_setopt (3) Protocol: - All +Added-in: 7.10.3 --- # NAME @@ -31,6 +32,8 @@ The *clientp* parameter is held verbatim by libcurl and is passed on as the *clientp* argument to the callbacks set with CURLSHOPT_LOCKFUNC(3) and CURLSHOPT_UNLOCKFUNC(3). +# %PROTOCOLS% + # EXAMPLE ~~~c @@ -49,9 +52,7 @@ int main(void) } ~~~ -# AVAILABILITY - -Added in 7.10 +# %AVAILABILITY% # RETURN VALUE diff --git a/docs/libcurl/opts/Makefile.in b/docs/libcurl/opts/Makefile.in new file mode 100644 index 000000000..abf1fdbf8 --- /dev/null +++ b/docs/libcurl/opts/Makefile.in @@ -0,0 +1,1118 @@ +# 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, , et al. +# +# This software is licensed 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, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# Shared between Makefile.am and CMakeLists.txt +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 = docs/libcurl/opts +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-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 = +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 = +depcomp = +am__maybe_remake_depfiles = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man3dir = $(mandir)/man3 +am__installdirs = "$(DESTDIR)$(man3dir)" +NROFF = nroff +MANS = $(man_MANS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc +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@ +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_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_QUIC = @HAVE_OPENSSL_QUIC@ +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@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ +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@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +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_LIBPSL = @USE_LIBPSL@ +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_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ +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_NGTCP2_H3 = @USE_NGTCP2_H3@ +USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ +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@ +VSFTPD = @VSFTPD@ +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 no-dependencies +@BUILD_DOCS_TRUE@man_MANS = \ +@BUILD_DOCS_TRUE@ CURLINFO_ACTIVESOCKET.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_APPCONNECT_TIME.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_APPCONNECT_TIME_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CAINFO.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CAPATH.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CERTINFO.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CONDITION_UNMET.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CONNECT_TIME.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CONNECT_TIME_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CONN_ID.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CONTENT_LENGTH_UPLOAD.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CONTENT_LENGTH_UPLOAD_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_CONTENT_TYPE.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_COOKIELIST.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_EFFECTIVE_METHOD.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_EFFECTIVE_URL.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_FILETIME.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_FILETIME_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_FTP_ENTRY_PATH.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_HEADER_SIZE.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_HTTP_CONNECTCODE.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_HTTP_VERSION.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_HTTPAUTH_AVAIL.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_LASTSOCKET.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_LOCAL_IP.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_LOCAL_PORT.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_NAMELOOKUP_TIME.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_NAMELOOKUP_TIME_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_NUM_CONNECTS.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_OS_ERRNO.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_PRETRANSFER_TIME.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_PRETRANSFER_TIME_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_PRIMARY_IP.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_PRIMARY_PORT.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_PRIVATE.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_PROTOCOL.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_PROXY_ERROR.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_PROXY_SSL_VERIFYRESULT.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_PROXYAUTH_AVAIL.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_QUEUE_TIME_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_REDIRECT_COUNT.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_REDIRECT_TIME.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_REDIRECT_TIME_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_REDIRECT_URL.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_REFERER.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_REQUEST_SIZE.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_RESPONSE_CODE.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_RETRY_AFTER.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_RTSP_CLIENT_CSEQ.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_RTSP_CSEQ_RECV.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_RTSP_SERVER_CSEQ.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_RTSP_SESSION_ID.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SCHEME.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SIZE_DOWNLOAD.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SIZE_DOWNLOAD_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SIZE_UPLOAD.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SIZE_UPLOAD_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SPEED_DOWNLOAD.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SPEED_DOWNLOAD_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SPEED_UPLOAD.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SPEED_UPLOAD_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SSL_ENGINES.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_SSL_VERIFYRESULT.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_STARTTRANSFER_TIME.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_STARTTRANSFER_TIME_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_TLS_SESSION.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_TLS_SSL_PTR.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_TOTAL_TIME.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_TOTAL_TIME_T.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_USED_PROXY.3 \ +@BUILD_DOCS_TRUE@ CURLINFO_XFER_ID.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_MAX_CONCURRENT_STREAMS.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_MAX_HOST_CONNECTIONS.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_MAX_PIPELINE_LENGTH.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_MAX_TOTAL_CONNECTIONS.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_MAXCONNECTS.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_PIPELINING.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_PIPELINING_SERVER_BL.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_PIPELINING_SITE_BL.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_PUSHDATA.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_PUSHFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_SOCKETDATA.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_SOCKETFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_TIMERDATA.3 \ +@BUILD_DOCS_TRUE@ CURLMOPT_TIMERFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ABSTRACT_UNIX_SOCKET.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ACCEPT_ENCODING.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ACCEPTTIMEOUT_MS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ADDRESS_SCOPE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ALTSVC.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ALTSVC_CTRL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_APPEND.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_AUTOREFERER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_AWS_SIGV4.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_BUFFERSIZE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CAINFO.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CAINFO_BLOB.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CAPATH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CA_CACHE_TIMEOUT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CERTINFO.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CHUNK_BGN_FUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CHUNK_DATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CHUNK_END_FUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CLOSESOCKETDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CLOSESOCKETFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CONNECT_ONLY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CONNECT_TO.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CONNECTTIMEOUT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CONNECTTIMEOUT_MS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CONV_FROM_NETWORK_FUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CONV_FROM_UTF8_FUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CONV_TO_NETWORK_FUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_COOKIE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_COOKIEFILE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_COOKIEJAR.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_COOKIELIST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_COOKIESESSION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_COPYPOSTFIELDS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CRLF.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CRLFILE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CURLU.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_CUSTOMREQUEST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DEBUGDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DEBUGFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DEFAULT_PROTOCOL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DIRLISTONLY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DISALLOW_USERNAME_IN_URL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DNS_CACHE_TIMEOUT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DNS_INTERFACE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DNS_LOCAL_IP4.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DNS_LOCAL_IP6.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DNS_SERVERS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DNS_SHUFFLE_ADDRESSES.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DNS_USE_GLOBAL_CACHE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DOH_SSL_VERIFYHOST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DOH_SSL_VERIFYPEER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DOH_SSL_VERIFYSTATUS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_DOH_URL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ECH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_EGDSOCKET.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ERRORBUFFER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_EXPECT_100_TIMEOUT_MS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FAILONERROR.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FILETIME.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FNMATCH_DATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FNMATCH_FUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FOLLOWLOCATION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FORBID_REUSE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FRESH_CONNECT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTP_ACCOUNT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTP_ALTERNATIVE_TO_USER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTP_CREATE_MISSING_DIRS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTP_FILEMETHOD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTP_SKIP_PASV_IP.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTP_SSL_CCC.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTP_USE_EPRT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTP_USE_EPSV.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTP_USE_PRET.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTPPORT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_FTPSSLAUTH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_GSSAPI_DELEGATION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HAPROXYPROTOCOL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HAPROXY_CLIENT_IP.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HEADER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HEADERDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HEADERFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HEADEROPT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HSTS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HSTS_CTRL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HSTSREADDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HSTSREADFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HSTSWRITEDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HSTSWRITEFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTP09_ALLOWED.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTP200ALIASES.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTP_CONTENT_DECODING.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTP_TRANSFER_DECODING.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTP_VERSION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTPAUTH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTPGET.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTPHEADER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTPPOST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_HTTPPROXYTUNNEL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_IGNORE_CONTENT_LENGTH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_INFILESIZE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_INFILESIZE_LARGE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_INTERFACE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_INTERLEAVEDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_INTERLEAVEFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_IOCTLDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_IOCTLFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_IPRESOLVE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ISSUERCERT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_ISSUERCERT_BLOB.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_KEEP_SENDING_ON_ERROR.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_KEYPASSWD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_KRBLEVEL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_LOCALPORT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_LOCALPORTRANGE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_LOGIN_OPTIONS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_LOW_SPEED_LIMIT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_LOW_SPEED_TIME.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAIL_AUTH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAIL_FROM.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAIL_RCPT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAIL_RCPT_ALLOWFAILS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAX_RECV_SPEED_LARGE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAX_SEND_SPEED_LARGE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAXAGE_CONN.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAXCONNECTS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAXFILESIZE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAXFILESIZE_LARGE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAXLIFETIME_CONN.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MAXREDIRS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MIME_OPTIONS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_MIMEPOST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_NETRC.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_NETRC_FILE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_NEW_DIRECTORY_PERMS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_NEW_FILE_PERMS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_NOBODY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_NOPROGRESS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_NOPROXY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_NOSIGNAL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_OPENSOCKETDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_OPENSOCKETFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PASSWORD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PATH_AS_IS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PINNEDPUBLICKEY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PIPEWAIT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PORT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_POST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_POSTFIELDS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_POSTFIELDSIZE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_POSTFIELDSIZE_LARGE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_POSTQUOTE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_POSTREDIR.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PRE_PROXY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PREQUOTE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PREREQDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PREREQFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PRIVATE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROGRESSDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROGRESSFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROTOCOLS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROTOCOLS_STR.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_CAINFO.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_CAINFO_BLOB.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_CAPATH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_CRLFILE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_ISSUERCERT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_ISSUERCERT_BLOB.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_KEYPASSWD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_PINNEDPUBLICKEY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SERVICE_NAME.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSL_CIPHER_LIST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSL_OPTIONS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSL_VERIFYHOST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSL_VERIFYPEER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSLCERT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSLCERT_BLOB.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSLCERTTYPE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSLKEY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSLKEY_BLOB.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSLKEYTYPE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_SSLVERSION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_TLS13_CIPHERS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_TLSAUTH_PASSWORD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_TLSAUTH_TYPE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_TLSAUTH_USERNAME.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXY_TRANSFER_MODE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXYAUTH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXYHEADER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXYPASSWORD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXYPORT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXYTYPE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXYUSERNAME.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PROXYUSERPWD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_PUT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_QUICK_EXIT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_QUOTE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RANDOM_FILE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RANGE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_READDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_READFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_REDIR_PROTOCOLS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_REDIR_PROTOCOLS_STR.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_REFERER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_REQUEST_TARGET.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RESOLVE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RESOLVER_START_DATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RESOLVER_START_FUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RESUME_FROM.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RESUME_FROM_LARGE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RTSP_CLIENT_CSEQ.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RTSP_REQUEST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RTSP_SERVER_CSEQ.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RTSP_SESSION_ID.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RTSP_STREAM_URI.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_RTSP_TRANSPORT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SASL_AUTHZID.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SASL_IR.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SEEKDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SEEKFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SERVER_RESPONSE_TIMEOUT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SERVER_RESPONSE_TIMEOUT_MS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SERVICE_NAME.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SHARE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SOCKOPTDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SOCKOPTFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SOCKS5_AUTH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SOCKS5_GSSAPI_NEC.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SOCKS5_GSSAPI_SERVICE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_AUTH_TYPES.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_COMPRESSION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_HOSTKEYDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_HOSTKEYFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_KEYDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_KEYFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_KNOWNHOSTS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_PRIVATE_KEYFILE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSH_PUBLIC_KEYFILE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_CIPHER_LIST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_CTX_DATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_CTX_FUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_EC_CURVES.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_ENABLE_ALPN.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_ENABLE_NPN.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_FALSESTART.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_OPTIONS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_SESSIONID_CACHE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_VERIFYHOST.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_VERIFYPEER.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSL_VERIFYSTATUS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSLCERT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSLCERT_BLOB.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSLCERTTYPE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSLENGINE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSLENGINE_DEFAULT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSLKEY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSLKEY_BLOB.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSLKEYTYPE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SSLVERSION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_STDERR.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_STREAM_DEPENDS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_STREAM_DEPENDS_E.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_STREAM_WEIGHT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_SUPPRESS_CONNECT_HEADERS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TCP_FASTOPEN.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TCP_KEEPALIVE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TCP_KEEPIDLE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TCP_KEEPINTVL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TCP_KEEPCNT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TCP_NODELAY.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TELNETOPTIONS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TFTP_BLKSIZE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TFTP_NO_OPTIONS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TIMECONDITION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TIMEOUT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TIMEOUT_MS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TIMEVALUE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TIMEVALUE_LARGE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TLS13_CIPHERS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TLSAUTH_PASSWORD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TLSAUTH_TYPE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TLSAUTH_USERNAME.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TRAILERDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TRAILERFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TRANSFER_ENCODING.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_TRANSFERTEXT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_UNIX_SOCKET_PATH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_UNRESTRICTED_AUTH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_UPKEEP_INTERVAL_MS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_UPLOAD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_UPLOAD_BUFFERSIZE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_URL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_USE_SSL.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_USERAGENT.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_USERNAME.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_USERPWD.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_VERBOSE.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_WILDCARDMATCH.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_WRITEDATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_WRITEFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_WS_OPTIONS.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_XFERINFODATA.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_XFERINFOFUNCTION.3 \ +@BUILD_DOCS_TRUE@ CURLOPT_XOAUTH2_BEARER.3 \ +@BUILD_DOCS_TRUE@ CURLSHOPT_LOCKFUNC.3 \ +@BUILD_DOCS_TRUE@ CURLSHOPT_SHARE.3 \ +@BUILD_DOCS_TRUE@ CURLSHOPT_UNLOCKFUNC.3 \ +@BUILD_DOCS_TRUE@ CURLSHOPT_UNSHARE.3 \ +@BUILD_DOCS_TRUE@ CURLSHOPT_USERDATA.3 + +@BUILD_DOCS_TRUE@CURLPAGES = $(man_MANS:.3=.md) +CLEANFILES = $(man_MANS) +EXTRA_DIST = $(CURLPAGES) CMakeLists.txt +@BUILD_DOCS_TRUE@CD2NROFF = $(top_srcdir)/scripts/cd2nroff $< >$@ +@BUILD_DOCS_TRUE@CD2 = $(CD2_$(V)) +@BUILD_DOCS_TRUE@CD2_0 = @echo " RENDER " $@; +@BUILD_DOCS_TRUE@CD2_1 = +@BUILD_DOCS_TRUE@CD2_ = $(CD2_0) +@BUILD_DOCS_TRUE@SUFFIXES = .3 .md +all: all-am + +.SUFFIXES: +.SUFFIXES: .3 .md +$(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 docs/libcurl/opts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/libcurl/opts/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): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-man3: $(man_MANS) + @$(NORMAL_INSTALL) + @list1=''; \ + list2='$(man_MANS)'; \ + test -n "$(man3dir)" \ + && test -n "`echo $$list1$$list2`" \ + || exit 0; \ + echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ + { for i in $$list1; do echo "$$i"; done; \ + if test -n "$$list2"; then \ + for i in $$list2; do echo "$$i"; done \ + | sed -n '/\.3[a-z]*$$/p'; \ + fi; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ + done; } + +uninstall-man3: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man3dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.3[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + +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 +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man3dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +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: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +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-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +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-man3 + +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 Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man3 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool 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-man3 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags-am uninstall uninstall-am uninstall-man \ + uninstall-man3 + +.PRECIOUS: Makefile + + +@BUILD_DOCS_TRUE@.md.3: +@BUILD_DOCS_TRUE@ $(CD2)$(CD2NROFF) + +# 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/docs/libcurl/opts/Makefile.inc b/docs/libcurl/opts/Makefile.inc index 7a292b81d..f09c5863d 100644 --- a/docs/libcurl/opts/Makefile.inc +++ b/docs/libcurl/opts/Makefile.inc @@ -166,6 +166,7 @@ man_MANS = \ CURLOPT_DOH_SSL_VERIFYPEER.3 \ CURLOPT_DOH_SSL_VERIFYSTATUS.3 \ CURLOPT_DOH_URL.3 \ + CURLOPT_ECH.3 \ CURLOPT_EGDSOCKET.3 \ CURLOPT_ERRORBUFFER.3 \ CURLOPT_EXPECT_100_TIMEOUT_MS.3 \ @@ -383,6 +384,7 @@ man_MANS = \ CURLOPT_TCP_KEEPALIVE.3 \ CURLOPT_TCP_KEEPIDLE.3 \ CURLOPT_TCP_KEEPINTVL.3 \ + CURLOPT_TCP_KEEPCNT.3 \ CURLOPT_TCP_NODELAY.3 \ CURLOPT_TELNETOPTIONS.3 \ CURLOPT_TFTP_BLKSIZE.3 \ diff --git a/docs/libcurl/symbols-in-versions b/docs/libcurl/symbols-in-versions index a627dd68b..ebf2cee29 100644 --- a/docs/libcurl/symbols-in-versions +++ b/docs/libcurl/symbols-in-versions @@ -340,6 +340,7 @@ CURLE_URL_MALFORMAT_USER 7.1 7.17.0 CURLE_USE_SSL_FAILED 7.17.0 CURLE_WEIRD_SERVER_REPLY 7.51.0 CURLE_WRITE_ERROR 7.1 +CURLE_ECH_REQUIRED 8.8.0 CURLFILETYPE_DEVICE_BLOCK 7.21.0 CURLFILETYPE_DEVICE_CHAR 7.21.0 CURLFILETYPE_DIRECTORY 7.21.0 @@ -617,6 +618,7 @@ CURLOPT_DOH_SSL_VERIFYHOST 7.76.0 CURLOPT_DOH_SSL_VERIFYPEER 7.76.0 CURLOPT_DOH_SSL_VERIFYSTATUS 7.76.0 CURLOPT_DOH_URL 7.62.0 +CURLOPT_ECH 8.8.0 CURLOPT_EGDSOCKET 7.7 7.84.0 CURLOPT_ENCODING 7.10 7.21.6 CURLOPT_ERRORBUFFER 7.1 @@ -862,6 +864,7 @@ CURLOPT_TCP_FASTOPEN 7.49.0 CURLOPT_TCP_KEEPALIVE 7.25.0 CURLOPT_TCP_KEEPIDLE 7.25.0 CURLOPT_TCP_KEEPINTVL 7.25.0 +CURLOPT_TCP_KEEPCNT 8.9.0 CURLOPT_TCP_NODELAY 7.11.2 CURLOPT_TELNETOPTIONS 7.7 CURLOPT_TFTP_BLKSIZE 7.19.4 @@ -1062,9 +1065,11 @@ CURLU_APPENDQUERY 7.62.0 CURLU_DEFAULT_PORT 7.62.0 CURLU_DEFAULT_SCHEME 7.62.0 CURLU_DISALLOW_USER 7.62.0 +CURLU_GET_EMPTY 8.8.0 CURLU_GUESS_SCHEME 7.62.0 CURLU_NO_AUTHORITY 7.67.0 CURLU_NO_DEFAULT_PORT 7.62.0 +CURLU_NO_GUESS_SCHEME 8.9.0 CURLU_NON_SUPPORT_SCHEME 7.62.0 CURLU_PATH_AS_IS 7.62.0 CURLU_PUNY2IDN 8.3.0 @@ -1130,6 +1135,7 @@ CURLVERSION_SEVENTH 7.70.0 CURLVERSION_SIXTH 7.66.0 CURLVERSION_TENTH 7.77.0 CURLVERSION_THIRD 7.12.0 +CURLVERSION_TWELFTH 8.8.0 CURLWARNING 7.66.0 CURLWS_BINARY 7.86.0 CURLWS_CLOSE 7.86.0 diff --git a/docs/mk-ca-bundle.md b/docs/mk-ca-bundle.md index 8a8130998..fe6863526 100644 --- a/docs/mk-ca-bundle.md +++ b/docs/mk-ca-bundle.md @@ -6,6 +6,7 @@ Section: 1 Source: mk-ca-bundle See-also: - curl (1) +Added-in: n/a --- # NAME diff --git a/docs/options-in-versions b/docs/options-in-versions index 090580943..e329f8723 100644 --- a/docs/options-in-versions +++ b/docs/options-in-versions @@ -55,6 +55,7 @@ --doh-insecure 7.76.0 --doh-url 7.62.0 --dump-header (-D) 5.7 +--ech 8.8.0 --egd-file 7.7 --engine 7.9.3 --etag-compare 7.68.0 @@ -97,6 +98,7 @@ --http3 7.66.0 --http3-only 7.88.0 --ignore-content-length 7.14.1 +--ip-tos 8.9.0 --ipfs-gateway 8.4.0 --include (-i) 4.8 --insecure (-k) 7.10 @@ -105,6 +107,7 @@ --ipv6 (-6) 7.10.8 --json 7.82.0 --junk-session-cookies (-j) 7.9.7 +--keepalive-cnt 8.9.0 --keepalive-time 7.18.0 --key 7.9.3 --key-type 7.9.3 @@ -125,6 +128,7 @@ --max-redirs 7.5 --max-time (-m) 4.0 --metalink 7.27.0 +--mptcp 8.9.0 --negotiate 7.10.6 --netrc (-n) 4.6 --netrc-file 7.21.5 @@ -266,5 +270,6 @@ --variable 8.3.0 --verbose (-v) 4.0 --version (-V) 4.0 +--vlan-priority 8.9.0 --write-out (-w) 6.5 --xattr 7.21.3 diff --git a/include/Makefile.in b/include/Makefile.in index 642abf974..1b9510060 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 \ @@ -109,7 +109,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.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 \ @@ -207,6 +206,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 +216,7 @@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@ +CADDY = @CADDY@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -247,7 +249,6 @@ 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@ @@ -273,9 +274,12 @@ HAVE_BROTLI = @HAVE_BROTLI@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_OPENSSL_QUIC = @HAVE_OPENSSL_QUIC@ 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@ @@ -288,6 +292,8 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCURL_LIBS = @LIBCURL_LIBS@ LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -298,12 +304,9 @@ 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@ -NSS_LIBS = @NSS_LIBS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ @@ -339,6 +342,7 @@ USE_ARES = @USE_ARES@ USE_BEARSSL = @USE_BEARSSL@ USE_GNUTLS = @USE_GNUTLS@ USE_HYPER = @USE_HYPER@ +USE_LIBPSL = @USE_LIBPSL@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ @@ -347,11 +351,14 @@ USE_MSH3 = @USE_MSH3@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ +USE_NGTCP2_CRYPTO_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ 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_NGTCP2_H3 = @USE_NGTCP2_H3@ USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ USE_QUICHE = @USE_QUICHE@ USE_RUSTLS = @USE_RUSTLS@ USE_SCHANNEL = @USE_SCHANNEL@ @@ -365,6 +372,7 @@ USE_WOLFSSH = @USE_WOLFSSH@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ +VSFTPD = @VSFTPD@ ZLIB_LIBS = @ZLIB_LIBS@ ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ abs_builddir = @abs_builddir@ @@ -429,7 +437,7 @@ top_srcdir = @top_srcdir@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms diff --git a/include/README.md b/include/README.md index c96593263..b155d8c13 100644 --- a/include/README.md +++ b/include/README.md @@ -8,7 +8,7 @@ SPDX-License-Identifier: curl Public include files for libcurl, external users. -They're all placed in the curl subdirectory here for better fit in any kind of +They are all placed in the curl subdirectory here for better fit in any kind of environment. You must include files from here using... #include diff --git a/include/curl/.gitignore b/include/curl/.gitignore deleted file mode 100644 index 246793882..000000000 --- a/include/curl/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -curlver.h.dist -stamp-h2 -stamp-h3 diff --git a/include/curl/Makefile.am b/include/curl/Makefile.am index a655aff1c..8864d60e1 100644 --- a/include/curl/Makefile.am +++ b/include/curl/Makefile.am @@ -35,7 +35,7 @@ CS_ = $(CS_0) checksrc: $(CHECKSRC)@PERL@ $(top_srcdir)/scripts/checksrc.pl -D$(top_srcdir)/include/curl $(pkginclude_HEADERS) -if CURLDEBUG +if DEBUGBUILD # for debug builds, we scan the sources on all regular make invokes all-local: checksrc endif diff --git a/include/curl/Makefile.in b/include/curl/Makefile.in index fbb88b9be..5e534ac7f 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 \ @@ -109,7 +109,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.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 \ @@ -194,6 +193,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 +203,7 @@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@ +CADDY = @CADDY@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -234,7 +236,6 @@ 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@ @@ -260,9 +261,12 @@ HAVE_BROTLI = @HAVE_BROTLI@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_OPENSSL_QUIC = @HAVE_OPENSSL_QUIC@ 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@ @@ -275,6 +279,8 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCURL_LIBS = @LIBCURL_LIBS@ LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -285,12 +291,9 @@ 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@ -NSS_LIBS = @NSS_LIBS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ @@ -326,6 +329,7 @@ USE_ARES = @USE_ARES@ USE_BEARSSL = @USE_BEARSSL@ USE_GNUTLS = @USE_GNUTLS@ USE_HYPER = @USE_HYPER@ +USE_LIBPSL = @USE_LIBPSL@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ @@ -334,11 +338,14 @@ USE_MSH3 = @USE_MSH3@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ +USE_NGTCP2_CRYPTO_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ 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_NGTCP2_H3 = @USE_NGTCP2_H3@ USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ USE_QUICHE = @USE_QUICHE@ USE_RUSTLS = @USE_RUSTLS@ USE_SCHANNEL = @USE_SCHANNEL@ @@ -352,6 +359,7 @@ USE_WOLFSSH = @USE_WOLFSSH@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ +VSFTPD = @VSFTPD@ ZLIB_LIBS = @ZLIB_LIBS@ ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ abs_builddir = @abs_builddir@ @@ -416,7 +424,7 @@ top_srcdir = @top_srcdir@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -586,7 +594,7 @@ distdir-am: $(DISTFILES) done check-am: all-am check: check-am -@CURLDEBUG_FALSE@all-local: +@DEBUGBUILD_FALSE@all-local: all-am: Makefile $(HEADERS) all-local installdirs: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ @@ -711,7 +719,7 @@ checksrc: $(CHECKSRC)@PERL@ $(top_srcdir)/scripts/checksrc.pl -D$(top_srcdir)/include/curl $(pkginclude_HEADERS) # for debug builds, we scan the sources on all regular make invokes -@CURLDEBUG_TRUE@all-local: checksrc +@DEBUGBUILD_TRUE@all-local: 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. diff --git a/include/curl/curl.h b/include/curl/curl.h index b2377b789..6da44ce9b 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -34,24 +34,32 @@ #endif /* Compile-time deprecation macros. */ -#if defined(__GNUC__) && \ - ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) && \ +#if (defined(__GNUC__) && \ + ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) || \ + defined(__IAR_SYSTEMS_ICC__)) && \ !defined(__INTEL_COMPILER) && \ !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) #define CURL_DEPRECATED(version, message) \ __attribute__((deprecated("since " # version ". " message))) +#if defined(__IAR_SYSTEMS_ICC__) +#define CURL_IGNORE_DEPRECATION(statements) \ + _Pragma("diag_suppress=Pe1444") \ + statements \ + _Pragma("diag_default=Pe1444") +#else #define CURL_IGNORE_DEPRECATION(statements) \ _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ statements \ _Pragma("GCC diagnostic pop") +#endif #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 */ +#include "system.h" /* determine things runtime */ #include #include @@ -69,7 +77,7 @@ #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 - included, since they can't co-exist without problems */ + included, since they cannot co-exist without problems */ #include #include #endif @@ -189,9 +197,9 @@ struct curl_httppost { files */ long flags; /* as defined below */ -/* specified content is a file name */ +/* specified content is a filename */ #define CURL_HTTPPOST_FILENAME (1<<0) -/* specified content is a file name */ +/* specified content is a filename */ #define CURL_HTTPPOST_READFILE (1<<1) /* name is only stored pointer do not free in formfree */ #define CURL_HTTPPOST_PTRNAME (1<<2) @@ -207,8 +215,8 @@ struct curl_httppost { /* use size in 'contentlen', added in 7.46.0 */ #define CURL_HTTPPOST_LARGE (1<<7) - char *showfilename; /* The file name to show. If not set, the - actual file name will be used (if this + char *showfilename; /* The filename to show. If not set, the + actual filename will be used (if this is a file part) */ void *userp; /* custom pointer used for HTTPPOST_CALLBACK posts */ @@ -350,13 +358,13 @@ typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, download of an individual chunk finished. Note! After this callback was set then it have to be called FOR ALL chunks. Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC. - This is the reason why we don't need "transfer_info" parameter in this + This is the reason why we do not need "transfer_info" parameter in this callback and we are not interested in "remains" parameter too. */ typedef long (*curl_chunk_end_callback)(void *ptr); /* return codes for FNMATCHFUNCTION */ #define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ -#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */ +#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern does not match the string */ #define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ /* callback type for wildcard downloading pattern matching. If the @@ -368,7 +376,7 @@ typedef int (*curl_fnmatch_callback)(void *ptr, /* These are the return codes for the seek callbacks */ #define CURL_SEEKFUNC_OK 0 #define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ -#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so +#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking cannot be done, so libcurl might try other means instead */ typedef int (*curl_seek_callback)(void *instream, curl_off_t offset, @@ -451,7 +459,7 @@ typedef curlioerr (*curl_ioctl_callback)(CURL *handle, #ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS /* * The following typedef's are signatures of malloc, free, realloc, strdup and - * calloc respectively. Function pointers of these types can be passed to the + * calloc respectively. Function pointers of these types can be passed to the * curl_global_init_mem() function to set user defined memory management * callback routines. */ @@ -539,17 +547,17 @@ typedef enum { CURLE_WRITE_ERROR, /* 23 */ CURLE_OBSOLETE24, /* 24 - NOT USED */ CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ - CURLE_READ_ERROR, /* 26 - couldn't open/read from file */ + CURLE_READ_ERROR, /* 26 - could not open/read from file */ CURLE_OUT_OF_MEMORY, /* 27 */ CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ CURLE_OBSOLETE29, /* 29 - NOT USED */ CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ CURLE_OBSOLETE32, /* 32 - NOT USED */ - CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" did not work */ CURLE_HTTP_POST_ERROR, /* 34 */ CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ - CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - could not resume download */ CURLE_FILE_COULDNT_READ_FILE, /* 37 */ CURLE_LDAP_CANNOT_BIND, /* 38 */ CURLE_LDAP_SEARCH_FAILED, /* 39 */ @@ -573,9 +581,9 @@ typedef enum { CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ CURLE_OBSOLETE57, /* 57 - NOT IN USE */ CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ - CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */ + CURLE_SSL_CIPHER, /* 59 - could not use specified cipher */ CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint - wasn't verified fine */ + was not verified fine */ CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ @@ -604,7 +612,7 @@ typedef enum { CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL connection */ CURLE_AGAIN, /* 81 - socket is not ready for send/recv, - wait till it's ready and try again (Added + wait till it is ready and try again (Added in 7.18.2) */ CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or wrong format (Added in 7.19.0) */ @@ -632,6 +640,7 @@ typedef enum { CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ CURLE_TOO_LARGE, /* 100 - a value/data met its maximum */ + CURLE_ECH_REQUIRED, /* 101 - ECH tried but failed */ CURL_LAST /* never use! */ } CURLcode; @@ -762,7 +771,7 @@ typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length); typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ void *ssl_ctx, /* actually an OpenSSL - or WolfSSL SSL_CTX, + or wolfSSL SSL_CTX, or an mbedTLS mbedtls_ssl_config */ void *userptr); @@ -779,7 +788,7 @@ typedef enum { CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the - host name rather than the IP address. added + hostname rather than the IP address. added in 7.18.0 */ } curl_proxytype; /* this enum was added in 7.10 */ @@ -811,7 +820,10 @@ typedef enum { #define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE #define CURLAUTH_NTLM (((unsigned long)1)<<3) #define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) +#ifndef CURL_NO_OLDIES + /* functionality removed since 8.8.0 */ #define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) +#endif #define CURLAUTH_BEARER (((unsigned long)1)<<6) #define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) #define CURLAUTH_ONLY (((unsigned long)1)<<31) @@ -856,7 +868,7 @@ enum curl_khstat { CURLKHSTAT_FINE_ADD_TO_FILE, CURLKHSTAT_FINE, CURLKHSTAT_REJECT, /* reject the connection, return an error */ - CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now. + 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 etc */ CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ @@ -1076,7 +1088,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 */ +/* CURLOPT aliases that make no runtime difference */ /* 'char *' argument to a string with a trailing zero */ #define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT @@ -1143,7 +1155,7 @@ typedef enum { * * For large file support, there is also a _LARGE version of the key * which takes an off_t type, allowing platforms with larger off_t - * sizes to handle larger files. See below for INFILESIZE_LARGE. + * sizes to handle larger files. See below for INFILESIZE_LARGE. */ CURLOPT(CURLOPT_INFILESIZE, CURLOPTTYPE_LONG, 14), @@ -1176,7 +1188,7 @@ typedef enum { * * Note there is also a _LARGE version of this key which uses * off_t types, allowing for large file offsets on platforms which - * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. + * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE. */ CURLOPT(CURLOPT_RESUME_FROM, CURLOPTTYPE_LONG, 21), @@ -1312,9 +1324,9 @@ typedef enum { /* Set the interface string to use as outgoing network interface */ CURLOPT(CURLOPT_INTERFACE, CURLOPTTYPE_STRINGPOINT, 62), - /* Set the krb4/5 security level, this also enables krb4/5 awareness. This - * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string - * is set but doesn't match one of these, 'private' will be used. */ + /* Set the krb4/5 security level, this also enables krb4/5 awareness. This + * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string + * is set but does not match one of these, 'private' will be used. */ CURLOPT(CURLOPT_KRBLEVEL, CURLOPTTYPE_STRINGPOINT, 63), /* Set if we should verify the peer in ssl handshake, set 1 to verify. */ @@ -1346,16 +1358,16 @@ typedef enum { /* 73 = OBSOLETE */ /* Set to explicitly use a new connection for the upcoming transfer. - Do not use this unless you're absolutely sure of this, as it makes the + Do not use this unless you are absolutely sure of this, as it makes the 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 reused - when done. Do not use this unless you're absolutely sure of this, as it + when done. Do not use this unless you are 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 + /* Set to a filename that contains random data for libcurl to use to seed the random engine when doing SSL connects. */ CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, 7.84.0, "Serves no purpose anymore"), @@ -1382,8 +1394,8 @@ typedef enum { * provided hostname. */ CURLOPT(CURLOPT_SSL_VERIFYHOST, CURLOPTTYPE_LONG, 81), - /* Specify which file name to write all known cookies in after completed - operation. Set file name to "-" (dash) to make it go to stdout. */ + /* Specify which filename to write all known cookies in after completed + operation. Set filename to "-" (dash) to make it go to stdout. */ CURLOPT(CURLOPT_COOKIEJAR, CURLOPTTYPE_STRINGPOINT, 82), /* Specify which SSL ciphers to use */ @@ -1482,7 +1494,7 @@ typedef enum { CURLOPT(CURLOPT_HTTPAUTH, CURLOPTTYPE_VALUES, 107), /* Set the ssl context callback function, currently only for OpenSSL or - WolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. + wolfSSL ssl_ctx, or mbedTLS mbedtls_ssl_config in the second argument. The function must match the curl_ssl_ctx_callback prototype. */ CURLOPT(CURLOPT_SSL_CTX_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 108), @@ -1502,7 +1514,7 @@ typedef enum { CURLOPT(CURLOPT_PROXYAUTH, CURLOPTTYPE_VALUES, 111), /* Option that changes the timeout, in seconds, associated with getting a - response. This is different from transfer timeout time and essentially + response. This is different from transfer timeout time and essentially places a demand on the server to acknowledge commands in a timely manner. For FTP, SMTP, IMAP and POP3. */ CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT, CURLOPTTYPE_LONG, 112), @@ -1516,7 +1528,7 @@ typedef enum { an HTTP or FTP server. Note there is also _LARGE version which adds large file support for - platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ + platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */ CURLOPT(CURLOPT_MAXFILESIZE, CURLOPTTYPE_LONG, 114), /* See the comment for INFILESIZE above, but in short, specifies @@ -1524,17 +1536,17 @@ typedef enum { */ CURLOPT(CURLOPT_INFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 115), - /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version + /* Sets the continuation offset. There is also a CURLOPTTYPE_LONG version * of this; look above for RESUME_FROM. */ CURLOPT(CURLOPT_RESUME_FROM_LARGE, CURLOPTTYPE_OFF_T, 116), /* Sets the maximum size of data that will be downloaded from - * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. + * an HTTP or FTP server. See MAXFILESIZE above for the LONG version. */ CURLOPT(CURLOPT_MAXFILESIZE_LARGE, CURLOPTTYPE_OFF_T, 117), - /* Set this option to the file name of your .netrc file you want libcurl + /* Set this option to the filename of your .netrc file you want libcurl to parse (using the CURLOPT_NETRC option). If not set, libcurl will do a poor attempt to find the user's home directory and check for a .netrc file in there. */ @@ -1681,7 +1693,7 @@ typedef enum { /* Callback function for opening socket (instead of socket(2)). Optionally, callback is able change the address or refuse to connect returning - CURL_SOCKET_BAD. The callback should have type + CURL_SOCKET_BAD. The callback should have type curl_opensocket_callback */ CURLOPT(CURLOPT_OPENSOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 163), CURLOPT(CURLOPT_OPENSOCKETDATA, CURLOPTTYPE_CBPOINT, 164), @@ -1751,7 +1763,7 @@ typedef enum { CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), - /* set the SSH knownhost file name to use */ + /* set the SSH knownhost filename to use */ CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), /* set the SSH host key callback, must point to a curl_sshkeycallback @@ -1832,7 +1844,7 @@ typedef enum { future libcurl release. libcurl will ask for the compressed methods it knows of, and if that - isn't any, it will not ask for transfer-encoding at all even if this + is not any, it will not ask for transfer-encoding at all even if this option is set to 1. */ @@ -1934,7 +1946,7 @@ typedef enum { /* Service Name */ CURLOPT(CURLOPT_SERVICE_NAME, CURLOPTTYPE_STRINGPOINT, 236), - /* Wait/don't wait for pipe/mutex to clarify */ + /* Wait/do not wait for pipe/mutex to clarify */ CURLOPT(CURLOPT_PIPEWAIT, CURLOPTTYPE_LONG, 237), /* Set the protocol used when curl is given a URL without a protocol */ @@ -2095,7 +2107,7 @@ typedef enum { /* alt-svc control bitmask */ CURLOPT(CURLOPT_ALTSVC_CTRL, CURLOPTTYPE_LONG, 286), - /* alt-svc cache file name to possibly read from/write to */ + /* alt-svc cache filename to possibly read from/write to */ CURLOPT(CURLOPT_ALTSVC, CURLOPTTYPE_STRINGPOINT, 287), /* maximum age (idle time) of a connection to consider it for reuse @@ -2121,13 +2133,13 @@ typedef enum { /* the EC curves requested by the TLS client (RFC 8422, 5.1); * OpenSSL support via 'set_groups'/'set_curves': - * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html + * https://docs.openssl.org/master/man3/SSL_CTX_set1_curves/ */ CURLOPT(CURLOPT_SSL_EC_CURVES, CURLOPTTYPE_STRINGPOINT, 298), /* HSTS bitmask */ CURLOPT(CURLOPT_HSTS_CTRL, CURLOPTTYPE_LONG, 299), - /* HSTS file name */ + /* HSTS filename */ CURLOPT(CURLOPT_HSTS, CURLOPTTYPE_STRINGPOINT, 300), /* HSTS read callback */ @@ -2206,6 +2218,12 @@ typedef enum { /* millisecond version */ CURLOPT(CURLOPT_SERVER_RESPONSE_TIMEOUT_MS, CURLOPTTYPE_LONG, 324), + /* set ECH configuration */ + CURLOPT(CURLOPT_ECH, CURLOPTTYPE_STRINGPOINT, 325), + + /* maximum number of keepalive probes (Linux, *BSD, macOS, etc.) */ + CURLOPT(CURLOPT_TCP_KEEPCNT, CURLOPTTYPE_LONG, 326), + CURLOPT_LASTENTRY /* the last unused */ } CURLoption; @@ -2256,9 +2274,9 @@ typedef enum { /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ enum { - CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd - like the library to choose the best possible - for us! */ + CURL_HTTP_VERSION_NONE, /* setting this means we do not care, and that we + would like the library to choose the best + possible for us! */ CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */ CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ @@ -2311,30 +2329,26 @@ enum CURL_NETRC_OPTION { CURL_NETRC_LAST }; -enum { - CURL_SSLVERSION_DEFAULT, - CURL_SSLVERSION_TLSv1, /* TLS 1.x */ - CURL_SSLVERSION_SSLv2, - CURL_SSLVERSION_SSLv3, - CURL_SSLVERSION_TLSv1_0, - CURL_SSLVERSION_TLSv1_1, - CURL_SSLVERSION_TLSv1_2, - CURL_SSLVERSION_TLSv1_3, - - CURL_SSLVERSION_LAST /* never use, keep last */ -}; +#define CURL_SSLVERSION_DEFAULT 0 +#define CURL_SSLVERSION_TLSv1 1 /* TLS 1.x */ +#define CURL_SSLVERSION_SSLv2 2 +#define CURL_SSLVERSION_SSLv3 3 +#define CURL_SSLVERSION_TLSv1_0 4 +#define CURL_SSLVERSION_TLSv1_1 5 +#define CURL_SSLVERSION_TLSv1_2 6 +#define CURL_SSLVERSION_TLSv1_3 7 -enum { - CURL_SSLVERSION_MAX_NONE = 0, - CURL_SSLVERSION_MAX_DEFAULT = (CURL_SSLVERSION_TLSv1 << 16), - CURL_SSLVERSION_MAX_TLSv1_0 = (CURL_SSLVERSION_TLSv1_0 << 16), - CURL_SSLVERSION_MAX_TLSv1_1 = (CURL_SSLVERSION_TLSv1_1 << 16), - CURL_SSLVERSION_MAX_TLSv1_2 = (CURL_SSLVERSION_TLSv1_2 << 16), - CURL_SSLVERSION_MAX_TLSv1_3 = (CURL_SSLVERSION_TLSv1_3 << 16), +#define CURL_SSLVERSION_LAST 8 /* never use, keep last */ + +#define CURL_SSLVERSION_MAX_NONE 0 +#define CURL_SSLVERSION_MAX_DEFAULT (CURL_SSLVERSION_TLSv1 << 16) +#define CURL_SSLVERSION_MAX_TLSv1_0 (CURL_SSLVERSION_TLSv1_0 << 16) +#define CURL_SSLVERSION_MAX_TLSv1_1 (CURL_SSLVERSION_TLSv1_1 << 16) +#define CURL_SSLVERSION_MAX_TLSv1_2 (CURL_SSLVERSION_TLSv1_2 << 16) +#define CURL_SSLVERSION_MAX_TLSv1_3 (CURL_SSLVERSION_TLSv1_3 << 16) /* never use, keep last */ - CURL_SSLVERSION_MAX_LAST = (CURL_SSLVERSION_LAST << 16) -}; +#define CURL_SSLVERSION_MAX_LAST (CURL_SSLVERSION_LAST << 16) enum CURL_TLSAUTH { CURL_TLSAUTH_NONE, @@ -2422,7 +2436,7 @@ CURL_EXTERN CURLcode curl_mime_name(curl_mimepart *part, const char *name); * * DESCRIPTION * - * Set mime part remote file name. + * Set mime part remote filename. */ CURL_EXTERN CURLcode curl_mime_filename(curl_mimepart *part, const char *filename); @@ -2703,10 +2717,10 @@ CURL_EXTERN CURLcode curl_global_init(long flags); * DESCRIPTION * * curl_global_init() or curl_global_init_mem() should be invoked exactly once - * for each application that uses libcurl. This function can be used to + * for each application that uses libcurl. This function can be used to * initialize libcurl and set user defined memory management callback - * functions. Users can implement memory management routines to check for - * memory leaks, check for mis-use of the curl library etc. User registered + * functions. Users can implement memory management routines to check for + * memory leaks, check for mis-use of the curl library etc. User registered * callback routines will be invoked by this library instead of the system * memory management routines like malloc, free etc. */ @@ -2824,7 +2838,7 @@ CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused); 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 + struct curl_slist **certinfo; /* for each index in this array, there is a linked list with textual information for a certificate in the format "name:content". eg "Subject:foo", "Issuer:bar", etc. */ @@ -3015,7 +3029,7 @@ typedef enum { } CURLSHcode; typedef enum { - CURLSHOPT_NONE, /* don't use */ + CURLSHOPT_NONE, /* do not use */ CURLSHOPT_SHARE, /* specify a data type to share */ CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ @@ -3035,17 +3049,18 @@ CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *share); */ typedef enum { - CURLVERSION_FIRST, - CURLVERSION_SECOND, - CURLVERSION_THIRD, - CURLVERSION_FOURTH, - CURLVERSION_FIFTH, - CURLVERSION_SIXTH, - CURLVERSION_SEVENTH, - CURLVERSION_EIGHTH, - CURLVERSION_NINTH, - CURLVERSION_TENTH, - CURLVERSION_ELEVENTH, + CURLVERSION_FIRST, /* 7.10 */ + CURLVERSION_SECOND, /* 7.11.1 */ + CURLVERSION_THIRD, /* 7.12.0 */ + CURLVERSION_FOURTH, /* 7.16.1 */ + CURLVERSION_FIFTH, /* 7.57.0 */ + CURLVERSION_SIXTH, /* 7.66.0 */ + CURLVERSION_SEVENTH, /* 7.70.0 */ + CURLVERSION_EIGHTH, /* 7.72.0 */ + CURLVERSION_NINTH, /* 7.75.0 */ + CURLVERSION_TENTH, /* 7.77.0 */ + CURLVERSION_ELEVENTH, /* 7.87.0 */ + CURLVERSION_TWELFTH, /* 8.8.0 */ CURLVERSION_LAST /* never actually use this */ } CURLversion; @@ -3054,7 +3069,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_ELEVENTH +#define CURLVERSION_NOW CURLVERSION_TWELFTH struct curl_version_info_data { CURLversion age; /* age of the returned struct */ @@ -3114,6 +3129,9 @@ struct curl_version_info_data { /* These fields were added in CURLVERSION_ELEVENTH */ /* feature_names is terminated by an entry with a NULL feature name */ const char * const *feature_names; + + /* These fields were added in CURLVERSION_TWELFTH */ + const char *rtmp_version; /* human readable string. */ }; typedef struct curl_version_info_data curl_version_info_data; @@ -3154,7 +3172,7 @@ typedef struct curl_version_info_data curl_version_info_data; #define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ #define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ - /* +/* * NAME curl_version_info() * * DESCRIPTION @@ -3170,7 +3188,7 @@ CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion); * DESCRIPTION * * The curl_easy_strerror function may be used to turn a CURLcode value - * into the equivalent human readable error string. This is useful + * into the equivalent human readable error string. This is useful * for printing meaningful error messages. */ CURL_EXTERN const char *curl_easy_strerror(CURLcode); @@ -3181,7 +3199,7 @@ CURL_EXTERN const char *curl_easy_strerror(CURLcode); * DESCRIPTION * * The curl_share_strerror function may be used to turn a CURLSHcode value - * into the equivalent human readable error string. This is useful + * into the equivalent human readable error string. This is useful * for printing meaningful error messages. */ CURL_EXTERN const char *curl_share_strerror(CURLSHcode); @@ -3220,7 +3238,7 @@ CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); #include "websockets.h" #include "mprintf.h" -/* the typechecker doesn't work in C++ (yet) */ +/* the typechecker does not work in C++ (yet) */ #if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) diff --git a/include/curl/curlver.h b/include/curl/curlver.h index 52009e548..dbee9bd4d 100644 --- a/include/curl/curlver.h +++ b/include/curl/curlver.h @@ -32,13 +32,13 @@ /* This is the version number of the libcurl package from which this header file origins: */ -#define LIBCURL_VERSION "8.7.0-DEV" +#define LIBCURL_VERSION "8.9.1" /* The numeric version number is also available "in parts" by using these defines: */ #define LIBCURL_VERSION_MAJOR 8 -#define LIBCURL_VERSION_MINOR 7 -#define LIBCURL_VERSION_PATCH 0 +#define LIBCURL_VERSION_MINOR 9 +#define LIBCURL_VERSION_PATCH 1 /* This is the numeric version of the libcurl version number, meant for easier parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will @@ -48,7 +48,7 @@ Where XX, YY and ZZ are the main version, release and patch numbers in hexadecimal (using 8 bits each). All three numbers are always represented - using two digits. 1.2 would appear as "0x010200" while version 9.11.7 + using two digits. 1.2 would appear as "0x010200" while version 9.11.7 appears as "0x090b07". This 6-digit (24 bits) hexadecimal number does not show pre-release number, @@ -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 0x080700 +#define LIBCURL_VERSION_NUM 0x080901 /* * This is the date and time when the full source package was created. The @@ -70,7 +70,7 @@ * * "2007-11-23" */ -#define LIBCURL_TIMESTAMP "[unreleased]" +#define LIBCURL_TIMESTAMP "2024-07-31" #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 1285101c5..71b8dd467 100644 --- a/include/curl/easy.h +++ b/include/curl/easy.h @@ -50,7 +50,7 @@ CURL_EXTERN void curl_easy_cleanup(CURL *curl); * * 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 + * which is documented in each manpage 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 diff --git a/include/curl/mprintf.h b/include/curl/mprintf.h index 4f704548d..e6bc5bca4 100644 --- a/include/curl/mprintf.h +++ b/include/curl/mprintf.h @@ -32,7 +32,8 @@ extern "C" { #endif -#if (defined(__GNUC__) || defined(__clang__)) && \ +#if (defined(__GNUC__) || defined(__clang__) || \ + defined(__IAR_SYSTEMS_ICC__)) && \ defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ !defined(CURL_NO_FMT_CHECKS) #if defined(__MINGW32__) && !defined(__clang__) diff --git a/include/curl/multi.h b/include/curl/multi.h index e79b48ff3..7b6c351ad 100644 --- a/include/curl/multi.h +++ b/include/curl/multi.h @@ -24,7 +24,7 @@ * ***************************************************************************/ /* - This is an "external" header file. Don't give away any internals here! + This is an "external" header file. Do not give away any internals here! GOALS @@ -66,7 +66,7 @@ typedef enum { CURLM_OK, CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */ CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */ - CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */ + CURLM_OUT_OF_MEMORY, /* if you ever get this, you are in deep sh*t */ CURLM_INTERNAL_ERROR, /* this is a libcurl bug */ CURLM_BAD_SOCKET, /* the passed in socket argument did not match */ CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ @@ -109,7 +109,7 @@ struct CURLMsg { typedef struct CURLMsg CURLMsg; /* Based on poll(2) structure and values. - * We don't use pollfd and POLL* constants explicitly + * We do not use pollfd and POLL* constants explicitly * to cover platforms without poll(). */ #define CURL_WAIT_POLLIN 0x0001 #define CURL_WAIT_POLLPRI 0x0002 @@ -205,7 +205,7 @@ CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); /* * Name: curl_multi_perform() * - * Desc: When the app thinks there's data available for curl it calls this + * Desc: When the app thinks there is data available for curl it calls this * function to read/write whatever there is right now. This returns * as soon as the reads and writes are done. This function does not * require that there actually is data available for reading or that @@ -236,7 +236,7 @@ CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); /* * Name: curl_multi_info_read() * - * Desc: Ask the multi handle if there's any messages/informationals from + * Desc: Ask the multi handle if there is any messages/informationals from * the individual transfers. Messages include informationals such as * error code from the transfer or just the fact that a transfer is * completed. More details on these should be written down as well. @@ -253,7 +253,7 @@ CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); * we will provide the particular "transfer handle" in that struct * and that should/could/would be used in subsequent * curl_easy_getinfo() calls (or similar). The point being that we - * must never expose complex structs to applications, as then we'll + * must never expose complex structs to applications, as then we will * undoubtably get backwards compatibility problems in the future. * * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out @@ -268,7 +268,7 @@ CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle, * Name: curl_multi_strerror() * * Desc: The curl_multi_strerror function may be used to turn a CURLMcode - * value into the equivalent human readable error string. This is + * value into the equivalent human readable error string. This is * useful for printing meaningful error messages. * * Returns: A pointer to a null-terminated error message. @@ -282,7 +282,7 @@ CURL_EXTERN const char *curl_multi_strerror(CURLMcode); * Desc: An alternative version of curl_multi_perform() that allows the * application to pass in one of the file descriptors that have been * detected to have "action" on them and let libcurl perform. - * See man page for details. + * See manpage for details. */ #define CURL_POLL_NONE 0 #define CURL_POLL_IN 1 @@ -464,6 +464,20 @@ typedef int (*curl_push_callback)(CURL *parent, struct curl_pushheaders *headers, void *userp); +/* + * Name: curl_multi_waitfds() + * + * Desc: Ask curl for fds for polling. The app can use these to poll on. + * We want curl_multi_perform() called as soon as one of them are + * ready. Passing zero size allows to get just a number of fds. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_waitfds(CURLM *multi, + struct curl_waitfd *ufds, + unsigned int size, + unsigned int *fd_count); + #ifdef __cplusplus } /* end of extern "C" */ #endif diff --git a/include/curl/system.h b/include/curl/system.h index 81a1b817d..363914f20 100644 --- a/include/curl/system.h +++ b/include/curl/system.h @@ -46,7 +46,7 @@ * As a general rule, curl_off_t shall not be mapped to off_t. This rule shall * only be violated if off_t is the only 64-bit data type available and the * size of off_t is independent of large file support settings. Keep your - * build on the safe side avoiding an off_t gating. If you have a 64-bit + * build on the safe side avoiding an off_t gating. If you have a 64-bit * off_t then take for sure that another 64-bit data type exists, dig deeper * and you will find it. * @@ -402,7 +402,7 @@ # define CURL_PULL_SYS_SOCKET_H 1 #else -/* generic "safe guess" on old 32 bit style */ +/* generic "safe guess" on old 32-bit style */ # define CURL_TYPEOF_CURL_OFF_T long # define CURL_FORMAT_CURL_OFF_T "ld" # define CURL_FORMAT_CURL_OFF_TU "lu" diff --git a/include/curl/typecheck-gcc.h b/include/curl/typecheck-gcc.h index b880f3dc6..e532e6997 100644 --- a/include/curl/typecheck-gcc.h +++ b/include/curl/typecheck-gcc.h @@ -34,11 +34,11 @@ * _curl_easy_setopt_err_sometype below * * NOTE: We use two nested 'if' statements here instead of the && operator, in - * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x + * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x * when compiling with -Wlogical-op. * - * To add an option that uses the same type as an existing option, you'll just - * need to extend the appropriate _curl_*_option macro + * To add an option that uses the same type as an existing option, you will + * just need to extend the appropriate _curl_*_option macro */ #define curl_easy_setopt(handle, option, value) \ __extension__({ \ @@ -245,7 +245,7 @@ CURLWARNING(_curl_easy_getinfo_err_curl_off_t, /* To add a new option to one of the groups, just add * (option) == CURLOPT_SOMETHING - * to the or-expression. If the option takes a long or curl_off_t, you don't + * to the or-expression. If the option takes a long or curl_off_t, you do not * have to do anything */ @@ -275,6 +275,7 @@ CURLWARNING(_curl_easy_getinfo_err_curl_off_t, (option) == CURLOPT_DNS_LOCAL_IP6 || \ (option) == CURLOPT_DNS_SERVERS || \ (option) == CURLOPT_DOH_URL || \ + (option) == CURLOPT_ECH || \ (option) == CURLOPT_EGDSOCKET || \ (option) == CURLOPT_FTP_ACCOUNT || \ (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ @@ -677,7 +678,7 @@ typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, const void *); #ifdef HEADER_SSL_H /* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX - * this will of course break if we're included before OpenSSL headers... + * this will of course break if we are included before OpenSSL headers... */ typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *); typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *); diff --git a/include/curl/urlapi.h b/include/curl/urlapi.h index 91f8c4548..b4a6e5d56 100644 --- a/include/curl/urlapi.h +++ b/include/curl/urlapi.h @@ -97,8 +97,12 @@ 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_PUNYCODE (1<<12) /* get the hostname in punycode */ #define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */ +#define CURLU_GET_EMPTY (1<<14) /* allow empty queries and fragments + when extracting the URL or the + components */ +#define CURLU_NO_GUESS_SCHEME (1<<15) /* for get, do not accept a guess */ typedef struct Curl_URL CURLU; @@ -139,7 +143,7 @@ CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what, /* * curl_url_strerror() turns a CURLUcode value into the equivalent human - * readable error string. This is useful for printing meaningful error + * readable error string. This is useful for printing meaningful error * messages. */ CURL_EXTERN const char *curl_url_strerror(CURLUcode); diff --git a/lib/.gitattributes b/lib/.gitattributes deleted file mode 100644 index 7e1eea50f..000000000 --- a/lib/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl diff --git a/lib/.gitignore b/lib/.gitignore deleted file mode 100644 index 7528196ed..000000000 --- a/lib/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -*.a -*.imp -*.nlm -*.orig -*.rej -*.res -TAGS -curl_config.h -curl_config.h.in -libcurl.plist.dist -libcurl.plist -libcurl.vers -stamp-h1 diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 51d52578e..63e5b9139 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -31,9 +31,10 @@ configure_file(curl_config.h.cmake transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake) -list(APPEND HHEADERS - ${CMAKE_CURRENT_BINARY_DIR}/curl_config.h - ) +# DllMain is added later for DLL builds only. +list(REMOVE_ITEM CSOURCES dllmain.c) + +list(APPEND HHEADERS ${CMAKE_CURRENT_BINARY_DIR}/curl_config.h) # The rest of the build @@ -55,6 +56,7 @@ if(BUILD_TESTING) ${HHEADERS} ${CSOURCES} ) target_compile_definitions(curlu PUBLIC UNITTESTS CURL_STATICLIB) + target_link_libraries(curlu PRIVATE ${CURL_LIBS}) endif() if(ENABLE_CURLDEBUG) @@ -63,33 +65,6 @@ if(ENABLE_CURLDEBUG) set_source_files_properties(memdebug.c curl_multibyte.c PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON) endif() -if(BUILD_TESTING) - target_link_libraries(curlu PRIVATE ${CURL_LIBS}) -endif() - -transform_makefile_inc("Makefile.soname" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake") -include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake) - -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") - - math(EXPR CMAKESONAME "${VERSIONCHANGE} - ${VERSIONDEL}") - set(CMAKEVERSION "${CMAKESONAME}.${VERSIONDEL}.${VERSIONADD}") -else() - unset(CMAKESONAME) -endif() - ## Library definition # Add "_imp" as a suffix before the extension to avoid conflicting with @@ -114,17 +89,17 @@ if(NOT DEFINED SHARE_LIB_OBJECT) endif() endif() -if(WIN32) - # 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}) + if(WIN32) + # 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. + set_property(TARGET ${LIB_OBJECT} APPEND + PROPERTY COMPILE_DEFINITIONS "CURL_STATICLIB") + endif() target_link_libraries(${LIB_OBJECT} PRIVATE ${CURL_LIBS}) set_target_properties(${LIB_OBJECT} PROPERTIES POSITION_INDEPENDENT_CODE ON) @@ -152,6 +127,10 @@ 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}) + if(WIN32) + set_property(TARGET ${LIB_OBJECT} APPEND + PROPERTY COMPILE_DEFINITIONS "CURL_STATICLIB") + endif() 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 @@ -167,10 +146,6 @@ if(BUILD_STATIC_LIBS) 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 $ @@ -181,6 +156,15 @@ 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 OR CYGWIN) + if(CYGWIN) + # For Cygwin always compile dllmain.c as a separate unit since it + # includes windows.h, which should not be included in other units. + set_source_files_properties(dllmain.c PROPERTIES + SKIP_UNITY_BUILD_INCLUSION ON) + endif() + set_property(TARGET ${LIB_SHARED} APPEND PROPERTY SOURCES dllmain.c) + endif() if(WIN32) set_property(TARGET ${LIB_SHARED} APPEND PROPERTY SOURCES libcurl.rc) if(HIDES_CURL_PRIVATE_SYMBOLS) @@ -202,14 +186,40 @@ if(BUILD_SHARED_LIBS) 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 $ $) + + if(CMAKE_DLL_NAME_WITH_SOVERSION OR + CYGWIN OR + APPLE OR + CMAKE_SYSTEM_NAME STREQUAL "AIX" OR + CMAKE_SYSTEM_NAME STREQUAL "Linux" OR + CMAKE_SYSTEM_NAME STREQUAL "SunOS" OR + CMAKE_SYSTEM_NAME STREQUAL "Haiku" OR + CMAKE_SYSTEM_NAME STREQUAL "GNU/kFreeBSD" OR + # FreeBSD comes with the a.out and ELF flavours but a.out was supported + # up to v3.x and ELF from v3.x. I cannot imagine someone running CMake + # on those ancient systems. + CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(soversion_default TRUE) + else() + set(soversion_default FALSE) + endif() + + option(CURL_LIBCURL_SOVERSION "Enable libcurl SOVERSION" ${soversion_default}) + + if(CURL_LIBCURL_SOVERSION) + transform_makefile_inc("Makefile.soname" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake") + include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.soname.cmake) + + math(EXPR CMAKESONAME "${VERSIONCHANGE} - ${VERSIONDEL}") + set(CMAKEVERSION "${CMAKESONAME}.${VERSIONDEL}.${VERSIONADD}") + + set_target_properties(${LIB_SHARED} PROPERTIES + VERSION "${CMAKEVERSION}" SOVERSION "${CMAKESONAME}") + endif() endif() add_library(${LIB_NAME} ALIAS ${LIB_SELECTED}) diff --git a/lib/Makefile.am b/lib/Makefile.am index 1237c8e99..413fcd4d5 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -25,11 +25,10 @@ AUTOMAKE_OPTIONS = foreign nostdinc CMAKE_DIST = CMakeLists.txt curl_config.h.cmake -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 +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.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 @@ -127,7 +126,7 @@ checksrc: -W$(srcdir)/curl_config.h $(srcdir)/*.[ch] $(srcdir)/vauth/*.[ch] \ $(srcdir)/vtls/*.[ch] $(srcdir)/vquic/*.[ch] $(srcdir)/vssh/*.[ch]) -if CURLDEBUG +if DEBUGBUILD # for debug builds, we scan the sources on all regular make invokes all-local: checksrc endif diff --git a/lib/Makefile.in b/lib/Makefile.in index 74f1d410d..e0a7c4f94 100644 --- a/lib/Makefile.in +++ b/lib/Makefile.in @@ -21,7 +21,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -45,7 +45,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -154,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 \ @@ -168,7 +168,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.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 \ @@ -179,7 +178,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = curl_config.h -CONFIG_CLEAN_FILES = libcurl.vers libcurl.plist +CONFIG_CLEAN_FILES = libcurl.vers CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ @@ -212,121 +211,132 @@ 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 cfilters.c \ - conncache.c connect.c content_encoding.c cookie.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 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 \ + curl_memrchr.c curl_multibyte.c curl_ntlm_core.c curl_path.c \ + curl_range.c curl_rtmp.c curl_sasl.c curl_sha512_256.c \ + curl_sspi.c curl_threads.c curl_trc.c cw-out.c dict.c \ + dllmain.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 http_aws_sigv4.c idn.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 \ + 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 \ + rand.c rename.c request.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 \ - 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 \ + 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/cipher_suite.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/msh3.c vquic/ngtcp2.c vquic/quiche.c vquic/vquic.c \ + vquic/curl_msh3.c vquic/curl_ngtcp2.c vquic/curl_osslq.c \ + vquic/curl_quiche.c vquic/vquic.c vquic/vquic-tls.c \ vssh/libssh.c vssh/libssh2.c vssh/wolfssh.c altsvc.h amigaos.h \ - arpa_telnet.h asyn.h bufref.h c-hyper.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 \ + 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_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 idn.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 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 \ + curl_setup_once.h curl_sha256.h curl_sha512_256.h curl_sspi.h \ + curl_threads.h curl_trc.h curlx.h cw-out.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 request.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 ws.h \ + vauth/digest.h vauth/ntlm.h vauth/vauth.h vtls/bearssl.h \ + vtls/cipher_suite.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/msh3.h vquic/ngtcp2.h vquic/quiche.h \ - vquic/vquic.h vssh/ssh.h libcurl.rc + vtls/x509asn1.h vquic/curl_msh3.h vquic/curl_ngtcp2.h \ + vquic/curl_osslq.h vquic/curl_quiche.h vquic/vquic.h \ + vquic/vquic_int.h vquic/vquic-tls.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-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 libcurl_la-curl_fnmatch.lo \ - libcurl_la-curl_get_line.lo libcurl_la-curl_gethostname.lo \ - libcurl_la-curl_gssapi.lo libcurl_la-curl_memrchr.lo \ - libcurl_la-curl_multibyte.lo libcurl_la-curl_ntlm_core.lo \ - libcurl_la-curl_ntlm_wb.lo libcurl_la-curl_path.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 \ + libcurl_la-curl_fnmatch.lo libcurl_la-curl_get_line.lo \ + libcurl_la-curl_gethostname.lo libcurl_la-curl_gssapi.lo \ + libcurl_la-curl_memrchr.lo libcurl_la-curl_multibyte.lo \ + libcurl_la-curl_ntlm_core.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-curl_sasl.lo libcurl_la-curl_sha512_256.lo \ + libcurl_la-curl_sspi.lo libcurl_la-curl_threads.lo \ + libcurl_la-curl_trc.lo libcurl_la-cw-out.lo libcurl_la-dict.lo \ + libcurl_la-dllmain.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.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 \ libcurl_la-noproxy.lo libcurl_la-openldap.lo \ libcurl_la-parsedate.lo libcurl_la-pingpong.lo \ libcurl_la-pop3.lo libcurl_la-progress.lo libcurl_la-psl.lo \ - libcurl_la-rand.lo libcurl_la-rename.lo libcurl_la-rtsp.lo \ - libcurl_la-select.lo libcurl_la-sendf.lo libcurl_la-setopt.lo \ - libcurl_la-sha256.lo libcurl_la-share.lo libcurl_la-slist.lo \ - libcurl_la-smb.lo libcurl_la-smtp.lo libcurl_la-socketpair.lo \ - libcurl_la-socks.lo libcurl_la-socks_gssapi.lo \ - libcurl_la-socks_sspi.lo libcurl_la-speedcheck.lo \ - libcurl_la-splay.lo libcurl_la-strcase.lo libcurl_la-strdup.lo \ + libcurl_la-rand.lo libcurl_la-rename.lo libcurl_la-request.lo \ + libcurl_la-rtsp.lo libcurl_la-select.lo libcurl_la-sendf.lo \ + libcurl_la-setopt.lo libcurl_la-sha256.lo libcurl_la-share.lo \ + libcurl_la-slist.lo libcurl_la-smb.lo libcurl_la-smtp.lo \ + libcurl_la-socketpair.lo libcurl_la-socks.lo \ + libcurl_la-socks_gssapi.lo libcurl_la-socks_sspi.lo \ + libcurl_la-speedcheck.lo libcurl_la-splay.lo \ + libcurl_la-strcase.lo libcurl_la-strdup.lo \ libcurl_la-strerror.lo libcurl_la-strtok.lo \ libcurl_la-strtoofft.lo libcurl_la-system_win32.lo \ libcurl_la-telnet.lo libcurl_la-tftp.lo libcurl_la-timediff.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 \ @@ -335,16 +345,19 @@ 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-cipher_suite.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_osslq.lo \ + vquic/libcurl_la-curl_quiche.lo vquic/libcurl_la-vquic.lo \ + vquic/libcurl_la-vquic-tls.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) \ @@ -367,8 +380,11 @@ 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-cfilters.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 \ @@ -376,37 +392,41 @@ am__objects_11 = libcurlu_la-altsvc.lo libcurlu_la-amigaos.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-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-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-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-curl_path.lo libcurlu_la-curl_range.lo \ + libcurlu_la-curl_rtmp.lo libcurlu_la-curl_sasl.lo \ + libcurlu_la-curl_sha512_256.lo libcurlu_la-curl_sspi.lo \ + libcurlu_la-curl_threads.lo libcurlu_la-curl_trc.lo \ + libcurlu_la-cw-out.lo libcurlu_la-dict.lo \ + libcurlu_la-dllmain.lo libcurlu_la-doh.lo \ + libcurlu_la-dynbuf.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-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-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 \ libcurlu_la-pingpong.lo libcurlu_la-pop3.lo \ libcurlu_la-progress.lo libcurlu_la-psl.lo libcurlu_la-rand.lo \ - libcurlu_la-rename.lo libcurlu_la-rtsp.lo \ - libcurlu_la-select.lo libcurlu_la-sendf.lo \ + libcurlu_la-rename.lo libcurlu_la-request.lo \ + libcurlu_la-rtsp.lo libcurlu_la-select.lo libcurlu_la-sendf.lo \ libcurlu_la-setopt.lo libcurlu_la-sha256.lo \ libcurlu_la-share.lo libcurlu_la-slist.lo libcurlu_la-smb.lo \ libcurlu_la-smtp.lo libcurlu_la-socketpair.lo \ @@ -420,8 +440,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 \ @@ -430,17 +449,21 @@ 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-cipher_suite.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_osslq.lo \ + vquic/libcurlu_la-curl_quiche.lo vquic/libcurlu_la-vquic.lo \ + vquic/libcurlu_la-vquic-tls.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) \ @@ -471,8 +494,14 @@ 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 \ @@ -488,15 +517,20 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \ ./$(DEPDIR)/libcurl_la-curl_memrchr.Plo \ ./$(DEPDIR)/libcurl_la-curl_multibyte.Plo \ ./$(DEPDIR)/libcurl_la-curl_ntlm_core.Plo \ - ./$(DEPDIR)/libcurl_la-curl_ntlm_wb.Plo \ ./$(DEPDIR)/libcurl_la-curl_path.Plo \ ./$(DEPDIR)/libcurl_la-curl_range.Plo \ ./$(DEPDIR)/libcurl_la-curl_rtmp.Plo \ ./$(DEPDIR)/libcurl_la-curl_sasl.Plo \ + ./$(DEPDIR)/libcurl_la-curl_sha512_256.Plo \ ./$(DEPDIR)/libcurl_la-curl_sspi.Plo \ ./$(DEPDIR)/libcurl_la-curl_threads.Plo \ - ./$(DEPDIR)/libcurl_la-dict.Plo ./$(DEPDIR)/libcurl_la-doh.Plo \ + ./$(DEPDIR)/libcurl_la-curl_trc.Plo \ + ./$(DEPDIR)/libcurl_la-cw-out.Plo \ + ./$(DEPDIR)/libcurl_la-dict.Plo \ + ./$(DEPDIR)/libcurl_la-dllmain.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 \ @@ -510,7 +544,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 \ @@ -521,6 +554,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 \ @@ -536,6 +570,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 \ @@ -552,6 +587,7 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \ ./$(DEPDIR)/libcurl_la-progress.Plo \ ./$(DEPDIR)/libcurl_la-psl.Plo ./$(DEPDIR)/libcurl_la-rand.Plo \ ./$(DEPDIR)/libcurl_la-rename.Plo \ + ./$(DEPDIR)/libcurl_la-request.Plo \ ./$(DEPDIR)/libcurl_la-rtsp.Plo \ ./$(DEPDIR)/libcurl_la-select.Plo \ ./$(DEPDIR)/libcurl_la-sendf.Plo \ @@ -582,15 +618,20 @@ 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 \ @@ -606,16 +647,20 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \ ./$(DEPDIR)/libcurlu_la-curl_memrchr.Plo \ ./$(DEPDIR)/libcurlu_la-curl_multibyte.Plo \ ./$(DEPDIR)/libcurlu_la-curl_ntlm_core.Plo \ - ./$(DEPDIR)/libcurlu_la-curl_ntlm_wb.Plo \ ./$(DEPDIR)/libcurlu_la-curl_path.Plo \ ./$(DEPDIR)/libcurlu_la-curl_range.Plo \ ./$(DEPDIR)/libcurlu_la-curl_rtmp.Plo \ ./$(DEPDIR)/libcurlu_la-curl_sasl.Plo \ + ./$(DEPDIR)/libcurlu_la-curl_sha512_256.Plo \ ./$(DEPDIR)/libcurlu_la-curl_sspi.Plo \ ./$(DEPDIR)/libcurlu_la-curl_threads.Plo \ + ./$(DEPDIR)/libcurlu_la-curl_trc.Plo \ + ./$(DEPDIR)/libcurlu_la-cw-out.Plo \ ./$(DEPDIR)/libcurlu_la-dict.Plo \ + ./$(DEPDIR)/libcurlu_la-dllmain.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 \ @@ -629,7 +674,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 \ @@ -640,6 +684,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 \ @@ -655,6 +700,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 \ @@ -673,6 +719,7 @@ am__depfiles_remade = ./$(DEPDIR)/libcurl_la-altsvc.Plo \ ./$(DEPDIR)/libcurlu_la-psl.Plo \ ./$(DEPDIR)/libcurlu_la-rand.Plo \ ./$(DEPDIR)/libcurlu_la-rename.Plo \ + ./$(DEPDIR)/libcurlu_la-request.Plo \ ./$(DEPDIR)/libcurlu_la-rtsp.Plo \ ./$(DEPDIR)/libcurlu_la-select.Plo \ ./$(DEPDIR)/libcurlu_la-sendf.Plo \ @@ -704,7 +751,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 \ @@ -732,13 +778,17 @@ 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_osslq.Plo \ + vquic/$(DEPDIR)/libcurl_la-curl_quiche.Plo \ + vquic/$(DEPDIR)/libcurl_la-vquic-tls.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_osslq.Plo \ + vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Plo \ + vquic/$(DEPDIR)/libcurlu_la-vquic-tls.Plo \ vquic/$(DEPDIR)/libcurlu_la-vquic.Plo \ vssh/$(DEPDIR)/libcurl_la-libssh.Plo \ vssh/$(DEPDIR)/libcurl_la-libssh2.Plo \ @@ -747,13 +797,12 @@ 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-cipher_suite.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 \ @@ -763,13 +812,12 @@ 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-cipher_suite.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 \ @@ -824,12 +872,13 @@ am__define_uniq_tagged_files = \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \ $(srcdir)/Makefile.soname $(srcdir)/curl_config.h.in \ - $(srcdir)/libcurl.plist.in $(srcdir)/libcurl.vers.in \ - $(top_srcdir)/depcomp + $(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@ @@ -838,6 +887,7 @@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@ +CADDY = @CADDY@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ @@ -872,7 +922,6 @@ 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@ @@ -898,9 +947,12 @@ HAVE_BROTLI = @HAVE_BROTLI@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_OPENSSL_QUIC = @HAVE_OPENSSL_QUIC@ 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@ @@ -913,6 +965,8 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCURL_LIBS = @LIBCURL_LIBS@ LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ LIBOBJS = @LIBOBJS@ # Prevent LIBS from being used for all link targets @@ -925,12 +979,9 @@ 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@ -NSS_LIBS = @NSS_LIBS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ @@ -966,6 +1017,7 @@ USE_ARES = @USE_ARES@ USE_BEARSSL = @USE_BEARSSL@ USE_GNUTLS = @USE_GNUTLS@ USE_HYPER = @USE_HYPER@ +USE_LIBPSL = @USE_LIBPSL@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ @@ -974,11 +1026,14 @@ USE_MSH3 = @USE_MSH3@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ +USE_NGTCP2_CRYPTO_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ 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_NGTCP2_H3 = @USE_NGTCP2_H3@ USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ USE_QUICHE = @USE_QUICHE@ USE_RUSTLS = @USE_RUSTLS@ USE_SCHANNEL = @USE_SCHANNEL@ @@ -992,6 +1047,7 @@ USE_WOLFSSH = @USE_WOLFSSH@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ +VSFTPD = @VSFTPD@ ZLIB_LIBS = @ZLIB_LIBS@ ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ abs_builddir = @abs_builddir@ @@ -1056,7 +1112,7 @@ top_srcdir = @top_srcdir@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -1074,11 +1130,10 @@ top_srcdir = @top_srcdir@ ########################################################################### AUTOMAKE_OPTIONS = foreign nostdinc CMAKE_DIST = CMakeLists.txt curl_config.h.cmake -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 +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.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 = @@ -1124,13 +1179,12 @@ LIB_VAUTH_HFILES = \ LIB_VTLS_CFILES = \ vtls/bearssl.c \ - vtls/gskit.c \ + vtls/cipher_suite.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 \ @@ -1142,16 +1196,16 @@ LIB_VTLS_CFILES = \ LIB_VTLS_HFILES = \ vtls/bearssl.h \ - vtls/gskit.h \ + vtls/cipher_suite.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 \ @@ -1159,16 +1213,21 @@ LIB_VTLS_HFILES = \ vtls/x509asn1.h LIB_VQUIC_CFILES = \ - vquic/msh3.c \ - vquic/ngtcp2.c \ - vquic/quiche.c \ - vquic/vquic.c + vquic/curl_msh3.c \ + vquic/curl_ngtcp2.c \ + vquic/curl_osslq.c \ + vquic/curl_quiche.c \ + vquic/vquic.c \ + vquic/vquic-tls.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_osslq.h \ + vquic/curl_quiche.h \ + vquic/vquic.h \ + vquic/vquic_int.h \ + vquic/vquic-tls.h LIB_VSSH_CFILES = \ vssh/libssh.c \ @@ -1184,8 +1243,14 @@ 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 \ @@ -1201,16 +1266,20 @@ LIB_CFILES = \ 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_sha512_256.c \ curl_sspi.c \ curl_threads.c \ + curl_trc.c \ + cw-out.c \ dict.c \ + dllmain.c \ doh.c \ dynbuf.c \ + dynhds.c \ easy.c \ easygetopt.c \ easyoptions.c \ @@ -1224,7 +1293,6 @@ LIB_CFILES = \ getenv.c \ getinfo.c \ gopher.c \ - h2h3.c \ hash.c \ headers.c \ hmac.c \ @@ -1235,13 +1303,14 @@ 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.c \ if2ip.c \ imap.c \ @@ -1250,6 +1319,7 @@ LIB_CFILES = \ krb5.c \ ldap.c \ llist.c \ + macos.c \ md4.c \ md5.c \ memdebug.c \ @@ -1268,6 +1338,7 @@ LIB_CFILES = \ psl.c \ rand.c \ rename.c \ + request.c \ rtsp.c \ select.c \ sendf.c \ @@ -1299,7 +1370,6 @@ LIB_CFILES = \ version.c \ version_win32.c \ warnless.c \ - wildcard.c \ ws.c LIB_HFILES = \ @@ -1307,8 +1377,14 @@ 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 \ @@ -1332,7 +1408,6 @@ LIB_HFILES = \ curl_memrchr.h \ curl_multibyte.h \ curl_ntlm_core.h \ - curl_ntlm_wb.h \ curl_path.h \ curl_printf.h \ curl_range.h \ @@ -1341,12 +1416,16 @@ LIB_HFILES = \ curl_setup.h \ curl_setup_once.h \ curl_sha256.h \ + curl_sha512_256.h \ curl_sspi.h \ curl_threads.h \ + curl_trc.h \ curlx.h \ + cw-out.h \ dict.h \ doh.h \ dynbuf.h \ + dynhds.h \ easy_lock.h \ easyif.h \ easyoptions.h \ @@ -1355,30 +1434,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 \ @@ -1392,9 +1472,9 @@ LIB_HFILES = \ pop3.h \ progress.h \ psl.h \ - quic.h \ rand.h \ rename.h \ + request.h \ rtsp.h \ select.h \ sendf.h \ @@ -1426,7 +1506,6 @@ LIB_HFILES = \ urldata.h \ version_win32.h \ warnless.h \ - wildcard.h \ ws.h LIB_RCFILES = libcurl.rc @@ -1445,7 +1524,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) @@ -1510,8 +1589,6 @@ distclean-hdr: -rm -f curl_config.h stamp-h1 libcurl.vers: $(top_builddir)/config.status $(srcdir)/libcurl.vers.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -libcurl.plist: $(top_builddir)/config.status $(srcdir)/libcurl.plist.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @@ -1598,7 +1675,7 @@ 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/libcurl_la-cipher_suite.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurl_la-gtls.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) @@ -1610,8 +1687,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) \ @@ -1634,14 +1709,18 @@ 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_osslq.lo: vquic/$(am__dirstamp) \ + vquic/$(DEPDIR)/$(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) +vquic/libcurl_la-vquic-tls.lo: vquic/$(am__dirstamp) \ + vquic/$(DEPDIR)/$(am__dirstamp) vssh/$(am__dirstamp): @$(MKDIR_P) vssh @: > vssh/$(am__dirstamp) @@ -1685,7 +1764,7 @@ 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/libcurlu_la-cipher_suite.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) vtls/libcurlu_la-gtls.lo: vtls/$(am__dirstamp) \ vtls/$(DEPDIR)/$(am__dirstamp) @@ -1697,8 +1776,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) \ @@ -1715,14 +1792,18 @@ 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-curl_ngtcp2.lo: vquic/$(am__dirstamp) \ vquic/$(DEPDIR)/$(am__dirstamp) -vquic/libcurlu_la-ngtcp2.lo: vquic/$(am__dirstamp) \ +vquic/libcurlu_la-curl_osslq.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) +vquic/libcurlu_la-vquic-tls.lo: vquic/$(am__dirstamp) \ + vquic/$(DEPDIR)/$(am__dirstamp) vssh/libcurlu_la-libssh.lo: vssh/$(am__dirstamp) \ vssh/$(DEPDIR)/$(am__dirstamp) vssh/libcurlu_la-libssh2.lo: vssh/$(am__dirstamp) \ @@ -1752,8 +1833,14 @@ 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 @@ -1769,16 +1856,20 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_memrchr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_multibyte.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_ntlm_core.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_ntlm_wb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_path.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_range.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_rtmp.Plo@am__quote@ # am--include-marker @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_sha512_256.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-cw-out.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-dllmain.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 @@ -1792,7 +1883,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 @@ -1803,6 +1893,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 @@ -1818,6 +1909,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 @@ -1836,6 +1928,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-psl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rand.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rename.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rtsp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-select.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-sendf.Plo@am__quote@ # am--include-marker @@ -1867,15 +1960,20 @@ 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 @@ -1891,16 +1989,20 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_memrchr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_multibyte.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_ntlm_core.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_ntlm_wb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_path.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_range.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_rtmp.Plo@am__quote@ # am--include-marker @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_sha512_256.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-cw-out.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-dllmain.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 @@ -1914,7 +2016,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 @@ -1925,6 +2026,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 @@ -1940,6 +2042,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 @@ -1958,6 +2061,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-psl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rand.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rename.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-request.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rtsp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-select.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-sendf.Plo@am__quote@ # am--include-marker @@ -1989,7 +2093,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 @@ -2017,13 +2120,17 @@ 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_osslq.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-tls.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_osslq.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-tls.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 @@ -2032,13 +2139,12 @@ 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-cipher_suite.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 @@ -2048,13 +2154,12 @@ 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-cipher_suite.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 @@ -2129,6 +2234,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 @@ -2143,6 +2255,41 @@ 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 @@ -2248,13 +2395,6 @@ libcurl_la-curl_ntlm_core.lo: curl_ntlm_core.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_ntlm_core.lo `test -f 'curl_ntlm_core.c' || echo '$(srcdir)/'`curl_ntlm_core.c -libcurl_la-curl_ntlm_wb.lo: curl_ntlm_wb.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_ntlm_wb.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_ntlm_wb.Tpo -c -o libcurl_la-curl_ntlm_wb.lo `test -f 'curl_ntlm_wb.c' || echo '$(srcdir)/'`curl_ntlm_wb.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_ntlm_wb.Tpo $(DEPDIR)/libcurl_la-curl_ntlm_wb.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl_ntlm_wb.c' object='libcurl_la-curl_ntlm_wb.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_ntlm_wb.lo `test -f 'curl_ntlm_wb.c' || echo '$(srcdir)/'`curl_ntlm_wb.c - libcurl_la-curl_path.lo: curl_path.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_path.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_path.Tpo -c -o libcurl_la-curl_path.lo `test -f 'curl_path.c' || echo '$(srcdir)/'`curl_path.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_path.Tpo $(DEPDIR)/libcurl_la-curl_path.Plo @@ -2283,6 +2423,13 @@ libcurl_la-curl_sasl.lo: curl_sasl.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_sasl.lo `test -f 'curl_sasl.c' || echo '$(srcdir)/'`curl_sasl.c +libcurl_la-curl_sha512_256.lo: curl_sha512_256.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_sha512_256.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_sha512_256.Tpo -c -o libcurl_la-curl_sha512_256.lo `test -f 'curl_sha512_256.c' || echo '$(srcdir)/'`curl_sha512_256.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_sha512_256.Tpo $(DEPDIR)/libcurl_la-curl_sha512_256.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl_sha512_256.c' object='libcurl_la-curl_sha512_256.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_sha512_256.lo `test -f 'curl_sha512_256.c' || echo '$(srcdir)/'`curl_sha512_256.c + libcurl_la-curl_sspi.lo: curl_sspi.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_sspi.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_sspi.Tpo -c -o libcurl_la-curl_sspi.lo `test -f 'curl_sspi.c' || echo '$(srcdir)/'`curl_sspi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_sspi.Tpo $(DEPDIR)/libcurl_la-curl_sspi.Plo @@ -2297,6 +2444,20 @@ 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-cw-out.lo: cw-out.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-cw-out.lo -MD -MP -MF $(DEPDIR)/libcurl_la-cw-out.Tpo -c -o libcurl_la-cw-out.lo `test -f 'cw-out.c' || echo '$(srcdir)/'`cw-out.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-cw-out.Tpo $(DEPDIR)/libcurl_la-cw-out.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cw-out.c' object='libcurl_la-cw-out.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-cw-out.lo `test -f 'cw-out.c' || echo '$(srcdir)/'`cw-out.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 @@ -2304,6 +2465,13 @@ libcurl_la-dict.lo: dict.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-dict.lo `test -f 'dict.c' || echo '$(srcdir)/'`dict.c +libcurl_la-dllmain.lo: dllmain.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-dllmain.lo -MD -MP -MF $(DEPDIR)/libcurl_la-dllmain.Tpo -c -o libcurl_la-dllmain.lo `test -f 'dllmain.c' || echo '$(srcdir)/'`dllmain.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-dllmain.Tpo $(DEPDIR)/libcurl_la-dllmain.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dllmain.c' object='libcurl_la-dllmain.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-dllmain.lo `test -f 'dllmain.c' || echo '$(srcdir)/'`dllmain.c + libcurl_la-doh.lo: doh.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-doh.lo -MD -MP -MF $(DEPDIR)/libcurl_la-doh.Tpo -c -o libcurl_la-doh.lo `test -f 'doh.c' || echo '$(srcdir)/'`doh.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-doh.Tpo $(DEPDIR)/libcurl_la-doh.Plo @@ -2318,6 +2486,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 @@ -2409,13 +2584,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 @@ -2486,6 +2654,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 @@ -2493,6 +2668,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 @@ -2528,13 +2710,6 @@ 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.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 @@ -2591,6 +2766,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 @@ -2717,6 +2899,13 @@ libcurl_la-rename.lo: rename.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-rename.lo `test -f 'rename.c' || echo '$(srcdir)/'`rename.c +libcurl_la-request.lo: request.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-request.lo -MD -MP -MF $(DEPDIR)/libcurl_la-request.Tpo -c -o libcurl_la-request.lo `test -f 'request.c' || echo '$(srcdir)/'`request.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-request.Tpo $(DEPDIR)/libcurl_la-request.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='request.c' object='libcurl_la-request.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-request.lo `test -f 'request.c' || echo '$(srcdir)/'`request.c + libcurl_la-rtsp.lo: rtsp.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-rtsp.lo -MD -MP -MF $(DEPDIR)/libcurl_la-rtsp.Tpo -c -o libcurl_la-rtsp.lo `test -f 'rtsp.c' || echo '$(srcdir)/'`rtsp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-rtsp.Tpo $(DEPDIR)/libcurl_la-rtsp.Plo @@ -2934,13 +3123,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 @@ -3046,12 +3228,12 @@ 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@ +vtls/libcurl_la-cipher_suite.lo: vtls/cipher_suite.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-cipher_suite.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-cipher_suite.Tpo -c -o vtls/libcurl_la-cipher_suite.lo `test -f 'vtls/cipher_suite.c' || echo '$(srcdir)/'`vtls/cipher_suite.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-cipher_suite.Tpo vtls/$(DEPDIR)/libcurl_la-cipher_suite.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/cipher_suite.c' object='vtls/libcurl_la-cipher_suite.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 +@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-cipher_suite.lo `test -f 'vtls/cipher_suite.c' || echo '$(srcdir)/'`vtls/cipher_suite.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 @@ -3088,13 +3270,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 @@ -3151,26 +3326,33 @@ 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-curl_msh3.lo `test -f 'vquic/curl_msh3.c' || echo '$(srcdir)/'`vquic/curl_msh3.c + +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-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_ngtcp2.lo `test -f 'vquic/curl_ngtcp2.c' || echo '$(srcdir)/'`vquic/curl_ngtcp2.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_osslq.lo: vquic/curl_osslq.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_osslq.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-curl_osslq.Tpo -c -o vquic/libcurl_la-curl_osslq.lo `test -f 'vquic/curl_osslq.c' || echo '$(srcdir)/'`vquic/curl_osslq.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-curl_osslq.Tpo vquic/$(DEPDIR)/libcurl_la-curl_osslq.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/curl_osslq.c' object='vquic/libcurl_la-curl_osslq.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_osslq.lo `test -f 'vquic/curl_osslq.c' || echo '$(srcdir)/'`vquic/curl_osslq.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 @@ -3179,6 +3361,13 @@ vquic/libcurl_la-vquic.lo: vquic/vquic.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 vquic/libcurl_la-vquic.lo `test -f 'vquic/vquic.c' || echo '$(srcdir)/'`vquic/vquic.c +vquic/libcurl_la-vquic-tls.lo: vquic/vquic-tls.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-tls.lo -MD -MP -MF vquic/$(DEPDIR)/libcurl_la-vquic-tls.Tpo -c -o vquic/libcurl_la-vquic-tls.lo `test -f 'vquic/vquic-tls.c' || echo '$(srcdir)/'`vquic/vquic-tls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurl_la-vquic-tls.Tpo vquic/$(DEPDIR)/libcurl_la-vquic-tls.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/vquic-tls.c' object='vquic/libcurl_la-vquic-tls.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-vquic-tls.lo `test -f 'vquic/vquic-tls.c' || echo '$(srcdir)/'`vquic/vquic-tls.c + vssh/libcurl_la-libssh.lo: vssh/libssh.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 vssh/libcurl_la-libssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurl_la-libssh.Tpo -c -o vssh/libcurl_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurl_la-libssh.Tpo vssh/$(DEPDIR)/libcurl_la-libssh.Plo @@ -3235,6 +3424,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 @@ -3249,6 +3445,41 @@ 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 @@ -3354,13 +3585,6 @@ libcurlu_la-curl_ntlm_core.lo: curl_ntlm_core.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_ntlm_core.lo `test -f 'curl_ntlm_core.c' || echo '$(srcdir)/'`curl_ntlm_core.c -libcurlu_la-curl_ntlm_wb.lo: curl_ntlm_wb.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_ntlm_wb.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_ntlm_wb.Tpo -c -o libcurlu_la-curl_ntlm_wb.lo `test -f 'curl_ntlm_wb.c' || echo '$(srcdir)/'`curl_ntlm_wb.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_ntlm_wb.Tpo $(DEPDIR)/libcurlu_la-curl_ntlm_wb.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl_ntlm_wb.c' object='libcurlu_la-curl_ntlm_wb.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_ntlm_wb.lo `test -f 'curl_ntlm_wb.c' || echo '$(srcdir)/'`curl_ntlm_wb.c - libcurlu_la-curl_path.lo: curl_path.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_path.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_path.Tpo -c -o libcurlu_la-curl_path.lo `test -f 'curl_path.c' || echo '$(srcdir)/'`curl_path.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_path.Tpo $(DEPDIR)/libcurlu_la-curl_path.Plo @@ -3389,6 +3613,13 @@ libcurlu_la-curl_sasl.lo: curl_sasl.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_sasl.lo `test -f 'curl_sasl.c' || echo '$(srcdir)/'`curl_sasl.c +libcurlu_la-curl_sha512_256.lo: curl_sha512_256.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_sha512_256.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_sha512_256.Tpo -c -o libcurlu_la-curl_sha512_256.lo `test -f 'curl_sha512_256.c' || echo '$(srcdir)/'`curl_sha512_256.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_sha512_256.Tpo $(DEPDIR)/libcurlu_la-curl_sha512_256.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl_sha512_256.c' object='libcurlu_la-curl_sha512_256.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_sha512_256.lo `test -f 'curl_sha512_256.c' || echo '$(srcdir)/'`curl_sha512_256.c + libcurlu_la-curl_sspi.lo: curl_sspi.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_sspi.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_sspi.Tpo -c -o libcurlu_la-curl_sspi.lo `test -f 'curl_sspi.c' || echo '$(srcdir)/'`curl_sspi.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_sspi.Tpo $(DEPDIR)/libcurlu_la-curl_sspi.Plo @@ -3403,6 +3634,20 @@ 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-cw-out.lo: cw-out.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-cw-out.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-cw-out.Tpo -c -o libcurlu_la-cw-out.lo `test -f 'cw-out.c' || echo '$(srcdir)/'`cw-out.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-cw-out.Tpo $(DEPDIR)/libcurlu_la-cw-out.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cw-out.c' object='libcurlu_la-cw-out.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-cw-out.lo `test -f 'cw-out.c' || echo '$(srcdir)/'`cw-out.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 @@ -3410,6 +3655,13 @@ libcurlu_la-dict.lo: dict.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-dict.lo `test -f 'dict.c' || echo '$(srcdir)/'`dict.c +libcurlu_la-dllmain.lo: dllmain.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-dllmain.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-dllmain.Tpo -c -o libcurlu_la-dllmain.lo `test -f 'dllmain.c' || echo '$(srcdir)/'`dllmain.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-dllmain.Tpo $(DEPDIR)/libcurlu_la-dllmain.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dllmain.c' object='libcurlu_la-dllmain.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-dllmain.lo `test -f 'dllmain.c' || echo '$(srcdir)/'`dllmain.c + libcurlu_la-doh.lo: doh.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-doh.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-doh.Tpo -c -o libcurlu_la-doh.lo `test -f 'doh.c' || echo '$(srcdir)/'`doh.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-doh.Tpo $(DEPDIR)/libcurlu_la-doh.Plo @@ -3424,6 +3676,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 @@ -3515,13 +3774,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 @@ -3592,6 +3844,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 @@ -3599,6 +3858,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 @@ -3634,13 +3900,6 @@ 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@ -@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.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 @@ -3697,6 +3956,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 @@ -3823,6 +4089,13 @@ libcurlu_la-rename.lo: rename.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-rename.lo `test -f 'rename.c' || echo '$(srcdir)/'`rename.c +libcurlu_la-request.lo: request.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-request.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-request.Tpo -c -o libcurlu_la-request.lo `test -f 'request.c' || echo '$(srcdir)/'`request.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-request.Tpo $(DEPDIR)/libcurlu_la-request.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='request.c' object='libcurlu_la-request.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-request.lo `test -f 'request.c' || echo '$(srcdir)/'`request.c + libcurlu_la-rtsp.lo: rtsp.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-rtsp.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-rtsp.Tpo -c -o libcurlu_la-rtsp.lo `test -f 'rtsp.c' || echo '$(srcdir)/'`rtsp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-rtsp.Tpo $(DEPDIR)/libcurlu_la-rtsp.Plo @@ -4040,13 +4313,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 @@ -4152,12 +4418,12 @@ 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@ +vtls/libcurlu_la-cipher_suite.lo: vtls/cipher_suite.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-cipher_suite.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-cipher_suite.Tpo -c -o vtls/libcurlu_la-cipher_suite.lo `test -f 'vtls/cipher_suite.c' || echo '$(srcdir)/'`vtls/cipher_suite.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-cipher_suite.Tpo vtls/$(DEPDIR)/libcurlu_la-cipher_suite.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vtls/cipher_suite.c' object='vtls/libcurlu_la-cipher_suite.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 +@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-cipher_suite.lo `test -f 'vtls/cipher_suite.c' || echo '$(srcdir)/'`vtls/cipher_suite.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 @@ -4194,13 +4460,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 @@ -4257,26 +4516,33 @@ 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_osslq.lo: vquic/curl_osslq.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_osslq.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-curl_osslq.Tpo -c -o vquic/libcurlu_la-curl_osslq.lo `test -f 'vquic/curl_osslq.c' || echo '$(srcdir)/'`vquic/curl_osslq.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-curl_osslq.Tpo vquic/$(DEPDIR)/libcurlu_la-curl_osslq.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/curl_osslq.c' object='vquic/libcurlu_la-curl_osslq.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_osslq.lo `test -f 'vquic/curl_osslq.c' || echo '$(srcdir)/'`vquic/curl_osslq.c + +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-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 @@ -4285,6 +4551,13 @@ vquic/libcurlu_la-vquic.lo: vquic/vquic.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 vquic/libcurlu_la-vquic.lo `test -f 'vquic/vquic.c' || echo '$(srcdir)/'`vquic/vquic.c +vquic/libcurlu_la-vquic-tls.lo: vquic/vquic-tls.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-tls.lo -MD -MP -MF vquic/$(DEPDIR)/libcurlu_la-vquic-tls.Tpo -c -o vquic/libcurlu_la-vquic-tls.lo `test -f 'vquic/vquic-tls.c' || echo '$(srcdir)/'`vquic/vquic-tls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vquic/$(DEPDIR)/libcurlu_la-vquic-tls.Tpo vquic/$(DEPDIR)/libcurlu_la-vquic-tls.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vquic/vquic-tls.c' object='vquic/libcurlu_la-vquic-tls.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-vquic-tls.lo `test -f 'vquic/vquic-tls.c' || echo '$(srcdir)/'`vquic/vquic-tls.c + vssh/libcurlu_la-libssh.lo: vssh/libssh.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 vssh/libcurlu_la-libssh.lo -MD -MP -MF vssh/$(DEPDIR)/libcurlu_la-libssh.Tpo -c -o vssh/libcurlu_la-libssh.lo `test -f 'vssh/libssh.c' || echo '$(srcdir)/'`vssh/libssh.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) vssh/$(DEPDIR)/libcurlu_la-libssh.Tpo vssh/$(DEPDIR)/libcurlu_la-libssh.Plo @@ -4402,7 +4675,7 @@ distdir-am: $(DISTFILES) done check-am: all-am check: check-am -@CURLDEBUG_FALSE@all-local: +@DEBUGBUILD_FALSE@all-local: all-am: Makefile $(LTLIBRARIES) curl_config.h all-local installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ @@ -4457,8 +4730,14 @@ 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 @@ -4474,16 +4753,20 @@ distclean: distclean-am -rm -f ./$(DEPDIR)/libcurl_la-curl_memrchr.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_multibyte.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_ntlm_core.Plo - -rm -f ./$(DEPDIR)/libcurl_la-curl_ntlm_wb.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_path.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_range.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_rtmp.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_sasl.Plo + -rm -f ./$(DEPDIR)/libcurl_la-curl_sha512_256.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-cw-out.Plo -rm -f ./$(DEPDIR)/libcurl_la-dict.Plo + -rm -f ./$(DEPDIR)/libcurl_la-dllmain.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 @@ -4497,7 +4780,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 @@ -4508,6 +4790,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 @@ -4523,6 +4806,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 @@ -4541,6 +4825,7 @@ distclean: distclean-am -rm -f ./$(DEPDIR)/libcurl_la-psl.Plo -rm -f ./$(DEPDIR)/libcurl_la-rand.Plo -rm -f ./$(DEPDIR)/libcurl_la-rename.Plo + -rm -f ./$(DEPDIR)/libcurl_la-request.Plo -rm -f ./$(DEPDIR)/libcurl_la-rtsp.Plo -rm -f ./$(DEPDIR)/libcurl_la-select.Plo -rm -f ./$(DEPDIR)/libcurl_la-sendf.Plo @@ -4572,15 +4857,20 @@ 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 @@ -4596,16 +4886,20 @@ distclean: distclean-am -rm -f ./$(DEPDIR)/libcurlu_la-curl_memrchr.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_multibyte.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_ntlm_core.Plo - -rm -f ./$(DEPDIR)/libcurlu_la-curl_ntlm_wb.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_path.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_range.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_rtmp.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_sasl.Plo + -rm -f ./$(DEPDIR)/libcurlu_la-curl_sha512_256.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-cw-out.Plo -rm -f ./$(DEPDIR)/libcurlu_la-dict.Plo + -rm -f ./$(DEPDIR)/libcurlu_la-dllmain.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 @@ -4619,7 +4913,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 @@ -4630,6 +4923,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 @@ -4645,6 +4939,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 @@ -4663,6 +4958,7 @@ distclean: distclean-am -rm -f ./$(DEPDIR)/libcurlu_la-psl.Plo -rm -f ./$(DEPDIR)/libcurlu_la-rand.Plo -rm -f ./$(DEPDIR)/libcurlu_la-rename.Plo + -rm -f ./$(DEPDIR)/libcurlu_la-request.Plo -rm -f ./$(DEPDIR)/libcurlu_la-rtsp.Plo -rm -f ./$(DEPDIR)/libcurlu_la-select.Plo -rm -f ./$(DEPDIR)/libcurlu_la-sendf.Plo @@ -4694,7 +4990,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 @@ -4722,13 +5017,17 @@ 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_osslq.Plo + -rm -f vquic/$(DEPDIR)/libcurl_la-curl_quiche.Plo + -rm -f vquic/$(DEPDIR)/libcurl_la-vquic-tls.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_osslq.Plo + -rm -f vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Plo + -rm -f vquic/$(DEPDIR)/libcurlu_la-vquic-tls.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 @@ -4737,13 +5036,12 @@ 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-cipher_suite.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 @@ -4753,13 +5051,12 @@ 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-cipher_suite.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 @@ -4818,8 +5115,14 @@ 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 @@ -4835,16 +5138,20 @@ maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libcurl_la-curl_memrchr.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_multibyte.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_ntlm_core.Plo - -rm -f ./$(DEPDIR)/libcurl_la-curl_ntlm_wb.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_path.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_range.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_rtmp.Plo -rm -f ./$(DEPDIR)/libcurl_la-curl_sasl.Plo + -rm -f ./$(DEPDIR)/libcurl_la-curl_sha512_256.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-cw-out.Plo -rm -f ./$(DEPDIR)/libcurl_la-dict.Plo + -rm -f ./$(DEPDIR)/libcurl_la-dllmain.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 @@ -4858,7 +5165,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 @@ -4869,6 +5175,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 @@ -4884,6 +5191,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 @@ -4902,6 +5210,7 @@ maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libcurl_la-psl.Plo -rm -f ./$(DEPDIR)/libcurl_la-rand.Plo -rm -f ./$(DEPDIR)/libcurl_la-rename.Plo + -rm -f ./$(DEPDIR)/libcurl_la-request.Plo -rm -f ./$(DEPDIR)/libcurl_la-rtsp.Plo -rm -f ./$(DEPDIR)/libcurl_la-select.Plo -rm -f ./$(DEPDIR)/libcurl_la-sendf.Plo @@ -4933,15 +5242,20 @@ 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 @@ -4957,16 +5271,20 @@ maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libcurlu_la-curl_memrchr.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_multibyte.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_ntlm_core.Plo - -rm -f ./$(DEPDIR)/libcurlu_la-curl_ntlm_wb.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_path.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_range.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_rtmp.Plo -rm -f ./$(DEPDIR)/libcurlu_la-curl_sasl.Plo + -rm -f ./$(DEPDIR)/libcurlu_la-curl_sha512_256.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-cw-out.Plo -rm -f ./$(DEPDIR)/libcurlu_la-dict.Plo + -rm -f ./$(DEPDIR)/libcurlu_la-dllmain.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 @@ -4980,7 +5298,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 @@ -4991,6 +5308,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 @@ -5006,6 +5324,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 @@ -5024,6 +5343,7 @@ maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libcurlu_la-psl.Plo -rm -f ./$(DEPDIR)/libcurlu_la-rand.Plo -rm -f ./$(DEPDIR)/libcurlu_la-rename.Plo + -rm -f ./$(DEPDIR)/libcurlu_la-request.Plo -rm -f ./$(DEPDIR)/libcurlu_la-rtsp.Plo -rm -f ./$(DEPDIR)/libcurlu_la-select.Plo -rm -f ./$(DEPDIR)/libcurlu_la-sendf.Plo @@ -5055,7 +5375,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 @@ -5083,13 +5402,17 @@ 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_osslq.Plo + -rm -f vquic/$(DEPDIR)/libcurl_la-curl_quiche.Plo + -rm -f vquic/$(DEPDIR)/libcurl_la-vquic-tls.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_osslq.Plo + -rm -f vquic/$(DEPDIR)/libcurlu_la-curl_quiche.Plo + -rm -f vquic/$(DEPDIR)/libcurlu_la-vquic-tls.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 @@ -5098,13 +5421,12 @@ 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-cipher_suite.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 @@ -5114,13 +5436,12 @@ 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-cipher_suite.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 @@ -5187,7 +5508,7 @@ checksrc: $(srcdir)/vtls/*.[ch] $(srcdir)/vquic/*.[ch] $(srcdir)/vssh/*.[ch]) # for debug builds, we scan the sources on all regular make invokes -@CURLDEBUG_TRUE@all-local: checksrc +@DEBUGBUILD_TRUE@all-local: checksrc tidy: $(TIDY) $(CSOURCES) $(TIDYFLAGS) -- $(AM_CPPFLAGS) $(CPPFLAGS) -DHAVE_CONFIG_H diff --git a/lib/Makefile.inc b/lib/Makefile.inc index 400e2b1ac..66680f3ad 100644 --- a/lib/Makefile.inc +++ b/lib/Makefile.inc @@ -44,6 +44,7 @@ LIB_VAUTH_HFILES = \ LIB_VTLS_CFILES = \ vtls/bearssl.c \ + vtls/cipher_suite.c \ vtls/gtls.c \ vtls/hostcheck.c \ vtls/keylog.c \ @@ -60,6 +61,7 @@ LIB_VTLS_CFILES = \ LIB_VTLS_HFILES = \ vtls/bearssl.h \ + vtls/cipher_suite.h \ vtls/gtls.h \ vtls/hostcheck.h \ vtls/keylog.h \ @@ -129,7 +131,6 @@ LIB_CFILES = \ curl_memrchr.c \ curl_multibyte.c \ curl_ntlm_core.c \ - curl_ntlm_wb.c \ curl_path.c \ curl_range.c \ curl_rtmp.c \ @@ -140,6 +141,7 @@ LIB_CFILES = \ curl_trc.c \ cw-out.c \ dict.c \ + dllmain.c \ doh.c \ dynbuf.c \ dynhds.c \ @@ -271,7 +273,6 @@ LIB_HFILES = \ curl_memrchr.h \ curl_multibyte.h \ curl_ntlm_core.h \ - curl_ntlm_wb.h \ curl_path.h \ curl_printf.h \ curl_range.h \ diff --git a/lib/Makefile.mk b/lib/Makefile.mk index 95f281b7d..bb6873cc4 100644 --- a/lib/Makefile.mk +++ b/lib/Makefile.mk @@ -254,7 +254,7 @@ endif endif ifneq ($(findstring -ipv6,$(CFG)),) - CPPFLAGS += -DENABLE_IPV6 + CPPFLAGS += -DUSE_IPV6 endif ifneq ($(findstring -watt,$(CFG))$(MSDOS),) diff --git a/lib/altsvc.c b/lib/altsvc.c index c12d7bda1..db9749c25 100644 --- a/lib/altsvc.c +++ b/lib/altsvc.c @@ -191,7 +191,7 @@ static CURLcode altsvc_add(struct altsvcinfo *asi, char *line) as->expires = expires; as->prio = prio; as->persist = persist ? 1 : 0; - Curl_llist_insert_next(&asi->list, asi->list.tail, as, &as->node); + Curl_llist_append(&asi->list, as, &as->node); } } @@ -211,7 +211,7 @@ static CURLcode altsvc_load(struct altsvcinfo *asi, const char *file) CURLcode result = CURLE_OK; FILE *fp; - /* we need a private copy of the file name so that the altsvc cache file + /* we need a private copy of the filename so that the altsvc cache file name survives an easy handle reset */ free(asi->filename); asi->filename = strdup(file); @@ -252,7 +252,7 @@ static CURLcode altsvc_out(struct altsvc *as, FILE *fp) CURLcode result = Curl_gmtime(as->expires, &stamp); if(result) return result; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else { char ipv6_unused[16]; if(1 == Curl_inet_pton(AF_INET6, as->dst.host, ipv6_unused)) { @@ -270,7 +270,7 @@ static CURLcode altsvc_out(struct altsvc *as, FILE *fp) "%s %s%s%s %u " "\"%d%02d%02d " "%02d:%02d:%02d\" " - "%u %d\n", + "%u %u\n", Curl_alpnid2str(as->src.alpnid), src6_pre, as->src.host, src6_post, as->src.port, @@ -303,7 +303,7 @@ struct altsvcinfo *Curl_altsvc_init(void) #ifdef USE_HTTP2 | CURLALTSVC_H2 #endif -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 | CURLALTSVC_H3 #endif ; @@ -373,7 +373,7 @@ CURLcode Curl_altsvc_save(struct Curl_easy *data, file = altsvc->filename; if((altsvc->flags & CURLALTSVC_READONLYFILE) || !file || !file[0]) - /* marked as read-only, no file or zero length file name */ + /* marked as read-only, no file or zero length filename */ return CURLE_OK; result = Curl_fopen(data, file, &out, &tempstore); @@ -430,7 +430,7 @@ static bool hostcompare(const char *host, const char *check) if(hlen && (host[hlen - 1] == '.')) hlen--; if(hlen != clen) - /* they can't match if they have different lengths */ + /* they cannot match if they have different lengths */ return FALSE; return strncasecompare(host, check, hlen); } @@ -462,7 +462,7 @@ static time_t altsvc_debugtime(void *unused) char *timestr = getenv("CURL_TIME"); (void)unused; if(timestr) { - unsigned long val = strtol(timestr, NULL, 10); + long val = strtol(timestr, NULL, 10); return (time_t)val; } return time(NULL); @@ -477,11 +477,11 @@ static time_t altsvc_debugtime(void *unused) * Curl_altsvc_parse() takes an incoming alt-svc response header and stores * the data correctly in the cache. * - * 'value' points to the header *value*. That's contents to the right of the + * 'value' points to the header *value*. That is contents to the right of the * header name. * * Currently this function rejects invalid data without returning an error. - * Invalid host name, port number will result in the specific alternative + * Invalid hostname, port number will result in the specific alternative * being rejected. Unknown protocols are skipped. */ CURLcode Curl_altsvc_parse(struct Curl_easy *data, @@ -531,7 +531,7 @@ CURLcode Curl_altsvc_parse(struct Curl_easy *data, bool valid = TRUE; p++; if(*p != ':') { - /* host name starts here */ + /* hostname starts here */ const char *hostp = p; if(*p == '[') { /* pass all valid IPv6 letters - does not handle zone id */ @@ -549,7 +549,7 @@ CURLcode Curl_altsvc_parse(struct Curl_easy *data, len = p - hostp; } if(!len || (len >= MAX_ALTSVC_HOSTLEN)) { - infof(data, "Excessive alt-svc host name, ignoring."); + infof(data, "Excessive alt-svc hostname, ignoring."); valid = FALSE; } else { @@ -624,7 +624,7 @@ CURLcode Curl_altsvc_parse(struct Curl_easy *data, num = strtoul(value_ptr, &end_ptr, 10); if((end_ptr != value_ptr) && (num < ULONG_MAX)) { if(strcasecompare("ma", option)) - maxage = num; + maxage = (time_t)num; else if(strcasecompare("persist", option) && (num == 1)) persist = TRUE; } @@ -643,7 +643,7 @@ CURLcode Curl_altsvc_parse(struct Curl_easy *data, account. [See RFC 7838 section 3.1] */ as->expires = maxage + time(NULL); as->persist = persist; - Curl_llist_insert_next(&asi->list, asi->list.tail, as, &as->node); + Curl_llist_append(&asi->list, as, &as->node); infof(data, "Added alt-svc: %s:%d over %s", dsthost, dstport, Curl_alpnid2str(dstalpnid)); } @@ -651,7 +651,7 @@ CURLcode Curl_altsvc_parse(struct Curl_easy *data, } else break; - /* after the double quote there can be a comma if there's another + /* after the double quote there can be a comma if there is another string or a semicolon if no more */ if(*p == ',') { /* comma means another alternative is presented */ @@ -696,7 +696,7 @@ bool Curl_altsvc_lookup(struct altsvcinfo *asi, if((as->src.alpnid == srcalpnid) && hostcompare(srchost, as->src.host) && (as->src.port == srcport) && - (versions & as->dst.alpnid)) { + (versions & (int)as->dst.alpnid)) { /* match */ *dstentry = as; return TRUE; diff --git a/lib/altsvc.h b/lib/altsvc.h index 7fea1434a..58f1905da 100644 --- a/lib/altsvc.h +++ b/lib/altsvc.h @@ -47,7 +47,7 @@ struct altsvc { struct althost dst; time_t expires; bool persist; - int prio; + unsigned int prio; struct Curl_llist_element node; }; diff --git a/lib/amigaos.c b/lib/amigaos.c index 139309b11..1321c53c4 100644 --- a/lib/amigaos.c +++ b/lib/amigaos.c @@ -117,7 +117,7 @@ void Curl_amiga_cleanup(void) #ifdef CURLRES_AMIGA /* - * Because we need to handle the different cases in hostip4.c at run-time, + * Because we need to handle the different cases in hostip4.c at runtime, * not at compile-time, based on what was detected in Curl_amiga_init(), * we replace it completely with our own as to not complicate the baseline * code. Assumes malloc/calloc/free are thread safe because Curl_he2ai() diff --git a/lib/arpa_telnet.h b/lib/arpa_telnet.h index 228b4466e..d641a01da 100644 --- a/lib/arpa_telnet.h +++ b/lib/arpa_telnet.h @@ -77,7 +77,7 @@ static const char * const telnetoptions[]= #define CURL_GA 249 /* Go Ahead, reverse the line */ #define CURL_SB 250 /* SuBnegotiation */ #define CURL_WILL 251 /* Our side WILL use this option */ -#define CURL_WONT 252 /* Our side WON'T use this option */ +#define CURL_WONT 252 /* Our side will not use this option */ #define CURL_DO 253 /* DO use this option! */ #define CURL_DONT 254 /* DON'T use this option! */ #define CURL_IAC 255 /* Interpret As Command */ diff --git a/lib/asyn-ares.c b/lib/asyn-ares.c index 3d718b341..782e3ac65 100644 --- a/lib/asyn-ares.c +++ b/lib/asyn-ares.c @@ -65,7 +65,7 @@ # define CARES_STATICLIB #endif #include -#include /* really old c-ares didn't include this by +#include /* really old c-ares did not include this by itself */ #if ARES_VERSION >= 0x010500 @@ -112,8 +112,8 @@ struct thread_data { /* How long we are willing to wait for additional parallel responses after 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 + This is intended to equal the c-ares default timeout. cURL always uses that + default value. Unfortunately, c-ares does not expose its default timeout in its API, but it is officially documented as 5 seconds. See query_completed_cb() for an explanation of how this is used. @@ -126,8 +126,8 @@ static int ares_ver = 0; /* * Curl_resolver_global_init() - the generic low-level asynchronous name - * resolve API. Called from curl_global_init() to initialize global resolver - * environment. Initializes ares library. + * resolve API. Called from curl_global_init() to initialize global resolver + * environment. Initializes ares library. */ int Curl_resolver_global_init(void) { @@ -169,7 +169,7 @@ static void sock_state_cb(void *data, ares_socket_t socket_fd, * * Called from curl_easy_init() -> Curl_open() to initialize resolver * URL-state specific environment ('resolver' member of the UrlState - * structure). Fills the passed pointer by the initialized ares_channel. + * structure). Fills the passed pointer by the initialized ares_channel. */ CURLcode Curl_resolver_init(struct Curl_easy *easy, void **resolver) { @@ -211,7 +211,7 @@ CURLcode Curl_resolver_init(struct Curl_easy *easy, void **resolver) * * Called from curl_easy_cleanup() -> Curl_close() to cleanup resolver * URL-state specific environment ('resolver' member of the UrlState - * structure). Destroys the ares channel. + * structure). Destroys the ares channel. */ void Curl_resolver_cleanup(void *resolver) { @@ -222,7 +222,7 @@ void Curl_resolver_cleanup(void *resolver) * Curl_resolver_duphandle() * * Called from curl_easy_duphandle() to duplicate resolver URL-state specific - * environment ('resolver' member of the UrlState structure). Duplicates the + * environment ('resolver' member of the UrlState structure). Duplicates the * 'from' ares channel and passes the resulting channel to the 'to' pointer. */ CURLcode Curl_resolver_duphandle(struct Curl_easy *easy, void **to, void *from) @@ -250,12 +250,12 @@ void Curl_resolver_cancel(struct Curl_easy *data) } /* - * We're equivalent to Curl_resolver_cancel() for the c-ares resolver. We + * We are equivalent to Curl_resolver_cancel() for the c-ares resolver. We * never block. */ void Curl_resolver_kill(struct Curl_easy *data) { - /* We don't need to check the resolver state because we can be called safely + /* We do not need to check the resolver state because we can be called safely at any time and we always do the same thing. */ Curl_resolver_cancel(data); } @@ -280,7 +280,7 @@ static void destroy_async_data(struct Curl_async *async) /* * Curl_resolver_getsock() is called when someone from the outside world - * (using curl_multi_fdset()) wants to get our fd_set setup and we're talking + * (using curl_multi_fdset()) wants to get our fd_set setup and we are talking * with ares. The caller must make sure that this function is only called when * we have a working ares channel. * @@ -350,7 +350,7 @@ static int waitperform(struct Curl_easy *data, timediff_t timeout_ms) } if(num) { - nfds = Curl_poll(pfd, num, timeout_ms); + nfds = Curl_poll(pfd, (unsigned int)num, timeout_ms); if(nfds < 0) return -1; } @@ -359,7 +359,7 @@ 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! */ + above, as otherwise the ares name resolve will not timeout! */ ares_process_fd((ares_channel)data->state.async.resolver, ARES_SOCKET_BAD, ARES_SOCKET_BAD); else { @@ -394,8 +394,8 @@ CURLcode Curl_resolver_is_resolved(struct Curl_easy *data, return CURLE_UNRECOVERABLE_POLL; #ifndef HAVE_CARES_GETADDRINFO - /* Now that we've checked for any last minute results above, see if there are - any responses still pending when the EXPIRE_HAPPY_EYEBALLS_DNS timer + /* Now that we have checked for any last minute results above, see if there + are any responses still pending when the EXPIRE_HAPPY_EYEBALLS_DNS timer expires. */ if(res && res->num_pending @@ -410,7 +410,7 @@ CURLcode Curl_resolver_is_resolved(struct Curl_easy *data, &res->happy_eyeballs_dns_time, 0, sizeof(res->happy_eyeballs_dns_time)); /* Cancel the raw c-ares request, which will fire query_completed_cb() with - ARES_ECANCELLED synchronously for all pending responses. This will + 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); @@ -523,7 +523,7 @@ CURLcode Curl_resolver_wait_resolv(struct Curl_easy *data, *entry = data->state.async.dns; if(result) - /* close the connection, since we can't return failure here without + /* close the connection, since we cannot return failure here without cleaning up this connection properly. */ connclose(data->conn, "c-ares resolve failed"); @@ -539,7 +539,7 @@ static void compound_results(struct thread_data *res, if(!ai) return; -#ifdef ENABLE_IPV6 /* CURLRES_IPV6 */ +#ifdef USE_IPV6 /* CURLRES_IPV6 */ if(res->temp_ai && res->temp_ai->ai_family == PF_INET6) { /* We have results already, put the new IPv6 entries at the head of the list. */ @@ -603,57 +603,57 @@ static void query_completed_cb(void *arg, /* (struct connectdata *) */ /* If there are responses still pending, we presume they must be the complementary IPv4 or IPv6 lookups that we started in parallel in - Curl_resolver_getaddrinfo() (for Happy Eyeballs). If we've got a + Curl_resolver_getaddrinfo() (for Happy Eyeballs). If we have got a "definitive" response from one of a set of parallel queries, we need to - think about how long we're willing to wait for more responses. */ + think about how long we are willing to wait for more responses. */ if(res->num_pending /* Only these c-ares status values count as "definitive" for these - purposes. For example, ARES_ENODATA is what we expect when there is - no IPv6 entry for a domain name, and that's not a reason to get more - aggressive in our timeouts for the other response. Other errors are + purposes. For example, ARES_ENODATA is what we expect when there is + no IPv6 entry for a domain name, and that is not a reason to get more + aggressive in our timeouts for the other response. Other errors are either a result of bad input (which should affect all parallel requests), local or network conditions, non-definitive server responses, or us cancelling the request. */ && (status == ARES_SUCCESS || status == ARES_ENOTFOUND)) { - /* Right now, there can only be up to two parallel queries, so don't + /* Right now, there can only be up to two parallel queries, so do not bother handling any other cases. */ DEBUGASSERT(res->num_pending == 1); - /* It's possible that one of these parallel queries could succeed - quickly, but the other could always fail or timeout (when we're + /* it is possible that one of these parallel queries could succeed + quickly, but the other could always fail or timeout (when we are talking to a pool of DNS servers that can only successfully resolve IPv4 address, for example). - It's also possible that the other request could always just take + it is also possible that the other request could always just take longer because it needs more time or only the second DNS server can - fulfill it successfully. But, to align with the philosophy of Happy - Eyeballs, we don't want to wait _too_ long or users will think - requests are slow when IPv6 lookups don't actually work (but IPv4 ones - do). + fulfill it successfully. But, to align with the philosophy of Happy + Eyeballs, we do not want to wait _too_ long or users will think + requests are slow when IPv6 lookups do not actually work (but IPv4 + ones do). So, now that we have a usable answer (some IPv4 addresses, some IPv6 addresses, or "no such domain"), we start a timeout for the remaining - pending responses. Even though it is typical that this resolved - request came back quickly, that needn't be the case. It might be that - this completing request didn't get a result from the first DNS server - or even the first round of the whole DNS server pool. So it could - already be quite some time after we issued the DNS queries in the - first place. Without modifying c-ares, we can't know exactly where in - its retry cycle we are. We could guess based on how much time has - gone by, but it doesn't really matter. Happy Eyeballs tells us that, - given usable information in hand, we simply don't want to wait "too - much longer" after we get a result. + pending responses. Even though it is typical that this resolved + request came back quickly, that needn't be the case. It might be that + this completing request did not get a result from the first DNS + server or even the first round of the whole DNS server pool. So it + could already be quite some time after we issued the DNS queries in + the first place. Without modifying c-ares, we cannot know exactly + where in its retry cycle we are. We could guess based on how much + time has gone by, but it does not really matter. Happy Eyeballs tells + us that, given usable information in hand, we simply do not want to + wait "too much longer" after we get a result. We simply wait an additional amount of time equal to the default - c-ares query timeout. That is enough time for a typical parallel - response to arrive without being "too long". Even on a network + c-ares query timeout. That is enough time for a typical parallel + response to arrive without being "too long". Even on a network where one of the two types of queries is failing or timing out constantly, this will usually mean we wait a total of the default c-ares timeout (5 seconds) plus the round trip time for the successful - request, which seems bearable. The downside is that c-ares might race + request, which seems bearable. The downside is that c-ares might race with us to issue one more retry just before we give up, but it seems better to "waste" that request instead of trying to guess the perfect - timeout to prevent it. After all, we don't even know where in the + timeout to prevent it. After all, we do not even know where in the c-ares retry cycle each request is. */ res->happy_eyeballs_dns_time = Curl_now(); @@ -684,7 +684,7 @@ static struct Curl_addrinfo *ares2addr(struct ares_addrinfo_node *node) /* settle family-specific sockaddr structure size. */ if(ai->ai_family == AF_INET) ss_size = sizeof(struct sockaddr_in); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else if(ai->ai_family == AF_INET6) ss_size = sizeof(struct sockaddr_in6); #endif @@ -849,8 +849,8 @@ CURLcode Curl_set_dns_servers(struct Curl_easy *data, /* If server is NULL or empty, this would purge all DNS servers * from ares library, which will cause any and all queries to fail. - * So, just return OK if none are configured and don't actually make - * any changes to c-ares. This lets c-ares use its defaults, which + * So, just return OK if none are configured and do not actually make + * any changes to c-ares. This lets c-ares use its defaults, which * it gets from the OS (for instance from /etc/resolv.conf on Linux). */ if(!(servers && servers[0])) @@ -932,7 +932,7 @@ CURLcode Curl_set_dns_local_ip4(struct Curl_easy *data, CURLcode Curl_set_dns_local_ip6(struct Curl_easy *data, const char *local_ip6) { -#if defined(HAVE_CARES_SET_LOCAL) && defined(ENABLE_IPV6) +#if defined(HAVE_CARES_SET_LOCAL) && defined(USE_IPV6) unsigned char a6[INET6_ADDRSTRLEN]; if((!local_ip6) || (local_ip6[0] == 0)) { diff --git a/lib/asyn-thread.c b/lib/asyn-thread.c index 5b9d5049f..d91152fdf 100644 --- a/lib/asyn-thread.c +++ b/lib/asyn-thread.c @@ -168,7 +168,7 @@ struct thread_sync_data { duplicate */ #ifndef CURL_DISABLE_SOCKETPAIR struct Curl_easy *data; - curl_socket_t sock_pair[2]; /* socket pair */ + curl_socket_t sock_pair[2]; /* eventfd/pipes/socket pair */ #endif int sock_error; struct Curl_addrinfo *res; @@ -251,7 +251,7 @@ int init_thread_sync_data(struct thread_data *td, #ifndef CURL_DISABLE_SOCKETPAIR /* create socket pair or pipe */ - if(wakeup_create(&tsd->sock_pair[0]) < 0) { + if(wakeup_create(tsd->sock_pair, FALSE) < 0) { tsd->sock_pair[0] = CURL_SOCKET_BAD; tsd->sock_pair[1] = CURL_SOCKET_BAD; goto err_exit; @@ -286,7 +286,7 @@ static CURLcode getaddrinfo_complete(struct Curl_easy *data) result = Curl_addrinfo_callback(data, tsd->sock_error, tsd->res); /* The tsd->res structure has been copied to async.dns and perhaps the DNS - cache. Set our copy to NULL so destroy_thread_sync_data doesn't free it. + cache. Set our copy to NULL so destroy_thread_sync_data does not free it. */ tsd->res = NULL; @@ -302,6 +302,14 @@ query_complete(DWORD err, DWORD bytes, LPWSAOVERLAPPED overlapped) struct Curl_addrinfo *ca; struct Curl_addrinfo *cafirst = NULL; struct Curl_addrinfo *calast = NULL; +#ifndef CURL_DISABLE_SOCKETPAIR +#ifdef USE_EVENTFD + const void *buf; + const uint64_t val = 1; +#else + char buf[1]; +#endif +#endif #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wcast-align" @@ -325,7 +333,7 @@ query_complete(DWORD err, DWORD bytes, LPWSAOVERLAPPED overlapped) /* settle family-specific sockaddr structure size. */ if(ai->ai_family == AF_INET) ss_size = sizeof(struct sockaddr_in); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else if(ai->ai_family == AF_INET6) ss_size = sizeof(struct sockaddr_in6); #endif @@ -421,11 +429,14 @@ query_complete(DWORD err, DWORD bytes, LPWSAOVERLAPPED overlapped) } else { #ifndef CURL_DISABLE_SOCKETPAIR - char buf[1]; if(tsd->sock_pair[1] != CURL_SOCKET_BAD) { - /* DNS has been resolved, signal client task */ +#ifdef USE_EVENTFD + buf = &val; +#else buf[0] = 1; - if(swrite(tsd->sock_pair[1], buf, sizeof(buf)) < 0) { +#endif + /* DNS has been resolved, signal client task */ + if(wakeup_write(tsd->sock_pair[1], buf, sizeof(buf)) < 0) { /* update sock_erro to errno */ tsd->sock_error = SOCKERRNO; } @@ -444,17 +455,28 @@ query_complete(DWORD err, DWORD bytes, LPWSAOVERLAPPED overlapped) /* * getaddrinfo_thread() resolves a name and then exits. * - * For builds without ARES, but with ENABLE_IPV6, create a resolver thread + * For builds without ARES, but with USE_IPV6, create a resolver thread * and wait on it. */ -static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg) +static +#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) +DWORD +#else +unsigned int +#endif +CURL_STDCALL getaddrinfo_thread(void *arg) { struct thread_sync_data *tsd = (struct thread_sync_data *)arg; struct thread_data *td = tsd->td; char service[12]; int rc; #ifndef CURL_DISABLE_SOCKETPAIR +#ifdef USE_EVENTFD + const void *buf; + const uint64_t val = 1; +#else char buf[1]; +#endif #endif msnprintf(service, sizeof(service), "%d", tsd->port); @@ -480,9 +502,13 @@ static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg) else { #ifndef CURL_DISABLE_SOCKETPAIR if(tsd->sock_pair[1] != CURL_SOCKET_BAD) { - /* DNS has been resolved, signal client task */ +#ifdef USE_EVENTFD + buf = &val; +#else buf[0] = 1; - if(wakeup_write(tsd->sock_pair[1], buf, sizeof(buf)) < 0) { +#endif + /* DNS has been resolved, signal client task */ + if(wakeup_write(tsd->sock_pair[1], buf, sizeof(buf)) < 0) { /* update sock_erro to errno */ tsd->sock_error = SOCKERRNO; } @@ -500,7 +526,13 @@ static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg) /* * gethostbyname_thread() resolves a name and then exits. */ -static unsigned int CURL_STDCALL gethostbyname_thread(void *arg) +static +#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) +DWORD +#else +unsigned int +#endif +CURL_STDCALL gethostbyname_thread(void *arg) { struct thread_sync_data *tsd = (struct thread_sync_data *)arg; struct thread_data *td = tsd->td; @@ -554,11 +586,15 @@ static void destroy_async_data(struct Curl_async *async) if(!done) { #ifdef _WIN32 - if(td->complete_ev) + if(td->complete_ev) { CloseHandle(td->complete_ev); - else + td->complete_ev = NULL; + } #endif - Curl_thread_destroy(td->thread_hnd); + if(td->thread_hnd != curl_thread_t_null) { + Curl_thread_destroy(td->thread_hnd); + td->thread_hnd = curl_thread_t_null; + } } else { #ifdef _WIN32 @@ -566,6 +602,7 @@ static void destroy_async_data(struct Curl_async *async) Curl_GetAddrInfoExCancel(&td->tsd.w8.cancel_ev); WaitForSingleObject(td->complete_ev, INFINITE); CloseHandle(td->complete_ev); + td->complete_ev = NULL; } #endif if(td->thread_hnd != curl_thread_t_null) @@ -633,7 +670,8 @@ static bool init_resolve_thread(struct Curl_easy *data, #ifdef _WIN32 if(Curl_isWindows8OrGreater && Curl_FreeAddrInfoExW && - Curl_GetAddrInfoExCancel && Curl_GetAddrInfoExW) { + Curl_GetAddrInfoExCancel && Curl_GetAddrInfoExW && + !Curl_win32_impersonating()) { #define MAX_NAME_LEN 256 /* max domain name is 253 chars */ #define MAX_PORT_LEN 8 WCHAR namebuf[MAX_NAME_LEN]; @@ -659,7 +697,7 @@ static bool init_resolve_thread(struct Curl_easy *data, NULL, &td->tsd.w8.overlapped, &query_complete, &td->tsd.w8.cancel_ev); if(err != WSA_IO_PENDING) - query_complete(err, 0, &td->tsd.w8.overlapped); + query_complete((DWORD)err, 0, &td->tsd.w8.overlapped); return TRUE; } } @@ -672,7 +710,7 @@ static bool init_resolve_thread(struct Curl_easy *data, td->thread_hnd = Curl_thread_create(gethostbyname_thread, &td->tsd); #endif - if(!td->thread_hnd) { + if(td->thread_hnd == curl_thread_t_null) { /* The thread never started, so mark it as done here for proper cleanup. */ td->tsd.done = 1; err = errno; @@ -713,6 +751,7 @@ static CURLcode thread_wait_resolv(struct Curl_easy *data, if(td->complete_ev) { WaitForSingleObject(td->complete_ev, INFINITE); CloseHandle(td->complete_ev); + td->complete_ev = NULL; if(entry) result = getaddrinfo_complete(data); } @@ -751,9 +790,16 @@ void Curl_resolver_kill(struct Curl_easy *data) { struct thread_data *td = data->state.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 + /* If we are still resolving, we must wait for the threads to fully clean up, + unfortunately. Otherwise, we can simply cancel to clean up any resolver data. */ +#ifdef _WIN32 + if(td && td->complete_ev) { + Curl_GetAddrInfoExCancel(&td->tsd.w8.cancel_ev); + (void)thread_wait_resolv(data, NULL, FALSE); + } + else +#endif if(td && td->thread_hnd != curl_thread_t_null && (data->set.quick_exit != 1L)) (void)thread_wait_resolv(data, NULL, FALSE); @@ -816,7 +862,7 @@ CURLcode Curl_resolver_is_resolved(struct Curl_easy *data, } else { /* poll for name lookup done with exponential backoff up to 250ms */ - /* should be fine even if this converts to 32 bit */ + /* should be fine even if this converts to 32-bit */ timediff_t elapsed = Curl_timediff(Curl_now(), data->progress.t_startsingle); if(elapsed < 0) diff --git a/lib/asyn.h b/lib/asyn.h index 7e207c4f5..0ff204884 100644 --- a/lib/asyn.h +++ b/lib/asyn.h @@ -58,7 +58,7 @@ void Curl_resolver_global_cleanup(void); * Curl_resolver_init() * Called from curl_easy_init() -> Curl_open() to initialize resolver * URL-state specific environment ('resolver' member of the UrlState - * structure). Should fill the passed pointer by the initialized handler. + * structure). Should fill the passed pointer by the initialized handler. * Returning anything else than CURLE_OK fails curl_easy_init() with the * correspondent code. */ @@ -68,7 +68,7 @@ CURLcode Curl_resolver_init(struct Curl_easy *easy, void **resolver); * Curl_resolver_cleanup() * Called from curl_easy_cleanup() -> Curl_close() to cleanup resolver * URL-state specific environment ('resolver' member of the UrlState - * structure). Should destroy the handler and free all resources connected to + * structure). Should destroy the handler and free all resources connected to * it. */ void Curl_resolver_cleanup(void *resolver); @@ -76,9 +76,9 @@ void Curl_resolver_cleanup(void *resolver); /* * Curl_resolver_duphandle() * Called from curl_easy_duphandle() to duplicate resolver URL-state specific - * environment ('resolver' member of the UrlState structure). Should + * environment ('resolver' member of the UrlState structure). Should * duplicate the 'from' handle and pass the resulting handle to the 'to' - * pointer. Returning anything else than CURLE_OK causes failed + * pointer. Returning anything else than CURLE_OK causes failed * curl_easy_duphandle() call. */ CURLcode Curl_resolver_duphandle(struct Curl_easy *easy, void **to, @@ -89,7 +89,7 @@ CURLcode Curl_resolver_duphandle(struct Curl_easy *easy, void **to, * * It is called from inside other functions to cancel currently performing * resolver request. Should also free any temporary resources allocated to - * perform a request. This never waits for resolver threads to complete. + * perform a request. This never waits for resolver threads to complete. * * It is safe to call this when conn is in any state. */ @@ -99,8 +99,8 @@ void Curl_resolver_cancel(struct Curl_easy *data); * Curl_resolver_kill(). * * This acts like Curl_resolver_cancel() except it will block until any threads - * associated with the resolver are complete. This never blocks for resolvers - * that do not use threads. This is intended to be the "last chance" function + * associated with the resolver are complete. This never blocks for resolvers + * that do not use threads. This is intended to be the "last chance" function * that cleans up an in-progress resolver completely (before its owner is about * to die). * @@ -161,7 +161,7 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data, int *waitp); #ifndef CURLRES_ASYNCH -/* convert these functions if an asynch resolver isn't used */ +/* convert these functions if an asynch resolver is not used */ #define Curl_resolver_cancel(x) Curl_nop_stmt #define Curl_resolver_kill(x) Curl_nop_stmt #define Curl_resolver_is_resolved(x,y) CURLE_COULDNT_RESOLVE_HOST diff --git a/lib/base64.c b/lib/base64.c index 919eb6235..8373115d2 100644 --- a/lib/base64.c +++ b/lib/base64.c @@ -243,7 +243,7 @@ static CURLcode base64_encode(const char *table64, *outptr = base64data; /* Return the length of the new data */ - *outlen = output - base64data; + *outlen = (size_t)(output - base64data); return CURLE_OK; } diff --git a/lib/bufq.h b/lib/bufq.h index 027a2b6ba..87ffa45da 100644 --- a/lib/bufq.h +++ b/lib/bufq.h @@ -85,7 +85,7 @@ void Curl_bufcp_free(struct bufc_pool *pool); * 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 + * 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 diff --git a/lib/bufref.c b/lib/bufref.c index f0a0e2a7d..f048b5701 100644 --- a/lib/bufref.c +++ b/lib/bufref.c @@ -48,7 +48,7 @@ void Curl_bufref_init(struct bufref *br) } /* - * Free the buffer and re-init the necessary fields. It doesn't touch the + * Free the buffer and re-init the necessary fields. It does not touch the * 'signature' field and thus this buffer reference can be reused. */ diff --git a/lib/c-hyper.c b/lib/c-hyper.c index 247d59f07..3008d9a14 100644 --- a/lib/c-hyper.c +++ b/lib/c-hyper.c @@ -171,7 +171,7 @@ static int hyper_each_header(void *userdata, len = Curl_dyn_len(&data->state.headerb); headp = Curl_dyn_ptr(&data->state.headerb); - result = Curl_http_header(data, data->conn, headp, len); + result = Curl_http_header(data, headp, len); if(result) { data->state.hresult = result; return HYPER_ITER_BREAK; @@ -206,7 +206,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(!k->bodywritten) { #if defined(USE_NTLM) struct connectdata *conn = data->conn; if(conn->bits.close && @@ -324,7 +324,7 @@ static CURLcode empty_header(struct Curl_easy *data) result = hyper_each_header(data, NULL, 0, NULL, 0) ? CURLE_WRITE_ERROR : CURLE_OK; if(result) - failf(data, "hyperstream: couldn't pass blank header"); + failf(data, "hyperstream: could not pass blank header"); /* Hyper does chunked decoding itself. If it was added during * response header processing, remove it again. */ Curl_cwriter_remove_by_name(data, "chunked"); @@ -420,8 +420,8 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data, /* end of transfer */ data->req.done = TRUE; infof(data, "hyperstream is done"); - if(!k->bodywrites) { - /* hyper doesn't always call the body write callback */ + if(!k->bodywritten) { + /* hyper does not always call the body write callback */ result = Curl_http_firstwrite(data); } break; @@ -439,7 +439,7 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data, *didwhat = KEEP_RECV; if(!resp) { - failf(data, "hyperstream: couldn't get response"); + failf(data, "hyperstream: could not get response"); return CURLE_RECV_ERROR; } @@ -462,7 +462,7 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data, headers = hyper_response_headers(resp); if(!headers) { - failf(data, "hyperstream: couldn't get response headers"); + failf(data, "hyperstream: could not get response headers"); result = CURLE_RECV_ERROR; break; } @@ -505,7 +505,7 @@ CURLcode Curl_hyper_stream(struct Curl_easy *data, resp_body = hyper_response_body(resp); if(!resp_body) { - failf(data, "hyperstream: couldn't get response body"); + failf(data, "hyperstream: could not get response body"); result = CURLE_RECV_ERROR; break; } @@ -669,7 +669,7 @@ static int uploadstreamed(void *userdata, hyper_context *ctx, goto out; } /* increasing the writebytecount here is a little premature but we - don't know exactly when the body is sent */ + do not know exactly when the body is sent */ data->req.writebytecount += fillcount; Curl_pgrsSetUploadCounter(data, data->req.writebytecount); rc = HYPER_POLL_READY; @@ -772,7 +772,7 @@ static void http1xx_cb(void *arg, struct hyper_response *resp) if(!result) { headers = hyper_response_headers(resp); if(!headers) { - failf(data, "hyperstream: couldn't get 1xx response headers"); + failf(data, "hyperstream: could not get 1xx response headers"); result = CURLE_RECV_ERROR; } } @@ -980,11 +980,13 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done) goto error; } +#ifndef CURL_DISABLE_PROXY if(data->state.aptr.proxyuserpwd) { result = Curl_hyper_header(data, headers, data->state.aptr.proxyuserpwd); if(result) goto error; } +#endif if(data->state.aptr.userpwd) { result = Curl_hyper_header(data, headers, data->state.aptr.userpwd); @@ -1131,13 +1133,15 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done) Curl_pgrsSetUploadSize(data, 0); /* nothing */ } - Curl_xfer_setup(data, FIRSTSOCKET, -1, TRUE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SENDRECV, -1, TRUE); conn->datastream = Curl_hyper_stream; /* clear userpwd and proxyuserpwd to avoid reusing old credentials * from reused connections */ Curl_safefree(data->state.aptr.userpwd); +#ifndef CURL_DISABLE_PROXY Curl_safefree(data->state.aptr.proxyuserpwd); +#endif return CURLE_OK; error: DEBUGASSERT(result); @@ -1202,6 +1206,7 @@ static const struct Curl_crtype cr_hyper_protocol = { Curl_creader_def_resume_from, Curl_creader_def_rewind, cr_hyper_unpause, + Curl_creader_def_is_paused, Curl_creader_def_done, sizeof(struct Curl_creader) }; diff --git a/lib/cf-h1-proxy.c b/lib/cf-h1-proxy.c index ed6322c10..6656b4ddc 100644 --- a/lib/cf-h1-proxy.c +++ b/lib/cf-h1-proxy.c @@ -65,7 +65,6 @@ typedef enum { /* struct for HTTP CONNECT tunneling */ struct h1_tunnel_state { - struct HTTP CONNECT; struct dynbuf rcvbuf; struct dynbuf request_data; size_t nsent; @@ -182,8 +181,8 @@ static void h1_tunnel_go_state(struct Curl_cfilter *cf, 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. */ + make sure that it is not accidentally used for the document request + after we have connected. So let's free and clear it here. */ Curl_safefree(data->state.aptr.proxyuserpwd); #ifdef USE_HYPER data->state.hconnect = FALSE; @@ -195,14 +194,16 @@ static void h1_tunnel_go_state(struct Curl_cfilter *cf, 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); - Curl_httpchunk_free(data, &ts->ch); - free(ts); - cf->ctx = NULL; + if(cf) { + 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); + Curl_httpchunk_free(data, &ts->ch); + free(ts); + cf->ctx = NULL; + } } } @@ -220,8 +221,8 @@ static CURLcode start_CONNECT(struct Curl_cfilter *cf, 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 + /* This only happens if we have looped here due to authentication + reasons, and we do not really use the newly cloned URL here then. Just free() it. */ Curl_safefree(data->req.newurl); @@ -420,7 +421,7 @@ static CURLcode recv_CONNECT_resp(struct Curl_cfilter *cf, 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! */ + and make sure to break out of the loop when we are done! */ ts->cl--; if(ts->cl <= 0) { ts->keepon = KEEPON_DONE; @@ -438,7 +439,7 @@ static CURLcode recv_CONNECT_resp(struct Curl_cfilter *cf, if(result) return result; if(Curl_httpchunk_is_done(data, &ts->ch)) { - /* we're done reading chunks! */ + /* we are done reading chunks! */ infof(data, "chunk reading DONE"); ts->keepon = KEEPON_DONE; } @@ -473,7 +474,7 @@ static CURLcode recv_CONNECT_resp(struct Curl_cfilter *cf, if(result) return result; - /* Newlines are CRLF, so the CR is ignored as the line isn't + /* Newlines are CRLF, so the CR is ignored as the line is not really terminated until the LF comes. Treat a following CR as end-of-headers as well.*/ @@ -496,7 +497,7 @@ static CURLcode recv_CONNECT_resp(struct Curl_cfilter *cf, } else { /* without content-length or chunked encoding, we - can't keep the connection alive since the close is + cannot 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; @@ -516,7 +517,7 @@ static CURLcode recv_CONNECT_resp(struct Curl_cfilter *cf, return result; Curl_dyn_reset(&ts->rcvbuf); - } /* while there's buffer left and loop is requested */ + } /* while there is buffer left and loop is requested */ if(error) result = CURLE_RECV_ERROR; @@ -664,8 +665,8 @@ static CURLcode start_CONNECT(struct Curl_cfilter *cf, 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 + /* This only happens if we have looped here due to authentication + reasons, and we do not really use the newly cloned URL here then. Just free() it. */ Curl_safefree(data->req.newurl); @@ -953,7 +954,7 @@ static CURLcode H1_CONNECT(struct Curl_cfilter *cf, 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. */ + /* 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"); @@ -1032,9 +1033,9 @@ static void cf_h1_proxy_adjust_pollset(struct Curl_cfilter *cf, * 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 + /* when we have 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 + response headers or if we are still sending the request, wait for write. */ if(tunnel_want_send(ts)) Curl_pollset_set_out_only(data, ps, sock); @@ -1057,22 +1058,25 @@ 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) { + 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); } - if(cf->next) - cf->next->cft->do_close(cf->next, data); } struct Curl_cftype Curl_cft_h1_proxy = { "H1-PROXY", - CF_TYPE_IP_CONNECT, + CF_TYPE_IP_CONNECT|CF_TYPE_PROXY, 0, cf_h1_proxy_destroy, cf_h1_proxy_connect, cf_h1_proxy_close, + Curl_cf_def_shutdown, Curl_cf_http_proxy_get_host, cf_h1_proxy_adjust_pollset, Curl_cf_def_data_pending, diff --git a/lib/cf-h2-proxy.c b/lib/cf-h2-proxy.c index 78dc222fa..7613b7828 100644 --- a/lib/cf-h2-proxy.c +++ b/lib/cf-h2-proxy.c @@ -162,8 +162,8 @@ static void h2_tunnel_go_state(struct Curl_cfilter *cf, 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. */ + make sure that it is not accidentally used for the document request + after we have connected. So let's free and clear it here. */ Curl_safefree(data->state.aptr.proxyuserpwd); break; } @@ -181,7 +181,8 @@ struct cf_h2_proxy_ctx { int32_t goaway_error; int32_t last_stream_id; BIT(conn_closed); - BIT(goaway); + BIT(rcvd_goaway); + BIT(sent_goaway); BIT(nw_out_blocked); }; @@ -694,7 +695,7 @@ static int proxy_h2_on_frame_recv(nghttp2_session *session, } break; case NGHTTP2_GOAWAY: - ctx->goaway = TRUE; + ctx->rcvd_goaway = TRUE; break; default: break; @@ -1166,6 +1167,49 @@ static void cf_h2_proxy_destroy(struct Curl_cfilter *cf, } } +static CURLcode cf_h2_proxy_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, bool *done) +{ + struct cf_h2_proxy_ctx *ctx = cf->ctx; + struct cf_call_data save; + CURLcode result; + int rv; + + if(!cf->connected || !ctx->h2 || cf->shutdown || ctx->conn_closed) { + *done = TRUE; + return CURLE_OK; + } + + CF_DATA_SAVE(save, cf, data); + + if(!ctx->sent_goaway) { + rv = nghttp2_submit_goaway(ctx->h2, NGHTTP2_FLAG_NONE, + 0, 0, + (const uint8_t *)"shutown", sizeof("shutown")); + if(rv) { + failf(data, "nghttp2_submit_goaway() failed: %s(%d)", + nghttp2_strerror(rv), rv); + result = CURLE_SEND_ERROR; + goto out; + } + ctx->sent_goaway = TRUE; + } + /* GOAWAY submitted, process egress and ingress until nghttp2 is done. */ + result = CURLE_OK; + if(nghttp2_session_want_write(ctx->h2)) + result = proxy_h2_progress_egress(cf, data); + if(!result && nghttp2_session_want_read(ctx->h2)) + result = proxy_h2_progress_ingress(cf, data); + + *done = (ctx->conn_closed || + (!result && !nghttp2_session_want_write(ctx->h2) && + !nghttp2_session_want_read(ctx->h2))); +out: + CF_DATA_RESTORE(cf, save); + cf->shutdown = (result || *done); + return result; +} + static bool cf_h2_proxy_data_pending(struct Curl_cfilter *cf, const struct Curl_easy *data) { @@ -1182,12 +1226,18 @@ static void cf_h2_proxy_adjust_pollset(struct Curl_cfilter *cf, struct easy_pollset *ps) { struct cf_h2_proxy_ctx *ctx = cf->ctx; + struct cf_call_data save; 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(!cf->connected && ctx->h2) { + want_send = nghttp2_session_want_write(ctx->h2); + want_recv = nghttp2_session_want_read(ctx->h2); + } + else + 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); @@ -1202,6 +1252,14 @@ static void cf_h2_proxy_adjust_pollset(struct Curl_cfilter *cf, Curl_pollset_set(data, ps, sock, want_recv, want_send); CF_DATA_RESTORE(cf, save); } + else if(ctx->sent_goaway && !cf->shutdown) { + /* shutdown in progress */ + CF_DATA_SAVE(save, cf, data); + want_send = nghttp2_session_want_write(ctx->h2); + want_recv = nghttp2_session_want_read(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, @@ -1214,7 +1272,7 @@ static ssize_t h2_handle_tunnel_close(struct Curl_cfilter *cf, 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 */ + connclose(cf->conn, "REFUSED_STREAM"); /* do not use this anymore */ *err = CURLE_RECV_ERROR; /* trigger Curl_retry_request() later */ return -1; } @@ -1259,7 +1317,8 @@ static ssize_t tunnel_recv(struct Curl_cfilter *cf, struct Curl_easy *data, } else if(ctx->tunnel.reset || (ctx->conn_closed && Curl_bufq_is_empty(&ctx->inbufq)) || - (ctx->goaway && ctx->last_stream_id < ctx->tunnel.stream_id)) { + (ctx->rcvd_goaway && + ctx->last_stream_id < ctx->tunnel.stream_id)) { *err = CURLE_RECV_ERROR; nread = -1; } @@ -1306,7 +1365,7 @@ static ssize_t cf_h2_proxy_recv(struct Curl_cfilter *cf, result = proxy_h2_progress_egress(cf, data); if(result == CURLE_AGAIN) { - /* pending data to send, need to be called again. Ideally, we'd + /* pending data to send, need to be called again. Ideally, we would * monitor the socket for POLLOUT, but we might not be in SENDING * transfer state any longer and are unable to make this happen. */ @@ -1418,7 +1477,7 @@ static ssize_t cf_h2_proxy_send(struct Curl_cfilter *cf, /* 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( + size_t rwin = (size_t)nghttp2_session_get_stream_remote_window_size( ctx->h2, ctx->tunnel.stream_id); if(rwin == 0) { /* H2 flow window exhaustion. @@ -1489,8 +1548,8 @@ static bool proxy_h2_connisalive(struct Curl_cfilter *cf, 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, + /* This happens before we have sent off a request and the connection is + not in use by any other transfer, there should not be any data here, only "protocol frames" */ CURLcode result; ssize_t nread = -1; @@ -1532,11 +1591,12 @@ static bool cf_h2_proxy_is_alive(struct Curl_cfilter *cf, struct Curl_cftype Curl_cft_h2_proxy = { "H2-PROXY", - CF_TYPE_IP_CONNECT, + CF_TYPE_IP_CONNECT|CF_TYPE_PROXY, CURL_LOG_LVL_NONE, cf_h2_proxy_destroy, cf_h2_proxy_connect, cf_h2_proxy_close, + cf_h2_proxy_shutdown, Curl_cf_http_proxy_get_host, cf_h2_proxy_adjust_pollset, cf_h2_proxy_data_pending, diff --git a/lib/cf-haproxy.c b/lib/cf-haproxy.c index 404392291..200c13958 100644 --- a/lib/cf-haproxy.c +++ b/lib/cf-haproxy.c @@ -189,11 +189,12 @@ static void cf_haproxy_adjust_pollset(struct Curl_cfilter *cf, struct Curl_cftype Curl_cft_haproxy = { "HAPROXY", - 0, + CF_TYPE_PROXY, 0, cf_haproxy_destroy, cf_haproxy_connect, cf_haproxy_close, + Curl_cf_def_shutdown, Curl_cf_def_get_host, cf_haproxy_adjust_pollset, Curl_cf_def_data_pending, diff --git a/lib/cf-https-connect.c b/lib/cf-https-connect.c index b23fa056f..7a6bd97e1 100644 --- a/lib/cf-https-connect.c +++ b/lib/cf-https-connect.c @@ -55,7 +55,8 @@ struct cf_hc_baller { CURLcode result; struct curltime started; int reply_ms; - bool enabled; + BIT(enabled); + BIT(shutdown); }; static void cf_hc_baller_reset(struct cf_hc_baller *b, @@ -102,8 +103,8 @@ struct cf_hc_ctx { 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; + unsigned int soft_eyeballs_timeout_ms; + unsigned int hard_eyeballs_timeout_ms; }; static void cf_hc_baller_init(struct cf_hc_baller *b, @@ -322,6 +323,49 @@ static CURLcode cf_hc_connect(struct Curl_cfilter *cf, return result; } +static CURLcode cf_hc_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, bool *done) +{ + struct cf_hc_ctx *ctx = cf->ctx; + struct cf_hc_baller *ballers[2]; + size_t i; + CURLcode result = CURLE_OK; + + DEBUGASSERT(data); + if(cf->connected) { + *done = TRUE; + return CURLE_OK; + } + + /* shutdown all ballers that have not done so already. If one fails, + * continue shutting down others until all are shutdown. */ + 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]; + bool bdone = FALSE; + if(!cf_hc_baller_is_active(b) || b->shutdown) + continue; + b->result = b->cf->cft->do_shutdown(b->cf, data, &bdone); + if(b->result || bdone) + b->shutdown = TRUE; /* treat a failed shutdown as done */ + } + + *done = TRUE; + for(i = 0; i < sizeof(ballers)/sizeof(ballers[0]); i++) { + if(ballers[i] && !ballers[i]->shutdown) + *done = FALSE; + } + if(*done) { + for(i = 0; i < sizeof(ballers)/sizeof(ballers[0]); i++) { + if(ballers[i] && ballers[i]->result) + result = ballers[i]->result; + } + } + CURL_TRC_CF(data, cf, "shutdown -> %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) @@ -434,6 +478,7 @@ struct Curl_cftype Curl_cft_http_connect = { cf_hc_destroy, cf_hc_connect, cf_hc_close, + cf_hc_shutdown, Curl_cf_def_get_host, cf_hc_adjust_pollset, cf_hc_data_pending, @@ -510,7 +555,7 @@ CURLcode Curl_cf_https_setup(struct Curl_easy *data, if(data->state.httpwant == CURL_HTTP_VERSION_3ONLY) { result = Curl_conn_may_http3(data, conn); - if(result) /* can't do it */ + if(result) /* cannot do it */ goto out; try_h3 = TRUE; try_h21 = FALSE; diff --git a/lib/cf-socket.c b/lib/cf-socket.c index 1de510006..2e92db29d 100644 --- a/lib/cf-socket.c +++ b/lib/cf-socket.c @@ -35,6 +35,9 @@ #elif defined(HAVE_NETINET_TCP_H) #include #endif +#ifdef HAVE_NETINET_UDP_H +#include +#endif #ifdef HAVE_SYS_IOCTL_H #include #endif @@ -53,6 +56,11 @@ #include #endif +#ifdef __DragonFly__ +/* Required for __DragonFly_version */ +#include +#endif + #include "urldata.h" #include "bufq.h" #include "sendf.h" @@ -73,6 +81,7 @@ #include "multihandle.h" #include "rand.h" #include "share.h" +#include "strdup.h" #include "version_win32.h" /* The last 3 #include files should be in this order */ @@ -81,7 +90,7 @@ #include "memdebug.h" -#if defined(ENABLE_IPV6) && defined(IPV6_V6ONLY) && defined(_WIN32) +#if defined(USE_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; @@ -137,8 +146,12 @@ static void nosigpipe(struct Curl_easy *data, #define nosigpipe(x,y) Curl_nop_stmt #endif -#if defined(__DragonFly__) || defined(USE_WINSOCK) -/* DragonFlyBSD and Windows use millisecond units */ +#if defined(USE_WINSOCK) || \ + (defined(__sun) && !defined(TCP_KEEPIDLE)) || \ + (defined(__DragonFly__) && __DragonFly_version < 500702) || \ + (defined(_WIN32) && !defined(TCP_KEEPIDLE)) +/* Solaris < 11.4, DragonFlyBSD < 500702 and Windows < 10.0.16299 + * use millisecond units. */ #define KEEPALIVE_FACTOR(x) (x *= 1000) #else #define KEEPALIVE_FACTOR(x) @@ -168,23 +181,50 @@ tcpkeepalive(struct Curl_easy *data, sockfd, SOCKERRNO); } else { -#if defined(SIO_KEEPALIVE_VALS) +#if defined(SIO_KEEPALIVE_VALS) /* Windows */ +/* Windows 10, version 1709 (10.0.16299) and later versions */ +#if defined(TCP_KEEPIDLE) && defined(TCP_KEEPINTVL) && defined(TCP_KEEPCNT) + optval = curlx_sltosi(data->set.tcp_keepidle); + KEEPALIVE_FACTOR(optval); + if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, + (const char *)&optval, sizeof(optval)) < 0) { + infof(data, "Failed to set TCP_KEEPIDLE on fd " + "%" CURL_FORMAT_SOCKET_T ": errno %d", + sockfd, SOCKERRNO); + } + optval = curlx_sltosi(data->set.tcp_keepintvl); + KEEPALIVE_FACTOR(optval); + if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, + (const char *)&optval, sizeof(optval)) < 0) { + infof(data, "Failed to set TCP_KEEPINTVL on fd " + "%" CURL_FORMAT_SOCKET_T ": errno %d", + sockfd, SOCKERRNO); + } + optval = curlx_sltosi(data->set.tcp_keepcnt); + if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPCNT, + (const char *)&optval, sizeof(optval)) < 0) { + infof(data, "Failed to set TCP_KEEPCNT on fd " + "%" CURL_FORMAT_SOCKET_T ": errno %d", + sockfd, SOCKERRNO); + } +#else /* Windows < 10.0.16299 */ struct tcp_keepalive vals; DWORD dummy; vals.onoff = 1; optval = curlx_sltosi(data->set.tcp_keepidle); KEEPALIVE_FACTOR(optval); - vals.keepalivetime = optval; + vals.keepalivetime = (u_long)optval; optval = curlx_sltosi(data->set.tcp_keepintvl); KEEPALIVE_FACTOR(optval); - vals.keepaliveinterval = optval; + vals.keepaliveinterval = (u_long)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 " "%" CURL_FORMAT_SOCKET_T ": errno %d", sockfd, SOCKERRNO); } -#else +#endif +#else /* !Windows */ #ifdef TCP_KEEPIDLE optval = curlx_sltosi(data->set.tcp_keepidle); KEEPALIVE_FACTOR(optval); @@ -204,6 +244,16 @@ tcpkeepalive(struct Curl_easy *data, "%" CURL_FORMAT_SOCKET_T ": errno %d", sockfd, SOCKERRNO); } +#elif defined(TCP_KEEPALIVE_THRESHOLD) + /* Solaris <11.4 style */ + optval = curlx_sltosi(data->set.tcp_keepidle); + KEEPALIVE_FACTOR(optval); + if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPALIVE_THRESHOLD, + (void *)&optval, sizeof(optval)) < 0) { + infof(data, "Failed to set TCP_KEEPALIVE_THRESHOLD on fd " + "%" CURL_FORMAT_SOCKET_T ": errno %d", + sockfd, SOCKERRNO); + } #endif #ifdef TCP_KEEPINTVL optval = curlx_sltosi(data->set.tcp_keepintvl); @@ -214,6 +264,36 @@ tcpkeepalive(struct Curl_easy *data, "%" CURL_FORMAT_SOCKET_T ": errno %d", sockfd, SOCKERRNO); } +#elif defined(TCP_KEEPALIVE_ABORT_THRESHOLD) + /* Solaris <11.4 style */ + /* TCP_KEEPALIVE_ABORT_THRESHOLD should equal to + * TCP_KEEPCNT * TCP_KEEPINTVL on other platforms. + * The default value of TCP_KEEPCNT is 9 on Linux, + * 8 on *BSD/macOS, 5 or 10 on Windows. We use the + * default config for Solaris <11.4 because there is + * no default value for TCP_KEEPCNT on Solaris 11.4. + * + * Note that the consequent probes will not be sent + * at equal intervals on Solaris, but will be sent + * using the exponential backoff algorithm. */ + optval = curlx_sltosi(data->set.tcp_keepcnt) * + curlx_sltosi(data->set.tcp_keepintvl); + KEEPALIVE_FACTOR(optval); + if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPALIVE_ABORT_THRESHOLD, + (void *)&optval, sizeof(optval)) < 0) { + infof(data, "Failed to set TCP_KEEPALIVE_ABORT_THRESHOLD on fd " + "%" CURL_FORMAT_SOCKET_T ": errno %d", + sockfd, SOCKERRNO); + } +#endif +#ifdef TCP_KEEPCNT + optval = curlx_sltosi(data->set.tcp_keepcnt); + if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPCNT, + (void *)&optval, sizeof(optval)) < 0) { + infof(data, "Failed to set TCP_KEEPCNT on fd " + "%" CURL_FORMAT_SOCKET_T ": errno %d", + sockfd, SOCKERRNO); + } #endif #endif } @@ -249,7 +329,7 @@ void Curl_sock_assign_addr(struct Curl_sockaddr_ex *dest, dest->protocol = IPPROTO_UDP; break; } - dest->addrlen = ai->ai_addrlen; + dest->addrlen = (unsigned int)ai->ai_addrlen; if(dest->addrlen > sizeof(struct Curl_sockaddr_storage)) dest->addrlen = sizeof(struct Curl_sockaddr_storage); @@ -287,7 +367,7 @@ static CURLcode socket_open(struct Curl_easy *data, /* no socket, no connection */ return CURLE_COULDNT_CONNECT; -#if defined(ENABLE_IPV6) && defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID) +#if defined(USE_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; @@ -314,7 +394,7 @@ CURLcode Curl_socket_open(struct Curl_easy *data, struct Curl_sockaddr_ex dummy; if(!addr) - /* if the caller doesn't want info back, use a local temp copy */ + /* if the caller does not want info back, use a local temp copy */ addr = &dummy; Curl_sock_assign_addr(addr, ai, transport); @@ -363,14 +443,14 @@ int Curl_socket_close(struct Curl_easy *data, struct connectdata *conn, 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 + 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) +void Curl_sndbuf_init(curl_socket_t sockfd) { int val = CURL_MAX_WRITE_SIZE + 32; int curval = 0; @@ -395,7 +475,83 @@ void Curl_sndbufset(curl_socket_t sockfd) setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&val, sizeof(val)); } -#endif +#endif /* USE_WINSOCK */ + +/* + * Curl_parse_interface() + * + * This is used to parse interface argument in the following formats. + * In all the examples, `host` can be an IP address or a hostname. + * + * - can be either an interface name or a host. + * if! - interface name. + * host! - hostname. + * ifhost!! - interface name and hostname. + * + * Parameters: + * + * input [in] - input string. + * len [in] - length of the input string. + * dev [in/out] - address where a pointer to newly allocated memory + * holding the interface-or-host will be stored upon + * completion. + * iface [in/out] - address where a pointer to newly allocated memory + * holding the interface will be stored upon completion. + * host [in/out] - address where a pointer to newly allocated memory + * holding the host will be stored upon completion. + * + * Returns CURLE_OK on success. + */ +CURLcode Curl_parse_interface(const char *input, size_t len, + char **dev, char **iface, char **host) +{ + static const char if_prefix[] = "if!"; + static const char host_prefix[] = "host!"; + static const char if_host_prefix[] = "ifhost!"; + + DEBUGASSERT(dev); + DEBUGASSERT(iface); + DEBUGASSERT(host); + + if(strncmp(if_prefix, input, strlen(if_prefix)) == 0) { + input += strlen(if_prefix); + if(!*input) + return CURLE_BAD_FUNCTION_ARGUMENT; + *iface = Curl_memdup0(input, len - strlen(if_prefix)); + return *iface ? CURLE_OK : CURLE_OUT_OF_MEMORY; + } + if(strncmp(host_prefix, input, strlen(host_prefix)) == 0) { + input += strlen(host_prefix); + if(!*input) + return CURLE_BAD_FUNCTION_ARGUMENT; + *host = Curl_memdup0(input, len - strlen(host_prefix)); + return *host ? CURLE_OK : CURLE_OUT_OF_MEMORY; + } + if(strncmp(if_host_prefix, input, strlen(if_host_prefix)) == 0) { + const char *host_part; + input += strlen(if_host_prefix); + len -= strlen(if_host_prefix); + host_part = memchr(input, '!', len); + if(!host_part || !*(host_part + 1)) + return CURLE_BAD_FUNCTION_ARGUMENT; + *iface = Curl_memdup0(input, host_part - input); + if(!*iface) + return CURLE_OUT_OF_MEMORY; + ++host_part; + *host = Curl_memdup0(host_part, len - (host_part - input)); + if(!*host) { + free(*iface); + *iface = NULL; + return CURLE_OUT_OF_MEMORY; + } + return CURLE_OK; + } + + if(!*input) + return CURLE_BAD_FUNCTION_ARGUMENT; + *dev = Curl_memdup0(input, len); + return *dev ? CURLE_OK : CURLE_OUT_OF_MEMORY; +} #ifndef CURL_DISABLE_BINDLOCAL static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, @@ -405,7 +561,7 @@ static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, 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 +#ifdef USE_IPV6 struct sockaddr_in6 *si6 = (struct sockaddr_in6 *)&sa; #endif @@ -415,94 +571,92 @@ static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, /* 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]; + const char *iface_input = data->set.str[STRING_INTERFACE]; + const char *host_input = data->set.str[STRING_BINDHOST]; + const char *iface = iface_input ? iface_input : dev; + const char *host = host_input ? host_input : dev; int error; #ifdef IP_BIND_ADDRESS_NO_PORT int on = 1; #endif -#ifndef ENABLE_IPV6 +#ifndef USE_IPV6 (void)scope; #endif /************************************************************* * Select device to bind socket to *************************************************************/ - if(!dev && !port) + if(!iface && !host && !port) /* no local kind of binding was requested */ return CURLE_OK; memset(&sa, 0, sizeof(struct Curl_sockaddr_storage)); - if(dev && (strlen(dev)<255) ) { + if(iface && (strlen(iface)<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; - } + if2ip_result_t if2ip_result = IF2IP_NOT_FOUND; /* 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); + /* + * 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, + iface, (curl_socklen_t)strlen(iface) + 1) == 0) { + /* This is often "errno 1, error: Operation not permitted" if you are + * 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. + */ + if(!host_input) { + infof(data, "socket successfully bound to interface '%s'", iface); return CURLE_OK; } + } #endif - - switch(Curl_if2ip(af, -#ifdef ENABLE_IPV6 - scope, conn->scope_id, + if(!host_input) { + /* Discover IP from input device, then bind to it */ + if2ip_result = Curl_if2ip(af, +#ifdef USE_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; - } + iface, myhost, sizeof(myhost)); + } + switch(if2ip_result) { + case IF2IP_NOT_FOUND: + if(iface_input && !host_input) { + /* Do not fall back to treating it as a hostname */ + char buffer[STRERROR_LEN]; + data->state.os_errno = error = SOCKERRNO; + failf(data, "Couldn't bind to interface '%s' with errno %d: %s", + iface, error, Curl_strerror(error, buffer, sizeof(buffer))); + 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: + /* + * We now have the numerical IP address in the 'myhost' buffer + */ + host = myhost; + infof(data, "Local Interface %s is ip %s using address family %i", + iface, host, af); + done = 1; + break; } - if(!is_interface) { + if(!iface_input || host_input) { /* - * This was not an interface, resolve the name as a host name + * This was not an interface, resolve the name as a hostname * or IP number * * Temporarily force name resolution to use only the address type @@ -514,12 +668,12 @@ static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, if(af == AF_INET) conn->ip_version = CURL_IPRESOLVE_V4; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else if(af == AF_INET6) conn->ip_version = CURL_IPRESOLVE_V6; #endif - rc = Curl_resolv(data, dev, 80, FALSE, &h); + rc = Curl_resolv(data, host, 80, FALSE, &h); if(rc == CURLRESOLV_PENDING) (void)Curl_resolver_wait_resolv(data, &h); conn->ip_version = ipver; @@ -528,7 +682,7 @@ static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, /* 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); + host, 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 @@ -547,7 +701,7 @@ static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, } if(done > 0) { -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 /* IPv6 address */ if(af == AF_INET6) { #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID @@ -562,7 +716,7 @@ static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, 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 + 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) @@ -589,14 +743,17 @@ static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, /* 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. */ + char buffer[STRERROR_LEN]; data->state.errorbuf = FALSE; - failf(data, "Couldn't bind to '%s'", dev); + data->state.os_errno = error = SOCKERRNO; + failf(data, "Couldn't bind to '%s' with errno %d: %s", + host, error, Curl_strerror(error, buffer, sizeof(buffer))); return CURLE_INTERFACE_FAILED; } } else { /* no device was given, prepare sa to match af's needs */ -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(af == AF_INET6) { si6->sin6_family = AF_INET6; si6->sin6_port = htons(port); @@ -616,16 +773,6 @@ static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, 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; @@ -639,7 +786,7 @@ static CURLcode bindlocal(struct Curl_easy *data, struct connectdata *conn, /* We reuse/clobber the port variable here below */ if(sock->sa_family == AF_INET) si4->sin_port = ntohs(port); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else si6->sin6_port = ntohs(port); #endif @@ -677,8 +824,8 @@ static bool verifyconnect(curl_socket_t sockfd, int *error) * 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 + * "I do not have Rational Quantify, but the hint from his post was + * ntdll::NtRemoveIoCompletion(). I would assume the SleepEx (or maybe * just Sleep(0) would be enough?) would release whatever * mutex/critical-section the ntdll call is waiting on. * @@ -696,14 +843,14 @@ static bool verifyconnect(curl_socket_t sockfd, int *error) if(0 != getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (void *)&err, &errSize)) err = SOCKERRNO; #ifdef _WIN32_WCE - /* Old WinCE versions don't support SO_ERROR */ + /* Old WinCE versions do not 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 */ + /* Minix 3.1.x does not support getsockopt on UDP sockets */ if(EBADIOCTL == err) { SET_SOCKERRNO(0); err = 0; @@ -713,7 +860,7 @@ static bool verifyconnect(curl_socket_t sockfd, int *error) /* we are connected, awesome! */ rc = TRUE; else - /* This wasn't a successful connect */ + /* This was not a successful connect */ rc = FALSE; if(error) *error = err; @@ -775,11 +922,14 @@ 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 */ struct ip_quadruple ip; /* The IP quadruple 2x(addr+port) */ 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 */ +#ifdef USE_WINSOCK + struct curltime last_sndbuf_query_at; /* when SO_SNDBUF last queried */ + ULONG sndbuf_size; /* the last set SO_SNDBUF size */ +#endif int error; /* errno of last failure or 0 */ #ifdef DEBUGBUILD int wblock_percent; /* percent of writes doing EAGAIN */ @@ -791,7 +941,6 @@ struct cf_socket_ctx { BIT(accepted); /* socket was accepted, not connected */ BIT(sock_connected); /* socket is "connected", e.g. in UDP */ BIT(active); - BIT(buffer_recv); }; static void cf_socket_ctx_init(struct cf_socket_ctx *ctx, @@ -802,7 +951,6 @@ static void cf_socket_ctx_init(struct cf_socket_ctx *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"); @@ -833,56 +981,6 @@ static void cf_socket_ctx_init(struct cf_socket_ctx *ctx, #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, fd=%" - CURL_FORMAT_SOCKET_T ") -> %d, err=%d", - len, ctx->sock, (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; @@ -896,9 +994,7 @@ static void cf_socket_close(struct Curl_cfilter *cf, struct Curl_easy *data) 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)); } @@ -906,13 +1002,35 @@ static void cf_socket_close(struct Curl_cfilter *cf, struct Curl_easy *data) cf->connected = FALSE; } +static CURLcode cf_socket_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool *done) +{ + if(cf->connected) { + struct cf_socket_ctx *ctx = cf->ctx; + + CURL_TRC_CF(data, cf, "cf_socket_shutdown(%" CURL_FORMAT_SOCKET_T + ")", ctx->sock); + /* On TCP, and when the socket looks well and non-blocking mode + * can be enabled, receive dangling bytes before close to avoid + * entering RST states unnecessarily. */ + if(ctx->sock != CURL_SOCKET_BAD && + ctx->transport == TRNSPRT_TCP && + (curlx_nonblock(ctx->sock, TRUE) >= 0)) { + unsigned char buf[1024]; + (void)sread(ctx->sock, buf, sizeof(buf)); + } + } + *done = TRUE; + return CURLE_OK; +} + 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; } @@ -923,7 +1041,8 @@ static CURLcode set_local_ip(struct Curl_cfilter *cf, struct cf_socket_ctx *ctx = cf->ctx; #ifdef HAVE_GETSOCKNAME - if(!(data->conn->handler->protocol & CURLPROTO_TFTP)) { + if((ctx->sock != CURL_SOCKET_BAD) && + !(data->conn->handler->protocol & CURLPROTO_TFTP)) { /* TFTP does not connect, so it cannot get the IP like this */ char buffer[STRERROR_LEN]; @@ -946,8 +1065,8 @@ static CURLcode set_local_ip(struct Curl_cfilter *cf, } #else (void)data; - ctx->l_ip[0] = 0; - ctx->l_port = -1; + ctx->ip.local_ip[0] = 0; + ctx->ip.local_port = -1; #endif return CURLE_OK; } @@ -958,7 +1077,7 @@ static CURLcode set_remote_ip(struct Curl_cfilter *cf, 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, + if(!Curl_addr2string(&ctx->addr.sa_addr, (curl_socklen_t)ctx->addr.addrlen, ctx->ip.remote_ip, &ctx->ip.remote_port)) { char buffer[STRERROR_LEN]; @@ -983,7 +1102,20 @@ static CURLcode cf_socket_open(struct Curl_cfilter *cf, (void)data; DEBUGASSERT(ctx->sock == CURL_SOCKET_BAD); ctx->started_at = Curl_now(); +#ifdef SOCK_NONBLOCK + /* Do not tuck SOCK_NONBLOCK into socktype when opensocket callback is set + * because we would not know how socketype is about to be used in the + * callback, SOCK_NONBLOCK might get factored out before calling socket(). + */ + if(!data->set.fopensocket) + ctx->addr.socktype |= SOCK_NONBLOCK; +#endif result = socket_open(data, &ctx->addr, &ctx->sock); +#ifdef SOCK_NONBLOCK + /* Restore the socktype after the socket is created. */ + if(!data->set.fopensocket) + ctx->addr.socktype &= ~SOCK_NONBLOCK; +#endif if(result) goto out; @@ -991,7 +1123,7 @@ static CURLcode cf_socket_open(struct Curl_cfilter *cf, if(result) goto out; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(ctx->addr.family == AF_INET6) { set_ipv6_v6only(ctx->sock, 0); infof(data, " Trying [%s]:%d...", ctx->ip.remote_ip, ctx->ip.remote_port); @@ -1000,7 +1132,7 @@ static CURLcode cf_socket_open(struct Curl_cfilter *cf, #endif infof(data, " Trying %s:%d...", ctx->ip.remote_ip, ctx->ip.remote_port); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 is_tcp = (ctx->addr.family == AF_INET || ctx->addr.family == AF_INET6) && ctx->addr.socktype == SOCK_STREAM; @@ -1013,7 +1145,7 @@ static CURLcode cf_socket_open(struct Curl_cfilter *cf, nosigpipe(data, ctx->sock); - Curl_sndbufset(ctx->sock); + Curl_sndbuf_init(ctx->sock); if(is_tcp && data->set.tcp_keepalive) tcpkeepalive(data, ctx->sock); @@ -1037,7 +1169,7 @@ static CURLcode cf_socket_open(struct Curl_cfilter *cf, #ifndef CURL_DISABLE_BINDLOCAL /* possibly bind the local end to an IP, interface or port */ if(ctx->addr.family == AF_INET -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 || ctx->addr.family == AF_INET6 #endif ) { @@ -1054,8 +1186,27 @@ static CURLcode cf_socket_open(struct Curl_cfilter *cf, } #endif - /* set socket non-blocking */ - (void)curlx_nonblock(ctx->sock, TRUE); +#ifndef SOCK_NONBLOCK + /* Set socket non-blocking, must be a non-blocking socket for + * a non-blocking connect. */ + error = curlx_nonblock(ctx->sock, TRUE); + if(error < 0) { + result = CURLE_UNSUPPORTED_PROTOCOL; + ctx->error = SOCKERRNO; + goto out; + } +#else + if(data->set.fopensocket) { + /* Set socket non-blocking, must be a non-blocking socket for + * a non-blocking connect. */ + error = curlx_nonblock(ctx->sock, TRUE); + if(error < 0) { + result = CURLE_UNSUPPORTED_PROTOCOL; + ctx->error = SOCKERRNO; + goto out; + } + } +#endif ctx->sock_connected = (ctx->addr.socktype != SOCK_DGRAM); out: if(result) { @@ -1123,7 +1274,8 @@ static int do_connect(struct Curl_cfilter *cf, struct Curl_easy *data, #endif } else { - rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen); + rc = connect(ctx->sock, &ctx->addr.sa_addr, + (curl_socklen_t)ctx->addr.addrlen); } return rc; } @@ -1266,13 +1418,36 @@ static bool cf_socket_data_pending(struct Curl_cfilter *cf, 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)); } +#ifdef USE_WINSOCK + +#ifndef SIO_IDEAL_SEND_BACKLOG_QUERY +#define SIO_IDEAL_SEND_BACKLOG_QUERY 0x4004747B +#endif + +static void win_update_sndbuf_size(struct cf_socket_ctx *ctx) +{ + ULONG ideal; + DWORD ideallen; + struct curltime n = Curl_now(); + + if(Curl_timediff(n, ctx->last_sndbuf_query_at) > 1000) { + if(!WSAIoctl(ctx->sock, SIO_IDEAL_SEND_BACKLOG_QUERY, 0, 0, + &ideal, sizeof(ideal), &ideallen, 0, 0) && + ideal != ctx->sndbuf_size && + !setsockopt(ctx->sock, SOL_SOCKET, SO_SNDBUF, + (const char *)&ideal, sizeof(ideal))) { + ctx->sndbuf_size = ideal; + } + ctx->last_sndbuf_query_at = n; + } +} + +#endif /* USE_WINSOCK */ + static ssize_t cf_socket_send(struct Curl_cfilter *cf, struct Curl_easy *data, const void *buf, size_t len, CURLcode *err) { @@ -1288,7 +1463,7 @@ static ssize_t cf_socket_send(struct Curl_cfilter *cf, struct Curl_easy *data, #ifdef DEBUGBUILD /* simulate network blocking/partial writes */ if(ctx->wblock_percent > 0) { - unsigned char c; + unsigned char c = 0; 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); @@ -1345,6 +1520,11 @@ static ssize_t cf_socket_send(struct Curl_cfilter *cf, struct Curl_easy *data, } } +#if defined(USE_WINSOCK) + if(!*err) + win_update_sndbuf_size(ctx); +#endif + CURL_TRC_CF(data, cf, "send(len=%zu) -> %d, err=%d", orig_len, (int)nwritten, *err); cf->conn->sock[cf->sockindex] = fdsave; @@ -1355,25 +1535,19 @@ 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; + unsigned char c = 0; 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; + return -1; } } if(cf->cft != &Curl_cft_udp && ctx->recv_max && ctx->recv_max < len) { @@ -1384,54 +1558,42 @@ static ssize_t cf_socket_recv(struct Curl_cfilter *cf, struct Curl_easy *data, } #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); - } + *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; } else { - nread = nw_in_read(&rctx, (unsigned char *)buf, len, err); + char buffer[STRERROR_LEN]; + + failf(data, "Recv failure: %s", + Curl_strerror(sockerr, buffer, sizeof(buffer))); + data->state.os_errno = sockerr; + *err = CURLE_RECV_ERROR; } } -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; } @@ -1449,15 +1611,10 @@ static void cf_socket_active(struct Curl_cfilter *cf, struct Curl_easy *data) /* the first socket info gets some specials */ if(cf->sockindex == FIRSTSOCKET) { cf->conn->remote_addr = &ctx->addr; - #ifdef ENABLE_IPV6 + #ifdef USE_IPV6 cf->conn->bits.ipv6 = (ctx->addr.family == AF_INET6)? TRUE : FALSE; #endif Curl_persistconninfo(data, cf->conn, &ctx->ip); - /* 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; } @@ -1573,6 +1730,7 @@ struct Curl_cftype Curl_cft_tcp = { cf_socket_destroy, cf_tcp_connect, cf_socket_close, + cf_socket_shutdown, cf_socket_get_host, cf_socket_adjust_pollset, cf_socket_data_pending, @@ -1617,25 +1775,23 @@ CURLcode Curl_cf_tcp_create(struct Curl_cfilter **pcf, } static CURLcode cf_udp_setup_quic(struct Curl_cfilter *cf, - struct Curl_easy *data) + struct Curl_easy *data) { struct cf_socket_ctx *ctx = cf->ctx; int rc; + int one = 1; + + (void)one; /* QUIC needs a connected socket, nonblocking */ DEBUGASSERT(ctx->sock != CURL_SOCKET_BAD); -#if defined(__APPLE__) && defined(USE_OPENSSL_QUIC) - (void)rc; - /* On macOS OpenSSL QUIC fails on connected sockets. - * see: */ -#else - rc = connect(ctx->sock, &ctx->addr.sa_addr, ctx->addr.addrlen); + rc = connect(ctx->sock, &ctx->addr.sa_addr, + (curl_socklen_t)ctx->addr.addrlen); if(-1 == rc) { return socket_connect_result(data, ctx->ip.remote_ip, SOCKERRNO); } ctx->sock_connected = TRUE; -#endif set_local_ip(cf, data); CURL_TRC_CF(data, cf, "%s socket %" CURL_FORMAT_SOCKET_T " connected: [%s:%d] -> [%s:%d]", @@ -1643,7 +1799,11 @@ static CURLcode cf_udp_setup_quic(struct Curl_cfilter *cf, ctx->sock, ctx->ip.local_ip, ctx->ip.local_port, ctx->ip.remote_ip, ctx->ip.remote_port); - (void)curlx_nonblock(ctx->sock, TRUE); + /* Currently, cf->ctx->sock is always non-blocking because the only + * caller to cf_udp_setup_quic() is cf_udp_connect() that passes the + * non-blocking socket created by cf_socket_open() to it. Thus, we + * do not need to call curlx_nonblock() in cf_udp_setup_quic() anymore. + */ switch(ctx->addr.family) { #if defined(__linux__) && defined(IP_MTU_DISCOVER) case AF_INET: { @@ -1662,6 +1822,14 @@ static CURLcode cf_udp_setup_quic(struct Curl_cfilter *cf, } #endif } + +#if defined(__linux__) && defined(UDP_GRO) && \ + (defined(HAVE_SENDMMSG) || defined(HAVE_SENDMSG)) && \ + ((defined(USE_NGTCP2) && defined(USE_NGHTTP3)) || defined(USE_QUICHE)) + (void)setsockopt(ctx->sock, IPPROTO_UDP, UDP_GRO, &one, + (socklen_t)sizeof(one)); +#endif + return CURLE_OK; } @@ -1711,6 +1879,7 @@ struct Curl_cftype Curl_cft_udp = { cf_socket_destroy, cf_udp_connect, cf_socket_close, + cf_socket_shutdown, cf_socket_get_host, cf_socket_adjust_pollset, cf_socket_data_pending, @@ -1762,6 +1931,7 @@ struct Curl_cftype Curl_cft_unix = { cf_socket_destroy, cf_tcp_connect, cf_socket_close, + cf_socket_shutdown, cf_socket_get_host, cf_socket_adjust_pollset, cf_socket_data_pending, @@ -1826,6 +1996,7 @@ struct Curl_cftype Curl_cft_tcp_accept = { cf_socket_destroy, cf_tcp_accept_connect, cf_socket_close, + cf_socket_shutdown, cf_socket_get_host, /* TODO: not accurate */ cf_socket_adjust_pollset, cf_socket_data_pending, diff --git a/lib/cf-socket.h b/lib/cf-socket.h index 058af5009..6040058b0 100644 --- a/lib/cf-socket.h +++ b/lib/cf-socket.h @@ -54,6 +54,11 @@ struct Curl_sockaddr_ex { }; #define sa_addr _sa_ex_u.addr +/* + * Parse interface option, and return the interface name and the host part. +*/ +CURLcode Curl_parse_interface(const char *input, size_t len, + char **dev, char **iface, char **host); /* * Create a socket based on info from 'conn' and 'ai'. @@ -81,9 +86,9 @@ int Curl_socket_close(struct Curl_easy *data, struct connectdata *conn, Buffer Size */ -void Curl_sndbufset(curl_socket_t sockfd); +void Curl_sndbuf_init(curl_socket_t sockfd); #else -#define Curl_sndbufset(y) Curl_nop_stmt +#define Curl_sndbuf_init(y) Curl_nop_stmt #endif /** diff --git a/lib/cfilters.c b/lib/cfilters.c index 32329cfb4..9a5c3578d 100644 --- a/lib/cfilters.c +++ b/lib/cfilters.c @@ -45,7 +45,7 @@ #define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0])) #endif -#ifdef DEBUGBUILD +#ifdef UNITTESTS /* used by unit2600.c */ void Curl_cf_def_close(struct Curl_cfilter *cf, struct Curl_easy *data) { @@ -55,6 +55,15 @@ void Curl_cf_def_close(struct Curl_cfilter *cf, struct Curl_easy *data) } #endif +CURLcode Curl_cf_def_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, bool *done) +{ + (void)cf; + (void)data; + *done = TRUE; + return CURLE_OK; +} + static void conn_report_connect_stats(struct Curl_easy *data, struct connectdata *conn); @@ -166,6 +175,61 @@ void Curl_conn_close(struct Curl_easy *data, int index) if(cf) { cf->cft->do_close(cf, data); } + Curl_shutdown_clear(data, index); +} + +CURLcode Curl_conn_shutdown(struct Curl_easy *data, int sockindex, bool *done) +{ + struct Curl_cfilter *cf; + CURLcode result = CURLE_OK; + timediff_t timeout_ms; + struct curltime now; + + DEBUGASSERT(data->conn); + /* Get the first connected filter that is not shut down already. */ + cf = data->conn->cfilter[sockindex]; + while(cf && (!cf->connected || cf->shutdown)) + cf = cf->next; + + if(!cf) { + *done = TRUE; + return CURLE_OK; + } + + *done = FALSE; + now = Curl_now(); + if(!Curl_shutdown_started(data, sockindex)) { + DEBUGF(infof(data, "shutdown start on%s connection", + sockindex? " secondary" : "")); + Curl_shutdown_start(data, sockindex, &now); + } + else { + timeout_ms = Curl_shutdown_timeleft(data->conn, sockindex, &now); + if(timeout_ms < 0) { + failf(data, "SSL shutdown timeout"); + return CURLE_OPERATION_TIMEDOUT; + } + } + + while(cf) { + if(!cf->shutdown) { + bool cfdone = FALSE; + result = cf->cft->do_shutdown(cf, data, &cfdone); + if(result) { + CURL_TRC_CF(data, cf, "shut down failed with %d", result); + return result; + } + else if(!cfdone) { + CURL_TRC_CF(data, cf, "shut down not done yet"); + return CURLE_OK; + } + CURL_TRC_CF(data, cf, "shut down successfully"); + cf->shutdown = TRUE; + } + cf = cf->next; + } + *done = (!result); + return result; } ssize_t Curl_cf_recv(struct Curl_easy *data, int num, char *buf, @@ -345,8 +409,10 @@ CURLcode Curl_conn_connect(struct Curl_easy *data, cf = data->conn->cfilter[sockindex]; DEBUGASSERT(cf); - if(!cf) + if(!cf) { + *done = FALSE; return CURLE_FAILED_INIT; + } *done = cf->connected; if(!*done) { @@ -442,6 +508,9 @@ void Curl_conn_cf_adjust_pollset(struct Curl_cfilter *cf, /* Get the lowest not-connected filter, if there are any */ while(cf && !cf->connected && cf->next && !cf->next->connected) cf = cf->next; + /* Skip all filters that have already shut down */ + while(cf && cf->shutdown) + 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) { @@ -462,6 +531,42 @@ void Curl_conn_adjust_pollset(struct Curl_easy *data, } } +int Curl_conn_cf_poll(struct Curl_cfilter *cf, + struct Curl_easy *data, + timediff_t timeout_ms) +{ + struct easy_pollset ps; + struct pollfd pfds[MAX_SOCKSPEREASYHANDLE]; + unsigned int i, npfds = 0; + + DEBUGASSERT(cf); + DEBUGASSERT(data); + DEBUGASSERT(data->conn); + memset(&ps, 0, sizeof(ps)); + memset(pfds, 0, sizeof(pfds)); + + Curl_conn_cf_adjust_pollset(cf, data, &ps); + DEBUGASSERT(ps.num <= MAX_SOCKSPEREASYHANDLE); + for(i = 0; i < ps.num; ++i) { + short events = 0; + if(ps.actions[i] & CURL_POLL_IN) { + events |= POLLIN; + } + if(ps.actions[i] & CURL_POLL_OUT) { + events |= POLLOUT; + } + if(events) { + pfds[npfds].fd = ps.sockets[i]; + pfds[npfds].events = events; + ++npfds; + } + } + + if(!npfds) + DEBUGF(infof(data, "no sockets to poll!")); + return Curl_poll(pfds, npfds, timeout_ms); +} + void Curl_conn_get_host(struct Curl_easy *data, int sockindex, const char **phost, const char **pdisplay_host, int *pport) @@ -590,7 +695,7 @@ 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). + * is done with sending data (e.g. has uploaded everything). */ void Curl_conn_ev_data_done_send(struct Curl_easy *data) { @@ -670,6 +775,19 @@ size_t Curl_conn_get_max_concurrent(struct Curl_easy *data, return (result || n <= 0)? 1 : (size_t)n; } +int Curl_conn_get_stream_error(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_STREAM_ERROR, + &n, NULL) : CURLE_UNKNOWN_OPTION; + return (result || n < 0)? 0 : n; +} + int Curl_conn_sockindex(struct Curl_easy *data, curl_socket_t sockfd) { if(data && data->conn && @@ -705,7 +823,7 @@ CURLcode Curl_conn_send(struct Curl_easy *data, int sockindex, DEBUGASSERT(data); DEBUGASSERT(data->conn); conn = data->conn; -#ifdef CURLDEBUG +#ifdef DEBUGBUILD { /* Allow debug builds to override this logic to force short sends */ diff --git a/lib/cfilters.h b/lib/cfilters.h index c90b1f4bc..7d53607f8 100644 --- a/lib/cfilters.h +++ b/lib/cfilters.h @@ -24,6 +24,7 @@ * ***************************************************************************/ +#include "timediff.h" struct Curl_cfilter; struct Curl_easy; @@ -36,9 +37,17 @@ struct connectdata; typedef void Curl_cft_destroy_this(struct Curl_cfilter *cf, struct Curl_easy *data); +/* Callback to close the connection immediately. */ typedef void Curl_cft_close(struct Curl_cfilter *cf, struct Curl_easy *data); +/* Callback to close the connection filter gracefully, non-blocking. + * Implementations MUST NOT chain calls to cf->next. + */ +typedef CURLcode Curl_cft_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool *done); + typedef CURLcode Curl_cft_connect(struct Curl_cfilter *cf, struct Curl_easy *data, bool blocking, bool *done); @@ -76,10 +85,10 @@ struct easy_pollset; * 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. + * Examples: a TLS handshake, while ongoing, might remove POLL_IN when it + * needs to write, or vice versa. An 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 @@ -160,6 +169,7 @@ typedef CURLcode Curl_cft_cntrl(struct Curl_cfilter *cf, #define CF_QUERY_SOCKET 3 /* - curl_socket_t */ #define CF_QUERY_TIMER_CONNECT 4 /* - struct curltime */ #define CF_QUERY_TIMER_APPCONNECT 5 /* - struct curltime */ +#define CF_QUERY_STREAM_ERROR 6 /* error code - */ /** * Query the cfilter for properties. Filters ignorant of a query will @@ -178,10 +188,12 @@ typedef CURLcode Curl_cft_query(struct Curl_cfilter *cf, * connection, etc. * CF_TYPE_SSL: provide SSL/TLS * CF_TYPE_MULTIPLEX: provides multiplexing of easy handles + * CF_TYPE_PROXY provides proxying */ #define CF_TYPE_IP_CONNECT (1 << 0) #define CF_TYPE_SSL (1 << 1) #define CF_TYPE_MULTIPLEX (1 << 2) +#define CF_TYPE_PROXY (1 << 3) /* A connection filter type, e.g. specific implementation. */ struct Curl_cftype { @@ -191,6 +203,7 @@ struct Curl_cftype { 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_shutdown *do_shutdown; /* shutdown 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 */ @@ -210,6 +223,7 @@ struct Curl_cfilter { 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 */ + BIT(shutdown); /* != 0 iff this filter has shut down */ }; /* Default implementations for the type functions, implementing nop. */ @@ -241,6 +255,8 @@ CURLcode Curl_cf_def_conn_keep_alive(struct Curl_cfilter *cf, CURLcode Curl_cf_def_query(struct Curl_cfilter *cf, struct Curl_easy *data, int query, int *pres1, void *pres2); +CURLcode Curl_cf_def_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, bool *done); /** * Create a new filter instance, unattached to the filter chain. @@ -368,6 +384,13 @@ bool Curl_conn_is_multiplex(struct connectdata *conn, int sockindex); */ void Curl_conn_close(struct Curl_easy *data, int sockindex); +/** + * Shutdown the connection at `sockindex` non-blocking, using timeout + * from `data->set.shutdowntimeout`, default DEFAULT_SHUTDOWN_TIMEOUT_MS. + * Will return CURLE_OK and *done == FALSE if not finished. + */ +CURLcode Curl_conn_shutdown(struct Curl_easy *data, int sockindex, bool *done); + /** * Return if data is pending in some connection filter at chain * `sockindex` for connection `data->conn`. @@ -399,6 +422,15 @@ void Curl_conn_cf_adjust_pollset(struct Curl_cfilter *cf, void Curl_conn_adjust_pollset(struct Curl_easy *data, struct easy_pollset *ps); +/** + * Curl_poll() the filter chain at `cf` with timeout `timeout_ms`. + * Returns 0 on timeout, negative on error or number of sockets + * with requested poll events. + */ +int Curl_conn_cf_poll(struct Curl_cfilter *cf, + struct Curl_easy *data, + timediff_t timeout_ms); + /** * Receive data through the filter chain at `sockindex` for connection * `data->conn`. Copy at most `len` bytes into `buf`. Return the @@ -449,7 +481,7 @@ 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). + * is done with sending data (e.g. has uploaded everything). */ void Curl_conn_ev_data_done_send(struct Curl_easy *data); @@ -483,7 +515,9 @@ CURLcode Curl_conn_keep_alive(struct Curl_easy *data, struct connectdata *conn, int sockindex); +#ifdef UNITTESTS void Curl_cf_def_close(struct Curl_cfilter *cf, struct Curl_easy *data); +#endif void Curl_conn_get_host(struct Curl_easy *data, int sockindex, const char **phost, const char **pdisplay_host, int *pport); @@ -496,6 +530,12 @@ size_t Curl_conn_get_max_concurrent(struct Curl_easy *data, struct connectdata *conn, int sockindex); +/** + * Get the underlying error code for a transfer stream or 0 if not known. + */ +int Curl_conn_get_stream_error(struct Curl_easy *data, + struct connectdata *conn, + int sockindex); /** * Get the index of the given socket in the connection's sockets. diff --git a/lib/config-os400.h b/lib/config-os400.h index 32852bb37..ec83be923 100644 --- a/lib/config-os400.h +++ b/lib/config-os400.h @@ -57,7 +57,7 @@ #undef NEED_REENTRANT /* Define if you want to enable IPv6 support */ -#define ENABLE_IPV6 +#define USE_IPV6 /* Define if struct sockaddr_in6 has the sin6_scope_id member */ #define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 @@ -107,9 +107,6 @@ /* Define if you have the header file. */ #undef HAVE_IO_H -/* Define if you have the `socket' library (-lsocket). */ -#undef HAVE_LIBSOCKET - /* Define if you have GSS API. */ #define HAVE_GSSAPI @@ -237,7 +234,7 @@ /* Define to enable HTTP3 support (experimental, requires NGTCP2, QUICHE or MSH3) */ -#undef ENABLE_QUIC +#undef USE_HTTP3 /* Version number of package */ #undef VERSION diff --git a/lib/config-plan9.h b/lib/config-plan9.h index aa9623f92..6f3a15a5e 100644 --- a/lib/config-plan9.h +++ b/lib/config-plan9.h @@ -28,7 +28,7 @@ #define CURL_CA_BUNDLE "/sys/lib/tls/ca.pem" #define CURL_CA_PATH "/sys/lib/tls" #define CURL_STATICLIB 1 -#define ENABLE_IPV6 1 +#define USE_IPV6 1 #define CURL_DISABLE_LDAP 1 #define NEED_REENTRANT 1 diff --git a/lib/config-riscos.h b/lib/config-riscos.h index f3a8e6832..056f55405 100644 --- a/lib/config-riscos.h +++ b/lib/config-riscos.h @@ -55,7 +55,7 @@ #undef NEED_REENTRANT /* Define if you want to enable IPv6 support */ -#undef ENABLE_IPV6 +#undef USE_IPV6 /* Define if struct sockaddr_in6 has the sin6_scope_id member */ #define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1 @@ -66,9 +66,6 @@ /* Define this as a suitable file to read random data from */ #undef RANDOM_FILE -/* Define if you want to enable IPv6 support */ -#undef ENABLE_IPV6 - /* Define if you have the alarm function. */ #define HAVE_ALARM @@ -111,9 +108,6 @@ /* Define if you have the header file. */ #undef HAVE_IO_H -/* Define if you have the `socket' library (-lsocket). */ -#undef HAVE_LIBSOCKET - /* Define if you need the malloc.h header file even with stdlib.h */ /* #define NEED_MALLOC_H 1 */ diff --git a/lib/config-win32.h b/lib/config-win32.h index 89ed1a0f1..d1341933b 100644 --- a/lib/config-win32.h +++ b/lib/config-win32.h @@ -509,8 +509,4 @@ Vista /* If you want to build curl with the built-in manual */ #define USE_MANUAL 1 -#if defined(USE_IPV6) -# define ENABLE_IPV6 1 -#endif - #endif /* HEADER_CURL_CONFIG_WIN32_H */ diff --git a/lib/conncache.c b/lib/conncache.c index 0d2609085..92fd60c4d 100644 --- a/lib/conncache.c +++ b/lib/conncache.c @@ -29,13 +29,17 @@ #include "urldata.h" #include "url.h" +#include "cfilters.h" #include "progress.h" #include "multiif.h" #include "sendf.h" #include "conncache.h" +#include "http_negotiate.h" +#include "http_ntlm.h" #include "share.h" #include "sigpipe.h" #include "connect.h" +#include "select.h" #include "strcase.h" /* The last 3 #include files should be in this order */ @@ -45,6 +49,24 @@ #define HASHKEY_SIZE 128 +static void connc_discard_conn(struct conncache *connc, + struct Curl_easy *last_data, + struct connectdata *conn, + bool aborted); +static void connc_disconnect(struct Curl_easy *data, + struct connectdata *conn, + struct conncache *connc, + bool do_shutdown); +static void connc_run_conn_shutdown(struct Curl_easy *data, + struct connectdata *conn, + bool *done); +static void connc_run_conn_shutdown_handler(struct Curl_easy *data, + struct connectdata *conn); +static CURLMcode connc_update_shutdown_ev(struct Curl_multi *multi, + struct Curl_easy *data, + struct connectdata *conn); +static void connc_shutdown_all(struct conncache *connc, int timeout_ms); + static CURLcode bundle_create(struct connectbundle **bundlep) { DEBUGASSERT(*bundlep == NULL); @@ -68,8 +90,7 @@ static void bundle_destroy(struct connectbundle *bundle) static void bundle_add_conn(struct connectbundle *bundle, struct connectdata *conn) { - Curl_llist_insert_next(&bundle->conn_list, bundle->conn_list.tail, conn, - &conn->bundle_node); + Curl_llist_append(&bundle->conn_list, conn, &conn->bundle_node); conn->bundle = bundle; bundle->num_connections++; } @@ -101,25 +122,35 @@ static void free_bundle_hash_entry(void *freethis) bundle_destroy(b); } -int Curl_conncache_init(struct conncache *connc, int size) +int Curl_conncache_init(struct conncache *connc, + struct Curl_multi *multi, size_t size) { /* allocate a new easy handle to use when closing cached connections */ connc->closure_handle = curl_easy_init(); if(!connc->closure_handle) return 1; /* bad */ connc->closure_handle->state.internal = true; + #ifdef DEBUGBUILD + if(getenv("CURL_DEBUG")) + connc->closure_handle->set.verbose = true; +#endif Curl_hash_init(&connc->hash, size, Curl_hash_str, Curl_str_key_compare, free_bundle_hash_entry); connc->closure_handle->state.conn_cache = connc; + connc->multi = multi; + Curl_llist_init(&connc->shutdowns.conn_list, NULL); return 0; /* good */ } void Curl_conncache_destroy(struct conncache *connc) { - if(connc) + if(connc) { Curl_hash_destroy(&connc->hash); + connc->multi = NULL; + DEBUGASSERT(!Curl_llist_count(&connc->shutdowns.conn_list)); + } } /* creates a key to find a bundle for this connection */ @@ -141,7 +172,7 @@ static void hashkey(struct connectdata *conn, char *buf, size_t len) hostname = conn->host.name; /* put the numbers first so that the hostname gets cut off if too long */ -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 msnprintf(buf, len, "%u/%ld/%s", conn->scope_id, port, hostname); #else msnprintf(buf, len, "%ld/%s", port, hostname); @@ -181,15 +212,14 @@ Curl_conncache_find_bundle(struct Curl_easy *data, return bundle; } -static void *conncache_add_bundle(struct conncache *connc, - char *key, - struct connectbundle *bundle) +static void *connc_add_bundle(struct conncache *connc, + char *key, struct connectbundle *bundle) { return Curl_hash_add(&connc->hash, key, strlen(key), bundle); } -static void conncache_remove_bundle(struct conncache *connc, - struct connectbundle *bundle) +static void connc_remove_bundle(struct conncache *connc, + struct connectbundle *bundle) { struct Curl_hash_iterator iter; struct Curl_hash_element *he; @@ -232,7 +262,7 @@ CURLcode Curl_conncache_add_conn(struct Curl_easy *data) hashkey(conn, key, sizeof(key)); - if(!conncache_add_bundle(data->state.conn_cache, key, bundle)) { + if(!connc_add_bundle(data->state.conn_cache, key, bundle)) { bundle_destroy(bundle); result = CURLE_OUT_OF_MEMORY; goto unlock; @@ -253,6 +283,23 @@ CURLcode Curl_conncache_add_conn(struct Curl_easy *data) return result; } +static void connc_remove_conn(struct conncache *connc, + struct connectdata *conn) +{ + struct connectbundle *bundle = conn->bundle; + + /* The bundle pointer can be NULL, since this function can be called + due to a failed connection attempt, before being added to a bundle */ + if(bundle) { + bundle_remove_conn(bundle, conn); + if(connc && bundle->num_connections == 0) + connc_remove_bundle(connc, bundle); + conn->bundle = NULL; /* removed from it */ + if(connc) + connc->num_conn--; + } +} + /* * Removes the connectdata object from the connection cache, but the transfer * still owns this connection. @@ -263,28 +310,16 @@ CURLcode Curl_conncache_add_conn(struct Curl_easy *data) void Curl_conncache_remove_conn(struct Curl_easy *data, struct connectdata *conn, bool lock) { - struct connectbundle *bundle = conn->bundle; struct conncache *connc = data->state.conn_cache; - /* The bundle pointer can be NULL, since this function can be called - due to a failed connection attempt, before being added to a bundle */ - if(bundle) { - if(lock) { - CONNCACHE_LOCK(data); - } - bundle_remove_conn(bundle, conn); - if(bundle->num_connections == 0) - conncache_remove_bundle(connc, bundle); - conn->bundle = NULL; /* removed from it */ - if(connc) { - connc->num_conn--; - DEBUGF(infof(data, "The cache now contains %zu members", - connc->num_conn)); - } - if(lock) { - CONNCACHE_UNLOCK(data); - } - } + if(lock) + CONNCACHE_LOCK(data); + connc_remove_conn(connc, conn); + if(lock) + CONNCACHE_UNLOCK(data); + if(connc) + DEBUGF(infof(data, "The cache now contains %zu members", + connc->num_conn)); } /* This function iterates the entire connection cache and calls the function @@ -346,7 +381,7 @@ bool Curl_conncache_foreach(struct Curl_easy *data, up a cache! */ static struct connectdata * -conncache_find_first_connection(struct conncache *connc) +connc_find_first_connection(struct conncache *connc) { struct Curl_hash_iterator iter; struct Curl_hash_element *he; @@ -395,8 +430,7 @@ bool Curl_conncache_return_conn(struct Curl_easy *data, important that details from this (unrelated) disconnect does not taint meta-data in the data handle. */ struct conncache *connc = data->state.conn_cache; - Curl_disconnect(connc->closure_handle, conn_candidate, - /* dead_connection */ FALSE); + connc_disconnect(NULL, conn_candidate, connc, TRUE); } } @@ -517,33 +551,606 @@ Curl_conncache_extract_oldest(struct Curl_easy *data) return conn_candidate; } -void Curl_conncache_close_all_connections(struct conncache *connc) +static void connc_shutdown_discard_all(struct conncache *connc) +{ + struct Curl_llist_element *e = connc->shutdowns.conn_list.head; + struct connectdata *conn; + + if(!e) + return; + + DEBUGF(infof(connc->closure_handle, "conncache_shutdown_discard_all")); + DEBUGASSERT(!connc->shutdowns.iter_locked); + connc->shutdowns.iter_locked = TRUE; + while(e) { + conn = e->ptr; + Curl_llist_remove(&connc->shutdowns.conn_list, e, NULL); + DEBUGF(infof(connc->closure_handle, "discard connection #%" + CURL_FORMAT_CURL_OFF_T, conn->connection_id)); + connc_disconnect(NULL, conn, connc, FALSE); + e = connc->shutdowns.conn_list.head; + } + connc->shutdowns.iter_locked = FALSE; +} + +static void connc_close_all(struct conncache *connc) { + struct Curl_easy *data = connc->closure_handle; struct connectdata *conn; + int timeout_ms = 0; SIGPIPE_VARIABLE(pipe_st); - if(!connc->closure_handle) + + if(!data) return; - conn = conncache_find_first_connection(connc); + /* Move all connections to the shutdown list */ + sigpipe_init(&pipe_st); + conn = connc_find_first_connection(connc); while(conn) { - sigpipe_ignore(connc->closure_handle, &pipe_st); + connc_remove_conn(connc, conn); + sigpipe_apply(data, &pipe_st); /* This will remove the connection from the cache */ connclose(conn, "kill all"); Curl_conncache_remove_conn(connc->closure_handle, conn, TRUE); - Curl_disconnect(connc->closure_handle, conn, FALSE); - sigpipe_restore(&pipe_st); + connc_discard_conn(connc, connc->closure_handle, conn, FALSE); - conn = conncache_find_first_connection(connc); + conn = connc_find_first_connection(connc); } - sigpipe_ignore(connc->closure_handle, &pipe_st); + /* Just for testing, run graceful shutdown */ +#ifdef DEBUGBUILD + { + char *p = getenv("CURL_GRACEFUL_SHUTDOWN"); + if(p) { + long l = strtol(p, NULL, 10); + if(l > 0 && l < INT_MAX) + timeout_ms = (int)l; + } + } +#endif + connc_shutdown_all(connc, timeout_ms); + + /* discard all connections in the shutdown list */ + connc_shutdown_discard_all(connc); - Curl_hostcache_clean(connc->closure_handle, - connc->closure_handle->dns.hostcache); - Curl_close(&connc->closure_handle); + sigpipe_apply(data, &pipe_st); + Curl_hostcache_clean(data, data->dns.hostcache); + Curl_close(&data); sigpipe_restore(&pipe_st); } +void Curl_conncache_close_all_connections(struct conncache *connc) +{ + connc_close_all(connc); +} + +static void connc_shutdown_discard_oldest(struct conncache *connc) +{ + struct Curl_llist_element *e; + struct connectdata *conn; + + DEBUGASSERT(!connc->shutdowns.iter_locked); + if(connc->shutdowns.iter_locked) + return; + + e = connc->shutdowns.conn_list.head; + if(e) { + SIGPIPE_VARIABLE(pipe_st); + conn = e->ptr; + Curl_llist_remove(&connc->shutdowns.conn_list, e, NULL); + sigpipe_init(&pipe_st); + sigpipe_apply(connc->closure_handle, &pipe_st); + connc_disconnect(NULL, conn, connc, FALSE); + sigpipe_restore(&pipe_st); + } +} + +static void connc_discard_conn(struct conncache *connc, + struct Curl_easy *last_data, + struct connectdata *conn, + bool aborted) +{ + /* `last_data`, if present, is the transfer that last worked with + * the connection. It is present when the connection is being shut down + * via `Curl_conncache_discard_conn()`, e.g. when the transfer failed + * or does not allow connection reuse. + * Using the original handle is necessary for shutting down the protocol + * handler belonging to the connection. Protocols like 'file:' rely on + * being invoked to clean up their allocations in the easy handle. + * When a connection comes from the cache, the transfer is no longer + * there and we use the cache is own closure handle. + */ + struct Curl_easy *data = last_data? last_data : connc->closure_handle; + bool done = FALSE; + + DEBUGASSERT(data); + DEBUGASSERT(connc); + DEBUGASSERT(!conn->bundle); + + /* + * If this connection is not marked to force-close, leave it open if there + * are other users of it + */ + if(CONN_INUSE(conn) && !aborted) { + DEBUGF(infof(data, "[CCACHE] not discarding #%" CURL_FORMAT_CURL_OFF_T + " still in use by %zu transfers", conn->connection_id, + CONN_INUSE(conn))); + return; + } + + /* treat the connection as aborted in CONNECT_ONLY situations, we do + * not know what the APP did with it. */ + if(conn->connect_only) + aborted = TRUE; + conn->bits.aborted = aborted; + + /* We do not shutdown dead connections. The term 'dead' can be misleading + * here, as we also mark errored connections/transfers as 'dead'. + * If we do a shutdown for an aborted transfer, the server might think + * it was successful otherwise (for example an ftps: upload). This is + * not what we want. */ + if(aborted) + done = TRUE; + if(!done) { + /* Attempt to shutdown the connection right away. */ + Curl_attach_connection(data, conn); + connc_run_conn_shutdown(data, conn, &done); + DEBUGF(infof(data, "[CCACHE] shutdown #%" CURL_FORMAT_CURL_OFF_T + ", done=%d",conn->connection_id, done)); + Curl_detach_connection(data); + } + + if(done) { + connc_disconnect(data, conn, connc, FALSE); + return; + } + + DEBUGASSERT(!connc->shutdowns.iter_locked); + if(connc->shutdowns.iter_locked) { + DEBUGF(infof(data, "[CCACHE] discarding #%" CURL_FORMAT_CURL_OFF_T + ", list locked", conn->connection_id)); + connc_disconnect(data, conn, connc, FALSE); + return; + } + + /* Add the connection to our shutdown list for non-blocking shutdown + * during multi processing. */ + if(data->multi && data->multi->max_shutdown_connections > 0 && + (data->multi->max_shutdown_connections >= + (long)Curl_llist_count(&connc->shutdowns.conn_list))) { + DEBUGF(infof(data, "[CCACHE] discarding oldest shutdown connection " + "due to limit of %ld", + data->multi->max_shutdown_connections)); + connc_shutdown_discard_oldest(connc); + } + + if(data->multi && data->multi->socket_cb) { + DEBUGASSERT(connc == &data->multi->conn_cache); + /* Start with an empty shutdown pollset, so out internal closure handle + * is added to the sockets. */ + memset(&conn->shutdown_poll, 0, sizeof(conn->shutdown_poll)); + if(connc_update_shutdown_ev(data->multi, connc->closure_handle, conn)) { + DEBUGF(infof(data, "[CCACHE] update events for shutdown failed, " + "discarding #%" CURL_FORMAT_CURL_OFF_T, + conn->connection_id)); + connc_disconnect(data, conn, connc, FALSE); + return; + } + } + + Curl_llist_append(&connc->shutdowns.conn_list, conn, &conn->bundle_node); + DEBUGF(infof(data, "[CCACHE] added #%" CURL_FORMAT_CURL_OFF_T + " to shutdown list of length %zu", conn->connection_id, + Curl_llist_count(&connc->shutdowns.conn_list))); +} + +void Curl_conncache_disconnect(struct Curl_easy *data, + struct connectdata *conn, + bool aborted) +{ + DEBUGASSERT(data); + /* Connection must no longer be in and connection cache */ + DEBUGASSERT(!conn->bundle); + + if(data->multi) { + /* Add it to the multi's conncache for shutdown handling */ + infof(data, "%s connection #%" CURL_FORMAT_CURL_OFF_T, + aborted? "closing" : "shutting down", conn->connection_id); + connc_discard_conn(&data->multi->conn_cache, data, conn, aborted); + } + else { + /* No multi available. Make a best-effort shutdown + close */ + infof(data, "closing connection #%" CURL_FORMAT_CURL_OFF_T, + conn->connection_id); + DEBUGASSERT(!conn->bundle); + connc_run_conn_shutdown_handler(data, conn); + connc_disconnect(data, conn, NULL, !aborted); + } +} + +static void connc_run_conn_shutdown_handler(struct Curl_easy *data, + struct connectdata *conn) +{ + if(!conn->bits.shutdown_handler) { + if(conn->dns_entry) { + Curl_resolv_unlock(data, conn->dns_entry); + conn->dns_entry = NULL; + } + + /* Cleanup NTLM connection-related data */ + Curl_http_auth_cleanup_ntlm(conn); + + /* Cleanup NEGOTIATE connection-related data */ + Curl_http_auth_cleanup_negotiate(conn); + + if(conn->handler && conn->handler->disconnect) { + /* This is set if protocol-specific cleanups should be made */ + DEBUGF(infof(data, "connection #%" CURL_FORMAT_CURL_OFF_T + ", shutdown protocol handler (aborted=%d)", + conn->connection_id, conn->bits.aborted)); + conn->handler->disconnect(data, conn, conn->bits.aborted); + } + + /* possible left-overs from the async name resolvers */ + Curl_resolver_cancel(data); + + conn->bits.shutdown_handler = TRUE; + } +} + +static void connc_run_conn_shutdown(struct Curl_easy *data, + struct connectdata *conn, + bool *done) +{ + CURLcode r1, r2; + bool done1, done2; + + /* We expect to be attached when called */ + DEBUGASSERT(data->conn == conn); + + connc_run_conn_shutdown_handler(data, conn); + + if(conn->bits.shutdown_filters) { + *done = TRUE; + return; + } + + if(!conn->connect_only && Curl_conn_is_connected(conn, FIRSTSOCKET)) + r1 = Curl_conn_shutdown(data, FIRSTSOCKET, &done1); + else { + r1 = CURLE_OK; + done1 = TRUE; + } + + if(!conn->connect_only && Curl_conn_is_connected(conn, SECONDARYSOCKET)) + r2 = Curl_conn_shutdown(data, SECONDARYSOCKET, &done2); + else { + r2 = CURLE_OK; + done2 = TRUE; + } + + /* we are done when any failed or both report success */ + *done = (r1 || r2 || (done1 && done2)); + if(*done) + conn->bits.shutdown_filters = TRUE; +} + +CURLcode Curl_conncache_add_pollfds(struct conncache *connc, + struct curl_pollfds *cpfds) +{ + CURLcode result = CURLE_OK; + + DEBUGASSERT(!connc->shutdowns.iter_locked); + connc->shutdowns.iter_locked = TRUE; + if(connc->shutdowns.conn_list.head) { + struct Curl_llist_element *e; + struct easy_pollset ps; + struct connectdata *conn; + + for(e = connc->shutdowns.conn_list.head; e; e = e->next) { + conn = e->ptr; + memset(&ps, 0, sizeof(ps)); + Curl_attach_connection(connc->closure_handle, conn); + Curl_conn_adjust_pollset(connc->closure_handle, &ps); + Curl_detach_connection(connc->closure_handle); + + result = Curl_pollfds_add_ps(cpfds, &ps); + if(result) { + Curl_pollfds_cleanup(cpfds); + goto out; + } + } + } +out: + connc->shutdowns.iter_locked = FALSE; + return result; +} + +CURLcode Curl_conncache_add_waitfds(struct conncache *connc, + struct curl_waitfds *cwfds) +{ + CURLcode result = CURLE_OK; + + DEBUGASSERT(!connc->shutdowns.iter_locked); + connc->shutdowns.iter_locked = TRUE; + if(connc->shutdowns.conn_list.head) { + struct Curl_llist_element *e; + struct easy_pollset ps; + struct connectdata *conn; + + for(e = connc->shutdowns.conn_list.head; e; e = e->next) { + conn = e->ptr; + memset(&ps, 0, sizeof(ps)); + Curl_attach_connection(connc->closure_handle, conn); + Curl_conn_adjust_pollset(connc->closure_handle, &ps); + Curl_detach_connection(connc->closure_handle); + + result = Curl_waitfds_add_ps(cwfds, &ps); + if(result) + goto out; + } + } +out: + connc->shutdowns.iter_locked = FALSE; + return result; +} + +static void connc_perform(struct conncache *connc) +{ + struct Curl_easy *data = connc->closure_handle; + struct Curl_llist_element *e = connc->shutdowns.conn_list.head; + struct Curl_llist_element *enext; + struct connectdata *conn; + struct curltime *nowp = NULL; + struct curltime now; + timediff_t next_from_now_ms = 0, ms; + bool done; + + if(!e) + return; + + DEBUGASSERT(data); + DEBUGASSERT(!connc->shutdowns.iter_locked); + DEBUGF(infof(data, "[CCACHE] perform, %zu connections being shutdown", + Curl_llist_count(&connc->shutdowns.conn_list))); + connc->shutdowns.iter_locked = TRUE; + while(e) { + enext = e->next; + conn = e->ptr; + Curl_attach_connection(data, conn); + connc_run_conn_shutdown(data, conn, &done); + DEBUGF(infof(data, "[CCACHE] shutdown #%" CURL_FORMAT_CURL_OFF_T + ", done=%d", conn->connection_id, done)); + Curl_detach_connection(data); + if(done) { + Curl_llist_remove(&connc->shutdowns.conn_list, e, NULL); + connc_disconnect(NULL, conn, connc, FALSE); + } + else { + /* Not done, when does this connection time out? */ + if(!nowp) { + now = Curl_now(); + nowp = &now; + } + ms = Curl_conn_shutdown_timeleft(conn, nowp); + if(ms && ms < next_from_now_ms) + next_from_now_ms = ms; + } + e = enext; + } + connc->shutdowns.iter_locked = FALSE; + + if(next_from_now_ms) + Curl_expire(data, next_from_now_ms, EXPIRE_RUN_NOW); +} + +void Curl_conncache_multi_perform(struct Curl_multi *multi) +{ + connc_perform(&multi->conn_cache); +} + + +/* + * Disconnects the given connection. Note the connection may not be the + * primary connection, like when freeing room in the connection cache or + * killing of a dead old connection. + * + * A connection needs an easy handle when closing down. We support this passed + * in separately since the connection to get closed here is often already + * disassociated from an easy handle. + * + * This function MUST NOT reset state in the Curl_easy struct if that + * is not strictly bound to the life-time of *this* particular connection. + * + */ +static void connc_disconnect(struct Curl_easy *data, + struct connectdata *conn, + struct conncache *connc, + bool do_shutdown) +{ + bool done; + + /* there must be a connection to close */ + DEBUGASSERT(conn); + /* it must be removed from the connection cache */ + DEBUGASSERT(!conn->bundle); + /* there must be an associated transfer */ + DEBUGASSERT(data || connc); + if(!data) + data = connc->closure_handle; + + /* the transfer must be detached from the connection */ + DEBUGASSERT(data && !data->conn); + + Curl_attach_connection(data, conn); + + if(connc && connc->multi && connc->multi->socket_cb) { + struct easy_pollset ps; + /* With an empty pollset, all previously polled sockets will be removed + * via the multi_socket API callback. */ + memset(&ps, 0, sizeof(ps)); + (void)Curl_multi_pollset_ev(connc->multi, data, &ps, &conn->shutdown_poll); + } + + connc_run_conn_shutdown_handler(data, conn); + if(do_shutdown) { + /* Make a last attempt to shutdown handlers and filters, if + * not done so already. */ + connc_run_conn_shutdown(data, conn, &done); + } + + if(connc) + DEBUGF(infof(data, "[CCACHE] closing #%" CURL_FORMAT_CURL_OFF_T, + conn->connection_id)); + else + DEBUGF(infof(data, "closing connection #%" CURL_FORMAT_CURL_OFF_T, + conn->connection_id)); + Curl_conn_close(data, SECONDARYSOCKET); + Curl_conn_close(data, FIRSTSOCKET); + Curl_detach_connection(data); + + Curl_conn_free(data, conn); +} + + +static CURLMcode connc_update_shutdown_ev(struct Curl_multi *multi, + struct Curl_easy *data, + struct connectdata *conn) +{ + struct easy_pollset ps; + CURLMcode mresult; + + DEBUGASSERT(data); + DEBUGASSERT(multi); + DEBUGASSERT(multi->socket_cb); + + memset(&ps, 0, sizeof(ps)); + Curl_attach_connection(data, conn); + Curl_conn_adjust_pollset(data, &ps); + Curl_detach_connection(data); + + mresult = Curl_multi_pollset_ev(multi, data, &ps, &conn->shutdown_poll); + + if(!mresult) /* Remember for next time */ + memcpy(&conn->shutdown_poll, &ps, sizeof(ps)); + return mresult; +} + +void Curl_conncache_multi_socket(struct Curl_multi *multi, + curl_socket_t s, int ev_bitmask) +{ + struct conncache *connc = &multi->conn_cache; + struct Curl_easy *data = connc->closure_handle; + struct Curl_llist_element *e = connc->shutdowns.conn_list.head; + struct connectdata *conn; + bool done; + + (void)ev_bitmask; + DEBUGASSERT(multi->socket_cb); + if(!e) + return; + + connc->shutdowns.iter_locked = TRUE; + while(e) { + conn = e->ptr; + if(s == conn->sock[FIRSTSOCKET] || s == conn->sock[SECONDARYSOCKET]) { + Curl_attach_connection(data, conn); + connc_run_conn_shutdown(data, conn, &done); + DEBUGF(infof(data, "[CCACHE] shutdown #%" CURL_FORMAT_CURL_OFF_T + ", done=%d", conn->connection_id, done)); + Curl_detach_connection(data); + if(done || connc_update_shutdown_ev(multi, data, conn)) { + Curl_llist_remove(&connc->shutdowns.conn_list, e, NULL); + connc_disconnect(NULL, conn, connc, FALSE); + } + break; + } + e = e->next; + } + connc->shutdowns.iter_locked = FALSE; +} + +void Curl_conncache_multi_close_all(struct Curl_multi *multi) +{ + connc_close_all(&multi->conn_cache); +} + + +#define NUM_POLLS_ON_STACK 10 + +static CURLcode connc_shutdown_wait(struct conncache *connc, int timeout_ms) +{ + struct pollfd a_few_on_stack[NUM_POLLS_ON_STACK]; + struct curl_pollfds cpfds; + CURLcode result; + + Curl_pollfds_init(&cpfds, a_few_on_stack, NUM_POLLS_ON_STACK); + + result = Curl_conncache_add_pollfds(connc, &cpfds); + if(result) + goto out; + + Curl_poll(cpfds.pfds, cpfds.n, CURLMIN(timeout_ms, 1000)); + +out: + Curl_pollfds_cleanup(&cpfds); + return result; +} + +static void connc_shutdown_all(struct conncache *connc, int timeout_ms) +{ + struct Curl_easy *data = connc->closure_handle; + struct connectdata *conn; + struct curltime started = Curl_now(); + + if(!data) + return; + (void)data; + + DEBUGF(infof(data, "conncache shutdown all")); + + /* Move all connections into the shutdown queue */ + conn = connc_find_first_connection(connc); + while(conn) { + /* This will remove the connection from the cache */ + DEBUGF(infof(data, "moving connection %" CURL_FORMAT_CURL_OFF_T + " to shutdown queue", conn->connection_id)); + connc_remove_conn(connc, conn); + connc_discard_conn(connc, NULL, conn, FALSE); + conn = connc_find_first_connection(connc); + } + + DEBUGASSERT(!connc->shutdowns.iter_locked); + while(connc->shutdowns.conn_list.head) { + timediff_t timespent; + int remain_ms; + + connc_perform(connc); + + if(!connc->shutdowns.conn_list.head) { + DEBUGF(infof(data, "conncache shutdown ok")); + break; + } + + /* wait for activity, timeout or "nothing" */ + timespent = Curl_timediff(Curl_now(), started); + if(timespent >= (timediff_t)timeout_ms) { + DEBUGF(infof(data, "conncache shutdown %s", + (timeout_ms > 0)? "timeout" : "best effort done")); + break; + } + + remain_ms = timeout_ms - (int)timespent; + if(connc_shutdown_wait(connc, remain_ms)) { + DEBUGF(infof(data, "conncache shutdown all, abort")); + break; + } + } + + /* Due to errors/timeout, we might come here without being full ydone. */ + connc_shutdown_discard_all(connc); +} + #if 0 /* Useful for debugging the connection cache */ void Curl_conncache_print(struct conncache *connc) diff --git a/lib/conncache.h b/lib/conncache.h index c60f8449e..30cc2e259 100644 --- a/lib/conncache.h +++ b/lib/conncache.h @@ -35,6 +35,14 @@ #include "timeval.h" struct connectdata; +struct curl_pollfds; +struct curl_waitfds; +struct Curl_multi; + +struct connshutdowns { + struct Curl_llist conn_list; /* The connectdata to shut down */ + BIT(iter_locked); /* TRUE while iterating the list */ +}; struct conncache { struct Curl_hash hash; @@ -42,15 +50,17 @@ struct conncache { curl_off_t next_connection_id; curl_off_t next_easy_id; struct curltime last_cleanup; + struct connshutdowns shutdowns; /* handle used for closing cached connections */ struct Curl_easy *closure_handle; + struct Curl_multi *multi; /* Optional, set if cache belongs to multi */ }; #define BUNDLE_NO_MULTIUSE -1 #define BUNDLE_UNKNOWN 0 /* initial value */ #define BUNDLE_MULTIPLEX 2 -#ifdef CURLDEBUG +#ifdef DEBUGBUILD /* the debug versions of these macros make extra certain that the lock is never doubly locked or unlocked */ #define CONNCACHE_LOCK(x) \ @@ -84,8 +94,12 @@ struct connectbundle { struct Curl_llist conn_list; /* The connectdata members of the bundle */ }; -/* returns 1 on error, 0 is fine */ -int Curl_conncache_init(struct conncache *, int size); +/* Init the cache, pass multi only if cache is owned by it. + * returns 1 on error, 0 is fine. + */ +int Curl_conncache_init(struct conncache *, + struct Curl_multi *multi, + size_t size); void Curl_conncache_destroy(struct conncache *connc); /* return the correct bundle, to a host or a proxy */ @@ -119,4 +133,32 @@ Curl_conncache_extract_oldest(struct Curl_easy *data); void Curl_conncache_close_all_connections(struct conncache *connc); void Curl_conncache_print(struct conncache *connc); +/** + * Tear down the connection. If `aborted` is FALSE, the connection + * will be shut down first before discarding. If the shutdown + * is not immediately complete, the connection + * will be placed into the cache is shutdown queue. + */ +void Curl_conncache_disconnect(struct Curl_easy *data, + struct connectdata *conn, + bool aborted); + +/** + * Add sockets and POLLIN/OUT flags for connections handled by the cache. + */ +CURLcode Curl_conncache_add_pollfds(struct conncache *connc, + struct curl_pollfds *cpfds); +CURLcode Curl_conncache_add_waitfds(struct conncache *connc, + struct curl_waitfds *cwfds); + +/** + * Perform maintenance on connections in the cache. Specifically, + * progress the shutdown of connections in the queue. + */ +void Curl_conncache_multi_perform(struct Curl_multi *multi); + +void Curl_conncache_multi_socket(struct Curl_multi *multi, + curl_socket_t s, int ev_bitmask); +void Curl_conncache_multi_close_all(struct Curl_multi *multi); + #endif /* HEADER_CURL_CONNCACHE_H */ diff --git a/lib/connect.c b/lib/connect.c index e457006c0..9b68f15da 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -90,7 +90,7 @@ /* * Curl_timeleft() returns the amount of milliseconds left allowed for the - * transfer/connection. If the value is 0, there's no timeout (ie there's + * transfer/connection. If the value is 0, there is no timeout (ie there is * infinite time left). If the value is negative, the timeout time has already * elapsed. * @param data the transfer to check on @@ -142,6 +142,72 @@ timediff_t Curl_timeleft(struct Curl_easy *data, return (ctimeleft_ms < timeleft_ms)? ctimeleft_ms : timeleft_ms; } +void Curl_shutdown_start(struct Curl_easy *data, int sockindex, + struct curltime *nowp) +{ + struct curltime now; + + DEBUGASSERT(data->conn); + if(!nowp) { + now = Curl_now(); + nowp = &now; + } + data->conn->shutdown.start[sockindex] = *nowp; + data->conn->shutdown.timeout_ms = (data->set.shutdowntimeout > 0) ? + data->set.shutdowntimeout : DEFAULT_SHUTDOWN_TIMEOUT_MS; +} + +timediff_t Curl_shutdown_timeleft(struct connectdata *conn, int sockindex, + struct curltime *nowp) +{ + struct curltime now; + timediff_t left_ms; + + if(!conn->shutdown.start[sockindex].tv_sec || !conn->shutdown.timeout_ms) + return 0; /* not started or no limits */ + + if(!nowp) { + now = Curl_now(); + nowp = &now; + } + left_ms = conn->shutdown.timeout_ms - + Curl_timediff(*nowp, conn->shutdown.start[sockindex]); + return left_ms? left_ms : -1; +} + +timediff_t Curl_conn_shutdown_timeleft(struct connectdata *conn, + struct curltime *nowp) +{ + timediff_t left_ms = 0, ms; + struct curltime now; + int i; + + for(i = 0; conn->shutdown.timeout_ms && (i < 2); ++i) { + if(!conn->shutdown.start[i].tv_sec) + continue; + if(!nowp) { + now = Curl_now(); + nowp = &now; + } + ms = Curl_shutdown_timeleft(conn, i, nowp); + if(ms && (!left_ms || ms < left_ms)) + left_ms = ms; + } + return left_ms; +} + +void Curl_shutdown_clear(struct Curl_easy *data, int sockindex) +{ + struct curltime *pt = &data->conn->shutdown.start[sockindex]; + memset(pt, 0, sizeof(*pt)); +} + +bool Curl_shutdown_started(struct Curl_easy *data, int sockindex) +{ + struct curltime *pt = &data->conn->shutdown.start[sockindex]; + return (pt->tv_sec > 0) || (pt->tv_usec > 0); +} + /* 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, @@ -195,7 +261,7 @@ bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, char *addr, int *port) { struct sockaddr_in *si = NULL; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct sockaddr_in6 *si6 = NULL; #endif #if (defined(HAVE_SYS_UN_H) || defined(WIN32_SOCKADDR_UN)) && defined(AF_UNIX) @@ -214,7 +280,7 @@ bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, return TRUE; } break; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case AF_INET6: si6 = (struct sockaddr_in6 *)(void *) sa; if(Curl_inet_ntop(sa->sa_family, &si6->sin6_addr, @@ -317,7 +383,7 @@ void Curl_conncontrol(struct connectdata *conn, #endif ) { - /* close if a connection, or a stream that isn't multiplexed. */ + /* close if a connection, or a stream that is not multiplexed. */ /* This function will be called both before and after this connection is associated with a transfer. */ bool closeit, is_multiplex; @@ -358,6 +424,7 @@ struct eyeballer { BIT(has_started); /* attempts have started */ BIT(is_done); /* out of addresses/time */ BIT(connected); /* cf has connected */ + BIT(shutdown); /* cf has shutdown */ BIT(inconclusive); /* connect was not a hard failure, we * might talk to a restarting server */ }; @@ -401,7 +468,7 @@ static CURLcode eyeballer_new(struct eyeballer **pballer, return CURLE_OUT_OF_MEMORY; baller->name = ((ai_family == AF_INET)? "ipv4" : ( -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 (ai_family == AF_INET6)? "ipv6" : #endif "ip")); @@ -464,7 +531,7 @@ static void baller_initiate(struct Curl_cfilter *cf, CURLcode result; - /* Don't close a previous cfilter yet to ensure that the next IP's + /* Do not 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. */ @@ -744,7 +811,7 @@ static CURLcode is_connected(struct Curl_cfilter *cf, } /* - * Connect to the given host with timeout, proxy or remote doesn't matter. + * Connect to the given host with timeout, proxy or remote does not matter. * There might be more than one IP address to try out. */ static CURLcode start_connect(struct Curl_cfilter *cf, @@ -779,7 +846,7 @@ static CURLcode start_connect(struct Curl_cfilter *cf, /* any IP version is allowed */ ai_family0 = remotehost->addr? remotehost->addr->ai_family : 0; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 ai_family1 = ai_family0 == AF_INET6 ? AF_INET : AF_INET6; #else @@ -790,7 +857,7 @@ static CURLcode start_connect(struct Curl_cfilter *cf, /* only one IP version is allowed */ ai_family0 = (conn->ip_version == CURL_IPRESOLVE_V4) ? AF_INET : -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 AF_INET6; #else AF_UNSPEC; @@ -857,6 +924,46 @@ static void cf_he_ctx_clear(struct Curl_cfilter *cf, struct Curl_easy *data) ctx->winner = NULL; } +static CURLcode cf_he_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, bool *done) +{ + struct cf_he_ctx *ctx = cf->ctx; + size_t i; + CURLcode result = CURLE_OK; + + DEBUGASSERT(data); + if(cf->connected) { + *done = TRUE; + return CURLE_OK; + } + + /* shutdown all ballers that have not done so already. If one fails, + * continue shutting down others until all are shutdown. */ + for(i = 0; i < ARRAYSIZE(ctx->baller); i++) { + struct eyeballer *baller = ctx->baller[i]; + bool bdone = FALSE; + if(!baller || !baller->cf || baller->shutdown) + continue; + baller->result = baller->cf->cft->do_shutdown(baller->cf, data, &bdone); + if(baller->result || bdone) + baller->shutdown = TRUE; /* treat a failed shutdown as done */ + } + + *done = TRUE; + for(i = 0; i < ARRAYSIZE(ctx->baller); i++) { + if(ctx->baller[i] && !ctx->baller[i]->shutdown) + *done = FALSE; + } + if(*done) { + for(i = 0; i < ARRAYSIZE(ctx->baller); i++) { + if(ctx->baller[i] && ctx->baller[i]->result) + result = ctx->baller[i]->result; + } + } + CURL_TRC_CF(data, cf, "shutdown -> %d, done=%d", result, *done); + return result; +} + static void cf_he_adjust_pollset(struct Curl_cfilter *cf, struct Curl_easy *data, struct easy_pollset *ps) @@ -917,7 +1024,7 @@ static CURLcode cf_he_connect(struct Curl_cfilter *cf, 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_pgrsTime(data, TIMER_APPCONNECT); /* we are connected already */ Curl_verboseconnect(data, cf->conn, cf->sockindex); data->info.numconnects++; /* to track the # of connections made */ } @@ -1052,6 +1159,7 @@ struct Curl_cftype Curl_cft_happy_eyeballs = { cf_he_destroy, cf_he_connect, cf_he_close, + cf_he_shutdown, Curl_cf_def_get_host, cf_he_adjust_pollset, cf_he_data_pending, @@ -1112,12 +1220,12 @@ struct transport_provider { }; static -#ifndef DEBUGBUILD +#ifndef UNITTESTS const #endif struct transport_provider transport_providers[] = { { TRNSPRT_TCP, Curl_cf_tcp_create }, -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 { TRNSPRT_QUIC, Curl_cf_quic_create }, #endif #ifndef CURL_DISABLE_TFTP @@ -1316,6 +1424,7 @@ struct Curl_cftype Curl_cft_setup = { cf_setup_destroy, cf_setup_connect, cf_setup_close, + Curl_cf_def_shutdown, Curl_cf_def_get_host, Curl_cf_def_adjust_pollset, Curl_cf_def_data_pending, @@ -1378,7 +1487,7 @@ static CURLcode cf_setup_add(struct Curl_easy *data, return result; } -#ifdef DEBUGBUILD +#ifdef UNITTESTS /* used by unit2600.c */ void Curl_debug_set_transport_provider(int transport, cf_ip_connect_create *cf_create) @@ -1391,7 +1500,7 @@ void Curl_debug_set_transport_provider(int transport, } } } -#endif /* DEBUGBUILD */ +#endif /* UNITTESTS */ CURLcode Curl_cf_setup_insert_after(struct Curl_cfilter *cf_at, struct Curl_easy *data, diff --git a/lib/connect.h b/lib/connect.h index 00efe6f34..e9a4f9c59 100644 --- a/lib/connect.h +++ b/lib/connect.h @@ -32,7 +32,7 @@ struct Curl_dns_entry; struct ip_quadruple; -/* generic function that returns how much time there's left to run, according +/* generic function that returns how much time there is left to run, according to the timeouts set */ timediff_t Curl_timeleft(struct Curl_easy *data, struct curltime *nowp, @@ -40,6 +40,26 @@ timediff_t Curl_timeleft(struct Curl_easy *data, #define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */ +#define DEFAULT_SHUTDOWN_TIMEOUT_MS (2 * 1000) + +void Curl_shutdown_start(struct Curl_easy *data, int sockindex, + struct curltime *nowp); + +/* return how much time there is left to shutdown the connection at + * sockindex. Returns 0 if there is no limit or shutdown has not started. */ +timediff_t Curl_shutdown_timeleft(struct connectdata *conn, int sockindex, + struct curltime *nowp); + +/* return how much time there is left to shutdown the connection. + * Returns 0 if there is no limit or shutdown has not started. */ +timediff_t Curl_conn_shutdown_timeleft(struct connectdata *conn, + struct curltime *nowp); + +void Curl_shutdown_clear(struct Curl_easy *data, int sockindex); + +/* TRUE iff shutdown has been started */ +bool Curl_shutdown_started(struct Curl_easy *data, int sockindex); + /* * Used to extract socket and connectdata struct for the most recent * transfer on the given Curl_easy. @@ -125,7 +145,7 @@ CURLcode Curl_conn_setup(struct Curl_easy *data, extern struct Curl_cftype Curl_cft_happy_eyeballs; extern struct Curl_cftype Curl_cft_setup; -#ifdef DEBUGBUILD +#ifdef UNITTESTS void Curl_debug_set_transport_provider(int transport, cf_ip_connect_create *cf_create); #endif diff --git a/lib/content_encoding.c b/lib/content_encoding.c index c1abf24e8..4dae41a89 100644 --- a/lib/content_encoding.c +++ b/lib/content_encoding.c @@ -82,7 +82,7 @@ #define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ #define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ -#define ORIG_NAME 0x08 /* bit 3 set: original file name present */ +#define ORIG_NAME 0x08 /* bit 3 set: original filename present */ #define COMMENT 0x10 /* bit 4 set: file comment present */ #define RESERVED 0xE0 /* bits 5..7: reserved */ @@ -192,7 +192,7 @@ static CURLcode inflate_stream(struct Curl_easy *data, zp->zlib_init != ZLIB_GZIP_INFLATING) return exit_zlib(data, z, &zp->zlib_init, CURLE_WRITE_ERROR); - /* Dynamically allocate a buffer for decompression because it's uncommonly + /* Dynamically allocate a buffer for decompression because it is uncommonly large to hold on the stack */ decomp = malloc(DSIZ); if(!decomp) @@ -246,7 +246,7 @@ static CURLcode inflate_stream(struct Curl_easy *data, to fix and continue anyway */ if(zp->zlib_init == ZLIB_INIT) { /* Do not use inflateReset2(): only available since zlib 1.2.3.4. */ - (void) inflateEnd(z); /* don't care about the return code */ + (void) inflateEnd(z); /* do not care about the return code */ if(inflateInit2(z, -MAX_WBITS) == Z_OK) { z->next_in = orig_in; z->avail_in = nread; @@ -266,7 +266,7 @@ static CURLcode inflate_stream(struct Curl_easy *data, } free(decomp); - /* We're about to leave this call so the `nread' data bytes won't be seen + /* We are about to leave this call so the `nread' data bytes will not be seen again. If we are in a state that would wrongly allow restart in raw mode at the next call, assume output has already started. */ if(nread && zp->zlib_init == ZLIB_INIT) @@ -300,7 +300,7 @@ static CURLcode deflate_do_write(struct Curl_easy *data, struct zlib_writer *zp = (struct zlib_writer *) writer; z_stream *z = &zp->z; /* zlib state structure */ - if(!(type & CLIENTWRITE_BODY)) + if(!(type & CLIENTWRITE_BODY) || !nbytes) return Curl_cwriter_write(data, writer->next, type, buf, nbytes); /* Set the compressed input when this function is called */ @@ -388,7 +388,7 @@ static gzip_status check_gzip_header(unsigned char const *data, ssize_t len, flags = data[3]; if(method != Z_DEFLATED || (flags & RESERVED) != 0) { - /* Can't handle this compression method or unknown flag */ + /* cannot handle this compression method or unknown flag */ return GZIP_BAD; } @@ -412,7 +412,7 @@ static gzip_status check_gzip_header(unsigned char const *data, ssize_t len, } if(flags & ORIG_NAME) { - /* Skip over NUL-terminated file name */ + /* Skip over NUL-terminated filename */ while(len && *data) { --len; ++data; @@ -457,7 +457,7 @@ static CURLcode gzip_do_write(struct Curl_easy *data, struct zlib_writer *zp = (struct zlib_writer *) writer; z_stream *z = &zp->z; /* zlib state structure */ - if(!(type & CLIENTWRITE_BODY)) + if(!(type & CLIENTWRITE_BODY) || !nbytes) return Curl_cwriter_write(data, writer->next, type, buf, nbytes); if(zp->zlib_init == ZLIB_INIT_GZIP) { @@ -474,10 +474,10 @@ static CURLcode gzip_do_write(struct Curl_easy *data, return exit_zlib(data, z, &zp->zlib_init, CURLE_WRITE_ERROR); #else - /* This next mess is to get around the potential case where there isn't - * enough data passed in to skip over the gzip header. If that happens, we - * malloc a block and copy what we have then wait for the next call. If - * there still isn't enough (this is definitely a worst-case scenario), we + /* This next mess is to get around the potential case where there is not + * enough data passed in to skip over the gzip header. If that happens, we + * malloc a block and copy what we have then wait for the next call. If + * there still is not enough (this is definitely a worst-case scenario), we * make the block bigger, copy the next part in and keep waiting. * * This is only required with zlib versions < 1.2.0.4 as newer versions @@ -499,11 +499,11 @@ static CURLcode gzip_do_write(struct Curl_easy *data, break; case GZIP_UNDERFLOW: - /* We need more data so we can find the end of the gzip header. It's + /* We need more data so we can find the end of the gzip header. it is * possible that the memory block we malloc here will never be freed if - * the transfer abruptly aborts after this point. Since it's unlikely + * the transfer abruptly aborts after this point. Since it is unlikely * that circumstances will be right for this code path to be followed in - * the first place, and it's even more unlikely for a transfer to fail + * the first place, and it is even more unlikely for a transfer to fail * immediately afterwards, it should seldom be a problem. */ z->avail_in = (uInt) nbytes; @@ -513,7 +513,7 @@ static CURLcode gzip_do_write(struct Curl_easy *data, } memcpy(z->next_in, buf, z->avail_in); zp->zlib_init = ZLIB_GZIP_HEADER; /* Need more gzip header data state */ - /* We don't have any data to inflate yet */ + /* We do not have any data to inflate yet */ return CURLE_OK; case GZIP_BAD: @@ -536,18 +536,18 @@ static CURLcode gzip_do_write(struct Curl_easy *data, /* Append the new block of data to the previous one */ memcpy(z->next_in + z->avail_in - nbytes, buf, nbytes); - switch(check_gzip_header(z->next_in, z->avail_in, &hlen)) { + switch(check_gzip_header(z->next_in, (ssize_t)z->avail_in, &hlen)) { case GZIP_OK: /* This is the zlib stream data */ free(z->next_in); - /* Don't point into the malloced block since we just freed it */ + /* Do not point into the malloced block since we just freed it */ z->next_in = (Bytef *) buf + hlen + nbytes - z->avail_in; - z->avail_in = (uInt) (z->avail_in - hlen); + z->avail_in = z->avail_in - (uInt)hlen; zp->zlib_init = ZLIB_GZIP_INFLATING; /* Inflating stream state */ break; case GZIP_UNDERFLOW: - /* We still don't have any data to inflate! */ + /* We still do not have any data to inflate! */ return CURLE_OK; case GZIP_BAD: @@ -572,11 +572,11 @@ static CURLcode gzip_do_write(struct Curl_easy *data, } if(z->avail_in == 0) { - /* We don't have any data to inflate; wait until next time */ + /* We do not have any data to inflate; wait until next time */ return CURLE_OK; } - /* We've parsed the header, now uncompress the data */ + /* We have parsed the header, now uncompress the data */ return inflate_stream(data, writer, type, ZLIB_GZIP_INFLATING); #endif } @@ -669,7 +669,7 @@ static CURLcode brotli_do_write(struct Curl_easy *data, CURLcode result = CURLE_OK; BrotliDecoderResult r = BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT; - if(!(type & CLIENTWRITE_BODY)) + if(!(type & CLIENTWRITE_BODY) || !nbytes) return Curl_cwriter_write(data, writer->next, type, buf, nbytes); if(!bp->br) @@ -762,7 +762,7 @@ static CURLcode zstd_do_write(struct Curl_easy *data, ZSTD_outBuffer out; size_t errorCode; - if(!(type & CLIENTWRITE_BODY)) + if(!(type & CLIENTWRITE_BODY) || !nbytes) return Curl_cwriter_write(data, writer->next, type, buf, nbytes); if(!zp->decomp) { @@ -916,7 +916,7 @@ static CURLcode error_do_write(struct Curl_easy *data, (void) buf; (void) nbytes; - if(!(type & CLIENTWRITE_BODY)) + if(!(type & CLIENTWRITE_BODY) || !nbytes) return Curl_cwriter_write(data, writer->next, type, buf, nbytes); failf(data, "Unrecognized content encoding type. " @@ -966,7 +966,7 @@ static const struct Curl_cwtype *find_unencode_writer(const char *name, return NULL; } -/* Set-up the unencoding stack from the Content-Encoding header value. +/* Setup 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 is_transfer) @@ -978,6 +978,7 @@ CURLcode Curl_build_unencoding_stack(struct Curl_easy *data, do { const char *name; size_t namelen; + bool is_chunked = FALSE; /* Parse a single encoding name. */ while(ISBLANK(*enclist) || *enclist == ',') @@ -993,12 +994,17 @@ CURLcode Curl_build_unencoding_stack(struct Curl_easy *data, const struct Curl_cwtype *cwt; struct Curl_cwriter *writer; + CURL_TRC_WRITE(data, "looking for %s decoder: %.*s", + is_transfer? "transfer" : "content", (int)namelen, name); + is_chunked = (is_transfer && (namelen == 7) && + strncasecompare(name, "chunked", 7)); /* if we skip the decoding in this phase, do not look further. * Exception is "chunked" transfer-encoding which always must happen */ - if((is_transfer && !data->set.http_transfer_encoding && - (namelen != 7 || !strncasecompare(name, "chunked", 7))) || + if((is_transfer && !data->set.http_transfer_encoding && !is_chunked) || (!is_transfer && data->set.http_ce_skip)) { /* not requested, ignore */ + CURL_TRC_WRITE(data, "decoder not requested, ignored: %.*s", + (int)namelen, name); return CURLE_OK; } @@ -1009,10 +1015,38 @@ CURLcode Curl_build_unencoding_stack(struct Curl_easy *data, } cwt = find_unencode_writer(name, namelen, phase); + if(cwt && is_chunked && Curl_cwriter_get_by_type(data, cwt)) { + /* A 'chunked' transfer encoding has already been added. + * Ignore duplicates. See #13451. + * Also RFC 9112, ch. 6.1: + * "A sender MUST NOT apply the chunked transfer coding more than + * once to a message body." + */ + CURL_TRC_WRITE(data, "ignoring duplicate 'chunked' decoder"); + return CURLE_OK; + } + + if(is_transfer && !is_chunked && + Curl_cwriter_get_by_name(data, "chunked")) { + /* RFC 9112, ch. 6.1: + * "If any transfer coding other than chunked is applied to a + * response's content, the sender MUST either apply chunked as the + * final transfer coding or terminate the message by closing the + * connection." + * "chunked" must be the last added to be the first in its phase, + * reject this. + */ + failf(data, "Reject response due to 'chunked' not being the last " + "Transfer-Encoding"); + return CURLE_BAD_CONTENT_ENCODING; + } + if(!cwt) cwt = &error_writer; /* Defer error at use. */ result = Curl_cwriter_create(&writer, data, cwt, phase); + CURL_TRC_WRITE(data, "added %s decoder %s -> %d", + is_transfer? "transfer" : "content", cwt->name, result); if(result) return result; diff --git a/lib/cookie.c b/lib/cookie.c index c1ed2913c..b0d8d84be 100644 --- a/lib/cookie.c +++ b/lib/cookie.c @@ -61,7 +61,7 @@ struct Cookies *Curl_cookie_getlist(struct CookieInfo *cookie, boolean informs the cookie if a secure connection is achieved or not. - It shall only return cookies that haven't expired. + It shall only return cookies that have not expired. Example set of cookies: @@ -150,7 +150,7 @@ static bool cookie_tailmatch(const char *cookie_domain, } /* - * matching cookie path and url path + * matching cookie path and URL path * RFC6265 5.1.4 Paths and Path-Match */ static bool pathmatch(const char *cookie_path, const char *request_uri) @@ -262,8 +262,9 @@ static size_t cookie_hash_domain(const char *domain, const size_t len) size_t h = 5381; while(domain < end) { + size_t j = (size_t)Curl_raw_toupper(*domain++); h += h << 5; - h ^= Curl_raw_toupper(*domain++); + h ^= j; } return (h % COOKIE_HASH_SIZE); @@ -373,7 +374,7 @@ static void strstore(char **str, const char *newstr, size_t len) * * Remove expired cookies from the hash by inspecting the expires timestamp on * each cookie in the hash, freeing and deleting any where the timestamp is in - * the past. If the cookiejar has recorded the next timestamp at which one or + * the past. If the cookiejar has recorded the next timestamp at which one or * more cookies expire, then processing will exit early in case this timestamp * is in the future. */ @@ -385,11 +386,11 @@ static void remove_expired(struct CookieInfo *cookies) /* * If the earliest expiration timestamp in the jar is in the future we can - * skip scanning the whole jar and instead exit early as there won't be any - * cookies to evict. If we need to evict however, reset the next_expiration - * counter in order to track the next one. In case the recorded first - * expiration is the max offset, then perform the safe fallback of checking - * all cookies. + * skip scanning the whole jar and instead exit early as there will not be + * any cookies to evict. If we need to evict however, reset the + * next_expiration counter in order to track the next one. In case the + * recorded first expiration is the max offset, then perform the safe + * fallback of checking all cookies. */ if(now < cookies->next_expiration && cookies->next_expiration != CURL_OFF_T_MAX) @@ -414,7 +415,7 @@ static void remove_expired(struct CookieInfo *cookies) } else { /* - * If this cookie has an expiration timestamp earlier than what we've + * If this cookie has an expiration timestamp earlier than what we have * seen so far then record it for the next round of expirations. */ if(co->expires && co->expires < cookies->next_expiration) @@ -473,7 +474,7 @@ static int invalid_octets(const char *p) * Curl_cookie_add * * Add a single cookie line to the cookie keeping object. Be aware that - * sometimes we get an IP-only host name, and that might also be a numerical + * sometimes we get an IP-only hostname, and that might also be a numerical * IPv6 address. * * Returns NULL on out of memory or invalid cookie. This is suboptimal, @@ -509,7 +510,7 @@ Curl_cookie_add(struct Curl_easy *data, /* First, alloc and init a new struct for it */ co = calloc(1, sizeof(struct Cookie)); if(!co) - return NULL; /* bail out if we're this low on memory */ + return NULL; /* bail out if we are this low on memory */ if(httpheader) { /* This line was read off an HTTP-header */ @@ -647,7 +648,7 @@ Curl_cookie_add(struct Curl_easy *data, 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 */ + /* there was a '=' so we are not done parsing this field */ done = FALSE; } if(done) @@ -681,9 +682,9 @@ Curl_cookie_add(struct Curl_easy *data, #ifndef USE_LIBPSL /* - * Without PSL we don't know when the incoming cookie is set on a + * Without PSL we do not know when the incoming cookie is set on a * TLD or otherwise "protected" suffix. To reduce risk, we require a - * dot OR the exact host name being "localhost". + * dot OR the exact hostname being "localhost". */ if(bad_domain(valuep, vlen)) domain = ":"; @@ -721,10 +722,10 @@ Curl_cookie_add(struct Curl_easy *data, /* * Defined in RFC2109: * - * Optional. The Max-Age attribute defines the lifetime of the - * cookie, in seconds. The delta-seconds value is a decimal non- - * negative integer. After delta-seconds seconds elapse, the - * client should discard the cookie. A value of zero means the + * Optional. The Max-Age attribute defines the lifetime of the + * cookie, in seconds. The delta-seconds value is a decimal non- + * negative integer. After delta-seconds seconds elapse, the + * client should discard the cookie. A value of zero means the * cookie should be discarded immediately. */ CURLofft offt; @@ -780,7 +781,7 @@ Curl_cookie_add(struct Curl_easy *data, } /* - * Else, this is the second (or more) name we don't know about! + * Else, this is the second (or more) name we do not know about! */ } else { @@ -806,7 +807,7 @@ Curl_cookie_add(struct Curl_easy *data, if(!badcookie && !co->path && path) { /* - * No path was given in the header line, set the default. Note that the + * No path was given in the header line, set the default. Note that the * passed-in path to this function MAY have a '?' and following part that * MUST NOT be stored as part of the path. */ @@ -835,7 +836,7 @@ Curl_cookie_add(struct Curl_easy *data, } /* - * If we didn't get a cookie name, or a bad one, the this is an illegal + * If we did not get a cookie name, or a bad one, the this is an illegal * line so bail out. */ if(badcookie || !co->name) { @@ -868,7 +869,7 @@ Curl_cookie_add(struct Curl_easy *data, } if(lineptr[0]=='#') { - /* don't even try the comments */ + /* do not even try the comments */ free(co); return NULL; } @@ -886,7 +887,8 @@ Curl_cookie_add(struct Curl_easy *data, * Now loop through the fields and init the struct we already have * allocated */ - for(ptr = firstptr, fields = 0; ptr && !badcookie; + fields = 0; + for(ptr = firstptr; ptr && !badcookie; ptr = strtok_r(NULL, "\t", &tok_buf), fields++) { switch(fields) { case 0: @@ -907,7 +909,7 @@ Curl_cookie_add(struct Curl_easy *data, case 2: /* The file format allows the path field to remain not filled in */ if(strcmp("TRUE", ptr) && strcmp("FALSE", ptr)) { - /* only if the path doesn't look like a boolean option! */ + /* only if the path does not look like a boolean option! */ co->path = strdup(ptr); if(!co->path) badcookie = TRUE; @@ -919,7 +921,7 @@ Curl_cookie_add(struct Curl_easy *data, } break; } - /* this doesn't look like a path, make one up! */ + /* this does not look like a path, make one up! */ co->path = strdup("/"); if(!co->path) badcookie = TRUE; @@ -1002,7 +1004,7 @@ Curl_cookie_add(struct Curl_easy *data, if(!c->running && /* read from a file */ c->newsession && /* clean session cookies */ - !co->expires) { /* this is a session cookie since it doesn't expire! */ + !co->expires) { /* this is a session cookie since it does not expire! */ freecookie(co); return NULL; } @@ -1023,7 +1025,7 @@ Curl_cookie_add(struct Curl_easy *data, #ifdef USE_LIBPSL /* * Check if the domain is a Public Suffix and if yes, ignore the cookie. We - * must also check that the data handle isn't NULL since the psl code will + * must also check that the data handle is not NULL since the psl code will * dereference it. */ if(data && (domain && co->domain && !Curl_host_is_ipnum(co->domain))) { @@ -1123,10 +1125,10 @@ Curl_cookie_add(struct Curl_easy *data, if(replace_old && !co->livecookie && clist->livecookie) { /* - * Both cookies matched fine, except that the already present cookie is - * "live", which means it was set from a header, while the new one was - * read from a file and thus isn't "live". "live" cookies are preferred - * so the new cookie is freed. + * Both cookies matched fine, except that the already present cookie + * is "live", which means it was set from a header, while the new one + * was read from a file and thus is not "live". "live" cookies are + * preferred so the new cookie is freed. */ freecookie(co); return NULL; @@ -1177,7 +1179,7 @@ Curl_cookie_add(struct Curl_easy *data, } /* - * Now that we've added a new cookie to the jar, update the expiration + * Now that we have added a new cookie to the jar, update the expiration * tracker in case it is the next one to expire. */ if(co->expires && (co->expires < c->next_expiration)) @@ -1210,12 +1212,12 @@ struct CookieInfo *Curl_cookie_init(struct Curl_easy *data, FILE *handle = NULL; if(!inc) { - /* we didn't get a struct, create one */ + /* we did not get a struct, create one */ c = calloc(1, sizeof(struct CookieInfo)); if(!c) return NULL; /* failed to get memory */ /* - * Initialize the next_expiration time to signal that we don't have enough + * Initialize the next_expiration time to signal that we do not have enough * information yet. */ c->next_expiration = CURL_OFF_T_MAX; @@ -1270,7 +1272,7 @@ struct CookieInfo *Curl_cookie_init(struct Curl_easy *data, } data->state.cookie_engine = TRUE; } - c->running = TRUE; /* now, we're running */ + c->running = TRUE; /* now, we are running */ return c; } @@ -1366,7 +1368,7 @@ static struct Cookie *dup_cookie(struct Cookie *src) * should send to the server if used now. The secure boolean informs the cookie * if a secure connection is achieved or not. * - * It shall only return cookies that haven't expired. + * It shall only return cookies that have not expired. */ struct Cookie *Curl_cookie_getlist(struct Curl_easy *data, struct CookieInfo *c, @@ -1392,7 +1394,7 @@ struct Cookie *Curl_cookie_getlist(struct Curl_easy *data, co = c->cookies[myhash]; while(co) { - /* if the cookie requires we're secure we must only continue if we are! */ + /* if the cookie requires we are secure we must only continue if we are! */ if(co->secure?secure:TRUE) { /* now check if the domain is correct */ @@ -1604,7 +1606,7 @@ static char *get_netscape_format(const struct Cookie *co) * cookie_output() * * Writes all internally known cookies to the specified file. Specify - * "-" as file name to write to stdout. + * "-" as filename to write to stdout. * * The function returns non-zero on write failure. */ diff --git a/lib/cookie.h b/lib/cookie.h index 012dd892c..838d74d82 100644 --- a/lib/cookie.h +++ b/lib/cookie.h @@ -75,7 +75,7 @@ struct CookieInfo { /** Limits for INCOMING cookies **/ -/* The longest we allow a line to be when reading a cookie from a HTTP header +/* The longest we allow a line to be when reading a cookie from an HTTP header or from a cookie jar */ #define MAX_COOKIE_LINE 5000 diff --git a/lib/curl_addrinfo.c b/lib/curl_addrinfo.c index f9211d3f5..d290d7da1 100644 --- a/lib/curl_addrinfo.c +++ b/lib/curl_addrinfo.c @@ -95,7 +95,7 @@ Curl_freeaddrinfo(struct Curl_addrinfo *cahead) * the only difference that instead of returning a linked list of * addrinfo structs this one returns a linked list of Curl_addrinfo * ones. The memory allocated by this function *MUST* be free'd with - * Curl_freeaddrinfo(). For each successful call to this function + * Curl_freeaddrinfo(). For each successful call to this function * there must be an associated call later to Curl_freeaddrinfo(). * * There should be no single call to system's getaddrinfo() in the @@ -130,7 +130,7 @@ Curl_getaddrinfo_ex(const char *nodename, /* settle family-specific sockaddr structure size. */ if(ai->ai_family == AF_INET) ss_size = sizeof(struct sockaddr_in); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else if(ai->ai_family == AF_INET6) ss_size = sizeof(struct sockaddr_in6); #endif @@ -221,7 +221,7 @@ Curl_getaddrinfo_ex(const char *nodename, * stack, but usable also for IPv4, all hosts and environments. * * The memory allocated by this function *MUST* be free'd later on calling - * Curl_freeaddrinfo(). For each successful call to this function there + * Curl_freeaddrinfo(). For each successful call to this function there * must be an associated call later to Curl_freeaddrinfo(). * * Curl_addrinfo defined in "lib/curl_addrinfo.h" @@ -259,7 +259,7 @@ Curl_he2ai(const struct hostent *he, int port) struct Curl_addrinfo *prevai = NULL; struct Curl_addrinfo *firstai = NULL; struct sockaddr_in *addr; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct sockaddr_in6 *addr6; #endif CURLcode result = CURLE_OK; @@ -275,7 +275,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-terminator */ -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(he->h_addrtype == AF_INET6) ss_size = sizeof(struct sockaddr_in6); else @@ -317,16 +317,24 @@ Curl_he2ai(const struct hostent *he, int port) addr = (void *)ai->ai_addr; /* storage area for this info */ memcpy(&addr->sin_addr, curr, sizeof(struct in_addr)); +#ifdef __MINGW32__ + addr->sin_family = (short)(he->h_addrtype); +#else addr->sin_family = (CURL_SA_FAMILY_T)(he->h_addrtype); +#endif addr->sin_port = htons((unsigned short)port); break; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case AF_INET6: addr6 = (void *)ai->ai_addr; /* storage area for this info */ memcpy(&addr6->sin6_addr, curr, sizeof(struct in6_addr)); +#ifdef __MINGW32__ + addr6->sin6_family = (short)(he->h_addrtype); +#else addr6->sin6_family = (CURL_SA_FAMILY_T)(he->h_addrtype); +#endif addr6->sin6_port = htons((unsigned short)port); break; #endif @@ -348,7 +356,7 @@ struct namebuff { struct hostent hostentry; union { struct in_addr ina4; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct in6_addr ina6; #endif } addrentry; @@ -359,7 +367,7 @@ struct namebuff { /* * Curl_ip2addr() * - * This function takes an internet address, in binary form, as input parameter + * This function takes an Internet address, in binary form, as input parameter * along with its address family and the string version of the address, and it * returns a Curl_addrinfo chain filled in correctly with information for the * given address/host @@ -401,7 +409,7 @@ Curl_ip2addr(int af, const void *inaddr, const char *hostname, int port) addrentry = (void *)&buf->addrentry.ina4; memcpy(addrentry, inaddr, sizeof(struct in_addr)); break; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case AF_INET6: addrsize = sizeof(struct in6_addr); addrentry = (void *)&buf->addrentry.ina6; @@ -447,7 +455,7 @@ struct Curl_addrinfo *Curl_str2addr(char *address, int port) if(Curl_inet_pton(AF_INET, address, &in) > 0) /* This is a dotted IP address 123.123.123.123-style */ return Curl_ip2addr(AF_INET, &in, address, port); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 { struct in6_addr in6; if(Curl_inet_pton(AF_INET6, address, &in6) > 0) @@ -511,7 +519,7 @@ struct Curl_addrinfo *Curl_unix2addr(const char *path, bool *longpath, * * This is strictly for memory tracing and are using the same style as the * family otherwise present in memdebug.c. I put these ones here since they - * require a bunch of structs I didn't want to include in memdebug.c + * require a bunch of structs I did not want to include in memdebug.c */ void @@ -535,7 +543,7 @@ curl_dbg_freeaddrinfo(struct addrinfo *freethis, * * This is strictly for memory tracing and are using the same style as the * family otherwise present in memdebug.c. I put these ones here since they - * require a bunch of structs I didn't want to include in memdebug.c + * require a bunch of structs I did not want to include in memdebug.c */ int @@ -570,7 +578,7 @@ void Curl_addrinfo_set_port(struct Curl_addrinfo *addrinfo, int port) { struct Curl_addrinfo *ca; struct sockaddr_in *addr; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct sockaddr_in6 *addr6; #endif for(ca = addrinfo; ca != NULL; ca = ca->ai_next) { @@ -580,7 +588,7 @@ void Curl_addrinfo_set_port(struct Curl_addrinfo *addrinfo, int port) addr->sin_port = htons((unsigned short)port); break; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case AF_INET6: addr6 = (void *)ca->ai_addr; /* storage area for this info */ addr6->sin6_port = htons((unsigned short)port); diff --git a/lib/curl_addrinfo.h b/lib/curl_addrinfo.h index c757c49c5..9ceac997d 100644 --- a/lib/curl_addrinfo.h +++ b/lib/curl_addrinfo.h @@ -44,9 +44,9 @@ /* * Curl_addrinfo is our internal struct definition that we use to allow - * consistent internal handling of this data. We use this even when the - * system provides an addrinfo structure definition. And we use this for - * all sorts of IPv4 and IPV6 builds. + * consistent internal handling of this data. We use this even when the system + * provides an addrinfo structure definition. We use this for all sorts of + * IPv4 and IPV6 builds. */ struct Curl_addrinfo { diff --git a/lib/curl_config.h.cmake b/lib/curl_config.h.cmake index 0f4db6982..631ee27b3 100644 --- a/lib/curl_config.h.cmake +++ b/lib/curl_config.h.cmake @@ -21,7 +21,7 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -/* lib/curl_config.h.in. Generated somehow by cmake. */ +/* lib/curl_config.h.in. Generated somehow by cmake. */ /* Location of default ca bundle */ #cmakedefine CURL_CA_BUNDLE "${CURL_CA_BUNDLE}" @@ -163,7 +163,7 @@ #cmakedefine USE_WIN32_LDAP 1 /* Define if you want to enable IPv6 support */ -#cmakedefine ENABLE_IPV6 1 +#cmakedefine USE_IPV6 1 /* Define to 1 if you have the alarm function. */ #cmakedefine HAVE_ALARM 1 @@ -199,6 +199,12 @@ /* Define to 1 if you have the `closesocket' function. */ #cmakedefine HAVE_CLOSESOCKET 1 +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_DIRENT_H 1 + +/* Define to 1 if you have the `opendir' function. */ +#cmakedefine HAVE_OPENDIR 1 + /* Define to 1 if you have the fcntl function. */ #cmakedefine HAVE_FCNTL 1 @@ -362,12 +368,6 @@ /* Define to 1 if you have the idn2.h header file. */ #cmakedefine HAVE_IDN2_H 1 -/* Define to 1 if you have the `socket' library (-lsocket). */ -#cmakedefine HAVE_LIBSOCKET 1 - -/* Define to 1 if you have the `ssh2' library (-lssh2). */ -#cmakedefine HAVE_LIBSSH2 1 - /* if zlib is available */ #cmakedefine HAVE_LIBZ 1 @@ -413,6 +413,9 @@ /* Define to 1 if you have the `pipe' function. */ #cmakedefine HAVE_PIPE 1 +/* Define to 1 if you have the `eventfd' function. */ +#cmakedefine HAVE_EVENTFD 1 + /* If you have a fine poll */ #cmakedefine HAVE_POLL_FINE 1 @@ -533,6 +536,9 @@ /* Define to 1 if you have the timeval struct. */ #cmakedefine HAVE_STRUCT_TIMEVAL 1 +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SYS_EVENTFD_H 1 + /* Define to 1 if you have the header file. */ #cmakedefine HAVE_SYS_FILIO_H 1 @@ -686,16 +692,22 @@ ${SIZEOF_TIME_T_CODE} /* if BearSSL is enabled */ #cmakedefine USE_BEARSSL 1 -/* if WolfSSL is enabled */ +/* if wolfSSL is enabled */ #cmakedefine USE_WOLFSSL 1 -/* if libSSH is in use */ +/* if wolfSSL has the wolfSSL_DES_ecb_encrypt function. */ +#cmakedefine HAVE_WOLFSSL_DES_ECB_ENCRYPT 1 + +/* if wolfSSL has the wolfSSL_BIO_set_shutdown function. */ +#cmakedefine HAVE_WOLFSSL_FULL_BIO 1 + +/* if libssh is in use */ #cmakedefine USE_LIBSSH 1 -/* if libSSH2 is in use */ +/* if libssh2 is in use */ #cmakedefine USE_LIBSSH2 1 -/* if libPSL is in use */ +/* if libpsl is in use */ #cmakedefine USE_LIBPSL 1 /* if you want to use OpenLDAP code instead of legacy ldap implementation */ @@ -704,7 +716,13 @@ ${SIZEOF_TIME_T_CODE} /* if OpenSSL is in use */ #cmakedefine USE_OPENSSL 1 -/* Define to 1 if you don't want the OpenSSL configuration to be loaded +/* if librtmp/rtmpdump is in use */ +#cmakedefine USE_LIBRTMP 1 + +/* if GSASL is in use */ +#cmakedefine USE_GSASL 1 + +/* Define to 1 if you do not want the OpenSSL configuration to be loaded automatically */ #cmakedefine CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG 1 @@ -767,12 +785,6 @@ ${SIZEOF_TIME_T_CODE} /* Type to use in place of in_addr_t when system does not provide it. */ #cmakedefine in_addr_t ${in_addr_t} -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - /* Define to `unsigned int' if does not define. */ #cmakedefine size_t ${size_t} @@ -785,6 +797,9 @@ ${SIZEOF_TIME_T_CODE} /* to enable Windows IDN */ #cmakedefine USE_WIN32_IDN 1 +/* to enable Apple IDN */ +#cmakedefine USE_APPLE_IDN 1 + /* Define to 1 to enable websocket support. */ #cmakedefine USE_WEBSOCKETS 1 @@ -796,3 +811,9 @@ ${SIZEOF_TIME_T_CODE} /* Define to 1 to enable TLS-SRP support. */ #cmakedefine USE_TLS_SRP 1 + +/* Define to 1 to query for HTTPSRR when using DoH */ +#cmakedefine USE_HTTPSRR 1 + +/* if ECH support is available */ +#cmakedefine USE_ECH 1 diff --git a/lib/curl_config.h.in b/lib/curl_config.h.in index 6c41e80e1..7871ac147 100644 --- a/lib/curl_config.h.in +++ b/lib/curl_config.h.in @@ -1,5 +1,8 @@ /* lib/curl_config.h.in. Generated from configure.ac by autoheader. */ +/* Ignore c-ares deprecation warnings */ +#undef CARES_NO_DEPRECATED + /* to enable curl debug memory tracking */ #undef CURLDEBUG @@ -18,21 +21,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 +75,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 +93,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,24 +153,18 @@ /* 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 - /* Define to the type of arg 2 for gethostname. */ #undef GETHOSTNAME_TYPE_ARG2 /* 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 header file. */ #undef HAVE_ARPA_INET_H -/* Define to 1 if you have the header file. */ -#undef HAVE_ARPA_TFTP_H - /* Define to 1 if you have _Atomic support. */ #undef HAVE_ATOMIC @@ -156,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 @@ -171,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 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 @@ -190,14 +209,17 @@ /* "Set if getpwuid_r() declaration is missing" */ #undef HAVE_DECL_GETPWUID_R_MISSING +/* if you have */ +#undef HAVE_DIRENT_H + /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the 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 `eventfd' function. */ +#undef HAVE_EVENTFD /* Define to 1 if you have the fcntl function. */ #undef HAVE_FCNTL @@ -211,12 +233,12 @@ /* Define to 1 if you have the `fnmatch' function. */ #undef HAVE_FNMATCH -/* Define to 1 if you have the `fork' function. */ -#undef HAVE_FORK - /* 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 @@ -307,12 +329,6 @@ /* if you have GNU GSS */ #undef HAVE_GSSGNU -/* if you have Heimdal */ -#undef HAVE_GSSHEIMDAL - -/* if you have MIT Kerberos */ -#undef HAVE_GSSMIT - /* Define to 1 if you have the header file. */ #undef HAVE_HYPER_H @@ -334,6 +350,9 @@ /* Define to 1 if you have the 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 @@ -347,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 header file. */ #undef HAVE_IO_H @@ -356,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 @@ -374,7 +402,10 @@ /* Define to 1 if you have the `idn2' library (-lidn2). */ #undef HAVE_LIBIDN2 -/* Define to 1 if using libressl. */ +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBPSL_H + +/* Define to 1 if using LibreSSL. */ #undef HAVE_LIBRESSL /* Define to 1 if you have the header file. */ @@ -453,6 +484,9 @@ */ #undef HAVE_OLD_GSSMIT +/* if you have opendir */ +#undef HAVE_OPENDIR + /* Define to 1 if using OpenSSL 3 or later. */ #undef HAVE_OPENSSL3 @@ -465,6 +499,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_PEM_H +/* if you have the functions OSSL_QUIC_client_method */ +#undef HAVE_OPENSSL_QUIC + /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_RSA_H @@ -484,9 +521,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 @@ -511,9 +545,6 @@ /* Define to 1 if you have the 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 @@ -553,9 +584,6 @@ /* Define to 1 if you have the signal function. */ #undef HAVE_SIGNAL -/* Define to 1 if you have the header file. */ -#undef HAVE_SIGNAL_H - /* Define to 1 if you have the sigsetjmp function or macro. */ #undef HAVE_SIGSETJMP @@ -574,12 +602,22 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SOCKET_H -/* Define to 1 if you have the `SSL_get_ech_status' function. */ -#undef HAVE_SSL_GET_ECH_STATUS +/* Define to 1 if you have the `SSL_ech_set1_echconfig' function. */ +#undef HAVE_SSL_ECH_SET1_ECHCONFIG /* Define to 1 if you have the 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 `SSL_set1_ech_config_list' function. */ +#undef HAVE_SSL_SET1_ECH_CONFIG_LIST + +/* Define to 1 if you have the `SSL_set_quic_use_legacy_codepoint' function. + */ +#undef HAVE_SSL_SET_QUIC_USE_LEGACY_CODEPOINT + /* Define to 1 if you have the header file. */ #undef HAVE_STDATOMIC_H @@ -616,6 +654,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H +/* Define to 1 if you have the header file. */ +#undef HAVE_STROPTS_H + /* Define to 1 if you have the strtok_r function. */ #undef HAVE_STRTOK_R @@ -631,6 +672,9 @@ /* Define to 1 if suseconds_t is an available type. */ #undef HAVE_SUSECONDS_T +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_EVENTFD_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_FILIO_H @@ -664,9 +708,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_UIO_H - /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UN_H @@ -700,27 +741,12 @@ /* Define to 1 if you have the 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 - /* Define to 1 if you have the header file. */ #undef HAVE_WOLFSSH_SSH_H +/* Define to 1 if you have the `wolfSSL_CTX_GenerateEchConfig' function. */ +#undef HAVE_WOLFSSL_CTX_GENERATEECHCONFIG + /* if you have wolfSSL_DES_ecb_encrypt */ #undef HAVE_WOLFSSL_DES_ECB_ENCRYPT @@ -736,9 +762,6 @@ /* Define this symbol if your OS supports changing the contents of argv */ #undef HAVE_WRITABLE_ARGV -/* Define to 1 if you have the ws2tcpip.h header file. */ -#undef HAVE_WS2TCPIP_H - /* Define to 1 if you have the header file. */ #undef HAVE_X509_H @@ -748,6 +771,9 @@ /* Define to 1 if you have the 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 @@ -760,12 +786,6 @@ /* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */ #undef NEED_THREAD_SAFE -/* Define to enable NTLM delegation to winbind's ntlm_auth helper. */ -#undef NTLM_WB_ENABLED - -/* Define absolute filename for winbind's ntlm_auth helper. */ -#undef NTLM_WB_FILE - /* cpu-machine-OS */ #undef OS @@ -796,6 +816,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 @@ -837,19 +860,25 @@ /* GSASL support enabled */ #undef USE_GSASL +/* force HTTPS RR support for ECH */ +#undef USE_HTTPSRR + /* if hyper is in use */ #undef USE_HYPER -/* PSL support enabled */ +/* Define if you want to enable IPv6 support */ +#undef USE_IPV6 + +/* if libpsl is in use */ #undef USE_LIBPSL /* if librtmp is in use */ #undef USE_LIBRTMP -/* if libSSH is in use */ +/* if libssh is in use */ #undef USE_LIBSSH -/* if libSSH2 is in use */ +/* if libssh2 is in use */ #undef USE_LIBSSH2 /* If you want to build curl with the built-in manual */ @@ -870,17 +899,20 @@ /* if ngtcp2 is in use */ #undef USE_NGTCP2 +/* if ngtcp2_crypto_boringssl is in use */ +#undef USE_NGTCP2_CRYPTO_BORINGSSL + /* 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 +/* if ngtcp2 + nghttp3 is in use */ +#undef USE_NGTCP2_H3 /* Use OpenLDAP-specific code */ #undef USE_OPENLDAP @@ -888,6 +920,12 @@ /* if OpenSSL is in use */ #undef USE_OPENSSL +/* if openssl quic + nghttp3 is in use */ +#undef USE_OPENSSL_H3 + +/* if openssl QUIC is in use */ +#undef USE_OPENSSL_QUIC + /* if quiche is in use */ #undef USE_QUICHE @@ -962,12 +1000,6 @@ /* Type to use in place of in_addr_t when system does not provide it. */ #undef in_addr_t -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -#undef inline -#endif - /* Define to `unsigned int' if does not define. */ #undef size_t diff --git a/lib/curl_des.c b/lib/curl_des.c index f8d2b2cc6..9662ba39a 100644 --- a/lib/curl_des.c +++ b/lib/curl_des.c @@ -36,7 +36,7 @@ * Curl_des_set_odd_parity() * * This is used to apply odd parity to the given byte array. It is typically - * used by when a cryptography engine doesn't have its own version. + * used by when a cryptography engine does not have its own version. * * The function is a port of the Java based oddParity() function over at: * diff --git a/lib/curl_endian.c b/lib/curl_endian.c index 11c662a4c..d982e3126 100644 --- a/lib/curl_endian.c +++ b/lib/curl_endian.c @@ -30,7 +30,7 @@ * Curl_read16_le() * * This function converts a 16-bit integer from the little endian format, as - * used in the incoming package to whatever endian format we're using + * used in the incoming package to whatever endian format we are using * natively. * * Parameters: @@ -49,7 +49,7 @@ unsigned short Curl_read16_le(const unsigned char *buf) * Curl_read32_le() * * This function converts a 32-bit integer from the little endian format, as - * used in the incoming package to whatever endian format we're using + * used in the incoming package to whatever endian format we are using * natively. * * Parameters: @@ -68,7 +68,7 @@ unsigned int Curl_read32_le(const unsigned char *buf) * Curl_read16_be() * * This function converts a 16-bit integer from the big endian format, as - * used in the incoming package to whatever endian format we're using + * used in the incoming package to whatever endian format we are using * natively. * * Parameters: diff --git a/lib/curl_fnmatch.c b/lib/curl_fnmatch.c index 5f9ca4f1b..ab848e8ff 100644 --- a/lib/curl_fnmatch.c +++ b/lib/curl_fnmatch.c @@ -80,7 +80,7 @@ static int parsekeyword(unsigned char **pattern, unsigned char *charset) unsigned char *p = *pattern; bool found = FALSE; for(i = 0; !found; i++) { - char c = *p++; + char c = (char)*p++; if(i >= KEYLEN) return SETCHARSET_FAIL; switch(state) { diff --git a/lib/curl_gethostname.c b/lib/curl_gethostname.c index 706b2e689..cd111231d 100644 --- a/lib/curl_gethostname.c +++ b/lib/curl_gethostname.c @@ -28,14 +28,14 @@ /* * Curl_gethostname() is a wrapper around gethostname() which allows - * overriding the host name that the function would normally return. + * overriding the hostname that the function would normally return. * This capability is used by the test suite to verify exact matching * of NTLM authentication, which exercises libcurl's MD4 and DES code * as well as by the SMTP module when a hostname is not provided. * - * For libcurl debug enabled builds host name overriding takes place + * For libcurl debug enabled builds hostname overriding takes place * when environment variable CURL_GETHOSTNAME is set, using the value - * held by the variable to override returned host name. + * held by the variable to override returned hostname. * * Note: The function always returns the un-qualified hostname rather * than being provider dependent. @@ -45,7 +45,7 @@ * mechanism which intercepts, and might override, the gethostname() * function call. In this case a given platform must support the * LD_PRELOAD mechanism and additionally have environment variable - * CURL_GETHOSTNAME set in order to override the returned host name. + * CURL_GETHOSTNAME set in order to override the returned hostname. * * For libcurl static library release builds no overriding takes place. */ @@ -65,10 +65,10 @@ int Curl_gethostname(char * const name, GETHOSTNAME_TYPE_ARG2 namelen) #ifdef DEBUGBUILD - /* Override host name when environment variable CURL_GETHOSTNAME is set */ + /* Override hostname when environment variable CURL_GETHOSTNAME is set */ const char *force_hostname = getenv("CURL_GETHOSTNAME"); if(force_hostname) { - strncpy(name, force_hostname, namelen); + strncpy(name, force_hostname, namelen - 1); err = 0; } else { diff --git a/lib/curl_multibyte.c b/lib/curl_multibyte.c index ff2109856..86ac74ff4 100644 --- a/lib/curl_multibyte.c +++ b/lib/curl_multibyte.c @@ -159,21 +159,4 @@ int curlx_win32_stat(const char *path, struct_stat *buffer) #endif } -int curlx_win32_access(const char *path, int mode) -{ -#if defined(_UNICODE) - int result = -1; - wchar_t *path_w = curlx_convert_UTF8_to_wchar(path); - if(path_w) { - result = _waccess(path_w, mode); - curlx_unicodefree(path_w); - } - else - errno = EINVAL; - return result; -#else - return _access(path, mode); -#endif -} - #endif /* USE_WIN32_LARGE_FILES || USE_WIN32_SMALL_FILES */ diff --git a/lib/curl_multibyte.h b/lib/curl_multibyte.h index 8b9ac719e..2d31c28f4 100644 --- a/lib/curl_multibyte.h +++ b/lib/curl_multibyte.h @@ -49,9 +49,10 @@ char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w); * Allocated memory should be free'd with curlx_unicodefree(). * * Note: Because these are curlx functions their memory usage is not tracked - * by the curl memory tracker memdebug. You'll notice that curlx function-like - * macros call free and strdup in parentheses, eg (strdup)(ptr), and that's to - * ensure that the curl memdebug override macros do not replace them. + * by the curl memory tracker memdebug. you will notice that curlx + * function-like macros call free and strdup in parentheses, eg (strdup)(ptr), + * and that is to ensure that the curl memdebug override macros do not replace + * them. */ #if defined(UNICODE) && defined(_WIN32) diff --git a/lib/curl_ntlm_core.c b/lib/curl_ntlm_core.c index 6f6d75c03..62628c04e 100644 --- a/lib/curl_ntlm_core.c +++ b/lib/curl_ntlm_core.c @@ -110,7 +110,7 @@ #elif defined(USE_WIN32_CRYPTO) # include #else -# error "Can't compile NTLM support without a crypto library with DES." +# error "cannot compile NTLM support without a crypto library with DES." # define CURL_NTLM_NOT_SUPPORTED #endif @@ -137,20 +137,20 @@ */ static void extend_key_56_to_64(const unsigned char *key_56, char *key) { - key[0] = key_56[0]; - key[1] = (unsigned char)(((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1)); - key[2] = (unsigned char)(((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2)); - key[3] = (unsigned char)(((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3)); - key[4] = (unsigned char)(((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4)); - key[5] = (unsigned char)(((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5)); - key[6] = (unsigned char)(((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6)); - key[7] = (unsigned char) ((key_56[6] << 1) & 0xFF); + key[0] = (char)key_56[0]; + key[1] = (char)(((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1)); + key[2] = (char)(((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2)); + key[3] = (char)(((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3)); + key[4] = (char)(((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4)); + key[5] = (char)(((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5)); + key[6] = (char)(((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6)); + key[7] = (char) ((key_56[6] << 1) & 0xFF); } #endif #if defined(USE_OPENSSL_DES) || defined(USE_WOLFSSL) /* - * Turns a 56 bit key into the 64 bit, odd parity key and sets the key. The + * Turns a 56-bit key into a 64-bit, odd parity key and sets the key. The * key schedule ks is also set. */ static void setup_des_key(const unsigned char *key_56, @@ -158,7 +158,7 @@ static void setup_des_key(const unsigned char *key_56, { DES_cblock key; - /* Expand the 56-bit key to 64-bits */ + /* Expand the 56-bit key to 64 bits */ extend_key_56_to_64(key_56, (char *) &key); /* Set the key parity to odd */ @@ -175,7 +175,7 @@ static void setup_des_key(const unsigned char *key_56, { char key[8]; - /* Expand the 56-bit key to 64-bits */ + /* Expand the 56-bit key to 64 bits */ extend_key_56_to_64(key_56, key); /* Set the key parity to odd */ @@ -193,7 +193,7 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out, mbedtls_des_context ctx; char key[8]; - /* Expand the 56-bit key to 64-bits */ + /* Expand the 56-bit key to 64 bits */ extend_key_56_to_64(key_56, key); /* Set the key parity to odd */ @@ -214,7 +214,7 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out, size_t out_len; CCCryptorStatus err; - /* Expand the 56-bit key to 64-bits */ + /* Expand the 56-bit key to 64 bits */ extend_key_56_to_64(key_56, key); /* Set the key parity to odd */ @@ -240,7 +240,7 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out, ctl.Func_ID = ENCRYPT_ONLY; ctl.Data_Len = sizeof(key); - /* Expand the 56-bit key to 64-bits */ + /* Expand the 56-bit key to 64 bits */ extend_key_56_to_64(key_56, ctl.Crypto_Key); /* Set the key parity to odd */ @@ -278,7 +278,7 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out, blob.hdr.aiKeyAlg = CALG_DES; blob.len = sizeof(blob.key); - /* Expand the 56-bit key to 64-bits */ + /* Expand the 56-bit key to 64 bits */ extend_key_56_to_64(key_56, blob.key); /* Set the key parity to odd */ @@ -466,13 +466,13 @@ static void time2filetime(struct ms_filetime *ft, time_t t) unsigned int r, s; unsigned int i; - ft->dwLowDateTime = t & 0xFFFFFFFF; + ft->dwLowDateTime = (unsigned int)t & 0xFFFFFFFF; ft->dwHighDateTime = 0; # ifndef HAVE_TIME_T_UNSIGNED /* Extend sign if needed. */ if(ft->dwLowDateTime & 0x80000000) - ft->dwHighDateTime = ~0; + ft->dwHighDateTime = ~(unsigned int)0; # endif /* Bias seconds to Jan 1, 1601. diff --git a/lib/curl_ntlm_core.h b/lib/curl_ntlm_core.h index 0c62ee052..e2e4b1bd4 100644 --- a/lib/curl_ntlm_core.h +++ b/lib/curl_ntlm_core.h @@ -28,13 +28,6 @@ #if defined(USE_CURL_NTLM_CORE) -#if defined(USE_OPENSSL) -# include -#elif defined(USE_WOLFSSL) -# include -# include -#endif - /* Helpers to generate function byte arguments in little endian order */ #define SHORTPAIR(x) ((int)((x) & 0xff)), ((int)(((x) >> 8) & 0xff)) #define LONGQUARTET(x) ((int)((x) & 0xff)), ((int)(((x) >> 8) & 0xff)), \ diff --git a/lib/curl_ntlm_wb.c b/lib/curl_ntlm_wb.c deleted file mode 100644 index acb009395..000000000 --- a/lib/curl_ntlm_wb.c +++ /dev/null @@ -1,500 +0,0 @@ -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - * SPDX-License-Identifier: curl - * - ***************************************************************************/ - -#include "curl_setup.h" - -#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \ - defined(NTLM_WB_ENABLED) - -/* - * NTLM details: - * - * https://davenport.sourceforge.net/ntlm.html - * https://www.innovation.ch/java/ntlm.html - */ - -#define DEBUG_ME 0 - -#ifdef HAVE_SYS_WAIT_H -#include -#endif -#include -#ifdef HAVE_PWD_H -#include -#endif - -#include "urldata.h" -#include "sendf.h" -#include "select.h" -#include "vauth/ntlm.h" -#include "curl_ntlm_core.h" -#include "curl_ntlm_wb.h" -#include "url.h" -#include "strerror.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" - -#if DEBUG_ME -# define DEBUG_OUT(x) x -#else -# define DEBUG_OUT(x) Curl_nop_stmt -#endif - -/* Portable 'sclose_nolog' used only in child process instead of 'sclose' - to avoid fooling the socket leak detector */ -#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)) -#else -# define sclose_nolog(x) close((x)) -#endif - -static void ntlm_wb_cleanup(struct ntlmdata *ntlm) -{ - if(ntlm->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD) { - sclose(ntlm->ntlm_auth_hlpr_socket); - ntlm->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD; - } - - if(ntlm->ntlm_auth_hlpr_pid) { - int i; - for(i = 0; i < 4; i++) { - pid_t ret = waitpid(ntlm->ntlm_auth_hlpr_pid, NULL, WNOHANG); - if(ret == ntlm->ntlm_auth_hlpr_pid || errno == ECHILD) - break; - switch(i) { - case 0: - kill(ntlm->ntlm_auth_hlpr_pid, SIGTERM); - break; - case 1: - /* Give the process another moment to shut down cleanly before - bringing down the axe */ - Curl_wait_ms(1); - break; - case 2: - kill(ntlm->ntlm_auth_hlpr_pid, SIGKILL); - break; - case 3: - break; - } - } - ntlm->ntlm_auth_hlpr_pid = 0; - } - - Curl_safefree(ntlm->challenge); - Curl_safefree(ntlm->response); -} - -static CURLcode ntlm_wb_init(struct Curl_easy *data, struct ntlmdata *ntlm, - const char *userp) -{ - curl_socket_t sockfds[2]; - pid_t child_pid; - const char *username; - char *slash, *domain = NULL; - const char *ntlm_auth = NULL; - char *ntlm_auth_alloc = NULL; -#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID) - struct passwd pw, *pw_res; - char pwbuf[1024]; -#endif - char buffer[STRERROR_LEN]; - -#if defined(CURL_DISABLE_VERBOSE_STRINGS) - (void) data; -#endif - - /* Return if communication with ntlm_auth already set up */ - if(ntlm->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD || - ntlm->ntlm_auth_hlpr_pid) - return CURLE_OK; - - username = userp; - /* The real ntlm_auth really doesn't like being invoked with an - empty username. It won't make inferences for itself, and expects - the client to do so (mostly because it's really designed for - servers like squid to use for auth, and client support is an - afterthought for it). So try hard to provide a suitable username - if we don't already have one. But if we can't, provide the - empty one anyway. Perhaps they have an implementation of the - ntlm_auth helper which *doesn't* need it so we might as well try */ - if(!username || !username[0]) { - username = getenv("NTLMUSER"); - if(!username || !username[0]) - username = getenv("LOGNAME"); - if(!username || !username[0]) - username = getenv("USER"); -#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID) - if((!username || !username[0]) && - !getpwuid_r(geteuid(), &pw, pwbuf, sizeof(pwbuf), &pw_res) && - pw_res) { - username = pw.pw_name; - } -#endif - if(!username || !username[0]) - username = userp; - } - slash = strpbrk(username, "\\/"); - if(slash) { - domain = strdup(username); - if(!domain) - return CURLE_OUT_OF_MEMORY; - slash = domain + (slash - username); - *slash = '\0'; - username = username + (slash - domain) + 1; - } - - /* For testing purposes, when DEBUGBUILD is defined and environment - variable CURL_NTLM_WB_FILE is set a fake_ntlm is used to perform - NTLM challenge/response which only accepts commands and output - strings pre-written in test case definitions */ -#ifdef DEBUGBUILD - ntlm_auth_alloc = curl_getenv("CURL_NTLM_WB_FILE"); - if(ntlm_auth_alloc) - ntlm_auth = ntlm_auth_alloc; - else -#endif - ntlm_auth = NTLM_WB_FILE; - - if(access(ntlm_auth, X_OK) != 0) { - failf(data, "Could not access ntlm_auth: %s errno %d: %s", - ntlm_auth, errno, Curl_strerror(errno, buffer, sizeof(buffer))); - goto done; - } - - if(wakeup_create(sockfds)) { - failf(data, "Could not open socket pair. errno %d: %s", - errno, Curl_strerror(errno, buffer, sizeof(buffer))); - goto done; - } - - child_pid = fork(); - if(child_pid == -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; - } - else if(!child_pid) { - /* - * child process - */ - - /* Don't use sclose in the child since it fools the socket leak detector */ - sclose_nolog(sockfds[0]); - if(dup2(sockfds[1], STDIN_FILENO) == -1) { - failf(data, "Could not redirect child stdin. errno %d: %s", - errno, Curl_strerror(errno, buffer, sizeof(buffer))); - exit(1); - } - - if(dup2(sockfds[1], STDOUT_FILENO) == -1) { - failf(data, "Could not redirect child stdout. errno %d: %s", - errno, Curl_strerror(errno, buffer, sizeof(buffer))); - exit(1); - } - - if(domain) - execl(ntlm_auth, ntlm_auth, - "--helper-protocol", "ntlmssp-client-1", - "--use-cached-creds", - "--username", username, - "--domain", domain, - NULL); - else - execl(ntlm_auth, ntlm_auth, - "--helper-protocol", "ntlmssp-client-1", - "--use-cached-creds", - "--username", username, - NULL); - - sclose_nolog(sockfds[1]); - failf(data, "Could not execl(). errno %d: %s", - errno, Curl_strerror(errno, buffer, sizeof(buffer))); - exit(1); - } - - sclose(sockfds[1]); - ntlm->ntlm_auth_hlpr_socket = sockfds[0]; - ntlm->ntlm_auth_hlpr_pid = child_pid; - free(domain); - free(ntlm_auth_alloc); - return CURLE_OK; - -done: - free(domain); - free(ntlm_auth_alloc); - return CURLE_REMOTE_ACCESS_DENIED; -} - -/* if larger than this, something is seriously wrong */ -#define MAX_NTLM_WB_RESPONSE 100000 - -static CURLcode ntlm_wb_response(struct Curl_easy *data, struct ntlmdata *ntlm, - const char *input, curlntlm state) -{ - size_t len_in = strlen(input), len_out = 0; - struct dynbuf b; - char *ptr = NULL; - unsigned char buf[1024]; - Curl_dyn_init(&b, MAX_NTLM_WB_RESPONSE); - - while(len_in > 0) { - 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) - continue; - /* write failed if other errors happen */ - goto done; - } - input += written; - len_in -= written; - } - /* Read one line */ - while(1) { - ssize_t size = - wakeup_read(ntlm->ntlm_auth_hlpr_socket, buf, sizeof(buf)); - if(size == -1) { - if(errno == EINTR) - continue; - goto done; - } - else if(size == 0) - goto done; - - if(Curl_dyn_addn(&b, buf, size)) - goto done; - - len_out = Curl_dyn_len(&b); - ptr = Curl_dyn_ptr(&b); - if(len_out && ptr[len_out - 1] == '\n') { - ptr[len_out - 1] = '\0'; - break; /* done! */ - } - /* loop */ - } - - /* Samba/winbind installed but not configured */ - if(state == NTLMSTATE_TYPE1 && - len_out == 3 && - ptr[0] == 'P' && ptr[1] == 'W') - goto done; - /* invalid response */ - if(len_out < 4) - goto done; - if(state == NTLMSTATE_TYPE1 && - (ptr[0]!='Y' || ptr[1]!='R' || ptr[2]!=' ')) - goto done; - if(state == NTLMSTATE_TYPE2 && - (ptr[0]!='K' || ptr[1]!='K' || ptr[2]!=' ') && - (ptr[0]!='A' || ptr[1]!='F' || ptr[2]!=' ')) - goto done; - - ntlm->response = strdup(ptr + 3); - Curl_dyn_free(&b); - if(!ntlm->response) - return CURLE_OUT_OF_MEMORY; - return CURLE_OK; -done: - Curl_dyn_free(&b); - return CURLE_REMOTE_ACCESS_DENIED; -} - -CURLcode Curl_input_ntlm_wb(struct Curl_easy *data, - struct connectdata *conn, - bool proxy, - const char *header) -{ - struct ntlmdata *ntlm = proxy ? &conn->proxyntlm : &conn->ntlm; - curlntlm *state = proxy ? &conn->proxy_ntlm_state : &conn->http_ntlm_state; - - (void) data; /* In case it gets unused by nop log macros. */ - - if(!checkprefix("NTLM", header)) - return CURLE_BAD_CONTENT_ENCODING; - - header += strlen("NTLM"); - while(*header && ISSPACE(*header)) - header++; - - if(*header) { - ntlm->challenge = strdup(header); - if(!ntlm->challenge) - return CURLE_OUT_OF_MEMORY; - - *state = NTLMSTATE_TYPE2; /* We got a type-2 message */ - } - else { - if(*state == NTLMSTATE_LAST) { - infof(data, "NTLM auth restarted"); - Curl_http_auth_cleanup_ntlm_wb(conn); - } - else if(*state == NTLMSTATE_TYPE3) { - infof(data, "NTLM handshake rejected"); - Curl_http_auth_cleanup_ntlm_wb(conn); - *state = NTLMSTATE_NONE; - return CURLE_REMOTE_ACCESS_DENIED; - } - else if(*state >= NTLMSTATE_TYPE1) { - infof(data, "NTLM handshake failure (internal error)"); - return CURLE_REMOTE_ACCESS_DENIED; - } - - *state = NTLMSTATE_TYPE1; /* We should send away a type-1 */ - } - - return CURLE_OK; -} - -/* - * This is for creating ntlm header output by delegating challenge/response - * to Samba's winbind daemon helper ntlm_auth. - */ -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 an HTTP proxy */ - char **allocuserpwd; - /* point to the name and password for this */ - const char *userp; - struct ntlmdata *ntlm; - curlntlm *state; - struct auth *authp; - - CURLcode res = CURLE_OK; - - DEBUGASSERT(conn); - DEBUGASSERT(data); - - if(proxy) { -#ifndef CURL_DISABLE_PROXY - allocuserpwd = &data->state.aptr.proxyuserpwd; - userp = conn->http_proxy.user; - ntlm = &conn->proxyntlm; - state = &conn->proxy_ntlm_state; - authp = &data->state.authproxy; -#else - return CURLE_NOT_BUILT_IN; -#endif - } - else { - allocuserpwd = &data->state.aptr.userpwd; - userp = conn->user; - ntlm = &conn->ntlm; - state = &conn->http_ntlm_state; - authp = &data->state.authhost; - } - authp->done = FALSE; - - /* not set means empty */ - if(!userp) - userp = ""; - - switch(*state) { - case NTLMSTATE_TYPE1: - default: - /* Use Samba's 'winbind' daemon to support NTLM authentication, - * by delegating the NTLM challenge/response protocol to a helper - * in ntlm_auth. - * https://web.archive.org/web/20190925164737 - * /devel.squid-cache.org/ntlm/squid_helper_protocol.html - * https://www.samba.org/samba/docs/man/manpages-3/winbindd.8.html - * https://www.samba.org/samba/docs/man/manpages-3/ntlm_auth.1.html - * Preprocessor symbol 'NTLM_WB_ENABLED' is defined when this - * feature is enabled and 'NTLM_WB_FILE' symbol holds absolute - * filename of ntlm_auth helper. - * If NTLM authentication using winbind fails, go back to original - * request handling process. - */ - /* Create communication with ntlm_auth */ - res = ntlm_wb_init(data, ntlm, userp); - if(res) - return res; - res = ntlm_wb_response(data, ntlm, "YR\n", *state); - if(res) - return res; - - free(*allocuserpwd); - *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n", - proxy ? "Proxy-" : "", - ntlm->response); - DEBUG_OUT(fprintf(stderr, "**** Header %s\n ", *allocuserpwd)); - Curl_safefree(ntlm->response); - if(!*allocuserpwd) - return CURLE_OUT_OF_MEMORY; - break; - - case NTLMSTATE_TYPE2: { - char *input = aprintf("TT %s\n", ntlm->challenge); - if(!input) - return CURLE_OUT_OF_MEMORY; - res = ntlm_wb_response(data, ntlm, input, *state); - free(input); - if(res) - return res; - - free(*allocuserpwd); - *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n", - proxy ? "Proxy-" : "", - ntlm->response); - DEBUG_OUT(fprintf(stderr, "**** %s\n ", *allocuserpwd)); - *state = NTLMSTATE_TYPE3; /* we sent a type-3 */ - authp->done = TRUE; - Curl_http_auth_cleanup_ntlm_wb(conn); - if(!*allocuserpwd) - return CURLE_OUT_OF_MEMORY; - break; - } - case NTLMSTATE_TYPE3: - /* connection is already authenticated, - * don't send a header in future requests */ - *state = NTLMSTATE_LAST; - FALLTHROUGH(); - case NTLMSTATE_LAST: - Curl_safefree(*allocuserpwd); - authp->done = TRUE; - break; - } - - return CURLE_OK; -} - -void Curl_http_auth_cleanup_ntlm_wb(struct connectdata *conn) -{ - ntlm_wb_cleanup(&conn->ntlm); - ntlm_wb_cleanup(&conn->proxyntlm); -} - -#endif /* !CURL_DISABLE_HTTP && USE_NTLM && NTLM_WB_ENABLED */ diff --git a/lib/curl_path.c b/lib/curl_path.c index 856423db9..144f8803d 100644 --- a/lib/curl_path.c +++ b/lib/curl_path.c @@ -98,8 +98,8 @@ CURLcode Curl_getworkingpath(struct Curl_easy *data, return CURLE_OK; } -/* The get_pathname() function is being borrowed from OpenSSH sftp.c - version 4.6p1. */ +/* The original get_pathname() function came from OpenSSH sftp.c version + 4.6p1. */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -115,38 +115,37 @@ CURLcode Curl_getworkingpath(struct Curl_easy *data, * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -CURLcode Curl_get_pathname(const char **cpp, char **path, char *homedir) + +#define MAX_PATHLENGTH 65535 /* arbitrary long */ + +CURLcode Curl_get_pathname(const char **cpp, char **path, const char *homedir) { const char *cp = *cpp, *end; char quot; - unsigned int i, j; - size_t fullPathLength, pathLength; - bool relativePath = false; + unsigned int i; static const char WHITESPACE[] = " \t\r\n"; + struct dynbuf out; + CURLcode result; DEBUGASSERT(homedir); - if(!*cp || !homedir) { - *cpp = NULL; - *path = NULL; + *path = NULL; + *cpp = NULL; + if(!*cp || !homedir) return CURLE_QUOTE_ERROR; - } + + Curl_dyn_init(&out, MAX_PATHLENGTH); + /* Ignore leading whitespace */ cp += strspn(cp, WHITESPACE); - /* Allocate enough space for home directory and filename + separator */ - fullPathLength = strlen(cp) + strlen(homedir) + 2; - *path = malloc(fullPathLength); - if(!*path) - return CURLE_OUT_OF_MEMORY; /* Check for quoted filenames */ if(*cp == '\"' || *cp == '\'') { quot = *cp++; /* Search for terminating quote, unescape some chars */ - for(i = j = 0; i <= strlen(cp); i++) { + for(i = 0; i <= strlen(cp); i++) { if(cp[i] == quot) { /* Found quote */ i++; - (*path)[j] = '\0'; break; } if(cp[i] == '\0') { /* End of string */ @@ -159,40 +158,45 @@ CURLcode Curl_get_pathname(const char **cpp, char **path, char *homedir) goto fail; } } - (*path)[j++] = cp[i]; + result = Curl_dyn_addn(&out, &cp[i], 1); + if(result) + return result; } - if(j == 0) { + if(!Curl_dyn_len(&out)) goto fail; - } - *cpp = cp + i + strspn(cp + i, WHITESPACE); + + /* return pointer to second parameter if it exists */ + *cpp = &cp[i] + strspn(&cp[i], WHITESPACE); } else { /* Read to end of filename - either to whitespace or terminator */ end = strpbrk(cp, WHITESPACE); if(!end) end = strchr(cp, '\0'); + /* return pointer to second parameter if it exists */ *cpp = end + strspn(end, WHITESPACE); - pathLength = 0; - relativePath = (cp[0] == '/' && cp[1] == '~' && cp[2] == '/'); + /* Handling for relative path - prepend home directory */ - if(relativePath) { - strcpy(*path, homedir); - pathLength = strlen(homedir); - (*path)[pathLength++] = '/'; - (*path)[pathLength] = '\0'; + if(cp[0] == '/' && cp[1] == '~' && cp[2] == '/') { + result = Curl_dyn_add(&out, homedir); + if(!result) + result = Curl_dyn_addn(&out, "/", 1); + if(result) + return result; cp += 3; } /* Copy path name up until first "whitespace" */ - memcpy(&(*path)[pathLength], cp, (int)(end - cp)); - pathLength += (int)(end - cp); - (*path)[pathLength] = '\0'; + result = Curl_dyn_addn(&out, cp, (end - cp)); + if(result) + return result; } + *path = Curl_dyn_ptr(&out); return CURLE_OK; fail: - Curl_safefree(*path); + Curl_dyn_free(&out); return CURLE_QUOTE_ERROR; } diff --git a/lib/curl_path.h b/lib/curl_path.h index cbe51c221..6fdb2fddf 100644 --- a/lib/curl_path.h +++ b/lib/curl_path.h @@ -45,5 +45,5 @@ CURLcode Curl_getworkingpath(struct Curl_easy *data, char *homedir, char **path); -CURLcode Curl_get_pathname(const char **cpp, char **path, char *homedir); +CURLcode Curl_get_pathname(const char **cpp, char **path, const char *homedir); #endif /* HEADER_CURL_PATH_H */ diff --git a/lib/curl_rtmp.c b/lib/curl_rtmp.c index b2f2adad8..54d4f979f 100644 --- a/lib/curl_rtmp.c +++ b/lib/curl_rtmp.c @@ -35,8 +35,10 @@ #include "warnless.h" #include #include + +/* 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(_WIN32) && !defined(USE_LWIPSOCK) @@ -66,7 +68,7 @@ static Curl_send rtmp_send; */ const struct Curl_handler Curl_handler_rtmp = { - "RTMP", /* scheme */ + "rtmp", /* scheme */ rtmp_setup_connection, /* setup_connection */ rtmp_do, /* do_it */ rtmp_done, /* done */ @@ -80,6 +82,7 @@ const struct Curl_handler Curl_handler_rtmp = { ZERO_NULL, /* perform_getsock */ rtmp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_RTMP, /* defport */ @@ -89,7 +92,7 @@ const struct Curl_handler Curl_handler_rtmp = { }; const struct Curl_handler Curl_handler_rtmpt = { - "RTMPT", /* scheme */ + "rtmpt", /* scheme */ rtmp_setup_connection, /* setup_connection */ rtmp_do, /* do_it */ rtmp_done, /* done */ @@ -103,6 +106,7 @@ const struct Curl_handler Curl_handler_rtmpt = { ZERO_NULL, /* perform_getsock */ rtmp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_RTMPT, /* defport */ @@ -112,7 +116,7 @@ const struct Curl_handler Curl_handler_rtmpt = { }; const struct Curl_handler Curl_handler_rtmpe = { - "RTMPE", /* scheme */ + "rtmpe", /* scheme */ rtmp_setup_connection, /* setup_connection */ rtmp_do, /* do_it */ rtmp_done, /* done */ @@ -126,6 +130,7 @@ const struct Curl_handler Curl_handler_rtmpe = { ZERO_NULL, /* perform_getsock */ rtmp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_RTMP, /* defport */ @@ -135,7 +140,7 @@ const struct Curl_handler Curl_handler_rtmpe = { }; const struct Curl_handler Curl_handler_rtmpte = { - "RTMPTE", /* scheme */ + "rtmpte", /* scheme */ rtmp_setup_connection, /* setup_connection */ rtmp_do, /* do_it */ rtmp_done, /* done */ @@ -149,6 +154,7 @@ const struct Curl_handler Curl_handler_rtmpte = { ZERO_NULL, /* perform_getsock */ rtmp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_RTMPT, /* defport */ @@ -158,7 +164,7 @@ const struct Curl_handler Curl_handler_rtmpte = { }; const struct Curl_handler Curl_handler_rtmps = { - "RTMPS", /* scheme */ + "rtmps", /* scheme */ rtmp_setup_connection, /* setup_connection */ rtmp_do, /* do_it */ rtmp_done, /* done */ @@ -172,6 +178,7 @@ const struct Curl_handler Curl_handler_rtmps = { ZERO_NULL, /* perform_getsock */ rtmp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_RTMPS, /* defport */ @@ -181,7 +188,7 @@ const struct Curl_handler Curl_handler_rtmps = { }; const struct Curl_handler Curl_handler_rtmpts = { - "RTMPTS", /* scheme */ + "rtmpts", /* scheme */ rtmp_setup_connection, /* setup_connection */ rtmp_do, /* do_it */ rtmp_done, /* done */ @@ -195,6 +202,7 @@ const struct Curl_handler Curl_handler_rtmpts = { ZERO_NULL, /* perform_getsock */ rtmp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_RTMPS, /* defport */ @@ -228,7 +236,7 @@ static CURLcode rtmp_connect(struct Curl_easy *data, bool *done) r->m_sb.sb_socket = (int)conn->sock[FIRSTSOCKET]; - /* We have to know if it's a write before we send the + /* We have to know if it is a write before we send the * connect request packet */ if(data->state.upload) @@ -265,10 +273,10 @@ static CURLcode rtmp_do(struct Curl_easy *data, bool *done) if(data->state.upload) { Curl_pgrsSetUploadSize(data, data->state.infilesize); - Curl_xfer_setup(data, -1, -1, FALSE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SEND, -1, FALSE); } else - Curl_xfer_setup(data, FIRSTSOCKET, -1, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, -1, FALSE); *done = TRUE; return CURLE_OK; } @@ -335,4 +343,20 @@ static ssize_t rtmp_send(struct Curl_easy *data, int sockindex, return num; } + +void Curl_rtmp_version(char *version, size_t len) +{ + char suff[2]; + if(RTMP_LIB_VERSION & 0xff) { + suff[0] = (RTMP_LIB_VERSION & 0xff) + 'a' - 1; + suff[1] = '\0'; + } + else + suff[0] = '\0'; + + msnprintf(version, len, "librtmp/%d.%d%s", + RTMP_LIB_VERSION >> 16, (RTMP_LIB_VERSION >> 8) & 0xff, + suff); +} + #endif /* USE_LIBRTMP */ diff --git a/lib/curl_rtmp.h b/lib/curl_rtmp.h index 9b93ee060..339d3a438 100644 --- a/lib/curl_rtmp.h +++ b/lib/curl_rtmp.h @@ -30,6 +30,8 @@ extern const struct Curl_handler Curl_handler_rtmpe; extern const struct Curl_handler Curl_handler_rtmpte; extern const struct Curl_handler Curl_handler_rtmps; extern const struct Curl_handler Curl_handler_rtmpts; + +void Curl_rtmp_version(char *version, size_t len); #endif #endif /* HEADER_CURL_RTMP_H */ diff --git a/lib/curl_sasl.c b/lib/curl_sasl.c index 66639cbac..24f8c8c53 100644 --- a/lib/curl_sasl.c +++ b/lib/curl_sasl.c @@ -328,7 +328,7 @@ bool Curl_sasl_can_authenticate(struct SASL *sasl, struct Curl_easy *data) if(data->state.aptr.user) return TRUE; - /* EXTERNAL can authenticate without a user name and/or password */ + /* EXTERNAL can authenticate without a username and/or password */ if(sasl->authmechs & sasl->prefmech & SASL_MECH_EXTERNAL) return TRUE; @@ -376,7 +376,7 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct Curl_easy *data, sasl->authused = SASL_MECH_EXTERNAL; if(force_ir || data->set.sasl_ir) - result = Curl_auth_create_external_message(conn->user, &resp); + Curl_auth_create_external_message(conn->user, &resp); } else if(data->state.aptr.user) { #if defined(USE_KERBEROS5) @@ -498,7 +498,7 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct Curl_easy *data, sasl->authused = SASL_MECH_LOGIN; if(force_ir || data->set.sasl_ir) - result = Curl_auth_create_login_message(conn->user, &resp); + Curl_auth_create_login_message(conn->user, &resp); } } @@ -576,14 +576,14 @@ CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data, conn->user, conn->passwd, &resp); break; case SASL_LOGIN: - result = Curl_auth_create_login_message(conn->user, &resp); + Curl_auth_create_login_message(conn->user, &resp); newstate = SASL_LOGIN_PASSWD; break; case SASL_LOGIN_PASSWD: - result = Curl_auth_create_login_message(conn->passwd, &resp); + Curl_auth_create_login_message(conn->passwd, &resp); break; case SASL_EXTERNAL: - result = Curl_auth_create_external_message(conn->user, &resp); + Curl_auth_create_external_message(conn->user, &resp); break; #ifdef USE_GSASL case SASL_GSASL: diff --git a/lib/curl_setup.h b/lib/curl_setup.h index 286acc371..c8dba5e2b 100644 --- a/lib/curl_setup.h +++ b/lib/curl_setup.h @@ -40,6 +40,45 @@ #include <_mingw.h> #endif +/* Workaround for Homebrew gcc 12.4.0, 13.3.0, 14.1.0 and newer (as of 14.1.0) + that started advertising the `availability` attribute, which then gets used + by Apple SDK, but, in a way incompatible with gcc, resulting in a misc + errors inside SDK headers, e.g.: + error: attributes should be specified before the declarator in a function + definition + error: expected ',' or '}' before + Followed by missing declarations. + Fix it by overriding the built-in feature-check macro used by the headers + to enable the problematic attributes. This makes the feature check fail. */ +#if defined(__APPLE__) && \ + !defined(__clang__) && \ + defined(__GNUC__) && __GNUC__ >= 12 && \ + defined(__has_attribute) +#define availability curl_pp_attribute_disabled +#endif + +#if defined(__APPLE__) +#include +#include +/* Fixup faulty target macro initialization in macOS SDK since v14.4 (as of + 15.0 beta). The SDK target detection in `TargetConditionals.h` correctly + detects macOS, but fails to set the macro's old name `TARGET_OS_OSX`, then + continues to set it to a default value of 0. Other parts of the SDK still + rely on the old name, and with this inconsistency our builds fail due to + missing declarations. It happens when using mainline llvm older than v18. + Later versions fixed it by predefining these target macros, avoiding the + faulty dynamic detection. gcc is not affected (for now) because it lacks + the necessary dynamic detection features, so the SDK falls back to + a codepath that sets both the old and new macro to 1. */ +#if defined(TARGET_OS_MAC) && TARGET_OS_MAC && \ + defined(TARGET_OS_OSX) && !TARGET_OS_OSX && \ + (!defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE) && \ + (!defined(TARGET_OS_SIMULATOR) || !TARGET_OS_SIMULATOR) +#undef TARGET_OS_OSX +#define TARGET_OS_OSX TARGET_OS_MAC +#endif +#endif + /* * Disable Visual Studio warnings: * 4127 "conditional expression is constant" @@ -50,7 +89,7 @@ #ifdef _WIN32 /* - * Don't include unneeded stuff in Windows headers to avoid compiler + * Do not include unneeded stuff in Windows headers to avoid compiler * warnings and macro clashes. * Make sure to define this macro before including any Windows headers. */ @@ -72,6 +111,11 @@ # endif #endif +/* Compatibility */ +#if defined(ENABLE_IPV6) +# define USE_IPV6 1 +#endif + /* * Include configuration script results or hand-crafted * configuration file for platforms which lack config tool. @@ -286,7 +330,8 @@ /* based on logic in "curl/mprintf.h" */ -#if (defined(__GNUC__) || defined(__clang__)) && \ +#if (defined(__GNUC__) || defined(__clang__) || \ + defined(__IAR_SYSTEMS_ICC__)) && \ defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ !defined(CURL_NO_FMT_CHECKS) #if defined(__MINGW32__) && !defined(__clang__) @@ -300,16 +345,28 @@ #define CURL_PRINTF(fmt, arg) #endif +/* Workaround for mainline llvm v16 and earlier missing a built-in macro + expected by macOS SDK v14 / Xcode v15 (2023) and newer. + gcc (as of v14) is also missing it. */ +#if defined(__APPLE__) && \ + ((!defined(__apple_build_version__) && \ + defined(__clang__) && __clang_major__ < 17) || \ + (defined(__GNUC__) && __GNUC__ <= 14)) && \ + defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + !defined(__ENVIRONMENT_OS_VERSION_MIN_REQUIRED__) +#define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ \ + __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +#endif + /* * Use getaddrinfo to resolve the IPv4 address literal. If the current network - * interface doesn't support IPv4, but supports IPv6, NAT64, and DNS64, + * interface does not support IPv4, but supports IPv6, NAT64, and DNS64, * performing this task will result in a synthesized IPv6 address. */ #if defined(__APPLE__) && !defined(USE_ARES) -#include #define USE_RESOLVE_ON_IPS 1 # if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) && \ - defined(ENABLE_IPV6) + defined(USE_IPV6) # define CURL_MACOS_CALL_COPYPROXIES 1 # endif #endif @@ -404,11 +461,9 @@ # define LSEEK_ERROR (__int64)-1 # define open curlx_win32_open # define fopen(fname,mode) curlx_win32_fopen(fname, mode) -# define access(fname,mode) curlx_win32_access(fname, mode) int curlx_win32_open(const char *filename, int oflag, ...); int curlx_win32_stat(const char *path, struct_stat *buffer); FILE *curlx_win32_fopen(const char *filename, const char *mode); - int curlx_win32_access(const char *path, int mode); #endif /* @@ -427,11 +482,9 @@ # define struct_stat struct _stat # define open curlx_win32_open # define fopen(fname,mode) curlx_win32_fopen(fname, mode) -# define access(fname,mode) curlx_win32_access(fname, mode) int curlx_win32_stat(const char *path, struct_stat *buffer); int curlx_win32_open(const char *filename, int oflag, ...); FILE *curlx_win32_fopen(const char *filename, const char *mode); - int curlx_win32_access(const char *path, int mode); # endif # define LSEEK_ERROR (long)-1 #endif @@ -445,7 +498,7 @@ #endif #ifndef SIZEOF_TIME_T -/* assume default size of time_t to be 32 bit */ +/* assume default size of time_t to be 32 bits */ #define SIZEOF_TIME_T 4 #endif @@ -468,7 +521,7 @@ #endif /* - * Default sizeof(off_t) in case it hasn't been defined in config file. + * Default sizeof(off_t) in case it has not been defined in config file. */ #ifndef SIZEOF_OFF_T @@ -506,11 +559,14 @@ # error "curl_off_t must be exactly 64 bits" #else typedef unsigned CURL_TYPEOF_CURL_OFF_T curl_uint64_t; + typedef CURL_TYPEOF_CURL_OFF_T curl_int64_t; # ifndef CURL_SUFFIX_CURL_OFF_TU # error "CURL_SUFFIX_CURL_OFF_TU must be defined" # endif # define CURL_UINT64_SUFFIX CURL_SUFFIX_CURL_OFF_TU # define CURL_UINT64_C(val) CURL_CONC_MACROS(val,CURL_UINT64_SUFFIX) +# define CURL_PRId64 CURL_FORMAT_CURL_OFF_T +# define CURL_PRIu64 CURL_FORMAT_CURL_OFF_TU #endif #if (SIZEOF_TIME_T == 4) @@ -532,7 +588,7 @@ #endif #ifndef SIZE_T_MAX -/* some limits.h headers have this defined, some don't */ +/* some limits.h headers have this defined, some do not */ #if defined(SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > 4) #define SIZE_T_MAX 18446744073709551615U #else @@ -541,7 +597,7 @@ #endif #ifndef SSIZE_T_MAX -/* some limits.h headers have this defined, some don't */ +/* some limits.h headers have this defined, some do not */ #if defined(SIZEOF_SIZE_T) && (SIZEOF_SIZE_T > 4) #define SSIZE_T_MAX 9223372036854775807 #else @@ -550,7 +606,7 @@ #endif /* - * Arg 2 type for gethostname in case it hasn't been defined in config file. + * Arg 2 type for gethostname in case it has not been defined in config file. */ #ifndef GETHOSTNAME_TYPE_ARG2 @@ -617,9 +673,9 @@ * Mutually exclusive CURLRES_* definitions. */ -#if defined(ENABLE_IPV6) && defined(HAVE_GETADDRINFO) +#if defined(USE_IPV6) && defined(HAVE_GETADDRINFO) # define CURLRES_IPV6 -#elif defined(ENABLE_IPV6) && (defined(_WIN32) || defined(__CYGWIN__)) +#elif defined(USE_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 @@ -641,13 +697,14 @@ /* ---------------------------------------------------------------- */ -#if defined(HAVE_LIBIDN2) && defined(HAVE_IDN2_H) && !defined(USE_WIN32_IDN) +#if defined(HAVE_LIBIDN2) && defined(HAVE_IDN2_H) && \ + !defined(USE_WIN32_IDN) && !defined(USE_APPLE_IDN) /* The lib and header are present */ #define USE_LIBIDN2 #endif -#if defined(USE_LIBIDN2) && defined(USE_WIN32_IDN) -#error "Both libidn2 and WinIDN are enabled, choose one." +#if defined(USE_LIBIDN2) && (defined(USE_WIN32_IDN) || defined(USE_APPLE_IDN)) +#error "libidn2 cannot be enabled with WinIDN or AppleIDN, choose one." #endif #define LIBIDN_REQUIRED_VERSION "0.4.1" @@ -701,6 +758,13 @@ ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7))) # define UNUSED_PARAM __attribute__((__unused__)) # define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#elif defined(__IAR_SYSTEMS_ICC__) +# define UNUSED_PARAM __attribute__((__unused__)) +# if (__VER__ >= 9040001) +# define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +# else +# define WARN_UNUSED_RESULT +# endif #else # define UNUSED_PARAM /* NOTHING */ # define WARN_UNUSED_RESULT @@ -709,7 +773,8 @@ /* noreturn attribute */ #if !defined(CURL_NORETURN) -#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__clang__) +#if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__clang__) || \ + defined(__IAR_SYSTEMS_ICC__) # define CURL_NORETURN __attribute__((__noreturn__)) #elif defined(_MSC_VER) && (_MSC_VER >= 1200) # define CURL_NORETURN __declspec(noreturn) @@ -756,7 +821,7 @@ #endif /* - * shutdown() flags for systems that don't define them + * shutdown() flags for systems that do not define them */ #ifndef SHUT_RD @@ -804,7 +869,7 @@ endings either CRLF or LF so 't' is appropriate. #define FOPEN_APPENDTEXT "a" #endif -/* for systems that don't detect this in configure */ +/* for systems that do not detect this in configure */ #ifndef CURL_SA_FAMILY_T # if defined(HAVE_SA_FAMILY_T) # define CURL_SA_FAMILY_T sa_family_t @@ -833,7 +898,7 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, size_t buflen, struct passwd **result); #endif -#ifdef DEBUGBUILD +#ifdef UNITTESTS #define UNITTEST #else #define UNITTEST static @@ -852,7 +917,6 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, #error "Multi-SSL combined with QUIC is not supported" #endif -#define ENABLE_QUIC #define USE_HTTP3 #endif @@ -883,4 +947,26 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, #define OPENSSL_SUPPRESS_DEPRECATED #endif +#if defined(inline) + /* 'inline' is defined as macro and assumed to be correct */ + /* No need for 'inline' replacement */ +#elif defined(__cplusplus) + /* The code is compiled with C++ compiler. + C++ always supports 'inline'. */ + /* No need for 'inline' replacement */ +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901 + /* C99 (and later) supports 'inline' keyword */ + /* No need for 'inline' replacement */ +#elif defined(__GNUC__) && __GNUC__ >= 3 + /* GCC supports '__inline__' as an extension */ +# define inline __inline__ +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + /* MSC supports '__inline' from VS 2005 (or even earlier) */ +# define inline __inline +#else + /* Probably 'inline' is not supported by compiler. + Define to the empty string to be on the safe side. */ +# define inline /* empty */ +#endif + #endif /* HEADER_CURL_SETUP_H */ diff --git a/lib/curl_setup_once.h b/lib/curl_setup_once.h index bf0ee663d..1521e69f9 100644 --- a/lib/curl_setup_once.h +++ b/lib/curl_setup_once.h @@ -106,7 +106,7 @@ #endif /* - * Definition of timeval struct for platforms that don't have it. + * Definition of timeval struct for platforms that do not have it. */ #ifndef HAVE_STRUCT_TIMEVAL @@ -130,7 +130,7 @@ struct timeval { #if defined(__minix) -/* Minix doesn't support recv on TCP sockets */ +/* Minix does not support recv on TCP sockets */ #define sread(x,y,z) (ssize_t)read((RECV_TYPE_ARG1)(x), \ (RECV_TYPE_ARG2)(y), \ (RECV_TYPE_ARG3)(z)) @@ -143,7 +143,7 @@ struct timeval { * * HAVE_RECV is defined if you have a function named recv() * which is used to read incoming data from sockets. If your - * function has another name then don't define HAVE_RECV. + * function has another name then do not define HAVE_RECV. * * If HAVE_RECV is defined then RECV_TYPE_ARG1, RECV_TYPE_ARG2, * RECV_TYPE_ARG3, RECV_TYPE_ARG4 and RECV_TYPE_RETV must also @@ -151,7 +151,7 @@ struct timeval { * * HAVE_SEND is defined if you have a function named send() * which is used to write outgoing data on a connected socket. - * If yours has another name then don't define HAVE_SEND. + * If yours has another name then do not define HAVE_SEND. * * If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2, * SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and @@ -164,15 +164,13 @@ struct timeval { (RECV_TYPE_ARG4)(0)) #else /* HAVE_RECV */ #ifndef sread - /* */ - Error Missing_definition_of_macro_sread - /* */ +#error "Missing definition of macro sread!" #endif #endif /* HAVE_RECV */ #if defined(__minix) -/* Minix doesn't support send on TCP sockets */ +/* Minix does not support send on TCP sockets */ #define swrite(x,y,z) (ssize_t)write((SEND_TYPE_ARG1)(x), \ (SEND_TYPE_ARG2)(y), \ (SEND_TYPE_ARG3)(z)) @@ -184,9 +182,7 @@ struct timeval { (SEND_TYPE_ARG4)(SEND_4TH_ARG)) #else /* HAVE_SEND */ #ifndef swrite - /* */ - Error Missing_definition_of_macro_swrite - /* */ +#error "Missing definition of macro swrite!" #endif #endif /* HAVE_SEND */ @@ -230,7 +226,7 @@ struct timeval { /* * 'bool' exists on platforms with , i.e. C99 platforms. - * On non-C99 platforms there's no bool, so define an enum for that. + * On non-C99 platforms there is no bool, so define an enum for that. * On C99 platforms 'false' and 'true' also exist. Enum uses a * global namespace though, so use bool_false and bool_true. */ @@ -242,7 +238,7 @@ struct timeval { } bool; /* - * Use a define to let 'true' and 'false' use those enums. There + * Use a define to let 'true' and 'false' use those enums. There * are currently no use of true and false in libcurl proper, but * there are some in the examples. This will cater for any later * code happening to use true and false. diff --git a/lib/curl_sha512_256.c b/lib/curl_sha512_256.c index 8af3839c5..e3533d8fc 100644 --- a/lib/curl_sha512_256.c +++ b/lib/curl_sha512_256.c @@ -44,7 +44,7 @@ # include # if (!defined(LIBRESSL_VERSION_NUMBER) && \ defined(OPENSSL_VERSION_NUMBER) && \ - (OPENSSL_VERSION_NUMBER >= 0x10100010L)) || \ + (OPENSSL_VERSION_NUMBER >= 0x10101000L)) || \ (defined(LIBRESSL_VERSION_NUMBER) && \ (LIBRESSL_VERSION_NUMBER >= 0x3080000fL)) # include @@ -52,6 +52,27 @@ # include # define USE_OPENSSL_SHA512_256 1 # define HAS_SHA512_256_IMPLEMENTATION 1 +# ifdef __NetBSD__ +/* Some NetBSD versions has a bug in SHA-512/256. + * See https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=58039 + * The problematic versions: + * - NetBSD before 9.4 + * - NetBSD 9 all development versions (9.99.x) + * - NetBSD 10 development versions (10.99.x) before 10.99.11 + * The bug was fixed in NetBSD 9.4 release, NetBSD 10.0 release, + * NetBSD 10.99.11 development. + * It is safe to apply the workaround even if the bug is not present, as + * the workaround just reduces performance slightly. */ +# include +# if __NetBSD_Version__ < 904000000 || \ + (__NetBSD_Version__ >= 999000000 && \ + __NetBSD_Version__ < 1000000000) || \ + (__NetBSD_Version__ >= 1099000000 && \ + __NetBSD_Version__ < 1099001100) +# define NEED_NETBSD_SHA512_256_WORKAROUND 1 +# include +# endif +# endif # endif # endif #endif /* USE_OPENSSL */ @@ -153,7 +174,7 @@ Curl_sha512_256_finish(unsigned char *digest, CURLcode ret; Curl_sha512_256_ctx *const ctx = (Curl_sha512_256_ctx *)context; -#ifdef __NetBSD__ +#ifdef NEED_NETBSD_SHA512_256_WORKAROUND /* Use a larger buffer to work around a bug in NetBSD: https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=58039 */ unsigned char tmp_digest[SHA512_256_DIGEST_SIZE * 2]; @@ -161,9 +182,10 @@ Curl_sha512_256_finish(unsigned char *digest, tmp_digest, NULL) ? CURLE_OK : CURLE_SSL_CIPHER; if(ret == CURLE_OK) memcpy(digest, tmp_digest, SHA512_256_DIGEST_SIZE); -#else /* ! __NetBSD__ */ + explicit_memset(tmp_digest, 0, sizeof(tmp_digest)); +#else /* ! NEED_NETBSD_SHA512_256_WORKAROUND */ ret = EVP_DigestFinal_ex(*ctx, digest, NULL) ? CURLE_OK : CURLE_SSL_CIPHER; -#endif /* ! __NetBSD__ */ +#endif /* ! NEED_NETBSD_SHA512_256_WORKAROUND */ EVP_MD_CTX_destroy(*ctx); *ctx = NULL; @@ -248,9 +270,9 @@ Curl_sha512_256_finish(unsigned char *digest, * ** written by Evgeny Grin (Karlson2k) for GNU libmicrohttpd. ** * * ** The author ported the code to libcurl. The ported code is provided ** * * ** under curl license. ** * - * ** This is a minimal version with minimal optimisations. Performance ** * + * ** This is a minimal version with minimal optimizations. Performance ** * * ** can be significantly improved. Big-endian store and load macros ** * - * ** are obvious targets for optimisation. ** */ + * ** are obvious targets for optimization. ** */ #ifdef __GNUC__ # if defined(__has_attribute) && defined(__STDC_VERSION__) @@ -264,29 +286,13 @@ Curl_sha512_256_finish(unsigned char *digest, defined(_MSC_VER) && !defined(__GNUC__) && !defined(__clang__) # if _MSC_VER >= 1400 # define MHDX_INLINE __forceinline -# else -# define MHDX_INLINE /* empty */ # endif #endif #if !defined(MHDX_INLINE) -# if defined(inline) - /* Assume that 'inline' macro was already defined correctly by - * the build system. */ -# define MHDX_INLINE inline -# elif defined(__cplusplus) - /* The code is compiled with C++ compiler. - * C++ always supports 'inline'. */ -# define MHDX_INLINE inline -# elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901 - /* C99 (and later) supports 'inline' keyword */ -# define MHDX_INLINE inline -# elif defined(__GNUC__) && __GNUC__ >= 3 - /* GCC supports '__inline__' as an extension */ -# define MHDX_INLINE __inline__ -# else -# define MHDX_INLINE /* empty */ -# endif + /* Assume that 'inline' keyword works or the + * macro was already defined correctly. */ +# define MHDX_INLINE inline #endif /* Bits manipulation macros and functions. @@ -322,7 +328,7 @@ MHDx_rotr64(curl_uint64_t value, unsigned int bits) bits %= 64; if(0 == bits) return value; - /* Defined in a form which modern compiler could optimise. */ + /* Defined in a form which modern compiler could optimize. */ return (value >> bits) | (value << (64 - bits)); } @@ -468,10 +474,10 @@ MHDx_sha512_256_transform(curl_uint64_t H[SHA512_256_HASH_SIZE_WORDS], See FIPS PUB 180-4 section 5.2.2, 6.7, 6.4. */ curl_uint64_t W[16]; - /* 'Ch' and 'Maj' macro functions are defined with widely-used optimisation. + /* 'Ch' and 'Maj' macro functions are defined with widely-used optimization. See FIPS PUB 180-4 formulae 4.8, 4.9. */ -#define Ch(x,y,z) ( (z) ^ ((x) & ((y) ^ (z))) ) -#define Maj(x,y,z) ( ((x) & (y)) ^ ((z) & ((x) ^ (y))) ) +#define Sha512_Ch(x,y,z) ( (z) ^ ((x) & ((y) ^ (z))) ) +#define Sha512_Maj(x,y,z) ( ((x) & (y)) ^ ((z) & ((x) ^ (y))) ) /* Four 'Sigma' macro functions. See FIPS PUB 180-4 formulae 4.10, 4.11, 4.12, 4.13. */ @@ -541,9 +547,9 @@ MHDx_sha512_256_transform(curl_uint64_t H[SHA512_256_HASH_SIZE_WORDS], * Note: 'wt' must be used exactly one time in this macro as macro for 'wt' calculation may change other data as well every time when used. */ -#define SHA2STEP64(vA,vB,vC,vD,vE,vF,vG,vH,kt,wt) do { \ - (vD) += ((vH) += SIG1 ((vE)) + Ch ((vE),(vF),(vG)) + (kt) + (wt)); \ - (vH) += SIG0 ((vA)) + Maj ((vA),(vB),(vC)); } while (0) +#define SHA2STEP64(vA,vB,vC,vD,vE,vF,vG,vH,kt,wt) do { \ + (vD) += ((vH) += SIG1((vE)) + Sha512_Ch((vE),(vF),(vG)) + (kt) + (wt)); \ + (vH) += SIG0((vA)) + Sha512_Maj((vA),(vB),(vC)); } while (0) /* One step of SHA-512/256 computation with working variables rotation, see FIPS PUB 180-4 section 6.4.2 step 3. This macro version reassigns diff --git a/lib/curl_sspi.c b/lib/curl_sspi.c index eb21e7e2b..2c9e38d90 100644 --- a/lib/curl_sspi.c +++ b/lib/curl_sspi.c @@ -134,7 +134,7 @@ void Curl_sspi_global_cleanup(void) * * Parameters: * - * userp [in] - The user name in the format User or Domain\User. + * userp [in] - The username in the format User or Domain\User. * passwdp [in] - The user's password. * identity [in/out] - The identity structure. * diff --git a/lib/curl_threads.c b/lib/curl_threads.c index 222d9364f..fb4af73d0 100644 --- a/lib/curl_threads.c +++ b/lib/curl_threads.c @@ -100,18 +100,23 @@ int Curl_thread_join(curl_thread_t *hnd) #elif defined(USE_THREADS_WIN32) -/* !checksrc! disable SPACEBEFOREPAREN 1 */ -curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void *), +curl_thread_t Curl_thread_create( +#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) + DWORD +#else + unsigned int +#endif + (CURL_STDCALL *func) (void *), void *arg) { -#ifdef _WIN32_WCE +#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) typedef HANDLE curl_win_thread_handle_t; #else typedef uintptr_t curl_win_thread_handle_t; #endif curl_thread_t t; curl_win_thread_handle_t thread_handle; -#ifdef _WIN32_WCE +#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) thread_handle = CreateThread(NULL, 0, func, arg, 0, NULL); #else thread_handle = _beginthreadex(NULL, 0, func, arg, 0, NULL); @@ -131,7 +136,8 @@ curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void *), void Curl_thread_destroy(curl_thread_t hnd) { - CloseHandle(hnd); + if(hnd != curl_thread_t_null) + CloseHandle(hnd); } int Curl_thread_join(curl_thread_t *hnd) diff --git a/lib/curl_threads.h b/lib/curl_threads.h index 27a478d4c..be22352dc 100644 --- a/lib/curl_threads.h +++ b/lib/curl_threads.h @@ -52,8 +52,13 @@ #if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32) -/* !checksrc! disable SPACEBEFOREPAREN 1 */ -curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void *), +curl_thread_t Curl_thread_create( +#if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) + DWORD +#else + unsigned int +#endif + (CURL_STDCALL *func) (void *), void *arg); void Curl_thread_destroy(curl_thread_t hnd); diff --git a/lib/curl_trc.c b/lib/curl_trc.c index fa6ad229b..f017e21a5 100644 --- a/lib/curl_trc.c +++ b/lib/curl_trc.c @@ -111,21 +111,30 @@ void Curl_failf(struct Curl_easy *data, const char *fmt, ...) /* Curl_infof() is for info message along the way */ #define MAXINFO 2048 +static void trc_infof(struct Curl_easy *data, struct curl_trc_feat *feat, + const char * const fmt, va_list ap) CURL_PRINTF(3, 0); + +static void trc_infof(struct Curl_easy *data, struct curl_trc_feat *feat, + const char * const fmt, va_list ap) +{ + int len = 0; + char buffer[MAXINFO + 2]; + if(feat) + len = msnprintf(buffer, MAXINFO, "[%s] ", feat->name); + len += mvsnprintf(buffer + len, MAXINFO - len, fmt, ap); + buffer[len++] = '\n'; + buffer[len] = '\0'; + Curl_debug(data, CURLINFO_TEXT, buffer, len); +} + void Curl_infof(struct Curl_easy *data, const char *fmt, ...) { DEBUGASSERT(!strchr(fmt, '\n')); if(Curl_trc_is_verbose(data)) { va_list ap; - int len = 0; - char buffer[MAXINFO + 2]; - if(data->state.feat) - len = msnprintf(buffer, MAXINFO, "[%s] ", data->state.feat->name); va_start(ap, fmt); - len += mvsnprintf(buffer + len, MAXINFO - len, fmt, ap); + trc_infof(data, data->state.feat, fmt, ap); va_end(ap); - buffer[len++] = '\n'; - buffer[len] = '\0'; - Curl_debug(data, CURLINFO_TEXT, buffer, len); } } @@ -154,7 +163,61 @@ void Curl_trc_cf_infof(struct Curl_easy *data, struct Curl_cfilter *cf, } } +struct curl_trc_feat Curl_trc_feat_read = { + "READ", + CURL_LOG_LVL_NONE, +}; +struct curl_trc_feat Curl_trc_feat_write = { + "WRITE", + CURL_LOG_LVL_NONE, +}; + +void Curl_trc_read(struct Curl_easy *data, const char *fmt, ...) +{ + DEBUGASSERT(!strchr(fmt, '\n')); + if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_read)) { + va_list ap; + va_start(ap, fmt); + trc_infof(data, &Curl_trc_feat_read, fmt, ap); + va_end(ap); + } +} + +void Curl_trc_write(struct Curl_easy *data, const char *fmt, ...) +{ + DEBUGASSERT(!strchr(fmt, '\n')); + if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) { + va_list ap; + va_start(ap, fmt); + trc_infof(data, &Curl_trc_feat_write, fmt, ap); + va_end(ap); + } +} + +#ifndef CURL_DISABLE_FTP +struct curl_trc_feat Curl_trc_feat_ftp = { + "FTP", + CURL_LOG_LVL_NONE, +}; + +void Curl_trc_ftp(struct Curl_easy *data, const char *fmt, ...) +{ + DEBUGASSERT(!strchr(fmt, '\n')); + if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_ftp)) { + va_list ap; + va_start(ap, fmt); + trc_infof(data, &Curl_trc_feat_ftp, fmt, ap); + va_end(ap); + } +} +#endif /* !CURL_DISABLE_FTP */ + static struct curl_trc_feat *trc_feats[] = { + &Curl_trc_feat_read, + &Curl_trc_feat_write, +#ifndef CURL_DISABLE_FTP + &Curl_trc_feat_ftp, +#endif #ifndef CURL_DISABLE_DOH &Curl_doh_trc, #endif @@ -188,7 +251,7 @@ static struct Curl_cftype *cf_types[] = { &Curl_cft_haproxy, &Curl_cft_socks_proxy, #endif /* !CURL_DISABLE_PROXY */ -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 &Curl_cft_http3, #endif #if !defined(CURL_DISABLE_HTTP) && !defined(USE_HYPER) diff --git a/lib/curl_trc.h b/lib/curl_trc.h index 92b0533c0..3d3801834 100644 --- a/lib/curl_trc.h +++ b/lib/curl_trc.h @@ -77,12 +77,32 @@ void Curl_failf(struct Curl_easy *data, #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) +#define CURL_TRC_WRITE(data, ...) \ + do { if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \ + Curl_trc_write(data, __VA_ARGS__); } while(0) +#define CURL_TRC_READ(data, ...) \ + do { if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_read)) \ + Curl_trc_read(data, __VA_ARGS__); } while(0) + +#ifndef CURL_DISABLE_FTP +#define CURL_TRC_FTP(data, ...) \ + do { if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_ftp)) \ + Curl_trc_ftp(data, __VA_ARGS__); } while(0) +#endif /* !CURL_DISABLE_FTP */ + +#else /* CURL_HAVE_C99 */ -#else #define infof Curl_infof #define CURL_TRC_CF Curl_trc_cf_infof +#define CURL_TRC_WRITE Curl_trc_write +#define CURL_TRC_READ Curl_trc_read + +#ifndef CURL_DISABLE_FTP +#define CURL_TRC_FTP Curl_trc_ftp #endif +#endif /* !CURL_HAVE_C99 */ + #ifndef CURL_DISABLE_VERBOSE_STRINGS /* informational messages enabled */ @@ -90,6 +110,8 @@ struct curl_trc_feat { const char *name; int log_level; }; +extern struct curl_trc_feat Curl_trc_feat_read; +extern struct curl_trc_feat Curl_trc_feat_write; #define Curl_trc_is_verbose(data) \ ((data) && (data)->set.verbose && \ @@ -97,10 +119,10 @@ struct curl_trc_feat { ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO))) #define Curl_trc_cf_is_verbose(cf, data) \ (Curl_trc_is_verbose(data) && \ - (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO) + (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO) #define Curl_trc_ft_is_verbose(data, ft) \ - (Curl_trc_is_verbose(data) && \ - (ft)->log_level >= CURL_LOG_LVL_INFO) + (Curl_trc_is_verbose(data) && \ + (ft)->log_level >= CURL_LOG_LVL_INFO) /** * Output an informational message when transfer's verbose logging is enabled. @@ -114,13 +136,26 @@ void Curl_infof(struct Curl_easy *data, */ void Curl_trc_cf_infof(struct Curl_easy *data, struct Curl_cfilter *cf, const char *fmt, ...) CURL_PRINTF(3, 4); +void Curl_trc_ft_infof(struct Curl_easy *data, struct curl_trc_feat *ft, + const char *fmt, ...) CURL_PRINTF(3, 4); +void Curl_trc_write(struct Curl_easy *data, + const char *fmt, ...) CURL_PRINTF(2, 3); +void Curl_trc_read(struct Curl_easy *data, + const char *fmt, ...) CURL_PRINTF(2, 3); + +#ifndef CURL_DISABLE_FTP +extern struct curl_trc_feat Curl_trc_feat_ftp; +void Curl_trc_ftp(struct Curl_easy *data, + const char *fmt, ...) CURL_PRINTF(2, 3); +#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) -#define Curl_trc_ft_is_verbose(x,y) ((void)(x), (void)(y), FALSE) +#define Curl_trc_is_verbose(d) (FALSE) +#define Curl_trc_cf_is_verbose(x,y) (FALSE) +#define Curl_trc_ft_is_verbose(x,y) (FALSE) static void Curl_infof(struct Curl_easy *data, const char *fmt, ...) { @@ -134,6 +169,32 @@ static void Curl_trc_cf_infof(struct Curl_easy *data, (void)data; (void)cf; (void)fmt; } +struct curl_trc_feat; + +static void Curl_trc_ft_infof(struct Curl_easy *data, + struct curl_trc_feat *ft, + const char *fmt, ...) +{ + (void)data; (void)ft; (void)fmt; +} + +static void Curl_trc_write(struct Curl_easy *data, const char *fmt, ...) +{ + (void)data; (void)fmt; +} + +static void Curl_trc_read(struct Curl_easy *data, const char *fmt, ...) +{ + (void)data; (void)fmt; +} + +#ifndef CURL_DISABLE_FTP +static void Curl_trc_ftp(struct Curl_easy *data, const char *fmt, ...) +{ + (void)data; (void)fmt; +} +#endif + #endif /* !defined(CURL_DISABLE_VERBOSE_STRINGS) */ #endif /* HEADER_CURL_TRC_H */ diff --git a/lib/curlx.h b/lib/curlx.h index 7a753d682..54e427957 100644 --- a/lib/curlx.h +++ b/lib/curlx.h @@ -77,7 +77,6 @@ */ -#define curlx_getenv curl_getenv #define curlx_mvsnprintf curl_mvsnprintf #define curlx_msnprintf curl_msnprintf #define curlx_maprintf curl_maprintf diff --git a/lib/cw-out.c b/lib/cw-out.c index c16883781..56ec4162e 100644 --- a/lib/cw-out.c +++ b/lib/cw-out.c @@ -102,6 +102,8 @@ static void cw_out_buf_free(struct cw_out_buf *cwbuf) struct cw_out_ctx { struct Curl_cwriter super; struct cw_out_buf *buf; + BIT(paused); + BIT(errored); }; static CURLcode cw_out_write(struct Curl_easy *data, @@ -201,7 +203,10 @@ static CURLcode cw_out_ptr_flush(struct cw_out_ctx *ctx, size_t max_write, min_write; size_t wlen, nwritten; - (void)ctx; + /* If we errored once, we do not invoke the client callback again */ + if(ctx->errored) + return CURLE_WRITE_ERROR; + /* write callbacks may get NULLed by the client between calls. */ cw_get_writefunc(data, otype, &wcb, &wcb_data, &max_write, &min_write); if(!wcb) { @@ -210,26 +215,35 @@ static CURLcode cw_out_ptr_flush(struct cw_out_ctx *ctx, } *pconsumed = 0; - while(blen && !(data->req.keepon & KEEP_RECV_PAUSE)) { + while(blen && !ctx->paused) { if(!flush_all && blen < min_write) break; wlen = max_write? CURLMIN(blen, max_write) : blen; Curl_set_in_callback(data, TRUE); nwritten = wcb((char *)buf, 1, wlen, wcb_data); Curl_set_in_callback(data, FALSE); + CURL_TRC_WRITE(data, "cw_out, wrote %zu %s bytes -> %zu", + wlen, (otype == CW_OUT_BODY)? "body" : "header", + nwritten); if(CURL_WRITEFUNC_PAUSE == nwritten) { if(data->conn && data->conn->handler->flags & PROTOPT_NONETWORK) { /* Protocols that work without network cannot be paused. This is - actually only FILE:// just now, and it can't pause since the - transfer isn't done using the "normal" procedure. */ + actually only FILE:// just now, and it cannot pause since the + transfer is not done using the "normal" procedure. */ failf(data, "Write callback asked for PAUSE when not supported"); return CURLE_WRITE_ERROR; } /* mark the connection as RECV paused */ data->req.keepon |= KEEP_RECV_PAUSE; + ctx->paused = TRUE; + CURL_TRC_WRITE(data, "cw_out, PAUSE requested by client"); break; } - if(nwritten != wlen) { + else if(CURL_WRITEFUNC_ERROR == nwritten) { + failf(data, "client returned ERROR on write of %zu bytes", wlen); + return CURLE_WRITE_ERROR; + } + else if(nwritten != wlen) { failf(data, "Failure writing output to destination, " "passed %zu returned %zd", wlen, nwritten); return CURLE_WRITE_ERROR; @@ -283,7 +297,7 @@ static CURLcode cw_out_flush_chain(struct cw_out_ctx *ctx, if(!cwbuf) return CURLE_OK; - if(data->req.keepon & KEEP_RECV_PAUSE) + if(ctx->paused) return CURLE_OK; /* write the end of the chain until it blocks or gets empty */ @@ -296,7 +310,7 @@ static CURLcode cw_out_flush_chain(struct cw_out_ctx *ctx, return result; if(*plast) { /* could not write last, paused again? */ - DEBUGASSERT(data->req.keepon & KEEP_RECV_PAUSE); + DEBUGASSERT(ctx->paused); return CURLE_OK; } } @@ -338,14 +352,14 @@ static CURLcode cw_out_do_write(struct cw_out_ctx *ctx, bool flush_all, const char *buf, size_t blen) { - CURLcode result; + CURLcode result = CURLE_OK; /* if we have buffered data and it is a different type than what * we are writing now, try to flush all */ if(ctx->buf && ctx->buf->type != otype) { result = cw_out_flush_chain(ctx, data, &ctx->buf, TRUE); if(result) - return result; + goto out; } if(ctx->buf) { @@ -355,7 +369,7 @@ static CURLcode cw_out_do_write(struct cw_out_ctx *ctx, return result; result = cw_out_flush_chain(ctx, data, &ctx->buf, flush_all); if(result) - return result; + goto out; } else { /* nothing buffered, try direct write */ @@ -368,10 +382,18 @@ static CURLcode cw_out_do_write(struct cw_out_ctx *ctx, /* did not write all, append the rest */ result = cw_out_append(ctx, otype, buf + consumed, blen - consumed); if(result) - return result; + goto out; } } - return CURLE_OK; + +out: + if(result) { + /* We do not want to invoked client callbacks a second time after + * encountering an error. See issue #13337 */ + ctx->errored = TRUE; + cw_out_bufs_free(ctx); + } + return result; } static CURLcode cw_out_write(struct Curl_easy *data, @@ -409,10 +431,12 @@ bool Curl_cw_out_is_paused(struct Curl_easy *data) return FALSE; ctx = (struct cw_out_ctx *)cw_out; - return cw_out_bufs_len(ctx) > 0; + CURL_TRC_WRITE(data, "cw-out is%spaused", ctx->paused? "" : " not"); + return ctx->paused; } -static CURLcode cw_out_flush(struct Curl_easy *data, bool flush_all) +static CURLcode cw_out_flush(struct Curl_easy *data, + bool unpause, bool flush_all) { struct Curl_cwriter *cw_out; CURLcode result = CURLE_OK; @@ -420,18 +444,31 @@ static CURLcode cw_out_flush(struct Curl_easy *data, bool flush_all) cw_out = Curl_cwriter_get_by_type(data, &Curl_cwt_out); if(cw_out) { struct cw_out_ctx *ctx = (struct cw_out_ctx *)cw_out; + if(ctx->errored) + return CURLE_WRITE_ERROR; + if(unpause && ctx->paused) + ctx->paused = FALSE; + if(ctx->paused) + return CURLE_OK; /* not doing it */ result = cw_out_flush_chain(ctx, data, &ctx->buf, flush_all); + if(result) { + ctx->errored = TRUE; + cw_out_bufs_free(ctx); + return result; + } } return result; } -CURLcode Curl_cw_out_flush(struct Curl_easy *data) +CURLcode Curl_cw_out_unpause(struct Curl_easy *data) { - return cw_out_flush(data, FALSE); + CURL_TRC_WRITE(data, "cw-out unpause"); + return cw_out_flush(data, TRUE, FALSE); } CURLcode Curl_cw_out_done(struct Curl_easy *data) { - return cw_out_flush(data, TRUE); + CURL_TRC_WRITE(data, "cw-out done"); + return cw_out_flush(data, FALSE, TRUE); } diff --git a/lib/cw-out.h b/lib/cw-out.h index c13e85380..ca4c2e435 100644 --- a/lib/cw-out.h +++ b/lib/cw-out.h @@ -43,7 +43,7 @@ bool Curl_cw_out_is_paused(struct Curl_easy *data); /** * Flush any buffered date to the client, chunk collation still applies. */ -CURLcode Curl_cw_out_flush(struct Curl_easy *data); +CURLcode Curl_cw_out_unpause(struct Curl_easy *data); /** * Mark EndOfStream reached and flush ALL data to the client. diff --git a/lib/dict.c b/lib/dict.c index f37767882..35331ce22 100644 --- a/lib/dict.c +++ b/lib/dict.c @@ -76,7 +76,7 @@ static CURLcode dict_do(struct Curl_easy *data, bool *done); */ const struct Curl_handler Curl_handler_dict = { - "DICT", /* scheme */ + "dict", /* scheme */ ZERO_NULL, /* setup_connection */ dict_do, /* do_it */ ZERO_NULL, /* done */ @@ -90,6 +90,7 @@ const struct Curl_handler Curl_handler_dict = { ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_DICT, /* defport */ @@ -240,7 +241,7 @@ static CURLcode dict_do(struct Curl_easy *data, bool *done) failf(data, "Failed sending DICT request"); goto error; } - Curl_xfer_setup(data, FIRSTSOCKET, -1, FALSE, -1); /* no upload */ + Curl_xfer_setup1(data, CURL_XFER_RECV, -1, FALSE); /* no upload */ } else if(strncasecompare(path, DICT_DEFINE, sizeof(DICT_DEFINE)-1) || strncasecompare(path, DICT_DEFINE2, sizeof(DICT_DEFINE2)-1) || @@ -286,7 +287,7 @@ static CURLcode dict_do(struct Curl_easy *data, bool *done) failf(data, "Failed sending DICT request"); goto error; } - Curl_xfer_setup(data, FIRSTSOCKET, -1, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, -1, FALSE); } else { @@ -308,7 +309,7 @@ static CURLcode dict_do(struct Curl_easy *data, bool *done) goto error; } - Curl_xfer_setup(data, FIRSTSOCKET, -1, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, -1, FALSE); } } diff --git a/lib/dllmain.c b/lib/dllmain.c new file mode 100644 index 000000000..41e97b37e --- /dev/null +++ b/lib/dllmain.c @@ -0,0 +1,81 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#include "curl_setup.h" + +#ifdef USE_OPENSSL +#include +#endif + +/* The fourth-to-last include */ +#ifdef __CYGWIN__ +#define WIN32_LEAN_AND_MEAN +#include +#ifdef _WIN32 +#undef _WIN32 +#endif +#endif + +/* The last 3 #include files should be in this order */ +#include "curl_printf.h" +#include "curl_memory.h" +#include "memdebug.h" + +/* DllMain() must only be defined for Windows and Cygwin DLL builds. */ +#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(CURL_STATICLIB) + +#if defined(USE_OPENSSL) && \ + !defined(OPENSSL_IS_AWSLC) && \ + !defined(OPENSSL_IS_BORINGSSL) && \ + !defined(LIBRESSL_VERSION_NUMBER) && \ + (OPENSSL_VERSION_NUMBER >= 0x10100000L) +#define PREVENT_OPENSSL_MEMLEAK +#endif + +#ifdef PREVENT_OPENSSL_MEMLEAK +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved); +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + (void)hinstDLL; + (void)lpvReserved; + + switch(fdwReason) { + case DLL_PROCESS_ATTACH: + break; + case DLL_PROCESS_DETACH: + break; + case DLL_THREAD_ATTACH: + break; + case DLL_THREAD_DETACH: + /* Call OPENSSL_thread_stop to prevent a memory leak in case OpenSSL is + linked statically. + https://github.com/curl/curl/issues/12327#issuecomment-1826405944 */ + OPENSSL_thread_stop(); + break; + } + return TRUE; +} +#endif /* OpenSSL */ + +#endif /* DLL build */ diff --git a/lib/doh.c b/lib/doh.c index 33e714166..0dcca17cc 100644 --- a/lib/doh.c +++ b/lib/doh.c @@ -42,9 +42,13 @@ #include "curl_printf.h" #include "curl_memory.h" #include "memdebug.h" +#include "escape.h" #define DNS_CLASS_IN 0x01 +/* local_print_buf truncates if the hex string will be more than this */ +#define LOCAL_PB_HEXMAX 400 + #ifndef CURL_DISABLE_VERBOSE_STRINGS static const char * const errors[]={ "", @@ -89,21 +93,21 @@ UNITTEST DOHcode doh_encode(const char *host, const char *hostp = host; /* The expected output length is 16 bytes more than the length of - * the QNAME-encoding of the host name. + * the QNAME-encoding of the hostname. * * A valid DNS name may not contain a zero-length label, except at - * the end. For this reason, a name beginning with a dot, or + * the end. For this reason, a name beginning with a dot, or * containing a sequence of two or more consecutive dots, is invalid * and cannot be encoded as a QNAME. * - * If the host name ends with a trailing dot, the corresponding - * QNAME-encoding is one byte longer than the host name. If (as is + * If the hostname ends with a trailing dot, the corresponding + * QNAME-encoding is one byte longer than the hostname. If (as is * also valid) the hostname is shortened by the omission of the * trailing dot, then its QNAME-encoding will be two bytes longer - * than the host name. + * than the hostname. * * Each [ label, dot ] pair is encoded as [ length, label ], - * preserving overall length. A final [ label ] without a dot is + * preserving overall length. A final [ label ] without a dot is * also encoded as [ length, label ], increasing overall length * by one. The encoding is completed by appending a zero byte, * representing the zero-length root label, again increasing @@ -187,6 +191,26 @@ doh_write_cb(const void *contents, size_t size, size_t nmemb, void *userp) return realsize; } +#if defined(USE_HTTPSRR) && defined(DEBUGBUILD) +static void local_print_buf(struct Curl_easy *data, + const char *prefix, + unsigned char *buf, size_t len) +{ + unsigned char hexstr[LOCAL_PB_HEXMAX]; + size_t hlen = LOCAL_PB_HEXMAX; + bool truncated = false; + + if(len > (LOCAL_PB_HEXMAX / 2)) + truncated = true; + Curl_hexencode(buf, len, hexstr, hlen); + if(!truncated) + infof(data, "%s: len=%d, val=%s", prefix, (int)len, hexstr); + else + infof(data, "%s: len=%d (truncated)val=%s", prefix, (int)len, hexstr); + return; +} +#endif + /* called from multi.c when this DoH transfer is complete */ static int doh_done(struct Curl_easy *doh, CURLcode result) { @@ -261,7 +285,7 @@ static CURLcode dohprobe(struct Curl_easy *data, ERROR_CHECK_SETOPT(CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS); ERROR_CHECK_SETOPT(CURLOPT_PIPEWAIT, 1L); #endif -#ifndef CURLDEBUG +#ifndef DEBUGBUILD /* enforce HTTPS if not debug */ ERROR_CHECK_SETOPT(CURLOPT_PROTOCOLS, CURLPROTO_HTTPS); #else @@ -376,9 +400,14 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data, int *waitp) { CURLcode result = CURLE_OK; - int slot; struct dohdata *dohp; struct connectdata *conn = data->conn; +#ifdef USE_HTTPSRR + /* for now, this is only used when ECH is enabled */ +# ifdef USE_ECH + char *qname = NULL; +# endif +#endif *waitp = FALSE; (void)hostname; (void)port; @@ -408,7 +437,7 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data, goto error; dohp->pending++; -#ifdef ENABLE_IPV6 +#ifdef USE_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], @@ -418,18 +447,43 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data, goto error; dohp->pending++; } +#endif + +#ifdef USE_HTTPSRR + /* + * TODO: Figure out the conditions under which we want to make + * a request for an HTTPS RR when we are not doing ECH. For now, + * making this request breaks a bunch of DoH tests, e.g. test2100, + * where the additional request does not match the pre-cooked data + * files, so there is a bit of work attached to making the request + * in a non-ECH use-case. For the present, we will only make the + * request when ECH is enabled in the build and is being used for + * the curl operation. + */ +# ifdef USE_ECH + if(data->set.tls_ech & CURLECH_ENABLE + || data->set.tls_ech & CURLECH_HARD) { + if(port == 443) + qname = strdup(hostname); + else + qname = aprintf("_%d._https.%s", port, hostname); + if(!qname) + goto error; + result = dohprobe(data, &dohp->probe[DOH_PROBE_SLOT_HTTPS], + DNS_TYPE_HTTPS, qname, data->set.str[STRING_DOH], + data->multi, dohp->headers); + Curl_safefree(qname); + if(result) + goto error; + dohp->pending++; + } +# endif #endif *waitp = TRUE; /* this never returns synchronously */ return NULL; 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); + Curl_doh_cleanup(data); return NULL; } @@ -457,12 +511,12 @@ static DOHcode skipqname(const unsigned char *doh, size_t dohlen, return DOH_OK; } -static unsigned short get16bit(const unsigned char *doh, int index) +static unsigned short get16bit(const unsigned char *doh, unsigned int index) { return (unsigned short)((doh[index] << 8) | doh[index + 1]); } -static unsigned int get32bit(const unsigned char *doh, int index) +static unsigned int get32bit(const unsigned char *doh, unsigned int index) { /* make clang and gcc optimize this to bswap by incrementing the pointer first. */ @@ -470,7 +524,7 @@ static unsigned int get32bit(const unsigned char *doh, int index) /* avoid undefined behavior by casting to unsigned before shifting 24 bits, possibly into the sign bit. codegen is same, but - ub sanitizer won't be upset */ + ub sanitizer will not be upset */ return ((unsigned)doh[0] << 24) | ((unsigned)doh[1] << 16) | ((unsigned)doh[2] << 8) | doh[3]; } @@ -501,6 +555,25 @@ static DOHcode store_aaaa(const unsigned char *doh, return DOH_OK; } +#ifdef USE_HTTPSRR +static DOHcode store_https(const unsigned char *doh, + int index, + struct dohentry *d, + uint16_t len) +{ + /* silently ignore RRs over the limit */ + if(d->numhttps_rrs < DOH_MAX_HTTPS) { + struct dohhttps_rr *h = &d->https_rrs[d->numhttps_rrs]; + h->val = Curl_memdup(&doh[index], len); + if(!h->val) + return DOH_OUT_OF_MEM; + h->len = len; + d->numhttps_rrs++; + } + return DOH_OK; +} +#endif + static DOHcode store_cname(const unsigned char *doh, size_t dohlen, unsigned int index, @@ -526,7 +599,7 @@ static DOHcode store_cname(const unsigned char *doh, /* move to the new index */ newpos = (length & 0x3f) << 8 | doh[index + 1]; - index = newpos; + index = (unsigned int)newpos; continue; } else if(length & 0xc0) @@ -563,7 +636,8 @@ static DOHcode rdata(const unsigned char *doh, /* RDATA - A (TYPE 1): 4 bytes - AAAA (TYPE 28): 16 bytes - - NS (TYPE 2): N bytes */ + - NS (TYPE 2): N bytes + - HTTPS (TYPE 65): N bytes */ DOHcode rc; switch(type) { @@ -581,8 +655,15 @@ static DOHcode rdata(const unsigned char *doh, if(rc) return rc; break; +#ifdef USE_HTTPSRR + case DNS_TYPE_HTTPS: + rc = store_https(doh, index, d, rdlength); + if(rc) + return rc; + break; +#endif case DNS_TYPE_CNAME: - rc = store_cname(doh, dohlen, index, d); + rc = store_cname(doh, dohlen, (unsigned int)index, d); if(rc) return rc; break; @@ -683,7 +764,7 @@ UNITTEST DOHcode doh_decode(const unsigned char *doh, if(dohlen < (index + rdlength)) return DOH_DNS_OUT_OF_RANGE; - rc = rdata(doh, dohlen, rdlength, type, index, d); + rc = rdata(doh, dohlen, rdlength, type, (int)index, d); if(rc) return rc; /* bad rdata */ index += rdlength; @@ -737,7 +818,11 @@ UNITTEST DOHcode doh_decode(const unsigned char *doh, if(index != dohlen) return DOH_DNS_MALFORMAT; /* something is wrong */ +#ifdef USE_HTTTPS + if((type != DNS_TYPE_NS) && !d->numcname && !d->numaddr && !d->numhttps_rrs) +#else if((type != DNS_TYPE_NS) && !d->numcname && !d->numaddr) +#endif /* nothing stored! */ return DOH_NO_CONTENT; @@ -776,6 +861,16 @@ static void showdoh(struct Curl_easy *data, infof(data, "%s", buffer); } } +#ifdef USE_HTTPSRR + for(i = 0; i < d->numhttps_rrs; i++) { +# ifdef DEBUGBUILD + local_print_buf(data, "DoH HTTPS", + d->https_rrs[i].val, d->https_rrs[i].len); +# else + infof(data, "DoH HTTPS RR: length %d", d->https_rrs[i].len); +# endif + } +#endif for(i = 0; i < d->numcname; i++) { infof(data, "CNAME: %s", Curl_dyn_ptr(&d->cname[i])); } @@ -789,11 +884,11 @@ static void showdoh(struct Curl_easy *data, * * This function returns a pointer to the first element of a newly allocated * Curl_addrinfo struct linked list filled with the data from a set of DoH - * lookups. Curl_addrinfo is meant to work like the addrinfo struct does for + * lookups. Curl_addrinfo is meant to work like the addrinfo struct does for * a IPv6 stack, but usable also for IPv4, all hosts and environments. * * The memory allocated by this function *MUST* be free'd later on calling - * Curl_freeaddrinfo(). For each successful call to this function there + * Curl_freeaddrinfo(). For each successful call to this function there * must be an associated call later to Curl_freeaddrinfo(). */ @@ -804,7 +899,7 @@ static CURLcode doh2ai(const struct dohentry *de, const char *hostname, struct Curl_addrinfo *prevai = NULL; struct Curl_addrinfo *firstai = NULL; struct sockaddr_in *addr; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct sockaddr_in6 *addr6; #endif CURLcode result = CURLE_OK; @@ -820,8 +915,8 @@ static CURLcode doh2ai(const struct dohentry *de, const char *hostname, size_t ss_size; CURL_SA_FAMILY_T addrtype; if(de->addr[i].type == DNS_TYPE_AAAA) { -#ifndef ENABLE_IPV6 - /* we can't handle IPv6 addresses */ +#ifndef USE_IPV6 + /* we cannot handle IPv6 addresses */ continue; #else ss_size = sizeof(struct sockaddr_in6); @@ -865,16 +960,24 @@ static CURLcode doh2ai(const struct dohentry *de, const char *hostname, addr = (void *)ai->ai_addr; /* storage area for this info */ DEBUGASSERT(sizeof(struct in_addr) == sizeof(de->addr[i].ip.v4)); memcpy(&addr->sin_addr, &de->addr[i].ip.v4, sizeof(struct in_addr)); +#ifdef __MINGW32__ + addr->sin_family = (short)addrtype; +#else addr->sin_family = addrtype; +#endif addr->sin_port = htons((unsigned short)port); break; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case AF_INET6: addr6 = (void *)ai->ai_addr; /* storage area for this info */ DEBUGASSERT(sizeof(struct in6_addr) == sizeof(de->addr[i].ip.v6)); memcpy(&addr6->sin6_addr, &de->addr[i].ip.v6, sizeof(struct in6_addr)); +#ifdef __MINGW32__ + addr6->sin6_family = (short)addrtype; +#else addr6->sin6_family = addrtype; +#endif addr6->sin6_port = htons((unsigned short)port); break; #endif @@ -895,7 +998,18 @@ static CURLcode doh2ai(const struct dohentry *de, const char *hostname, #ifndef CURL_DISABLE_VERBOSE_STRINGS static const char *type2name(DNStype dnstype) { - return (dnstype == DNS_TYPE_A)?"A":"AAAA"; + switch(dnstype) { + case DNS_TYPE_A: + return "A"; + case DNS_TYPE_AAAA: + return "AAAA"; +#ifdef USE_HTTPSRR + case DNS_TYPE_HTTPS: + return "HTTPS"; +#endif + default: + return "unknown"; + } } #endif @@ -905,7 +1019,276 @@ UNITTEST void de_cleanup(struct dohentry *d) for(i = 0; i < d->numcname; i++) { Curl_dyn_free(&d->cname[i]); } +#ifdef USE_HTTPSRR + for(i = 0; i < d->numhttps_rrs; i++) + Curl_safefree(d->https_rrs[i].val); +#endif +} + +#ifdef USE_HTTPSRR + +/* + * @brief decode the DNS name in a binary RRData + * @param buf points to the buffer (in/out) + * @param remaining points to the remaining buffer length (in/out) + * @param dnsname returns the string form name on success + * @return is 1 for success, error otherwise + * + * The encoding here is defined in + * https://tools.ietf.org/html/rfc1035#section-3.1 + * + * The input buffer pointer will be modified so it points to + * just after the end of the DNS name encoding on output. (And + * that is why it is an "unsigned char **" :-) + */ +static CURLcode local_decode_rdata_name(unsigned char **buf, size_t *remaining, + char **dnsname) +{ + unsigned char *cp = NULL; + int rem = 0; + unsigned char clen = 0; /* chunk len */ + struct dynbuf thename; + + DEBUGASSERT(buf && remaining && dnsname); + if(!buf || !remaining || !dnsname) + return CURLE_OUT_OF_MEMORY; + rem = (int)*remaining; + if(rem <= 0) { + Curl_dyn_free(&thename); + return CURLE_OUT_OF_MEMORY; + } + Curl_dyn_init(&thename, CURL_MAXLEN_host_name); + cp = *buf; + clen = *cp++; + if(clen == 0) { + /* special case - return "." as name */ + if(Curl_dyn_addn(&thename, ".", 1)) + return CURLE_OUT_OF_MEMORY; + } + while(clen) { + if(clen >= rem) { + Curl_dyn_free(&thename); + return CURLE_OUT_OF_MEMORY; + } + if(Curl_dyn_addn(&thename, cp, clen) || + Curl_dyn_addn(&thename, ".", 1)) + return CURLE_TOO_LARGE; + + cp += clen; + rem -= (clen + 1); + if(rem <= 0) { + Curl_dyn_free(&thename); + return CURLE_OUT_OF_MEMORY; + } + clen = *cp++; + } + *buf = cp; + *remaining = rem - 1; + *dnsname = Curl_dyn_ptr(&thename); + return CURLE_OK; +} + +static CURLcode local_decode_rdata_alpn(unsigned char *rrval, size_t len, + char **alpns) +{ + /* + * spec here is as per draft-ietf-dnsop-svcb-https, section-7.1.1 + * encoding is catenated list of strings each preceded by a one + * octet length + * output is comma-sep list of the strings + * implementations may or may not handle quoting of comma within + * string values, so we might see a comma within the wire format + * version of a string, in which case we will precede that by a + * backslash - same goes for a backslash character, and of course + * we need to use two backslashes in strings when we mean one;-) + */ + int remaining = (int) len; + char *oval; + size_t i; + unsigned char *cp = rrval; + struct dynbuf dval; + + if(!alpns) + return CURLE_OUT_OF_MEMORY; + Curl_dyn_init(&dval, DYN_DOH_RESPONSE); + remaining = (int)len; + cp = rrval; + while(remaining > 0) { + size_t tlen = (size_t) *cp++; + + /* if not 1st time, add comma */ + if(remaining != (int)len && Curl_dyn_addn(&dval, ",", 1)) + goto err; + remaining--; + if(tlen > (size_t)remaining) + goto err; + /* add escape char if needed, clunky but easier to read */ + for(i = 0; i != tlen; i++) { + if('\\' == *cp || ',' == *cp) { + if(Curl_dyn_addn(&dval, "\\", 1)) + goto err; + } + if(Curl_dyn_addn(&dval, cp++, 1)) + goto err; + } + remaining -= (int)tlen; + } + /* this string is always null terminated */ + oval = Curl_dyn_ptr(&dval); + if(!oval) + goto err; + *alpns = oval; + return CURLE_OK; +err: + Curl_dyn_free(&dval); + return CURLE_BAD_CONTENT_ENCODING; +} + +#ifdef DEBUGBUILD +static CURLcode test_alpn_escapes(void) +{ + /* we will use an example from draft-ietf-dnsop-svcb, figure 10 */ + static unsigned char example[] = { + 0x08, /* length 8 */ + 0x66, 0x5c, 0x6f, 0x6f, 0x2c, 0x62, 0x61, 0x72, /* value "f\\oo,bar" */ + 0x02, /* length 2 */ + 0x68, 0x32 /* value "h2" */ + }; + size_t example_len = sizeof(example); + char *aval = NULL; + static const char *expected = "f\\\\oo\\,bar,h2"; + + if(local_decode_rdata_alpn(example, example_len, &aval) != CURLE_OK) + return CURLE_BAD_CONTENT_ENCODING; + if(strlen(aval) != strlen(expected)) + return CURLE_BAD_CONTENT_ENCODING; + if(memcmp(aval, expected, strlen(aval))) + return CURLE_BAD_CONTENT_ENCODING; + return CURLE_OK; +} +#endif + +static CURLcode Curl_doh_decode_httpsrr(unsigned char *rrval, size_t len, + struct Curl_https_rrinfo **hrr) +{ + size_t remaining = len; + unsigned char *cp = rrval; + uint16_t pcode = 0, plen = 0; + struct Curl_https_rrinfo *lhrr = NULL; + char *dnsname = NULL; + +#ifdef DEBUGBUILD + /* a few tests of escaping, should not be here but ok for now */ + if(test_alpn_escapes() != CURLE_OK) + return CURLE_OUT_OF_MEMORY; +#endif + lhrr = calloc(1, sizeof(struct Curl_https_rrinfo)); + if(!lhrr) + return CURLE_OUT_OF_MEMORY; + lhrr->val = Curl_memdup(rrval, len); + if(!lhrr->val) + goto err; + lhrr->len = len; + if(remaining <= 2) + goto err; + lhrr->priority = (uint16_t)((cp[0] << 8) + cp[1]); + cp += 2; + remaining -= (uint16_t)2; + if(local_decode_rdata_name(&cp, &remaining, &dnsname) != CURLE_OK) + goto err; + lhrr->target = dnsname; + while(remaining >= 4) { + pcode = (uint16_t)((*cp << 8) + (*(cp + 1))); + cp += 2; + plen = (uint16_t)((*cp << 8) + (*(cp + 1))); + cp += 2; + remaining -= 4; + if(pcode == HTTPS_RR_CODE_ALPN) { + if(local_decode_rdata_alpn(cp, plen, &lhrr->alpns) != CURLE_OK) + goto err; + } + if(pcode == HTTPS_RR_CODE_NO_DEF_ALPN) + lhrr->no_def_alpn = TRUE; + else if(pcode == HTTPS_RR_CODE_IPV4) { + if(!plen) + goto err; + lhrr->ipv4hints = Curl_memdup(cp, plen); + if(!lhrr->ipv4hints) + goto err; + lhrr->ipv4hints_len = (size_t)plen; + } + else if(pcode == HTTPS_RR_CODE_ECH) { + if(!plen) + goto err; + lhrr->echconfiglist = Curl_memdup(cp, plen); + if(!lhrr->echconfiglist) + goto err; + lhrr->echconfiglist_len = (size_t)plen; + } + else if(pcode == HTTPS_RR_CODE_IPV6) { + if(!plen) + goto err; + lhrr->ipv6hints = Curl_memdup(cp, plen); + if(!lhrr->ipv6hints) + goto err; + lhrr->ipv6hints_len = (size_t)plen; + } + if(plen > 0 && plen <= remaining) { + cp += plen; + remaining -= plen; + } + } + DEBUGASSERT(!remaining); + *hrr = lhrr; + return CURLE_OK; +err: + if(lhrr) { + Curl_safefree(lhrr->target); + Curl_safefree(lhrr->echconfiglist); + Curl_safefree(lhrr->val); + Curl_safefree(lhrr->alpns); + Curl_safefree(lhrr); + } + return CURLE_OUT_OF_MEMORY; +} + +# ifdef DEBUGBUILD +static void local_print_httpsrr(struct Curl_easy *data, + struct Curl_https_rrinfo *hrr) +{ + DEBUGASSERT(hrr); + infof(data, "HTTPS RR: priority %d, target: %s", + hrr->priority, hrr->target); + if(hrr->alpns) + infof(data, "HTTPS RR: alpns %s", hrr->alpns); + else + infof(data, "HTTPS RR: no alpns"); + if(hrr->no_def_alpn) + infof(data, "HTTPS RR: no_def_alpn set"); + else + infof(data, "HTTPS RR: no_def_alpn not set"); + if(hrr->ipv4hints) { + local_print_buf(data, "HTTPS RR: ipv4hints", + hrr->ipv4hints, hrr->ipv4hints_len); + } + else + infof(data, "HTTPS RR: no ipv4hints"); + if(hrr->echconfiglist) { + local_print_buf(data, "HTTPS RR: ECHConfigList", + hrr->echconfiglist, hrr->echconfiglist_len); + } + else + infof(data, "HTTPS RR: no ECHConfigList"); + if(hrr->ipv6hints) { + local_print_buf(data, "HTTPS RR: ipv6hint", + hrr->ipv6hints, hrr->ipv6hints_len); + } + else + infof(data, "HTTPS RR: no ipv6hints"); + return; } +# endif +#endif CURLcode Curl_doh_is_resolved(struct Curl_easy *data, struct Curl_dns_entry **dnsp) @@ -923,16 +1306,19 @@ CURLcode Curl_doh_is_resolved(struct Curl_easy *data, CURLE_COULDNT_RESOLVE_HOST; } else if(!dohp->pending) { +#ifndef USE_HTTPSRR DOHcode rc[DOH_PROBE_SLOTS] = { DOH_OK, DOH_OK }; +#else + DOHcode rc[DOH_PROBE_SLOTS] = { + DOH_OK, DOH_OK, DOH_OK + }; +#endif struct dohentry de; int slot; /* remove DoH handles from multi handle and close them */ - for(slot = 0; slot < DOH_PROBE_SLOTS; slot++) { - curl_multi_remove_handle(data->multi, dohp->probe[slot].easy); - Curl_close(&dohp->probe[slot].easy); - } + Curl_doh_close(data); /* parse the responses, create the struct and return it! */ de_init(&de); for(slot = 0; slot < DOH_PROBE_SLOTS; slot++) { @@ -960,7 +1346,7 @@ CURLcode Curl_doh_is_resolved(struct Curl_easy *data, if(Curl_trc_ft_is_verbose(data, &Curl_doh_trc)) { - infof(data, "[DoH] Host name: %s", dohp->host); + infof(data, "[DoH] hostname: %s", dohp->host); showdoh(data, &de); } @@ -991,6 +1377,22 @@ CURLcode Curl_doh_is_resolved(struct Curl_easy *data, } /* address processing done */ /* Now process any build-specific attributes retrieved from DNS */ +#ifdef USE_HTTPSRR + if(de.numhttps_rrs > 0 && result == CURLE_OK && *dnsp) { + struct Curl_https_rrinfo *hrr = NULL; + result = Curl_doh_decode_httpsrr(de.https_rrs->val, de.https_rrs->len, + &hrr); + if(result) { + infof(data, "Failed to decode HTTPS RR"); + return result; + } + infof(data, "Some HTTPS RR to process"); +# ifdef DEBUGBUILD + local_print_httpsrr(data, hrr); +# endif + (*dnsp)->hinfo = hrr; + } +#endif /* All done */ de_cleanup(&de); @@ -1003,4 +1405,32 @@ CURLcode Curl_doh_is_resolved(struct Curl_easy *data, return CURLE_OK; } +void Curl_doh_close(struct Curl_easy *data) +{ + struct dohdata *doh = data->req.doh; + if(doh) { + size_t slot; + for(slot = 0; slot < DOH_PROBE_SLOTS; slot++) { + if(!doh->probe[slot].easy) + continue; + /* data->multi might already be reset at this time */ + if(doh->probe[slot].easy->multi) + curl_multi_remove_handle(doh->probe[slot].easy->multi, + doh->probe[slot].easy); + Curl_close(&doh->probe[slot].easy); + } + } +} + +void Curl_doh_cleanup(struct Curl_easy *data) +{ + struct dohdata *doh = data->req.doh; + if(doh) { + Curl_doh_close(data); + curl_slist_free_all(doh->headers); + data->req.doh->headers = NULL; + Curl_safefree(data->req.doh); + } +} + #endif /* CURL_DISABLE_DOH */ diff --git a/lib/doh.h b/lib/doh.h index ffcf7a033..5e86bf44a 100644 --- a/lib/doh.h +++ b/lib/doh.h @@ -26,6 +26,9 @@ #include "urldata.h" #include "curl_addrinfo.h" +#ifdef USE_HTTPSRR +# include +#endif #ifndef CURL_DISABLE_DOH @@ -51,7 +54,8 @@ typedef enum { DNS_TYPE_NS = 2, DNS_TYPE_CNAME = 5, DNS_TYPE_AAAA = 28, - DNS_TYPE_DNAME = 39 /* RFC6672 */ + DNS_TYPE_DNAME = 39, /* RFC6672 */ + DNS_TYPE_HTTPS = 65 } DNStype; /* one of these for each DoH request */ @@ -84,10 +88,9 @@ struct Curl_addrinfo *Curl_doh(struct Curl_easy *data, CURLcode Curl_doh_is_resolved(struct Curl_easy *data, struct Curl_dns_entry **dns); -int Curl_doh_getsock(struct connectdata *conn, curl_socket_t *socks); - #define DOH_MAX_ADDR 24 #define DOH_MAX_CNAME 4 +#define DOH_MAX_HTTPS 4 struct dohaddr { int type; @@ -97,27 +100,62 @@ struct dohaddr { } ip; }; +#ifdef USE_HTTPSRR + +/* + * These are the code points for DNS wire format SvcParams as + * per draft-ietf-dnsop-svcb-https + * Not all are supported now, and even those that are may need + * more work in future to fully support the spec. + */ +#define HTTPS_RR_CODE_ALPN 0x01 +#define HTTPS_RR_CODE_NO_DEF_ALPN 0x02 +#define HTTPS_RR_CODE_PORT 0x03 +#define HTTPS_RR_CODE_IPV4 0x04 +#define HTTPS_RR_CODE_ECH 0x05 +#define HTTPS_RR_CODE_IPV6 0x06 + +/* + * These may need escaping when found within an alpn string + * value. + */ +#define COMMA_CHAR ',' +#define BACKSLASH_CHAR '\\' + +struct dohhttps_rr { + uint16_t len; /* raw encoded length */ + unsigned char *val; /* raw encoded octets */ +}; +#endif + struct dohentry { struct dynbuf cname[DOH_MAX_CNAME]; struct dohaddr addr[DOH_MAX_ADDR]; int numaddr; unsigned int ttl; int numcname; +#ifdef USE_HTTPSRR + struct dohhttps_rr https_rrs[DOH_MAX_HTTPS]; + int numhttps_rrs; +#endif }; - -#ifdef DEBUGBUILD -DOHcode doh_encode(const char *host, - DNStype dnstype, - unsigned char *dnsp, /* buffer */ - size_t len, /* buffer size */ - size_t *olen); /* output length */ -DOHcode doh_decode(const unsigned char *doh, - size_t dohlen, - DNStype dnstype, - struct dohentry *d); -void de_init(struct dohentry *d); -void de_cleanup(struct dohentry *d); +void Curl_doh_close(struct Curl_easy *data); +void Curl_doh_cleanup(struct Curl_easy *data); + +#ifdef UNITTESTS +UNITTEST DOHcode doh_encode(const char *host, + DNStype dnstype, + unsigned char *dnsp, /* buffer */ + size_t len, /* buffer size */ + size_t *olen); /* output length */ +UNITTEST DOHcode doh_decode(const unsigned char *doh, + size_t dohlen, + DNStype dnstype, + struct dohentry *d); + +UNITTEST void de_init(struct dohentry *d); +UNITTEST void de_cleanup(struct dohentry *d); #endif extern struct curl_trc_feat Curl_doh_trc; diff --git a/lib/dynbuf.c b/lib/dynbuf.c index a4c599d10..eab07efbf 100644 --- a/lib/dynbuf.c +++ b/lib/dynbuf.c @@ -51,7 +51,7 @@ void Curl_dyn_init(struct dynbuf *s, size_t toobig) } /* - * free the buffer and re-init the necessary fields. It doesn't touch the + * free the buffer and re-init the necessary fields. It does not touch the * 'init' field and thus this buffer can be reused to add data to again. */ void Curl_dyn_free(struct dynbuf *s) @@ -71,7 +71,7 @@ static CURLcode dyn_nappend(struct dynbuf *s, size_t a = s->allc; size_t fit = len + indx + 1; /* new string + old string + zero byte */ - /* try to detect if there's rubbish in the struct */ + /* try to detect if there is rubbish in the struct */ DEBUGASSERT(s->init == DYNINIT); DEBUGASSERT(s->toobig); DEBUGASSERT(indx < s->toobig); @@ -213,7 +213,7 @@ CURLcode Curl_dyn_vaddf(struct dynbuf *s, const char *fmt, va_list ap) } /* If we failed, we cleanup the whole buffer and return error */ Curl_dyn_free(s); - return CURLE_OK; + return CURLE_OUT_OF_MEMORY; #endif } diff --git a/lib/dynhds.c b/lib/dynhds.c index d7548959b..9153838e3 100644 --- a/lib/dynhds.c +++ b/lib/dynhds.c @@ -275,7 +275,7 @@ 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 +#ifdef UNITTESTS /* used by unit2602.c */ bool Curl_dynhds_contains(struct dynhds *dynhds, diff --git a/lib/dynhds.h b/lib/dynhds.h index 3b536000a..fb162a30d 100644 --- a/lib/dynhds.h +++ b/lib/dynhds.h @@ -95,6 +95,9 @@ 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); +#ifdef UNITTESTS +/* used by unit2602.c */ + /** * Return TRUE iff one or more headers with the given name exist. */ @@ -115,20 +118,6 @@ size_t Curl_dynhds_count_name(struct dynhds *dynhds, */ 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. @@ -146,19 +135,34 @@ size_t Curl_dynhds_cremove(struct dynhds *dynhds, const char *name); CURLcode Curl_dynhds_set(struct dynhds *dynhds, const char *name, size_t namelen, const char *value, size_t valuelen); +#endif 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 + * 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); + +/** + * Add a single header from an 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 + * Add a single header from an 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. */ diff --git a/lib/easy.c b/lib/easy.c index dc4870608..2ba9af0b3 100644 --- a/lib/easy.c +++ b/lib/easy.c @@ -58,7 +58,6 @@ #include "multiif.h" #include "select.h" #include "cfilters.h" -#include "cw-out.h" #include "sendf.h" /* for failf function prototype */ #include "connect.h" /* for Curl_getconnectinfo */ #include "slist.h" @@ -243,7 +242,7 @@ CURLcode curl_global_init_mem(long flags, curl_malloc_callback m, global_init_lock(); if(initialized) { - /* Already initialized, don't do it again, but bump the variable anyway to + /* Already initialized, do not do it again, but bump the variable anyway to work like curl_global_init() and require the same amount of cleanup calls. */ initialized++; @@ -269,7 +268,8 @@ CURLcode curl_global_init_mem(long flags, curl_malloc_callback m, /** * curl_global_cleanup() globally cleanups curl, uses the value of - * "easy_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 does + * not. */ void curl_global_cleanup(void) { @@ -375,7 +375,7 @@ struct Curl_easy *curl_easy_init(void) return data; } -#ifdef CURLDEBUG +#ifdef DEBUGBUILD struct socketmonitor { struct socketmonitor *next; /* the next node in the list or NULL */ @@ -580,7 +580,7 @@ static CURLcode wait_or_timeout(struct Curl_multi *multi, struct events *ev) before = Curl_now(); /* wait for activity or timeout */ - pollrc = Curl_poll(fds, numfds, ev->ms); + pollrc = Curl_poll(fds, (unsigned int)numfds, ev->ms); if(pollrc < 0) return CURLE_UNRECOVERABLE_POLL; @@ -628,7 +628,7 @@ static CURLcode wait_or_timeout(struct Curl_multi *multi, struct events *ev) if(mcode) return CURLE_URL_MALFORMAT; - /* we don't really care about the "msgs_in_queue" value returned in the + /* we do not really care about the "msgs_in_queue" value returned in the second argument */ msg = curl_multi_info_read(multi, &pollrc); if(msg) { @@ -656,8 +656,8 @@ static CURLcode easy_events(struct Curl_multi *multi) return wait_or_timeout(multi, &evs); } -#else /* CURLDEBUG */ -/* when not built with debug, this function doesn't exist */ +#else /* DEBUGBUILD */ +/* when not built with debug, this function does not exist */ #define easy_events(x) CURLE_NOT_BUILT_IN #endif @@ -707,7 +707,7 @@ static CURLcode easy_transfer(struct Curl_multi *multi) * easy handle, destroys the multi handle and returns the easy handle's return * code. * - * REALITY: it can't just create and destroy the multi handle that easily. It + * REALITY: it cannot 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 reused so that the same pools and * caches can be used. @@ -729,6 +729,8 @@ static CURLcode easy_perform(struct Curl_easy *data, bool events) /* clear this as early as possible */ data->set.errorbuffer[0] = 0; + data->state.os_errno = 0; + if(data->multi) { failf(data, "easy handle already used in multi handle"); return CURLE_FAILED_INIT; @@ -762,12 +764,13 @@ static CURLcode easy_perform(struct Curl_easy *data, bool events) /* assign this after curl_multi_add_handle() */ data->multi_easy = multi; - sigpipe_ignore(data, &pipe_st); + sigpipe_init(&pipe_st); + sigpipe_apply(data, &pipe_st); /* run the transfer */ result = events ? easy_events(multi) : easy_transfer(multi); - /* ignoring the return code isn't nice, but atm we can't really handle + /* ignoring the return code is not nice, but atm we cannot really handle a failure here, room for future improvement! */ (void)curl_multi_remove_handle(multi, data); @@ -787,7 +790,7 @@ CURLcode curl_easy_perform(struct Curl_easy *data) return easy_perform(data, FALSE); } -#ifdef CURLDEBUG +#ifdef DEBUGBUILD /* * curl_easy_perform_ev() is the external interface that performs a blocking * transfer using the event-based API internally. @@ -1086,9 +1089,10 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int action) int oldstate; int newstate; bool recursive = FALSE; + bool keep_changed, unpause_read, not_all_paused; if(!GOOD_EASY_HANDLE(data) || !data->conn) - /* crazy input, don't continue */ + /* crazy input, do not continue */ return CURLE_BAD_FUNCTION_ARGUMENT; if(Curl_is_in_callback(data)) @@ -1101,51 +1105,52 @@ CURLcode curl_easy_pause(struct Curl_easy *data, int action) ((action & CURLPAUSE_RECV)?KEEP_RECV_PAUSE:0) | ((action & CURLPAUSE_SEND)?KEEP_SEND_PAUSE:0); - if((newstate & (KEEP_RECV_PAUSE| KEEP_SEND_PAUSE)) == oldstate) { - /* Not changing any pause state, return */ - DEBUGF(infof(data, "pause: no change, early return")); - return CURLE_OK; + keep_changed = ((newstate & (KEEP_RECV_PAUSE| KEEP_SEND_PAUSE)) != oldstate); + not_all_paused = (newstate & (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) != + (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE); + unpause_read = ((k->keepon & ~newstate & KEEP_SEND_PAUSE) && + (data->mstate == MSTATE_PERFORMING || + data->mstate == MSTATE_RATELIMITING)); + /* Unpausing writes is detected on the next run in + * transfer.c:Curl_readwrite(). This is because this may result + * in a transfer error if the application's callbacks fail */ + + /* Set the new keepon state, so it takes effect no matter what error + * may happen afterwards. */ + k->keepon = newstate; + + /* If not completely pausing both directions now, run again in any case. */ + if(not_all_paused) { + Curl_expire(data, 0, EXPIRE_RUN_NOW); + /* reset the too-slow time keeper */ + data->state.keeps_speed.tv_sec = 0; + /* Simulate socket events on next run for unpaused directions */ + if(!(newstate & KEEP_SEND_PAUSE)) + data->state.select_bits |= CURL_CSELECT_OUT; + if(!(newstate & KEEP_RECV_PAUSE)) + data->state.select_bits |= CURL_CSELECT_IN; + /* On changes, tell application to update its timers. */ + if(keep_changed && data->multi) { + if(Curl_update_timer(data->multi)) { + result = CURLE_ABORTED_BY_CALLBACK; + goto out; + } + } } - /* Unpause parts in active mime tree. */ - if((k->keepon & ~newstate & KEEP_SEND_PAUSE) && - (data->mstate == MSTATE_PERFORMING || - data->mstate == MSTATE_RATELIMITING)) { + if(unpause_read) { result = Curl_creader_unpause(data); if(result) - return result; + goto out; } - /* put it back in the keepon */ - k->keepon = newstate; - - if(!(newstate & KEEP_RECV_PAUSE)) { + if(!(k->keepon & KEEP_RECV_PAUSE) && Curl_cwriter_is_paused(data)) { Curl_conn_ev_data_pause(data, FALSE); - result = Curl_cw_out_flush(data); - if(result) - return result; - } - - /* if there's no error and we're not pausing both directions, we want - to have this handle checked soon */ - if((newstate & (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) != - (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) { - Curl_expire(data, 0, EXPIRE_RUN_NOW); /* get this handle going again */ - - /* reset the too-slow time keeper */ - data->state.keeps_speed.tv_sec = 0; - - if(!Curl_cw_out_is_paused(data)) - /* if not pausing again, force a recv/send check of this connection as - the data might've been read off the socket already */ - data->state.select_bits = CURL_CSELECT_IN | CURL_CSELECT_OUT; - if(data->multi) { - if(Curl_update_timer(data->multi)) - return CURLE_ABORTED_BY_CALLBACK; - } + result = Curl_cwriter_unpause(data); } - if(!data->state.done) +out: + if(!result && !data->state.done && keep_changed) /* This transfer may have been moved in or out of the bundle, update the corresponding socket callback, if used */ result = Curl_updatesocket(data); @@ -1305,7 +1310,7 @@ static int conn_upkeep(struct Curl_easy *data, conn->handler->connection_check(data, conn, CONNCHECK_KEEPALIVE); } else { - /* Do the generic action on the FIRSTSOCKE filter chain */ + /* Do the generic action on the FIRSTSOCKET filter chain */ Curl_conn_keep_alive(data, conn, FIRSTSOCKET); } Curl_detach_connection(data); diff --git a/lib/easygetopt.c b/lib/easygetopt.c index a0239a89f..86833bf6b 100644 --- a/lib/easygetopt.c +++ b/lib/easygetopt.c @@ -42,7 +42,7 @@ static struct curl_easyoption *lookup(const char *name, CURLoption id) } else { if((o->id == id) && !(o->flags & CURLOT_FLAG_ALIAS)) - /* don't match alias options */ + /* do not match alias options */ return o; } o++; diff --git a/lib/easyif.h b/lib/easyif.h index 6ce3483c6..d77bb98f9 100644 --- a/lib/easyif.h +++ b/lib/easyif.h @@ -34,7 +34,7 @@ CURLcode Curl_senddata(struct Curl_easy *data, const void *buffer, CURLcode Curl_connect_only_attach(struct Curl_easy *data); #endif -#ifdef CURLDEBUG +#ifdef DEBUGBUILD CURL_EXTERN CURLcode curl_easy_perform_ev(struct Curl_easy *easy); #endif diff --git a/lib/easyoptions.c b/lib/easyoptions.c index 9c4438a10..81091c405 100644 --- a/lib/easyoptions.c +++ b/lib/easyoptions.c @@ -86,6 +86,7 @@ struct curl_easyoption Curl_easyopts[] = { {"DOH_SSL_VERIFYPEER", CURLOPT_DOH_SSL_VERIFYPEER, CURLOT_LONG, 0}, {"DOH_SSL_VERIFYSTATUS", CURLOPT_DOH_SSL_VERIFYSTATUS, CURLOT_LONG, 0}, {"DOH_URL", CURLOPT_DOH_URL, CURLOT_STRING, 0}, + {"ECH", CURLOPT_ECH, CURLOT_STRING, 0}, {"EGDSOCKET", CURLOPT_EGDSOCKET, CURLOT_STRING, 0}, {"ENCODING", CURLOPT_ACCEPT_ENCODING, CURLOT_STRING, CURLOT_FLAG_ALIAS}, {"ERRORBUFFER", CURLOPT_ERRORBUFFER, CURLOT_OBJECT, 0}, @@ -327,6 +328,7 @@ struct curl_easyoption Curl_easyopts[] = { CURLOT_LONG, 0}, {"TCP_FASTOPEN", CURLOPT_TCP_FASTOPEN, CURLOT_LONG, 0}, {"TCP_KEEPALIVE", CURLOPT_TCP_KEEPALIVE, CURLOT_LONG, 0}, + {"TCP_KEEPCNT", CURLOPT_TCP_KEEPCNT, CURLOT_LONG, 0}, {"TCP_KEEPIDLE", CURLOPT_TCP_KEEPIDLE, CURLOT_LONG, 0}, {"TCP_KEEPINTVL", CURLOPT_TCP_KEEPINTVL, CURLOT_LONG, 0}, {"TCP_NODELAY", CURLOPT_TCP_NODELAY, CURLOT_LONG, 0}, @@ -375,6 +377,6 @@ struct curl_easyoption Curl_easyopts[] = { */ int Curl_easyopts_check(void) { - return ((CURLOPT_LASTENTRY%10000) != (324 + 1)); + return ((CURLOPT_LASTENTRY%10000) != (326 + 1)); } #endif diff --git a/lib/escape.c b/lib/escape.c index 5af00c351..1633c2da2 100644 --- a/lib/escape.c +++ b/lib/escape.c @@ -60,7 +60,7 @@ char *curl_easy_escape(struct Curl_easy *data, const char *string, struct dynbuf d; (void)data; - if(inlength < 0) + if(!string || (inlength < 0)) return NULL; Curl_dyn_init(&d, CURL_MAX_INPUT_LENGTH * 3); @@ -70,7 +70,8 @@ char *curl_easy_escape(struct Curl_easy *data, const char *string, return strdup(""); while(length--) { - unsigned char in = *string++; /* treat the characters unsigned */ + /* treat the characters unsigned */ + unsigned char in = (unsigned char)*string++; if(ISUNRESERVED(in)) { /* append this */ @@ -137,7 +138,7 @@ CURLcode Curl_urldecode(const char *string, size_t length, *ostring = ns; while(alloc) { - unsigned char in = *string; + unsigned char in = (unsigned char)*string; if(('%' == in) && (alloc > 2) && ISXDIGIT(string[1]) && ISXDIGIT(string[2])) { /* this is two hexadecimal digits following a '%' */ @@ -157,7 +158,7 @@ CURLcode Curl_urldecode(const char *string, size_t length, return CURLE_URL_MALFORMAT; } - *ns++ = in; + *ns++ = (char)in; } *ns = 0; /* terminate it */ @@ -180,7 +181,7 @@ char *curl_easy_unescape(struct Curl_easy *data, const char *string, { char *str = NULL; (void)data; - if(length >= 0) { + if(string && (length >= 0)) { size_t inputlen = (size_t)length; size_t outputlen; CURLcode res = Curl_urldecode(string, inputlen, &str, &outputlen, @@ -222,8 +223,8 @@ void Curl_hexencode(const unsigned char *src, size_t len, /* input length */ 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]; + *out++ = (unsigned char)hex[(*src & 0xF0)>>4]; + *out++ = (unsigned char)hex[*src & 0x0F]; ++src; olen -= 2; } diff --git a/lib/file.c b/lib/file.c index bee9e92ec..82ff151b6 100644 --- a/lib/file.c +++ b/lib/file.c @@ -50,6 +50,14 @@ #include #endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif + +#ifdef HAVE_DIRENT_H +#include +#endif + #include "strtoofft.h" #include "urldata.h" #include @@ -101,7 +109,7 @@ static CURLcode file_setup_connection(struct Curl_easy *data, */ const struct Curl_handler Curl_handler_file = { - "FILE", /* scheme */ + "file", /* scheme */ file_setup_connection, /* setup_connection */ file_do, /* do_it */ file_done, /* done */ @@ -115,6 +123,7 @@ const struct Curl_handler Curl_handler_file = { ZERO_NULL, /* perform_getsock */ file_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ 0, /* defport */ @@ -138,7 +147,7 @@ static CURLcode file_setup_connection(struct Curl_easy *data, /* * file_connect() gets called from Curl_protocol_connect() to allow us to - * do protocol-specific actions at connect-time. We emulate a + * do protocol-specific actions at connect-time. We emulate a * connect-then-transfer protocol and "connect" to the file here */ static CURLcode file_connect(struct Curl_easy *data, bool *done) @@ -168,18 +177,18 @@ static CURLcode file_connect(struct Curl_easy *data, bool *done) return result; #ifdef DOS_FILESYSTEM - /* If the first character is a slash, and there's + /* If the first character is a slash, and there is something that looks like a drive at the beginning of - the path, skip the slash. If we remove the initial + the path, skip the slash. If we remove the initial slash in all cases, paths without drive letters end up - relative to the current directory which isn't how + relative to the current directory which is not how browsers work. Some browsers accept | instead of : as the drive letter separator, so we do too. On other platforms, we need the slash to indicate an - absolute pathname. On Windows, absolute paths start + absolute pathname. On Windows, absolute paths start with a drive letter. */ actual_path = real_path; @@ -299,7 +308,7 @@ static CURLcode file_upload(struct Curl_easy *data) bool eos = FALSE; /* - * Since FILE: doesn't do the full init, we need to provide some extra + * Since FILE: does not do the full init, we need to provide some extra * assignments here. */ @@ -322,7 +331,7 @@ static CURLcode file_upload(struct Curl_easy *data) fd = open(file->path, mode, data->set.new_file_perms); if(fd < 0) { - failf(data, "Can't open %s for writing", file->path); + failf(data, "cannot open %s for writing", file->path); return CURLE_WRITE_ERROR; } @@ -334,7 +343,7 @@ static CURLcode file_upload(struct Curl_easy *data) if(data->state.resume_from < 0) { if(fstat(fd, &file_stat)) { close(fd); - failf(data, "Can't get the size of %s", file->path); + failf(data, "cannot get the size of %s", file->path); return CURLE_WRITE_ERROR; } data->state.resume_from = (curl_off_t)file_stat.st_size; @@ -404,13 +413,13 @@ static CURLcode file_upload(struct Curl_easy *data) * file_do() is the protocol-specific function for the do-phase, separated * from the connect-phase above. Other protocols merely setup the transfer in * the do-phase, to have it done in the main transfer loop but since some - * platforms we support don't allow select()ing etc on file handles (as + * platforms we support do not allow select()ing etc on file handles (as * opposed to sockets) we instead perform the whole do-operation in this * function. */ static CURLcode file_do(struct Curl_easy *data, bool *done) { - /* This implementation ignores the host name in conformance with + /* This implementation ignores the hostname in conformance with RFC 1738. Only local files (reachable via the standard file system) are supported. This means that files on remotely mounted directories (via NFS, Samba, NT sharing) can be accessed through a file:// URL @@ -446,12 +455,9 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) fstated = TRUE; } - if(fstated && !data->state.range && data->set.timecondition) { - if(!Curl_meets_timecondition(data, data->info.filetime)) { - *done = TRUE; - return CURLE_OK; - } - } + if(fstated && !data->state.range && data->set.timecondition && + !Curl_meets_timecondition(data, data->info.filetime)) + return CURLE_OK; if(fstated) { time_t filetime; @@ -459,17 +465,18 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) const struct tm *tm = &buffer; char header[80]; int headerlen; - char accept_ranges[24]= { "Accept-ranges: bytes\r\n" }; + static const char accept_ranges[]= { "Accept-ranges: bytes\r\n" }; if(expected_size >= 0) { - headerlen = msnprintf(header, sizeof(header), - "Content-Length: %" CURL_FORMAT_CURL_OFF_T "\r\n", - expected_size); + headerlen = + msnprintf(header, sizeof(header), + "Content-Length: %" CURL_FORMAT_CURL_OFF_T "\r\n", + expected_size); result = Curl_client_write(data, CLIENTWRITE_HEADER, header, headerlen); if(result) return result; result = Curl_client_write(data, CLIENTWRITE_HEADER, - accept_ranges, strlen(accept_ranges)); + accept_ranges, sizeof(accept_ranges) - 1); if(result != CURLE_OK) return result; } @@ -480,23 +487,26 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) return result; /* format: "Tue, 15 Nov 1994 12:45:26 GMT" */ - headerlen = msnprintf(header, sizeof(header), - "Last-Modified: %s, %02d %s %4d %02d:%02d:%02d GMT\r\n%s", - Curl_wkday[tm->tm_wday?tm->tm_wday-1:6], - tm->tm_mday, - Curl_month[tm->tm_mon], - tm->tm_year + 1900, - tm->tm_hour, - tm->tm_min, - tm->tm_sec, - data->req.no_body ? "": "\r\n"); + headerlen = + msnprintf(header, sizeof(header), + "Last-Modified: %s, %02d %s %4d %02d:%02d:%02d GMT\r\n", + Curl_wkday[tm->tm_wday?tm->tm_wday-1:6], + tm->tm_mday, + Curl_month[tm->tm_mon], + tm->tm_year + 1900, + tm->tm_hour, + tm->tm_min, + tm->tm_sec); result = Curl_client_write(data, CLIENTWRITE_HEADER, header, headerlen); + if(!result) + /* end of headers */ + result = Curl_client_write(data, CLIENTWRITE_HEADER, "\r\n", 2); if(result) return result; /* set the file size to make it available post transfer */ Curl_pgrsSetDownloadSize(data, expected_size); if(data->req.no_body) - return result; + return CURLE_OK; } /* Check whether file range has been specified */ @@ -508,7 +518,7 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) * of the stream if the filesize could be determined */ if(data->state.resume_from < 0) { if(!fstated) { - failf(data, "Can't get the size of file."); + failf(data, "cannot get the size of file."); return CURLE_READ_ERROR; } data->state.resume_from += (curl_off_t)statbuf.st_size; @@ -516,7 +526,7 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) if(data->state.resume_from > 0) { /* We check explicitly if we have a start offset, because - * expected_size may be -1 if we don't know how large the file is, + * expected_size may be -1 if we do not know how large the file is, * in which case we should not adjust it. */ if(data->state.resume_from <= expected_size) expected_size -= data->state.resume_from; @@ -543,49 +553,85 @@ static CURLcode file_do(struct Curl_easy *data, bool *done) Curl_pgrsSetDownloadSize(data, expected_size); if(data->state.resume_from) { - if(data->state.resume_from != - lseek(fd, data->state.resume_from, SEEK_SET)) + if(!S_ISDIR(statbuf.st_mode)) { + if(data->state.resume_from != + lseek(fd, data->state.resume_from, SEEK_SET)) + return CURLE_BAD_DOWNLOAD_RESUME; + } + else { return CURLE_BAD_DOWNLOAD_RESUME; + } } result = Curl_multi_xfer_buf_borrow(data, &xfer_buf, &xfer_blen); if(result) goto out; - while(!result) { - ssize_t nread; - /* Don't fill a whole buffer if we want less than all data */ - size_t bytestoread; + if(!S_ISDIR(statbuf.st_mode)) { + while(!result) { + ssize_t nread; + /* Do not fill a whole buffer if we want less than all data */ + size_t bytestoread; - if(size_known) { - bytestoread = (expected_size < (curl_off_t)(xfer_blen-1)) ? - curlx_sotouz(expected_size) : (xfer_blen-1); - } - else - bytestoread = xfer_blen-1; + if(size_known) { + bytestoread = (expected_size < (curl_off_t)(xfer_blen-1)) ? + curlx_sotouz(expected_size) : (xfer_blen-1); + } + else + bytestoread = xfer_blen-1; - nread = read(fd, xfer_buf, bytestoread); + nread = read(fd, xfer_buf, bytestoread); - if(nread > 0) - xfer_buf[nread] = 0; + if(nread > 0) + xfer_buf[nread] = 0; - if(nread <= 0 || (size_known && (expected_size == 0))) - break; + if(nread <= 0 || (size_known && (expected_size == 0))) + break; - if(size_known) - expected_size -= nread; + if(size_known) + expected_size -= nread; - result = Curl_client_write(data, CLIENTWRITE_BODY, xfer_buf, nread); - if(result) - goto out; + result = Curl_client_write(data, CLIENTWRITE_BODY, xfer_buf, nread); + if(result) + goto out; - if(Curl_pgrsUpdate(data)) - result = CURLE_ABORTED_BY_CALLBACK; - else - result = Curl_speedcheck(data, Curl_now()); - if(result) + if(Curl_pgrsUpdate(data)) + result = CURLE_ABORTED_BY_CALLBACK; + else + result = Curl_speedcheck(data, Curl_now()); + if(result) + goto out; + } + } + else { +#ifdef HAVE_OPENDIR + DIR *dir = opendir(file->path); + struct dirent *entry; + + if(!dir) { + result = CURLE_READ_ERROR; goto out; + } + else { + while((entry = readdir(dir))) { + if(entry->d_name[0] != '.') { + result = Curl_client_write(data, CLIENTWRITE_BODY, + entry->d_name, strlen(entry->d_name)); + if(result) + break; + result = Curl_client_write(data, CLIENTWRITE_BODY, "\n", 1); + if(result) + break; + } + } + closedir(dir); + } +#else + failf(data, "Directory listing not yet implemented on this platform."); + result = CURLE_READ_ERROR; +#endif } + if(Curl_pgrsUpdate(data)) result = CURLE_ABORTED_BY_CALLBACK; diff --git a/lib/fopen.c b/lib/fopen.c index 0bdf2e11b..7373e0883 100644 --- a/lib/fopen.c +++ b/lib/fopen.c @@ -42,12 +42,12 @@ /* 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, + 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. + The input path to this function is expected to have a filename part. */ #ifdef _WIN32 @@ -88,7 +88,7 @@ static char *dirslash(const char *path) * 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 - * file. if 'tempname' is non-NULL, it needs a rename after the file is + * file. if 'tempname' is non-NULL, it needs a rename after the file is * written. */ CURLcode Curl_fopen(struct Curl_easy *data, const char *filename, @@ -117,7 +117,7 @@ CURLcode Curl_fopen(struct Curl_easy *data, const char *filename, dir = dirslash(filename); if(dir) { - /* The temp file name should not end up too long for the target file + /* The temp filename should not end up too long for the target file system */ tempstore = aprintf("%s%s.tmp", dir, randbuf); free(dir); diff --git a/lib/formdata.c b/lib/formdata.c index d6a1697aa..7a282bdd3 100644 --- a/lib/formdata.c +++ b/lib/formdata.c @@ -216,8 +216,8 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, struct curl_forms *forms = NULL; char *array_value = NULL; /* value read from an array */ - /* This is a state variable, that if TRUE means that we're parsing an - array that we got passed to us. If FALSE we're parsing the input + /* This is a state variable, that if TRUE means that we are parsing an + array that we got passed to us. If FALSE we are parsing the input va_list arguments. */ bool array_state = FALSE; @@ -260,7 +260,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, switch(option) { case CURLFORM_ARRAY: if(array_state) - /* we don't support an array from within an array */ + /* we do not support an array from within an array */ return_value = CURL_FORMADD_ILLEGAL_ARRAY; else { forms = va_arg(params, struct curl_forms *); @@ -327,7 +327,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, array_state?(curl_off_t)(size_t)array_value:va_arg(params, curl_off_t); break; - /* Get contents from a given file name */ + /* Get contents from a given filename */ case CURLFORM_FILECONTENT: if(current_form->flags & (HTTPPOST_PTRCONTENTS|HTTPPOST_READFILE)) return_value = CURL_FORMADD_OPTION_TWICE; @@ -429,7 +429,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, array_state?array_value:va_arg(params, char *); if(userp) { current_form->userp = userp; - current_form->value = userp; /* this isn't strictly true but we + current_form->value = userp; /* this is not strictly true but we derive a value from this later on and we need this non-NULL to be accepted as a fine form part */ @@ -599,7 +599,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost, } if(!(form->flags & HTTPPOST_PTRNAME) && (form == first_form) ) { - /* Note that there's small risk that form->name is NULL here if the + /* Note that there is small risk that form->name is NULL here if the app passed in a bad combo, so we better check for that first. */ if(form->name) { /* copy name (without strdup; possibly not null-terminated) */ @@ -764,7 +764,7 @@ void curl_formfree(struct curl_httppost *form) ) free(form->contents); /* free the contents */ free(form->contenttype); /* free the content type */ - free(form->showfilename); /* free the faked file name */ + free(form->showfilename); /* free the faked filename */ free(form); /* free the struct */ form = next; } while(form); /* continue */ @@ -880,10 +880,10 @@ CURLcode Curl_getformdata(struct Curl_easy *data, if(post->flags & (HTTPPOST_FILENAME | HTTPPOST_READFILE)) { if(!strcmp(file->contents, "-")) { - /* There are a few cases where the code below won't work; in + /* There are a few cases where the code below will not work; in particular, freopen(stdin) by the caller is not guaranteed to result as expected. This feature has been kept for backward - compatibility: use of "-" pseudo file name should be avoided. */ + compatibility: use of "-" pseudo filename should be avoided. */ result = curl_mime_data_cb(part, (curl_off_t) -1, (curl_read_callback) fread, fseeko_wrapper, @@ -915,7 +915,7 @@ CURLcode Curl_getformdata(struct Curl_easy *data, } } - /* Set fake file name. */ + /* Set fake filename. */ if(!result && post->showfilename) if(post->more || (post->flags & (HTTPPOST_FILENAME | HTTPPOST_BUFFER | HTTPPOST_CALLBACK))) diff --git a/lib/formdata.h b/lib/formdata.h index af466249f..2ed96ffcf 100644 --- a/lib/formdata.h +++ b/lib/formdata.h @@ -38,8 +38,8 @@ struct FormInfo { long flags; char *buffer; /* pointer to existing buffer used for file upload */ size_t bufferlength; - char *showfilename; /* The file name to show. If not set, the actual - file name will be used */ + char *showfilename; /* The filename to show. If not set, the actual + filename will be used */ char *userp; /* pointer for the read callback */ struct curl_slist *contentheader; struct FormInfo *more; diff --git a/lib/ftp.c b/lib/ftp.c index 5bbdeb054..ae340c44a 100644 --- a/lib/ftp.c +++ b/lib/ftp.c @@ -95,19 +95,89 @@ #ifdef CURL_DISABLE_VERBOSE_STRINGS #define ftp_pasv_verbose(a,b,c,d) Curl_nop_stmt +#define FTP_CSTATE(c) "" +#define FTP_DSTATE(d) "" +#else /* CURL_DISABLE_VERBOSE_STRINGS */ + /* for tracing purposes */ +static const char * const ftp_state_names[]={ + "STOP", + "WAIT220", + "AUTH", + "USER", + "PASS", + "ACCT", + "PBSZ", + "PROT", + "CCC", + "PWD", + "SYST", + "NAMEFMT", + "QUOTE", + "RETR_PREQUOTE", + "STOR_PREQUOTE", + "POSTQUOTE", + "CWD", + "MKD", + "MDTM", + "TYPE", + "LIST_TYPE", + "RETR_TYPE", + "STOR_TYPE", + "SIZE", + "RETR_SIZE", + "STOR_SIZE", + "REST", + "RETR_REST", + "PORT", + "PRET", + "PASV", + "LIST", + "RETR", + "STOR", + "QUIT" +}; +#define FTP_CSTATE(c) ((c)? ftp_state_names[(c)->proto.ftpc.state] : "???") +#define FTP_DSTATE(d) (((d) && (d)->conn)? \ + ftp_state_names[(d)->conn->proto.ftpc.state] : "???") + +#endif /* !CURL_DISABLE_VERBOSE_STRINGS */ + +/* This is the ONLY way to change FTP state! */ +static void _ftp_state(struct Curl_easy *data, + ftpstate newstate +#ifdef DEBUGBUILD + , int lineno +#endif + ) +{ + struct connectdata *conn = data->conn; + struct ftp_conn *ftpc = &conn->proto.ftpc; + +#if defined(CURL_DISABLE_VERBOSE_STRINGS) +#ifdef DEBUGBUILD + (void)lineno; +#endif +#else /* CURL_DISABLE_VERBOSE_STRINGS */ + if(ftpc->state != newstate) +#ifdef DEBUGBUILD + CURL_TRC_FTP(data, "[%s] -> [%s] (line %d)", FTP_DSTATE(data), + ftp_state_names[newstate], lineno); +#else + CURL_TRC_FTP(data, "[%s] -> [%s]", FTP_DSTATE(data), + ftp_state_names[newstate]); #endif +#endif /* !CURL_DISABLE_VERBOSE_STRINGS */ + + ftpc->state = newstate; +} + /* Local API functions */ #ifndef DEBUGBUILD -static void _ftp_state(struct Curl_easy *data, - ftpstate newstate); #define ftp_state(x,y) _ftp_state(x,y) -#else -static void _ftp_state(struct Curl_easy *data, - ftpstate newstate, - int lineno); +#else /* !DEBUGBUILD */ #define ftp_state(x,y) _ftp_state(x,y,__LINE__) -#endif +#endif /* DEBUGBUILD */ static CURLcode ftp_sendquote(struct Curl_easy *data, struct connectdata *conn, @@ -163,7 +233,7 @@ static CURLcode ftp_dophase_done(struct Curl_easy *data, */ const struct Curl_handler Curl_handler_ftp = { - "FTP", /* scheme */ + "ftp", /* scheme */ ftp_setup_connection, /* setup_connection */ ftp_do, /* do_it */ ftp_done, /* done */ @@ -177,6 +247,7 @@ const struct Curl_handler Curl_handler_ftp = { ZERO_NULL, /* perform_getsock */ ftp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_FTP, /* defport */ @@ -194,7 +265,7 @@ const struct Curl_handler Curl_handler_ftp = { */ const struct Curl_handler Curl_handler_ftps = { - "FTPS", /* scheme */ + "ftps", /* scheme */ ftp_setup_connection, /* setup_connection */ ftp_do, /* do_it */ ftp_done, /* done */ @@ -208,6 +279,7 @@ const struct Curl_handler Curl_handler_ftps = { ZERO_NULL, /* perform_getsock */ ftp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_FTPS, /* defport */ @@ -218,11 +290,11 @@ const struct Curl_handler Curl_handler_ftps = { }; #endif -static void close_secondarysocket(struct Curl_easy *data, - struct connectdata *conn) +static void close_secondarysocket(struct Curl_easy *data) { + CURL_TRC_FTP(data, "[%s] closing DATA connection", FTP_DSTATE(data)); Curl_conn_close(data, SECONDARYSOCKET); - Curl_conn_cf_discard_all(data, conn, SECONDARYSOCKET); + Curl_conn_cf_discard_all(data, data->conn, SECONDARYSOCKET); } /* @@ -360,7 +432,7 @@ static CURLcode AcceptServerConnect(struct Curl_easy *data) struct connectdata *conn = data->conn; curl_socket_t sock = conn->sock[SECONDARYSOCKET]; curl_socket_t s = CURL_SOCKET_BAD; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct Curl_sockaddr_storage add; #else struct sockaddr_in add; @@ -386,8 +458,10 @@ static CURLcode AcceptServerConnect(struct Curl_easy *data) (void)curlx_nonblock(s, TRUE); /* enable non-blocking */ /* Replace any filter on SECONDARY with one listening on this socket */ result = Curl_conn_tcp_accepted_set(data, conn, SECONDARYSOCKET, &s); - if(result) + if(result) { + sclose(s); return result; + } if(data->set.fsockopt) { int error = 0; @@ -400,7 +474,7 @@ static CURLcode AcceptServerConnect(struct Curl_easy *data) Curl_set_in_callback(data, false); if(error) { - close_secondarysocket(data, conn); + close_secondarysocket(data); return CURLE_ABORTED_BY_CALLBACK; } } @@ -562,7 +636,7 @@ static CURLcode InitiateTransfer(struct Curl_easy *data) struct connectdata *conn = data->conn; bool connected; - DEBUGF(infof(data, "ftp InitiateTransfer()")); + CURL_TRC_FTP(data, "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); @@ -574,19 +648,19 @@ static CURLcode InitiateTransfer(struct Curl_easy *data) return result; if(conn->proto.ftpc.state_saved == FTP_STOR) { - /* When we know we're uploading a specified file, we can get the file + /* When we know we are uploading a specified file, we can get the file size prior to the actual upload. */ Curl_pgrsSetUploadSize(data, data->state.infilesize); /* set the SO_SNDBUF for the secondary socket for those who need it */ - Curl_sndbufset(conn->sock[SECONDARYSOCKET]); + Curl_sndbuf_init(conn->sock[SECONDARYSOCKET]); - Curl_xfer_setup(data, -1, -1, FALSE, SECONDARYSOCKET); + Curl_xfer_setup2(data, CURL_XFER_SEND, -1, TRUE); } else { /* FTP download: */ - Curl_xfer_setup(data, SECONDARYSOCKET, - conn->proto.ftpc.retr_size_saved, FALSE, -1); + Curl_xfer_setup2(data, CURL_XFER_RECV, + conn->proto.ftpc.retr_size_saved, TRUE); } conn->proto.ftpc.pp.pending_resp = TRUE; /* expect server response */ @@ -599,7 +673,7 @@ static CURLcode InitiateTransfer(struct Curl_easy *data) * * AllowServerConnect() * - * When we've issue the PORT command, we have told the server to connect to + * When we have issue the PORT command, we have told the server to connect to * us. This function checks whether data connection is established if so it is * accepted. * @@ -645,7 +719,7 @@ static CURLcode AllowServerConnect(struct Curl_easy *data, bool *connected) } out: - DEBUGF(infof(data, "ftp AllowServerConnect() -> %d", result)); + CURL_TRC_FTP(data, "AllowServerConnect() -> %d", result); return result; } @@ -731,7 +805,7 @@ CURLcode Curl_GetFTPResponse(struct Curl_easy *data, { /* * We cannot read just one byte per read() and then go back to select() as - * the OpenSSL read() doesn't grok that properly. + * the OpenSSL read() does not grok that properly. * * Alas, read as much as possible, split up into lines, use the ending * line in a response or continue reading. */ @@ -774,16 +848,16 @@ CURLcode Curl_GetFTPResponse(struct Curl_easy *data, * * A caution here is that the ftp_readresp() function has a cache that may * contain pieces of a response from the previous invoke and we need to - * make sure we don't just wait for input while there is unhandled data in + * make sure we do not just wait for input while there is unhandled data in * that cache. But also, if the cache is there, we call ftp_readresp() and - * the cache wasn't good enough to continue we must not just busy-loop + * the cache was not good enough to continue we must not just busy-loop * around this function. * */ if(Curl_dyn_len(&pp->recvbuf) && (cache_skip < 2)) { /* - * There's a cache left since before. We then skipping the wait for + * There is a cache left since before. We then skipping the wait for * socket action, unless this is the same cache like the previous round * as then the cache was deemed not enough to act on and we then need to * wait for more data anyway. @@ -820,80 +894,13 @@ CURLcode Curl_GetFTPResponse(struct Curl_easy *data, *nreadp += nread; - } /* while there's buffer left and loop is requested */ + } /* while there is buffer left and loop is requested */ pp->pending_resp = FALSE; return result; } -#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS) - /* for debug purposes */ -static const char * const ftp_state_names[]={ - "STOP", - "WAIT220", - "AUTH", - "USER", - "PASS", - "ACCT", - "PBSZ", - "PROT", - "CCC", - "PWD", - "SYST", - "NAMEFMT", - "QUOTE", - "RETR_PREQUOTE", - "STOR_PREQUOTE", - "POSTQUOTE", - "CWD", - "MKD", - "MDTM", - "TYPE", - "LIST_TYPE", - "RETR_TYPE", - "STOR_TYPE", - "SIZE", - "RETR_SIZE", - "STOR_SIZE", - "REST", - "RETR_REST", - "PORT", - "PRET", - "PASV", - "LIST", - "RETR", - "STOR", - "QUIT" -}; -#endif - -/* This is the ONLY way to change FTP state! */ -static void _ftp_state(struct Curl_easy *data, - ftpstate newstate -#ifdef DEBUGBUILD - , int lineno -#endif - ) -{ - struct connectdata *conn = data->conn; - struct ftp_conn *ftpc = &conn->proto.ftpc; - -#if defined(DEBUGBUILD) - -#if defined(CURL_DISABLE_VERBOSE_STRINGS) - (void) lineno; -#else - if(ftpc->state != newstate) - infof(data, "FTP %p (line %d) state change from %s to %s", - (void *)ftpc, lineno, ftp_state_names[ftpc->state], - ftp_state_names[newstate]); -#endif -#endif - - ftpc->state = newstate; -} - static CURLcode ftp_state_user(struct Curl_easy *data, struct connectdata *conn) { @@ -937,10 +944,10 @@ static int ftp_domore_getsock(struct Curl_easy *data, * remote site, or we could wait for that site to connect to us. Or just * handle ordinary commands. */ - DEBUGF(infof(data, "ftp_domore_getsock()")); + CURL_TRC_FTP(data, "[%s] ftp_domore_getsock()", FTP_DSTATE(data)); if(FTP_STOP == ftpc->state) { - /* if stopped and still in this state, then we're also waiting for a + /* if stopped and still in this state, then we are also waiting for a connect on the secondary connection */ DEBUGASSERT(conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD || (conn->cfilter[SECONDARYSOCKET] && @@ -1027,7 +1034,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, char hbuf[NI_MAXHOST]; struct sockaddr *sa = (struct sockaddr *)&ss; struct sockaddr_in * const sa4 = (void *)sa; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct sockaddr_in6 * const sa6 = (void *)sa; #endif static const char mode[][5] = { "EPRT", "PORT" }; @@ -1054,7 +1061,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, (strlen(data->set.str[STRING_FTPPORT]) > 1)) { char *ip_end = NULL; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(*string_ftpport == '[') { /* [ipv6]:port(-range) */ char *ip_start = string_ftpport + 1; @@ -1076,7 +1083,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, if(ip_end) { /* either ipv6 or (ipv4|domain|interface):port(-range) */ addrlen = ip_end - string_ftpport; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(Curl_inet_pton(AF_INET6, string_ftpport, &sa6->sin6_addr) == 1) { /* ipv6 */ port_min = port_max = 0; @@ -1122,19 +1129,19 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, /* attempt to get the address of the given interface name */ switch(Curl_if2ip(conn->remote_addr->family, -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 Curl_ipv6_scope(&conn->remote_addr->sa_addr), conn->scope_id, #endif ipstr, hbuf, sizeof(hbuf))) { case IF2IP_NOT_FOUND: - /* not an interface, use the given string as host name instead */ + /* not an interface, use the given string as hostname instead */ host = ipstr; break; case IF2IP_AF_NOT_SUPPORTED: goto out; case IF2IP_FOUND: - host = hbuf; /* use the hbuf for host name */ + host = hbuf; /* use the hbuf for hostname */ break; } } @@ -1145,7 +1152,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, if(!host) { const char *r; - /* not an interface and not a host name, get default by extracting + /* not an interface and not a hostname, get default by extracting the IP from the control connection */ sslen = sizeof(ss); if(getsockname(conn->sock[FIRSTSOCKET], sa, &sslen)) { @@ -1154,7 +1161,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, goto out; } switch(sa->sa_family) { -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case AF_INET6: r = Curl_inet_ntop(sa->sa_family, &sa6->sin6_addr, hbuf, sizeof(hbuf)); break; @@ -1166,7 +1173,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, if(!r) { goto out; } - host = hbuf; /* use this host name */ + host = hbuf; /* use this hostname */ possibly_non_local = FALSE; /* we know it is local now */ } @@ -1204,7 +1211,8 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, Curl_strerror(error, buffer, sizeof(buffer))); goto out; } - DEBUGF(infof(data, "ftp_state_use_port(), opened socket")); + CURL_TRC_FTP(data, "[%s] ftp_state_use_port(), opened socket", + FTP_DSTATE(data)); /* step 3, bind to a suitable local address */ @@ -1214,7 +1222,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, for(port = port_min; port <= port_max;) { if(sa->sa_family == AF_INET) sa4->sin_port = htons(port); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else sa6->sin6_port = htons(port); #endif @@ -1223,7 +1231,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, /* It failed. */ error = SOCKERRNO; if(possibly_non_local && (error == EADDRNOTAVAIL)) { - /* The requested bind address is not local. Use the address used for + /* The requested bind address is not local. Use the address used for * the control connection instead and restart the port loop */ infof(data, "bind(port=%hu) on non-local address failed: %s", port, @@ -1236,7 +1244,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, goto out; } port = port_min; - possibly_non_local = FALSE; /* don't try this again */ + possibly_non_local = FALSE; /* do not try this again */ continue; } if(error != EADDRINUSE && error != EACCES) { @@ -1265,7 +1273,8 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, Curl_strerror(SOCKERRNO, buffer, sizeof(buffer))); goto out; } - DEBUGF(infof(data, "ftp_state_use_port(), socket bound to port %d", port)); + CURL_TRC_FTP(data, "[%s] ftp_state_use_port(), socket bound to port %d", + FTP_DSTATE(data), port); /* step 4, listen on the socket */ @@ -1274,7 +1283,8 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, Curl_strerror(SOCKERRNO, buffer, sizeof(buffer))); goto out; } - DEBUGF(infof(data, "ftp_state_use_port(), listening on %d", port)); + CURL_TRC_FTP(data, "[%s] ftp_state_use_port(), listening on %d", + FTP_DSTATE(data), port); /* step 5, send the proper FTP command */ @@ -1282,7 +1292,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, below */ Curl_printable_address(ai, myhost, sizeof(myhost)); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(!conn->bits.ftp_use_eprt && conn->bits.ipv6) /* EPRT is disabled but we are connected to a IPv6 host, so we ignore the request and enable EPRT again! */ @@ -1309,7 +1319,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, case AF_INET: port = ntohs(sa4->sin_port); break; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case AF_INET6: port = ntohs(sa6->sin6_port); break; @@ -1344,7 +1354,7 @@ static CURLcode ftp_state_use_port(struct Curl_easy *data, char *dest = target; /* translate x.x.x.x to x,x,x,x */ - while(source && *source) { + while(*source) { if(*source == '.') *dest = ','; else @@ -1433,7 +1443,7 @@ static CURLcode ftp_state_prepare_transfer(struct Curl_easy *data) struct connectdata *conn = data->conn; if(ftp->transfer != PPTRANSFER_BODY) { - /* doesn't transfer any data */ + /* does not transfer any data */ /* still possibly do PRE QUOTE jobs */ ftp_state(data, FTP_RETR_PREQUOTE); @@ -1501,7 +1511,7 @@ static CURLcode ftp_state_size(struct Curl_easy *data, if((ftp->transfer == PPTRANSFER_INFO) && ftpc->file) { /* if a "head"-like request is being made (on a file) */ - /* we know ftpc->file is a valid pointer to a file name */ + /* we know ftpc->file is a valid pointer to a filename */ result = Curl_pp_sendf(data, &ftpc->pp, "SIZE %s", ftpc->file); if(!result) ftp_state(data, FTP_SIZE); @@ -1579,13 +1589,13 @@ static CURLcode ftp_state_list(struct Curl_easy *data) static CURLcode ftp_state_retr_prequote(struct Curl_easy *data) { - /* We've sent the TYPE, now we must send the list of prequote strings */ + /* We have sent the TYPE, now we must send the list of prequote strings */ return ftp_state_quote(data, TRUE, FTP_RETR_PREQUOTE); } static CURLcode ftp_state_stor_prequote(struct Curl_easy *data) { - /* We've sent the TYPE, now we must send the list of prequote strings */ + /* We have sent the TYPE, now we must send the list of prequote strings */ return ftp_state_quote(data, TRUE, FTP_STOR_PREQUOTE); } @@ -1597,7 +1607,7 @@ static CURLcode ftp_state_type(struct Curl_easy *data) struct ftp_conn *ftpc = &conn->proto.ftpc; /* 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 + information. Which in FTP cannot be much more than the file size and date. */ if(data->req.no_body && ftpc->file && ftp_need_type(conn, data->state.prefer_ascii)) { @@ -1657,13 +1667,13 @@ static CURLcode ftp_state_ul_setup(struct Curl_easy *data, if((data->state.resume_from && !sizechecked) || ((data->state.resume_from > 0) && sizechecked)) { - /* we're about to continue the uploading of a file */ + /* we are about to continue the uploading of a file */ /* 1. get already existing file's size. We use the SIZE command for this which may not exist in the server! The SIZE command is not in RFC959. */ /* 2. This used to set REST. But since we can do append, we - don't another ftp command. We just skip the source file + do not another ftp command. We just skip the source file offset and then we APPEND the rest on the file instead */ /* 3. pass file-size number of bytes in the source file */ @@ -1696,7 +1706,7 @@ static CURLcode ftp_state_ul_setup(struct Curl_easy *data, failf(data, "Could not seek stream"); return CURLE_FTP_COULDNT_USE_REST; } - /* seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */ + /* seekerr == CURL_SEEKFUNC_CANTSEEK (cannot seek to offset) */ do { char scratch[4*1024]; size_t readthisamountnow = @@ -1725,17 +1735,17 @@ static CURLcode ftp_state_ul_setup(struct Curl_easy *data, infof(data, "File already completely uploaded"); /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); - /* Set ->transfer so that we won't get any error in - * ftp_done() because we didn't transfer anything! */ + /* Set ->transfer so that we will not get any error in + * ftp_done() because we did not transfer anything! */ ftp->transfer = PPTRANSFER_NONE; ftp_state(data, FTP_STOP); return CURLE_OK; } } - /* we've passed, proceed as normal */ + /* we have passed, proceed as normal */ } /* resume_from */ result = Curl_pp_sendf(data, &ftpc->pp, append?"APPE %s":"STOR %s", @@ -1824,16 +1834,16 @@ static CURLcode ftp_state_quote(struct Curl_easy *data, } else { if(data->set.ignorecl || data->state.prefer_ascii) { - /* 'ignorecl' is used to support download of growing files. It + /* 'ignorecl' is used to support download of growing files. It prevents the state machine from requesting the file size from - the server. With an unknown file size the download continues + the server. With an unknown file size the download continues until the server terminates it, otherwise the client stops if - the received byte count exceeds the reported file size. Set + the received byte count exceeds the reported file size. Set option CURLOPT_IGNORE_CONTENT_LENGTH to 1 to enable this behavior. In addition: asking for the size for 'TYPE A' transfers is not - constructive since servers don't report the converted size. So + constructive since servers do not report the converted size. So skip it. */ result = Curl_pp_sendf(data, &ftpc->pp, "RETR %s", ftpc->file); @@ -1871,7 +1881,7 @@ static CURLcode ftp_epsv_disable(struct Curl_easy *data, && !(conn->bits.tunnel_proxy || conn->bits.socksproxy) #endif ) { - /* We can't disable EPSV when doing IPv6, so this is instead a fail */ + /* We cannot disable EPSV when doing IPv6, so this is instead a fail */ failf(data, "Failed EPSV attempt, exiting"); return CURLE_WEIRD_SERVER_REPLY; } @@ -1896,7 +1906,7 @@ static CURLcode ftp_epsv_disable(struct Curl_easy *data, static char *control_address(struct connectdata *conn) { /* Returns the control connection IP address. - If a proxy tunnel is used, returns the original host name instead, because + If a proxy tunnel is used, returns the original hostname instead, because the effective control connection address is the proxy address, not the ftp host. */ #ifndef CURL_DISABLE_PROXY @@ -2035,7 +2045,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data, if(conn->bits.proxy) { /* * This connection uses a proxy and we need to connect to the proxy again - * here. We don't want to rely on a former host lookup that might've + * here. We do not want to rely on a former host lookup that might've * expired now, instead we remake the lookup here and now! */ const char * const host_name = conn->bits.socksproxy ? @@ -2050,7 +2060,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data, connectport = (unsigned short)conn->primary.remote_port; if(!addr) { - failf(data, "Can't resolve proxy host %s:%hu", host_name, connectport); + failf(data, "cannot resolve proxy host %s:%hu", host_name, connectport); return CURLE_COULDNT_RESOLVE_PROXY; } } @@ -2077,7 +2087,8 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data, connectport = ftpc->newport; /* we connect to the remote port */ if(!addr) { - failf(data, "Can't resolve new host %s:%hu", ftpc->newhost, connectport); + failf(data, "cannot resolve new host %s:%hu", + ftpc->newhost, connectport); return CURLE_FTP_CANT_GET_HOST; } } @@ -2087,7 +2098,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data, CURL_CF_SSL_ENABLE : CURL_CF_SSL_DISABLE); if(result) { - Curl_resolv_unlock(data, addr); /* we're done using this address */ + Curl_resolv_unlock(data, addr); /* we are done using this address */ if(ftpc->count1 == 0 && ftpcode == 229) return ftp_epsv_disable(data, conn); @@ -2105,7 +2116,7 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data, /* this just dumps information about this second connection */ ftp_pasv_verbose(data, addr->addr, ftpc->newhost, connectport); - Curl_resolv_unlock(data, addr); /* we're done using this address */ + Curl_resolv_unlock(data, addr); /* we are done using this address */ Curl_safefree(conn->secondaryhostname); conn->secondary_port = ftpc->newport; @@ -2193,7 +2204,7 @@ static CURLcode client_write_header(struct Curl_easy *data, * 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 + * as an FTP transfer might involve an HTTP proxy connection and * headers from CONNECT should not automatically be part of the * output. */ CURLcode result; @@ -2349,7 +2360,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()")); + CURL_TRC_FTP(data, "[%s] ftp_state_retr()", FTP_DSTATE(data)); if(data->set.max_filesize && (filesize > data->set.max_filesize)) { failf(data, "Maximum file size exceeded"); return CURLE_FILESIZE_EXCEEDED; @@ -2360,17 +2371,17 @@ static CURLcode ftp_state_retr(struct Curl_easy *data, /* We always (attempt to) get the size of downloads, so it is done before this even when not doing resumes. */ if(filesize == -1) { - infof(data, "ftp server doesn't support SIZE"); - /* We couldn't get the size and therefore we can't know if there really + infof(data, "ftp server does not support SIZE"); + /* We could not get the size and therefore we cannot know if there really is a part of the file left to get, although the server will just - close the connection when we start the connection so it won't cause + close the connection when we start the connection so it will not cause us any harm, just not make us exit as nicely. */ } else { /* We got a file size report, so we check that there actually is a part of the file left to get, or else we go home. */ if(data->state.resume_from< 0) { - /* We're supposed to download the last abs(from) bytes */ + /* We are supposed to download the last abs(from) bytes */ if(filesize < -data->state.resume_from) { failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")", @@ -2396,11 +2407,11 @@ static CURLcode ftp_state_retr(struct Curl_easy *data, if(ftp->downloadsize == 0) { /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); infof(data, "File already completely downloaded"); - /* Set ->transfer so that we won't get any error in ftp_done() - * because we didn't transfer the any file */ + /* Set ->transfer so that we will not get any error in ftp_done() + * because we did not transfer the any file */ ftp->transfer = PPTRANSFER_NONE; ftp_state(data, FTP_STOP); return CURLE_OK; @@ -2608,7 +2619,7 @@ static CURLcode ftp_state_get_resp(struct Curl_easy *data, !data->set.ignorecl && (ftp->downloadsize < 1)) { /* - * It seems directory listings either don't show the size or very + * It seems directory listings either do not show the size or very * often uses size 0 anyway. ASCII transfers may very well turn out * that the transferred amount of data is not the same as this line * tells, why using this number in those cases only confuses us. @@ -2679,7 +2690,7 @@ static CURLcode ftp_state_get_resp(struct Curl_easy *data, else { if((instate == FTP_LIST) && (ftpcode == 450)) { /* simply no matching files in the dir listing */ - ftp->transfer = PPTRANSFER_NONE; /* don't download anything */ + ftp->transfer = PPTRANSFER_NONE; /* do not download anything */ ftp_state(data, FTP_STOP); /* this phase is over */ } else { @@ -2766,7 +2777,7 @@ static CURLcode ftp_state_user_resp(struct Curl_easy *data, if(data->set.str[STRING_FTP_ALTERNATIVE_TO_USER] && !ftpc->ftp_trying_alternative) { - /* Ok, USER failed. Let's try the supplied command. */ + /* Ok, USER failed. Let's try the supplied command. */ result = Curl_pp_sendf(data, &ftpc->pp, "%s", data->set.str[STRING_FTP_ALTERNATIVE_TO_USER]); @@ -2852,7 +2863,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data, #endif if(data->set.use_ssl && !conn->bits.ftp_use_control_ssl) { - /* We don't have a SSL/TLS control connection yet, but FTPS is + /* We do not have a SSL/TLS control connection yet, but FTPS is requested. Try a FTPS connection now */ ftpc->count3 = 0; @@ -2869,7 +2880,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data, default: failf(data, "unsupported parameter to CURLOPT_FTPSSLAUTH: %d", (int)data->set.ftpsslauth); - return CURLE_UNKNOWN_OPTION; /* we don't know what to do */ + return CURLE_UNKNOWN_OPTION; /* we do not know what to do */ } result = Curl_pp_sendf(data, &ftpc->pp, "AUTH %s", ftpauth[ftpc->count1]); @@ -2969,7 +2980,13 @@ 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_cfilter_remove(data, FIRSTSOCKET); + /* This has only been tested on the proftpd server, and the mod_tls + * code sends a close notify alert without waiting for a close notify + * alert in response. Thus we wait for a close notify alert from the + * server, but we do not send one. Let's hope other servers do + * the same... */ + result = Curl_ssl_cfilter_remove(data, FIRSTSOCKET, + (data->set.ftp_ccc == CURLFTPSSL_CCC_ACTIVE)); if(result) failf(data, "Failed to clear the command channel (CCC)"); @@ -3058,13 +3075,13 @@ static CURLcode ftp_statemachine(struct Curl_easy *data, data->state.most_recent_ftp_entrypath = ftpc->entrypath; } else { - /* couldn't get the path */ + /* could not get the path */ Curl_dyn_free(&out); infof(data, "Failed to figure out path"); } } ftp_state(data, FTP_STOP); /* we are done with the CONNECT phase! */ - DEBUGF(infof(data, "protocol connect phase DONE")); + CURL_TRC_FTP(data, "[%s] protocol connect phase DONE", FTP_DSTATE(data)); break; case FTP_SYST: @@ -3109,7 +3126,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data, } ftp_state(data, FTP_STOP); /* we are done with the CONNECT phase! */ - DEBUGF(infof(data, "protocol connect phase DONE")); + CURL_TRC_FTP(data, "[%s] protocol connect phase DONE", FTP_DSTATE(data)); break; case FTP_NAMEFMT: @@ -3120,7 +3137,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data, } ftp_state(data, FTP_STOP); /* we are done with the CONNECT phase! */ - DEBUGF(infof(data, "protocol connect phase DONE")); + CURL_TRC_FTP(data, "[%s] protocol connect phase DONE", FTP_DSTATE(data)); break; case FTP_QUOTE: @@ -3157,7 +3174,7 @@ static CURLcode ftp_statemachine(struct Curl_easy *data, else { /* return failure */ failf(data, "Server denied you to change to the given directory"); - ftpc->cwdfail = TRUE; /* don't remember this path as we failed + ftpc->cwdfail = TRUE; /* do not remember this path as we failed to enter it */ result = CURLE_REMOTE_ACCESS_DENIED; } @@ -3362,7 +3379,7 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status, case CURLE_REMOTE_FILE_NOT_FOUND: case CURLE_WRITE_ERROR: /* the connection stays alive fine even though this happened */ - case CURLE_OK: /* doesn't affect the control connection's status */ + case CURLE_OK: /* does not affect the control connection's status */ if(!premature) break; @@ -3428,7 +3445,7 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status, /* free the dir tree and file parts */ freedirs(ftpc); - /* shut down the socket to inform the server we're done */ + /* shut down the socket to inform the server we are done */ #ifdef _WIN32_WCE shutdown(conn->sock[SECONDARYSOCKET], 2); /* SD_BOTH */ @@ -3446,7 +3463,7 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status, } } - close_secondarysocket(data, conn); + close_secondarysocket(data); } if(!result && (ftp->transfer == PPTRANSFER_BODY) && ftpc->ctl_valid && @@ -3522,9 +3539,9 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status, if((-1 != data->req.size) && (data->req.size != data->req.bytecount) && #ifdef CURL_DO_LINEEND_CONV - /* Most FTP servers don't adjust their file SIZE response for CRLFs, so - * we'll check to see if the discrepancy can be explained by the number - * of CRLFs we've changed to LFs. + /* Most FTP servers do not adjust their file SIZE response for CRLFs, + * so we will check to see if the discrepancy can be explained by the + * number of CRLFs we have changed to LFs. */ ((data->req.size + data->state.crlf_conversions) != data->req.bytecount) && @@ -3549,6 +3566,7 @@ static CURLcode ftp_done(struct Curl_easy *data, CURLcode status, /* Send any post-transfer QUOTE strings? */ if(!status && !result && !premature && data->set.postquote) result = ftp_sendquote(data, conn, data->set.postquote); + CURL_TRC_FTP(data, "[%s] done, result=%d", FTP_DSTATE(data), result); Curl_safefree(ftp->pathalloc); return result; } @@ -3658,7 +3676,7 @@ static CURLcode ftp_nb_type(struct Curl_easy *data, * ftp_pasv_verbose() * * This function only outputs some informationals about this second connection - * when we've issued a PASV command before and thus we have connected to a + * when we have issued a PASV command before and thus we have connected to a * possibly new IP address. * */ @@ -3699,7 +3717,7 @@ 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 to have + /* if the second connection is not 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. @@ -3727,20 +3745,20 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep) *completep = (int)complete; - /* if we got an error or if we don't wait for a data connection return + /* if we got an error or if we do not wait for a data connection return immediately */ if(result || !ftpc->wait_data_conn) return result; /* 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 */ + data connection and therefore we are not actually complete */ *completep = 0; } if(ftp->transfer <= PPTRANSFER_INFO) { - /* 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 */ + /* a transfer is about to take place, or if not a filename was given so we + will do a SIZE on it later and then we need the right TYPE first */ if(ftpc->wait_data_conn) { bool serv_conned; @@ -3779,7 +3797,7 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep) result = Curl_range(data); if(result == CURLE_OK && data->req.maxdownload >= 0) { - /* Don't check for successful transfer */ + /* Do not check for successful transfer */ ftpc->dont_check = TRUE; } @@ -3812,12 +3830,13 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep) } /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); if(!ftpc->wait_data_conn) { /* no waiting for the data connection so this is now complete */ *completep = 1; - DEBUGF(infof(data, "DO-MORE phase ends with %d", (int)result)); + CURL_TRC_FTP(data, "[%s] DO-MORE phase ends with %d", FTP_DSTATE(data), + (int)result); } return result; @@ -3841,7 +3860,7 @@ CURLcode ftp_perform(struct Curl_easy *data, /* this is FTP and no proxy */ CURLcode result = CURLE_OK; - DEBUGF(infof(data, "DO phase starts")); + CURL_TRC_FTP(data, "[%s] DO phase starts", FTP_DSTATE(data)); if(data->req.no_body) { /* requested no body means no transfer... */ @@ -3861,10 +3880,15 @@ CURLcode ftp_perform(struct Curl_easy *data, *connected = Curl_conn_is_connected(data->conn, SECONDARYSOCKET); - infof(data, "ftp_perform ends with SECONDARY: %d", *connected); + if(*connected) + infof(data, "[FTP] [%s] perform, DATA connection established", + FTP_DSTATE(data)); + else + CURL_TRC_FTP(data, "[%s] perform, awaiting DATA connect", + FTP_DSTATE(data)); if(*dophase_done) - DEBUGF(infof(data, "DO phase is complete1")); + CURL_TRC_FTP(data, "[%s] DO phase is complete1", FTP_DSTATE(data)); return result; } @@ -3937,7 +3961,7 @@ static CURLcode init_wc_data(struct Curl_easy *data) if(data->set.ftp_filemethod == FTPFILE_NOCWD) data->set.ftp_filemethod = FTPFILE_MULTICWD; - /* try to parse ftp url */ + /* try to parse ftp URL */ result = ftp_parse_url_path(data); if(result) { goto fail; @@ -4055,7 +4079,7 @@ static CURLcode wc_statemach(struct Curl_easy *data) if(result) return result; - /* we don't need the Curl_fileinfo of first file anymore */ + /* we do not need the Curl_fileinfo of first file anymore */ Curl_llist_remove(&wildcard->filelist, wildcard->filelist.head, NULL); if(wildcard->filelist.size == 0) { /* remains only one file to down. */ @@ -4210,7 +4234,7 @@ static CURLcode ftp_disconnect(struct Curl_easy *data, bad in any way, sending quit and waiting around here will make the disconnect wait in vain and cause more problems than we need to. - ftp_quit() will check the state of ftp->ctl_valid. If it's ok it + ftp_quit() will check the state of ftp->ctl_valid. If it is ok it will try to send the QUIT command, otherwise it will just return. */ if(dead_connection) @@ -4305,10 +4329,10 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data) } ftpc->dirdepth = 1; /* we consider it to be a single dir */ - fileName = slashPos + 1; /* rest is file name */ + fileName = slashPos + 1; /* rest is filename */ } else - fileName = rawPath; /* file name only (or empty) */ + fileName = rawPath; /* filename only (or empty) */ break; default: /* allow pretty much anything */ @@ -4339,7 +4363,7 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data) ++compLen; /* we skip empty path components, like "x//y" since the FTP command - CWD requires a parameter and a non-existent parameter a) doesn't + CWD requires a parameter and a non-existent parameter a) does not work on many servers and b) has no effect on the others. */ if(compLen > 0) { char *comp = Curl_memdup0(curPos, compLen); @@ -4353,7 +4377,7 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data) } } DEBUGASSERT((size_t)ftpc->dirdepth <= dirAlloc); - fileName = curPos; /* the rest is the file name (or empty) */ + fileName = curPos; /* the rest is the filename (or empty) */ } break; } /* switch */ @@ -4365,8 +4389,8 @@ CURLcode ftp_parse_url_path(struct Curl_easy *data) we make it a NULL pointer */ 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"); + /* We need a filename when uploading. Return error! */ + failf(data, "Uploading to a URL without a filename"); free(rawPath); return CURLE_URL_MALFORMAT; } @@ -4407,16 +4431,16 @@ static CURLcode ftp_dophase_done(struct Curl_easy *data, bool connected) CURLcode result = ftp_do_more(data, &completed); if(result) { - close_secondarysocket(data, conn); + close_secondarysocket(data); return result; } } if(ftp->transfer != PPTRANSFER_BODY) /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); else if(!connected) - /* since we didn't connect now, we want do_more to get called */ + /* since we did not connect now, we want do_more to get called */ conn->bits.do_more = TRUE; ftpc->ctl_valid = TRUE; /* seems good */ @@ -4431,11 +4455,11 @@ static CURLcode ftp_doing(struct Curl_easy *data, CURLcode result = ftp_multi_statemach(data, dophase_done); if(result) - DEBUGF(infof(data, "DO phase failed")); + CURL_TRC_FTP(data, "[%s] DO phase failed", FTP_DSTATE(data)); else if(*dophase_done) { result = ftp_dophase_done(data, FALSE /* not connected */); - DEBUGF(infof(data, "DO phase is complete2")); + CURL_TRC_FTP(data, "[%s] DO phase is complete2", FTP_DSTATE(data)); } return result; } @@ -4521,10 +4545,10 @@ static CURLcode ftp_setup_connection(struct Curl_easy *data, } data->req.p.ftp = ftp; - ftp->path = &data->state.up.path[1]; /* don't include the initial slash */ + ftp->path = &data->state.up.path[1]; /* do not include the initial slash */ /* FTP URLs support an extension like ";type=" that - * we'll try to get now! */ + * we will try to get now! */ type = strstr(ftp->path, ";type="); if(!type) @@ -4559,6 +4583,7 @@ static CURLcode ftp_setup_connection(struct Curl_easy *data, ftpc->use_ssl = data->set.use_ssl; ftpc->ccc = data->set.ftp_ccc; + CURL_TRC_FTP(data, "[%s] setup connection -> %d", FTP_CSTATE(conn), result); return result; } diff --git a/lib/ftp.h b/lib/ftp.h index 977fc883b..3d0af0158 100644 --- a/lib/ftp.h +++ b/lib/ftp.h @@ -61,7 +61,7 @@ enum { FTP_STOR_PREQUOTE, FTP_POSTQUOTE, FTP_CWD, /* change dir */ - FTP_MKD, /* if the dir didn't exist */ + FTP_MKD, /* if the dir did not exist */ FTP_MDTM, /* to figure out the datestamp */ FTP_TYPE, /* to set type when doing a head-like request */ FTP_LIST_TYPE, /* set type when about to do a dir list */ @@ -123,7 +123,7 @@ struct ftp_conn { char *account; char *alternative_to_user; char *entrypath; /* the PWD reply when we logged on */ - char *file; /* url-decoded file name (or path) */ + char *file; /* url-decoded filename (or path) */ char **dirs; /* realloc()ed array for path components */ char *newhost; char *prevpath; /* url-decoded conn->path from the previous transfer */ @@ -139,7 +139,7 @@ struct ftp_conn { 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 + /* newhost is the (allocated) IP addr or hostname to connect the data connection to */ unsigned short newport; ftpstate state; /* always use ftp.c:state() to change state! */ diff --git a/lib/ftplistparser.c b/lib/ftplistparser.c index 82f1ea00d..448f3a43a 100644 --- a/lib/ftplistparser.c +++ b/lib/ftplistparser.c @@ -349,7 +349,7 @@ static CURLcode ftp_pl_insert_finfo(struct Curl_easy *data, Curl_set_in_callback(data, false); if(add) { - Curl_llist_insert_next(llist, llist->tail, finfo, &infop->list); + Curl_llist_append(llist, finfo, &infop->list); } else { Curl_fileinfo_cleanup(infop); diff --git a/lib/getenv.c b/lib/getenv.c index 48ee97228..49a2e50fa 100644 --- a/lib/getenv.c +++ b/lib/getenv.c @@ -37,7 +37,7 @@ static char *GetEnv(const char *variable) return NULL; #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 */ + variable since some changes are not always visible to the latter. #4774 */ char *buf = NULL; char *tmp; DWORD bufsize; @@ -54,8 +54,8 @@ static char *GetEnv(const char *variable) buf = tmp; bufsize = rc; - /* It's possible for rc to be 0 if the variable was found but empty. - Since getenv doesn't make that distinction we ignore it as well. */ + /* it is possible for rc to be 0 if the variable was found but empty. + Since getenv does not make that distinction we ignore it as well. */ rc = GetEnvironmentVariableA(variable, buf, bufsize); if(!rc || rc == bufsize || rc > max) { free(buf); diff --git a/lib/getinfo.c b/lib/getinfo.c index dd43643d8..9ca02889c 100644 --- a/lib/getinfo.c +++ b/lib/getinfo.c @@ -161,7 +161,11 @@ static CURLcode getinfo_char(struct Curl_easy *data, CURLINFO info, *param_charp = data->info.primary.local_ip; break; case CURLINFO_RTSP_SESSION_ID: +#ifndef CURL_DISABLE_RTSP *param_charp = data->set.str[STRING_RTSP_SESSION_ID]; +#else + *param_charp = NULL; +#endif break; case CURLINFO_SCHEME: *param_charp = data->info.conn_scheme; @@ -200,7 +204,7 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info, #ifdef DEBUGBUILD char *timestr = getenv("CURL_TIME"); if(timestr) { - unsigned long val = strtol(timestr, NULL, 10); + unsigned long val = strtoul(timestr, NULL, 10); switch(info) { case CURLINFO_LOCAL_PORT: *param_longp = (long)val; @@ -212,7 +216,7 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info, /* use another variable for this to allow different values */ timestr = getenv("CURL_DEBUG_SIZE"); if(timestr) { - unsigned long val = strtol(timestr, NULL, 10); + unsigned long val = strtoul(timestr, NULL, 10); switch(info) { case CURLINFO_HEADER_SIZE: case CURLINFO_REQUEST_SIZE: @@ -273,8 +277,8 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info, case CURLINFO_LASTSOCKET: sockfd = Curl_getconnectinfo(data, NULL); - /* note: this is not a good conversion for systems with 64 bit sockets and - 32 bit longs */ + /* note: this is not a good conversion for systems with 64-bit sockets and + 32-bit longs */ if(sockfd != CURL_SOCKET_BAD) *param_longp = (long)sockfd; else @@ -331,7 +335,7 @@ static CURLcode getinfo_long(struct Curl_easy *data, CURLINFO info, } break; case CURLINFO_PROTOCOL: - *param_longp = data->info.conn_protocol; + *param_longp = (long)data->info.conn_protocol; break; case CURLINFO_USED_PROXY: *param_longp = @@ -357,7 +361,7 @@ static CURLcode getinfo_offt(struct Curl_easy *data, CURLINFO info, #ifdef DEBUGBUILD char *timestr = getenv("CURL_TIME"); if(timestr) { - unsigned long val = strtol(timestr, NULL, 10); + unsigned long val = strtoul(timestr, NULL, 10); switch(info) { case CURLINFO_TOTAL_TIME_T: case CURLINFO_NAMELOOKUP_TIME_T: @@ -446,7 +450,7 @@ static CURLcode getinfo_double(struct Curl_easy *data, CURLINFO info, #ifdef DEBUGBUILD char *timestr = getenv("CURL_TIME"); if(timestr) { - unsigned long val = strtol(timestr, NULL, 10); + unsigned long val = strtoul(timestr, NULL, 10); switch(info) { case CURLINFO_TOTAL_TIME: case CURLINFO_NAMELOOKUP_TIME: diff --git a/lib/gopher.c b/lib/gopher.c index e1a1ba648..ecea32633 100644 --- a/lib/gopher.c +++ b/lib/gopher.c @@ -62,7 +62,7 @@ static CURLcode gopher_connecting(struct Curl_easy *data, bool *done); */ const struct Curl_handler Curl_handler_gopher = { - "GOPHER", /* scheme */ + "gopher", /* scheme */ ZERO_NULL, /* setup_connection */ gopher_do, /* do_it */ ZERO_NULL, /* done */ @@ -76,6 +76,7 @@ const struct Curl_handler Curl_handler_gopher = { ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_GOPHER, /* defport */ @@ -86,7 +87,7 @@ const struct Curl_handler Curl_handler_gopher = { #ifdef USE_SSL const struct Curl_handler Curl_handler_gophers = { - "GOPHERS", /* scheme */ + "gophers", /* scheme */ ZERO_NULL, /* setup_connection */ gopher_do, /* do_it */ ZERO_NULL, /* done */ @@ -100,6 +101,7 @@ const struct Curl_handler Curl_handler_gophers = { ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_GOPHER, /* defport */ @@ -207,9 +209,9 @@ static CURLcode gopher_do(struct Curl_easy *data, bool *done) if(!timeout_ms) timeout_ms = TIMEDIFF_T_MAX; - /* Don't busyloop. The entire loop thing is a work-around as it causes a + /* Do not busyloop. The entire loop thing is a work-around as it causes a BLOCKING behavior which is a NO-NO. This function should rather be - split up in a do and a doing piece where the pieces that aren't + split up in a do and a doing piece where the pieces that are not possible to send now will be sent in the doing function repeatedly until the entire request is sent. */ @@ -236,7 +238,7 @@ static CURLcode gopher_do(struct Curl_easy *data, bool *done) if(result) return result; - Curl_xfer_setup(data, FIRSTSOCKET, -1, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, -1, FALSE); return CURLE_OK; } #endif /* CURL_DISABLE_GOPHER */ diff --git a/lib/hash.c b/lib/hash.c index 30f28e235..df8e2abff 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -40,7 +40,10 @@ hash_element_dtor(void *user, void *element) struct Curl_hash_element *e = (struct Curl_hash_element *) element; if(e->ptr) { - h->dtor(e->ptr); + if(e->dtor) + e->dtor(e->key, e->key_len, e->ptr); + else + h->dtor(e->ptr); e->ptr = NULL; } @@ -57,7 +60,7 @@ hash_element_dtor(void *user, void *element) */ void Curl_hash_init(struct Curl_hash *h, - int slots, + size_t slots, hash_function hfunc, comp_function comparator, Curl_hash_dtor dtor) @@ -77,7 +80,8 @@ Curl_hash_init(struct Curl_hash *h, } static struct Curl_hash_element * -mk_hash_element(const void *key, size_t key_len, const void *p) +mk_hash_element(const void *key, size_t key_len, const void *p, + Curl_hash_elem_dtor dtor) { /* allocate the struct plus memory after it to store the key */ struct Curl_hash_element *he = malloc(sizeof(struct Curl_hash_element) + @@ -87,22 +91,15 @@ mk_hash_element(const void *key, size_t key_len, const void *p) memcpy(he->key, key, key_len); he->key_len = key_len; he->ptr = (void *) p; + he->dtor = dtor; } return he; } #define FETCH_LIST(x,y,z) &x->table[x->hash_func(y, z, x->slots)] -/* Insert the data in the hash. If there already was a match in the hash, that - * data is replaced. This function also "lazily" allocates the table if - * needed, as it isn't done in the _init function (anymore). - * - * @unittest: 1305 - * @unittest: 1602 - * @unittest: 1603 - */ -void * -Curl_hash_add(struct Curl_hash *h, void *key, size_t key_len, void *p) +void *Curl_hash_add2(struct Curl_hash *h, void *key, size_t key_len, void *p, + Curl_hash_elem_dtor dtor) { struct Curl_hash_element *he; struct Curl_llist_element *le; @@ -111,7 +108,7 @@ Curl_hash_add(struct Curl_hash *h, void *key, size_t key_len, void *p) DEBUGASSERT(h); DEBUGASSERT(h->slots); if(!h->table) { - int i; + size_t i; h->table = malloc(h->slots * sizeof(struct Curl_llist)); if(!h->table) return NULL; /* OOM */ @@ -130,9 +127,9 @@ Curl_hash_add(struct Curl_hash *h, void *key, size_t key_len, void *p) } } - he = mk_hash_element(key, key_len, p); + he = mk_hash_element(key, key_len, p, dtor); if(he) { - Curl_llist_insert_next(l, l->tail, he, &he->list); + Curl_llist_append(l, he, &he->list); ++h->size; return p; /* return the new entry */ } @@ -140,6 +137,20 @@ Curl_hash_add(struct Curl_hash *h, void *key, size_t key_len, void *p) return NULL; /* failure */ } +/* Insert the data in the hash. If there already was a match in the hash, that + * data is replaced. This function also "lazily" allocates the table if + * needed, as it is not done in the _init function (anymore). + * + * @unittest: 1305 + * @unittest: 1602 + * @unittest: 1603 + */ +void * +Curl_hash_add(struct Curl_hash *h, void *key, size_t key_len, void *p) +{ + return Curl_hash_add2(h, key, key_len, p, NULL); +} + /* Remove the identified hash entry. * Returns non-zero on failure. * @@ -192,25 +203,6 @@ Curl_hash_pick(struct Curl_hash *h, void *key, size_t key_len) return NULL; } -#if defined(DEBUGBUILD) && defined(AGGRESSIVE_TEST) -void -Curl_hash_apply(Curl_hash *h, void *user, - void (*cb)(void *user, void *ptr)) -{ - struct Curl_llist_element *le; - int i; - - for(i = 0; i < h->slots; ++i) { - for(le = (h->table[i])->head; - le; - le = le->next) { - Curl_hash_element *el = le->ptr; - cb(user, el->ptr); - } - } -} -#endif - /* Destroys all the entries in the given hash and resets its attributes, * prepping the given hash for [static|dynamic] deallocation. * @@ -222,7 +214,7 @@ void Curl_hash_destroy(struct Curl_hash *h) { if(h->table) { - int i; + size_t i; for(i = 0; i < h->slots; ++i) { Curl_llist_destroy(&h->table[i], (void *) h); } @@ -250,7 +242,7 @@ Curl_hash_clean_with_criterium(struct Curl_hash *h, void *user, struct Curl_llist_element *le; struct Curl_llist_element *lnext; struct Curl_llist *list; - int i; + size_t i; if(!h || !h->table) return; @@ -278,8 +270,9 @@ size_t Curl_hash_str(void *key, size_t key_length, size_t slots_num) size_t h = 5381; while(key_str < end) { + size_t j = (size_t)*key_str++; h += h << 5; - h ^= *key_str++; + h ^= j; } return (h % slots_num); @@ -316,7 +309,7 @@ Curl_hash_next_element(struct Curl_hash_iterator *iter) /* If we have reached the end of the list, find the next one */ if(!iter->current_element) { - int i; + size_t i; for(i = iter->slot_index; i < h->slots; i++) { if(h->table[i].head) { iter->current_element = h->table[i].head; @@ -339,7 +332,7 @@ void Curl_hash_print(struct Curl_hash *h, { struct Curl_hash_iterator iter; struct Curl_hash_element *he; - int last_index = -1; + size_t last_index = ~0; if(!h) return; @@ -352,7 +345,7 @@ void Curl_hash_print(struct Curl_hash *h, while(he) { if(iter.slot_index != last_index) { fprintf(stderr, "index %d:", iter.slot_index); - if(last_index >= 0) { + if(last_index != ~0) { fprintf(stderr, "\n"); } last_index = iter.slot_index; @@ -368,3 +361,25 @@ void Curl_hash_print(struct Curl_hash *h, fprintf(stderr, "\n"); } #endif + +void Curl_hash_offt_init(struct Curl_hash *h, + size_t slots, + Curl_hash_dtor dtor) +{ + Curl_hash_init(h, slots, Curl_hash_str, Curl_str_key_compare, dtor); +} + +void *Curl_hash_offt_set(struct Curl_hash *h, curl_off_t id, void *elem) +{ + return Curl_hash_add(h, &id, sizeof(id), elem); +} + +int Curl_hash_offt_remove(struct Curl_hash *h, curl_off_t id) +{ + return Curl_hash_delete(h, &id, sizeof(id)); +} + +void *Curl_hash_offt_get(struct Curl_hash *h, curl_off_t id) +{ + return Curl_hash_pick(h, &id, sizeof(id)); +} diff --git a/lib/hash.h b/lib/hash.h index 9cfffc25b..1cf787525 100644 --- a/lib/hash.h +++ b/lib/hash.h @@ -54,34 +54,37 @@ struct Curl_hash { /* Comparator function to compare keys */ comp_function comp_func; Curl_hash_dtor dtor; - int slots; + size_t slots; size_t size; }; +typedef void (*Curl_hash_elem_dtor)(void *key, size_t key_len, void *p); + struct Curl_hash_element { struct Curl_llist_element list; void *ptr; + Curl_hash_elem_dtor dtor; size_t key_len; char key[1]; /* allocated memory following the struct */ }; struct Curl_hash_iterator { struct Curl_hash *hash; - int slot_index; + size_t slot_index; struct Curl_llist_element *current_element; }; void Curl_hash_init(struct Curl_hash *h, - int slots, + size_t slots, hash_function hfunc, comp_function comparator, Curl_hash_dtor dtor); void *Curl_hash_add(struct Curl_hash *h, void *key, size_t key_len, void *p); +void *Curl_hash_add2(struct Curl_hash *h, void *key, size_t key_len, void *p, + Curl_hash_elem_dtor dtor); int Curl_hash_delete(struct Curl_hash *h, void *key, size_t key_len); void *Curl_hash_pick(struct Curl_hash *, void *key, size_t key_len); -void Curl_hash_apply(struct Curl_hash *h, void *user, - void (*cb)(void *user, void *ptr)); #define Curl_hash_count(h) ((h)->size) void Curl_hash_destroy(struct Curl_hash *h); void Curl_hash_clean(struct Curl_hash *h); @@ -98,5 +101,13 @@ Curl_hash_next_element(struct Curl_hash_iterator *iter); void Curl_hash_print(struct Curl_hash *h, void (*func)(void *)); +/* Hash for `curl_off_t` as key */ +void Curl_hash_offt_init(struct Curl_hash *h, size_t slots, + Curl_hash_dtor dtor); + +void *Curl_hash_offt_set(struct Curl_hash *h, curl_off_t id, void *elem); +int Curl_hash_offt_remove(struct Curl_hash *h, curl_off_t id); +void *Curl_hash_offt_get(struct Curl_hash *h, curl_off_t id); + #endif /* HEADER_CURL_HASH_H */ diff --git a/lib/headers.c b/lib/headers.c index 0c53dec68..59ac42225 100644 --- a/lib/headers.c +++ b/lib/headers.c @@ -54,7 +54,7 @@ static void copy_header_external(struct Curl_header_store *hs, impossible for applications to do == comparisons, as that would otherwise be very tempting and then lead to the reserved bits not being reserved anymore. */ - h->origin = hs->type | (1<<27); + h->origin = (unsigned int)(hs->type | (1<<27)); h->anchor = e; } @@ -114,7 +114,7 @@ CURLHcode curl_easy_header(CURL *easy, break; } } - if(!e) /* this shouldn't happen */ + if(!e) /* this should not happen */ return CURLHE_MISSING; } /* this is the name we want */ @@ -253,7 +253,7 @@ static CURLcode unfold_value(struct Curl_easy *data, const char *value, newhs = Curl_saferealloc(hs, sizeof(*hs) + vlen + oalloc + 1); if(!newhs) return CURLE_OUT_OF_MEMORY; - /* ->name' and ->value point into ->buffer (to keep the header allocation + /* ->name and ->value point into ->buffer (to keep the header allocation in a single memory block), which now potentially have moved. Adjust them. */ newhs->name = newhs->buffer; @@ -264,8 +264,7 @@ static CURLcode unfold_value(struct Curl_easy *data, const char *value, newhs->value[olen + vlen] = 0; /* null-terminate at newline */ /* insert this node into the list of headers */ - Curl_llist_insert_next(&data->state.httphdrs, data->state.httphdrs.tail, - newhs, &newhs->node); + Curl_llist_append(&data->state.httphdrs, newhs, &newhs->node); data->state.prevhead = newhs; return CURLE_OK; } @@ -303,7 +302,7 @@ CURLcode Curl_headers_push(struct Curl_easy *data, const char *header, /* line folding, append value to the previous header's value */ return unfold_value(data, header, hlen); else { - /* Can't unfold without a previous header. Instead of erroring, just + /* cannot unfold without a previous header. Instead of erroring, just pass the leading blanks. */ while(hlen && ISBLANK(*header)) { header++; @@ -328,8 +327,7 @@ CURLcode Curl_headers_push(struct Curl_easy *data, const char *header, hs->request = data->state.requests; /* insert this node into the list of headers */ - Curl_llist_insert_next(&data->state.httphdrs, data->state.httphdrs.tail, - hs, &hs->node); + Curl_llist_append(&data->state.httphdrs, hs, &hs->node); data->state.prevhead = hs; } else @@ -361,6 +359,8 @@ static CURLcode hds_cw_collect_write(struct Curl_easy *data, (type & CLIENTWRITE_TRAILER ? CURLH_TRAILER : CURLH_HEADER))); CURLcode result = Curl_headers_push(data, buf, htype); + CURL_TRC_WRITE(data, "header_collect pushed(type=%x, len=%zu) -> %d", + htype, blen, result); if(result) return result; } diff --git a/lib/hmac.c b/lib/hmac.c index 4019b67f8..90f37f0bf 100644 --- a/lib/hmac.c +++ b/lib/hmac.c @@ -42,7 +42,7 @@ * Generic HMAC algorithm. * * This module computes HMAC digests based on any hash function. Parameters - * and computing procedures are set-up dynamically at HMAC computation context + * and computing procedures are setup dynamically at HMAC computation context * initialization. */ diff --git a/lib/hostip.c b/lib/hostip.c index 442817d11..2c1f08e74 100644 --- a/lib/hostip.c +++ b/lib/hostip.c @@ -84,8 +84,8 @@ * source file are these: * * CURLRES_IPV6 - this host has getaddrinfo() and family, and thus we use - * that. The host may not be able to resolve IPv6, but we don't really have to - * take that into account. Hosts that aren't IPv6-enabled have CURLRES_IPV4 + * that. The host may not be able to resolve IPv6, but we do not really have to + * take that into account. Hosts that are not IPv6-enabled have CURLRES_IPV4 * defined. * * CURLRES_ARES - is defined if libcurl is built to use c-ares for @@ -144,7 +144,7 @@ void Curl_printable_address(const struct Curl_addrinfo *ai, char *buf, (void)Curl_inet_ntop(ai->ai_family, (const void *)ipaddr4, buf, bufsize); break; } -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case AF_INET6: { const struct sockaddr_in6 *sa6 = (const void *)ai->ai_addr; const struct in6_addr *ipaddr6 = &sa6->sin6_addr; @@ -167,17 +167,12 @@ create_hostcache_id(const char *name, int port, char *ptr, size_t buflen) { 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--) { - *ptr++ = Curl_raw_tolower(*name++); - olen++; - } - olen += msnprintf(ptr, 7, ":%u", port); - return olen; + Curl_strntolower(ptr, name, len); + return msnprintf(&ptr[len], 7, ":%u", port) + len; } struct hostcache_prune_data { @@ -243,13 +238,13 @@ void Curl_hostcache_prune(struct Curl_easy *data) int timeout = data->set.dns_cache_timeout; if(!data->dns.hostcache) - /* NULL hostcache means we can't do it */ + /* NULL hostcache means we cannot do it */ return; if(data->share) Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE); - time(&now); + now = time(NULL); do { /* Remove outdated and unused entries from the hostcache */ @@ -288,14 +283,14 @@ static struct Curl_dns_entry *fetch_addr(struct Curl_easy *data, size_t entry_len = create_hostcache_id(hostname, 0, port, entry_id, sizeof(entry_id)); - /* See if it's already in our dns cache */ + /* See if it is 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) { entry_len = create_hostcache_id("*", 1, port, entry_id, sizeof(entry_id)); - /* See if it's already in our dns cache */ + /* See if it is already in our dns cache */ dns = Curl_hash_pick(data->dns.hostcache, entry_id, entry_len + 1); } @@ -303,7 +298,7 @@ static struct Curl_dns_entry *fetch_addr(struct Curl_easy *data, /* See whether the returned entry is stale. Done before we release lock */ struct hostcache_prune_data user; - time(&user.now); + user.now = time(NULL); user.cache_timeout = data->set.dns_cache_timeout; user.oldest = 0; @@ -334,7 +329,7 @@ static struct Curl_dns_entry *fetch_addr(struct Curl_easy *data, } if(!found) { - infof(data, "Hostname in DNS cache doesn't have needed family, zapped"); + infof(data, "Hostname in DNS cache does not have needed family, zapped"); dns = NULL; /* the memory deallocation is being handled by the hash */ Curl_hash_delete(data->dns.hostcache, entry_id, entry_len + 1); } @@ -354,7 +349,7 @@ static struct Curl_dns_entry *fetch_addr(struct Curl_easy *data, * Returns the Curl_dns_entry entry pointer or NULL if not in the cache. * * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after - * use, or we'll leak memory! + * use, or we will leak memory! */ struct Curl_dns_entry * Curl_fetch_addr(struct Curl_easy *data, @@ -433,8 +428,8 @@ UNITTEST CURLcode Curl_shuffle_addr(struct Curl_easy *data, if(Curl_rand(data, (unsigned char *)rnd, rnd_size) == CURLE_OK) { struct Curl_addrinfo *swap_tmp; for(i = num_addrs - 1; i > 0; i--) { - swap_tmp = nodes[rnd[i] % (i + 1)]; - nodes[rnd[i] % (i + 1)] = nodes[i]; + swap_tmp = nodes[rnd[i] % (unsigned int)(i + 1)]; + nodes[rnd[i] % (unsigned int)(i + 1)] = nodes[i]; nodes[i] = swap_tmp; } @@ -523,7 +518,7 @@ Curl_cache_addr(struct Curl_easy *data, return dns; } -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 /* return a static IPv6 ::1 for the name */ static struct Curl_addrinfo *get_localhost6(int port, const char *name) { @@ -541,8 +536,8 @@ static struct Curl_addrinfo *get_localhost6(int port, const char *name) sa6.sin6_port = htons(port16); sa6.sin6_flowinfo = 0; sa6.sin6_scope_id = 0; - if(Curl_inet_pton(AF_INET6, "::1", ipv6) < 1) - return NULL; + + (void)Curl_inet_pton(AF_INET6, "::1", ipv6); memcpy(&sa6.sin6_addr, ipv6, sizeof(ipv6)); ca->ai_flags = 0; @@ -600,14 +595,14 @@ static struct Curl_addrinfo *get_localhost(int port, const char *name) return ca6; } -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 /* * Curl_ipv6works() returns TRUE if IPv6 seems to work. */ bool Curl_ipv6works(struct Curl_easy *data) { if(data) { - /* the nature of most system is that IPv6 status doesn't come and go + /* the nature of most system is that IPv6 status does not come and go during a program's lifetime so we only probe the first time and then we have the info kept for fast reuse */ DEBUGASSERT(data); @@ -623,7 +618,7 @@ bool Curl_ipv6works(struct Curl_easy *data) /* probe to see if we have a working IPv6 stack */ curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0); if(s == CURL_SOCKET_BAD) - /* an IPv6 address was requested but we can't get/use one */ + /* an IPv6 address was requested but we cannot get/use one */ ipv6_works = 0; else { ipv6_works = 1; @@ -632,7 +627,7 @@ bool Curl_ipv6works(struct Curl_easy *data) return (ipv6_works>0)?TRUE:FALSE; } } -#endif /* ENABLE_IPV6 */ +#endif /* USE_IPV6 */ /* * Curl_host_is_ipnum() returns TRUE if the given string is a numerical IPv4 @@ -641,11 +636,11 @@ bool Curl_ipv6works(struct Curl_easy *data) bool Curl_host_is_ipnum(const char *hostname) { struct in_addr in; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct in6_addr in6; #endif if(Curl_inet_pton(AF_INET, hostname, &in) > 0 -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 || Curl_inet_pton(AF_INET6, hostname, &in6) > 0 #endif ) @@ -667,11 +662,11 @@ static bool tailmatch(const char *full, const char *part) /* * Curl_resolv() is the main name resolve function within libcurl. It resolves * a name and returns a pointer to the entry in the 'entry' argument (if one - * is provided). This function might return immediately if we're using asynch + * is provided). This function might return immediately if we are using asynch * resolves. See the return codes. * * The cache entry we return will get its 'inuse' counter increased when this - * function is used. You MUST call Curl_resolv_unlock() later (when you're + * function is used. You MUST call Curl_resolv_unlock() later (when you are * done using this struct) to decrease the counter again. * * Return codes: @@ -760,7 +755,7 @@ enum resolve_t Curl_resolv(struct Curl_easy *data, if(!addr) return CURLRESOLV_ERROR; } -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else { struct in6_addr in6; /* check if this is an IPv6 address string */ @@ -771,7 +766,7 @@ enum resolve_t Curl_resolv(struct Curl_easy *data, return CURLRESOLV_ERROR; } } -#endif /* ENABLE_IPV6 */ +#endif /* USE_IPV6 */ #else /* if USE_RESOLVE_ON_IPS */ #ifndef CURL_DISABLE_DOH @@ -779,7 +774,7 @@ enum resolve_t Curl_resolv(struct Curl_easy *data, if(Curl_inet_pton(AF_INET, hostname, &in) > 0) /* This is a dotted IP address 123.123.123.123-style */ ipnum = TRUE; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else { struct in6_addr in6; /* check if this is an IPv6 address string */ @@ -787,7 +782,7 @@ enum resolve_t Curl_resolv(struct Curl_easy *data, /* This is an IPv6 address literal */ ipnum = TRUE; } -#endif /* ENABLE_IPV6 */ +#endif /* USE_IPV6 */ #endif /* CURL_DISABLE_DOH */ #endif /* !USE_RESOLVE_ON_IPS */ @@ -818,7 +813,7 @@ enum resolve_t Curl_resolv(struct Curl_easy *data, if(respwait) { /* the response to our resolve call will come asynchronously at a later time, good or bad */ - /* First, check that we haven't received the info by now */ + /* First, check that we have not received the info by now */ result = Curl_resolv_check(data, &dns); if(result) /* error detected */ return CURLRESOLV_ERROR; @@ -856,7 +851,7 @@ enum resolve_t Curl_resolv(struct Curl_easy *data, #ifdef USE_ALARM_TIMEOUT /* * This signal handler jumps back into the main libcurl code and continues - * execution. This effectively causes the remainder of the application to run + * execution. This effectively causes the remainder of the application to run * within a signal handler which is nonportable and could lead to problems. */ CURL_NORETURN static @@ -869,11 +864,11 @@ void alarmfunc(int sig) /* * Curl_resolv_timeout() is the same as Curl_resolv() but specifies a - * timeout. This function might return immediately if we're using asynch + * timeout. This function might return immediately if we are using asynch * resolves. See the return codes. * * The cache entry we return will get its 'inuse' counter increased when this - * function is used. You MUST call Curl_resolv_unlock() later (when you're + * function is used. You MUST call Curl_resolv_unlock() later (when you are * done using this struct) to decrease the counter again. * * If built with a synchronous resolver and use of signals is not @@ -939,7 +934,7 @@ enum resolve_t Curl_resolv_timeout(struct Curl_easy *data, will generate a signal and we will siglongjmp() from that here. This technique has problems (see alarmfunc). This should be the last thing we do before calling Curl_resolv(), - as otherwise we'd have to worry about variables that get modified + as otherwise we would have to worry about variables that get modified before we invoke Curl_resolv() (and thus use "volatile"). */ curl_simple_lock_lock(&curl_jmpenv_lock); @@ -960,7 +955,7 @@ enum resolve_t Curl_resolv_timeout(struct Curl_easy *data, keep_copysig = TRUE; /* yes, we have a copy */ sigact.sa_handler = alarmfunc; #ifdef SA_RESTART - /* HPUX doesn't have SA_RESTART but defaults to that behavior! */ + /* HPUX does not have SA_RESTART but defaults to that behavior! */ sigact.sa_flags &= ~SA_RESTART; #endif /* now set the new struct */ @@ -1027,7 +1022,7 @@ enum resolve_t Curl_resolv_timeout(struct Curl_easy *data, ((alarm_set >= 0x80000000) && (prev_alarm < 0x80000000)) ) { /* if the alarm time-left reached zero or turned "negative" (counted with unsigned values), we should fire off a SIGALRM here, but we - won't, and zero would be to switch it off so we never set it to + will not, and zero would be to switch it off so we never set it to less than 1! */ alarm(1); rc = CURLRESOLV_TIMEDOUT; @@ -1070,6 +1065,23 @@ static void freednsentry(void *freethis) dns->inuse--; if(dns->inuse == 0) { Curl_freeaddrinfo(dns->addr); +#ifdef USE_HTTPSRR + if(dns->hinfo) { + if(dns->hinfo->target) + free(dns->hinfo->target); + if(dns->hinfo->alpns) + free(dns->hinfo->alpns); + if(dns->hinfo->ipv4hints) + free(dns->hinfo->ipv4hints); + if(dns->hinfo->echconfiglist) + free(dns->hinfo->echconfiglist); + if(dns->hinfo->ipv6hints) + free(dns->hinfo->ipv6hints); + if(dns->hinfo->val) + free(dns->hinfo->val); + free(dns->hinfo); + } +#endif free(dns); } } @@ -1077,7 +1089,7 @@ static void freednsentry(void *freethis) /* * Curl_init_dnscache() inits a new DNS cache. */ -void Curl_init_dnscache(struct Curl_hash *hash, int size) +void Curl_init_dnscache(struct Curl_hash *hash, size_t size) { Curl_hash_init(hash, size, Curl_hash_str, Curl_str_key_compare, freednsentry); @@ -1138,7 +1150,7 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data) if(data->share) Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE); - /* delete entry, ignore if it didn't exist */ + /* delete entry, ignore if it did not exist */ Curl_hash_delete(data->dns.hostcache, entry_id, entry_len + 1); if(data->share) @@ -1210,7 +1222,7 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data) memcpy(address, addr_begin, alen); address[alen] = '\0'; -#ifndef ENABLE_IPV6 +#ifndef USE_IPV6 if(strchr(address, ':')) { infof(data, "Ignoring resolve address '%s', missing IPv6 support.", address); @@ -1252,7 +1264,7 @@ CURLcode Curl_loadhostpairs(struct Curl_easy *data) if(data->share) Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE); - /* See if it's already in our dns cache */ + /* See if it is already in our dns cache */ dns = Curl_hash_pick(data->dns.hostcache, entry_id, entry_len + 1); if(dns) { @@ -1350,7 +1362,7 @@ static void show_resolve_info(struct Curl_easy *data, if(!result) result = Curl_dyn_add(d, buf); if(result) { - infof(data, "too many IP, can't show"); + infof(data, "too many IP, cannot show"); goto fail; } } diff --git a/lib/hostip.h b/lib/hostip.h index fb53a5776..c85a688db 100644 --- a/lib/hostip.h +++ b/lib/hostip.h @@ -32,6 +32,10 @@ #include +#ifdef USE_HTTPSRR +# include +#endif + /* Allocate enough memory to hold the full name information structs and * everything. OSF1 is known to require at least 8872 bytes. The buffer * required for storing all possible aliases and IP numbers is according to @@ -58,9 +62,42 @@ struct connectdata; */ struct Curl_hash *Curl_global_host_cache_init(void); +#ifdef USE_HTTPSRR + +#define CURL_MAXLEN_host_name 253 + +struct Curl_https_rrinfo { + size_t len; /* raw encoded length */ + unsigned char *val; /* raw encoded octets */ + /* + * fields from HTTPS RR, with the mandatory fields + * first (priority, target), then the others in the + * order of the keytag numbers defined at + * https://datatracker.ietf.org/doc/html/rfc9460#section-14.3.2 + */ + uint16_t priority; + char *target; + char *alpns; /* keytag = 1 */ + bool no_def_alpn; /* keytag = 2 */ + /* + * we do not support ports (keytag = 3) as we do not support + * port-switching yet + */ + unsigned char *ipv4hints; /* keytag = 4 */ + size_t ipv4hints_len; + unsigned char *echconfiglist; /* keytag = 5 */ + size_t echconfiglist_len; + unsigned char *ipv6hints; /* keytag = 6 */ + size_t ipv6hints_len; +}; +#endif + struct Curl_dns_entry { struct Curl_addrinfo *addr; - /* timestamp == 0 -- permanent CURLOPT_RESOLVE entry (doesn't time out) */ +#ifdef USE_HTTPSRR + struct Curl_https_rrinfo *hinfo; +#endif + /* timestamp == 0 -- permanent CURLOPT_RESOLVE entry (does not time out) */ time_t timestamp; /* use-counter, use Curl_resolv_unlock to release reference */ long inuse; @@ -77,7 +114,7 @@ bool Curl_host_is_ipnum(const char *hostname); * and port. * * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after - * use, or we'll leak memory! + * use, or we will leak memory! */ /* return codes */ enum resolve_t { @@ -96,7 +133,7 @@ enum resolve_t Curl_resolv_timeout(struct Curl_easy *data, struct Curl_dns_entry **dnsentry, timediff_t timeoutms); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 /* * Curl_ipv6works() returns TRUE if IPv6 seems to work. */ @@ -129,7 +166,7 @@ void Curl_resolv_unlock(struct Curl_easy *data, struct Curl_dns_entry *dns); /* init a new dns cache */ -void Curl_init_dnscache(struct Curl_hash *hash, int hashsize); +void Curl_init_dnscache(struct Curl_hash *hash, size_t hashsize); /* prune old entries from the DNS cache */ void Curl_hostcache_prune(struct Curl_easy *data); @@ -163,7 +200,7 @@ void Curl_printable_address(const struct Curl_addrinfo *ip, * Returns the Curl_dns_entry entry pointer or NULL if not in the cache. * * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after - * use, or we'll leak memory! + * use, or we will leak memory! */ struct Curl_dns_entry * Curl_fetch_addr(struct Curl_easy *data, diff --git a/lib/hostip4.c b/lib/hostip4.c index 9140180ff..8da809db6 100644 --- a/lib/hostip4.c +++ b/lib/hostip4.c @@ -62,7 +62,7 @@ bool Curl_ipvalid(struct Curl_easy *data, struct connectdata *conn) { (void)data; if(conn->ip_version == CURL_IPRESOLVE_V6) - /* An IPv6 address was requested and we can't get/use one */ + /* An IPv6 address was requested and we cannot get/use one */ return FALSE; return TRUE; /* OK, proceed */ @@ -193,8 +193,8 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname, * small. Previous versions are known to return ERANGE for the same * problem. * - * This wouldn't be such a big problem if older versions wouldn't - * sometimes return EAGAIN on a common failure case. Alas, we can't + * This would not be such a big problem if older versions would not + * sometimes return EAGAIN on a common failure case. Alas, we cannot * assume that EAGAIN *or* ERANGE means ERANGE for any given version of * glibc. * @@ -210,9 +210,9 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname, * gethostbyname_r() in glibc: * * In glibc 2.2.5 the interface is different (this has also been - * discovered in glibc 2.1.1-6 as shipped by Redhat 6). What I can't + * discovered in glibc 2.1.1-6 as shipped by Redhat 6). What I cannot * explain, is that tests performed on glibc 2.2.4-34 and 2.2.4-32 - * (shipped/upgraded by Redhat 7.2) don't show this behavior! + * (shipped/upgraded by Redhat 7.2) do not show this behavior! * * In this "buggy" version, the return code is -1 on error and 'errno' * is set to the ERANGE or EAGAIN code. Note that 'errno' is not a @@ -223,7 +223,7 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname, #elif defined(HAVE_GETHOSTBYNAME_R_3) /* AIX, Digital Unix/Tru64, HPUX 10, more? */ - /* For AIX 4.3 or later, we don't use gethostbyname_r() at all, because of + /* For AIX 4.3 or later, we do not use gethostbyname_r() at all, because of * the plain fact that it does not return unique full buffers on each * call, but instead several of the pointers in the hostent structs will * point to the same actual data! This have the unfortunate down-side that @@ -237,7 +237,7 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname, * * Troels Walsted Hansen helped us work this out on March 3rd, 2003. * - * [*] = much later we've found out that it isn't at all "completely + * [*] = much later we have found out that it is not at all "completely * thread-safe", but at least the gethostbyname() function is. */ @@ -253,7 +253,7 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname, (struct hostent *)buf, (struct hostent_data *)((char *)buf + sizeof(struct hostent))); - h_errnop = SOCKERRNO; /* we don't deal with this, but set it anyway */ + h_errnop = SOCKERRNO; /* we do not deal with this, but set it anyway */ } else res = -1; /* failure, too smallish buffer size */ @@ -263,8 +263,8 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname, h = buf; /* result expected in h */ /* This is the worst kind of the different gethostbyname_r() interfaces. - * Since we don't know how big buffer this particular lookup required, - * we can't realloc down the huge alloc without doing closer analysis of + * Since we do not know how big buffer this particular lookup required, + * we cannot realloc down the huge alloc without doing closer analysis of * the returned data. Thus, we always use CURL_HOSTENT_SIZE for every * name lookup. Fixing this would require an extra malloc() and then * calling Curl_addrinfo_copy() that subsequent realloc()s down the new @@ -280,7 +280,7 @@ struct Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname, #else /* (HAVE_GETADDRINFO && HAVE_GETADDRINFO_THREADSAFE) || HAVE_GETHOSTBYNAME_R */ /* - * Here is code for platforms that don't have a thread safe + * Here is code for platforms that do not have a thread safe * getaddrinfo() nor gethostbyname_r() function or for which * gethostbyname() is the preferred one. */ diff --git a/lib/hsts.c b/lib/hsts.c index 607755e6b..8cd77ae3c 100644 --- a/lib/hsts.c +++ b/lib/hsts.c @@ -54,7 +54,7 @@ #define MAX_HSTS_DATELENSTR "64" #define UNLIMITED "unlimited" -#ifdef DEBUGBUILD +#if defined(DEBUGBUILD) || defined(UNITTESTS) /* 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 */ @@ -107,11 +107,6 @@ void Curl_hsts_cleanup(struct hsts **hp) } } -static struct stsentry *hsts_entry(void) -{ - return calloc(1, sizeof(struct stsentry)); -} - static CURLcode hsts_create(struct hsts *h, const char *hostname, bool subdomains, @@ -127,7 +122,7 @@ static CURLcode hsts_create(struct hsts *h, --hlen; if(hlen) { char *duphost; - struct stsentry *sts = hsts_entry(); + struct stsentry *sts = calloc(1, sizeof(struct stsentry)); if(!sts) return CURLE_OUT_OF_MEMORY; @@ -140,7 +135,7 @@ static CURLcode hsts_create(struct hsts *h, sts->host = duphost; sts->expires = expires; sts->includeSubDomains = subdomains; - Curl_llist_insert_next(&h->list, h->list.tail, sts, &sts->node); + Curl_llist_append(&h->list, sts, &sts->node); } return CURLE_OK; } @@ -246,7 +241,7 @@ CURLcode Curl_hsts_parse(struct hsts *h, const char *hostname, } /* - * Return TRUE if the given host name is currently an HSTS one. + * Return TRUE if the given hostname is currently an HSTS one. * * The 'subdomain' argument tells the function if subdomain matching should be * attempted. @@ -373,7 +368,7 @@ CURLcode Curl_hsts_save(struct Curl_easy *data, struct hsts *h, file = h->filename; if((h->flags & CURLHSTS_READONLYFILE) || !file || !file[0]) - /* marked as read-only, no file or zero length file name */ + /* marked as read-only, no file or zero length filename */ goto skipsave; result = Curl_fopen(data, file, &out, &tempstore); @@ -398,7 +393,7 @@ CURLcode Curl_hsts_save(struct Curl_easy *data, struct hsts *h, free(tempstore); skipsave: if(data->set.hsts_write) { - /* if there's a write callback */ + /* if there is a write callback */ struct curl_index i; /* count */ i.total = h->list.size; i.index = 0; @@ -445,7 +440,7 @@ static CURLcode hsts_add(struct hsts *h, char *line) if(!e) result = hsts_create(h, p, subdomain, expires); else { - /* the same host name, use the largest expire time */ + /* the same hostname, use the largest expire time */ if(expires > e->expires) e->expires = expires; } @@ -513,7 +508,7 @@ static CURLcode hsts_load(struct hsts *h, const char *file) CURLcode result = CURLE_OK; FILE *fp; - /* we need a private copy of the file name so that the hsts cache file + /* we need a private copy of the filename so that the hsts cache file name survives an easy handle reset */ free(h->filename); h->filename = strdup(file); @@ -528,8 +523,11 @@ static CURLcode hsts_load(struct hsts *h, const char *file) char *lineptr = Curl_dyn_ptr(&buf); while(*lineptr && ISBLANK(*lineptr)) lineptr++; - if(*lineptr == '#') - /* skip commented lines */ + /* + * Skip empty or commented lines, since we know the line will have a + * trailing newline from Curl_get_line we can treat length 1 as empty. + */ + if((*lineptr == '#') || strlen(lineptr) <= 1) continue; hsts_add(h, lineptr); diff --git a/lib/hsts.h b/lib/hsts.h index d3431a5d7..21e53a342 100644 --- a/lib/hsts.h +++ b/lib/hsts.h @@ -29,7 +29,7 @@ #include #include "llist.h" -#ifdef DEBUGBUILD +#if defined(DEBUGBUILD) || defined(UNITTESTS) extern time_t deltatime; #endif @@ -40,7 +40,7 @@ struct stsentry { curl_off_t expires; /* the timestamp of this entry's expiry */ }; -/* The HSTS cache. Needs to be able to tailmatch host names. */ +/* The HSTS cache. Needs to be able to tailmatch hostnames. */ struct hsts { struct Curl_llist list; char *filename; diff --git a/lib/http.c b/lib/http.c index 92c04e69c..cb379e7f9 100644 --- a/lib/http.c +++ b/lib/http.c @@ -65,7 +65,6 @@ #include "vquic/vquic.h" #include "http_digest.h" #include "http_ntlm.h" -#include "curl_ntlm_wb.h" #include "http_negotiate.h" #include "http_aws_sigv4.h" #include "url.h" @@ -101,7 +100,7 @@ * Forward declarations. */ -static bool http_should_fail(struct Curl_easy *data); +static bool http_should_fail(struct Curl_easy *data, int httpcode); static bool http_exp100_is_waiting(struct Curl_easy *data); static CURLcode http_exp100_add_reader(struct Curl_easy *data); static void http_exp100_send_anyway(struct Curl_easy *data); @@ -110,7 +109,7 @@ static void http_exp100_send_anyway(struct Curl_easy *data); * HTTP handler interface. */ const struct Curl_handler Curl_handler_http = { - "HTTP", /* scheme */ + "http", /* scheme */ Curl_http_setup_conn, /* setup_connection */ Curl_http, /* do_it */ Curl_http_done, /* done */ @@ -124,6 +123,7 @@ const struct Curl_handler Curl_handler_http = { ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ Curl_http_write_resp, /* write_resp */ + Curl_http_write_resp_hd, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_HTTP, /* defport */ @@ -138,7 +138,7 @@ const struct Curl_handler Curl_handler_http = { * HTTPS handler interface. */ const struct Curl_handler Curl_handler_https = { - "HTTPS", /* scheme */ + "https", /* scheme */ Curl_http_setup_conn, /* setup_connection */ Curl_http, /* do_it */ Curl_http_done, /* done */ @@ -152,6 +152,7 @@ const struct Curl_handler Curl_handler_https = { ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ Curl_http_write_resp, /* write_resp */ + Curl_http_write_resp_hd, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_HTTPS, /* defport */ @@ -168,14 +169,6 @@ CURLcode Curl_http_setup_conn(struct Curl_easy *data, { /* allocate the HTTP-specific struct for the Curl_easy, only to survive during this request */ - struct HTTP *http; - DEBUGASSERT(data->req.p.http == NULL); - - http = calloc(1, sizeof(struct HTTP)); - if(!http) - return CURLE_OUT_OF_MEMORY; - - data->req.p.http = http; connkeep(conn, "HTTP default"); if(data->state.httpwant == CURL_HTTP_VERSION_3ONLY) { @@ -244,8 +237,6 @@ char *Curl_copy_header_value(const char *header) while(*start && ISSPACE(*start)) start++; - /* data is in the host encoding so - use '\r' and '\n' instead of 0x0d and 0x0a */ end = strchr(start, '\r'); if(!end) end = strchr(start, '\n'); @@ -386,8 +377,6 @@ static bool pickoneauth(struct auth *pick, unsigned long mask) #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; @@ -421,9 +410,9 @@ static CURLcode http_perhapsrewind(struct Curl_easy *data, curl_off_t upload_remain = (expectsend >= 0)? (expectsend - bytessent) : -1; bool little_upload_remains = (upload_remain >= 0 && upload_remain < 2000); bool needs_rewind = Curl_creader_needs_rewind(data); - /* By default, we'd like to abort the transfer when little or - * unknown amount remains. But this may be overridden by authentications - * further below! */ + /* By default, we would like to abort the transfer when little or unknown + * amount remains. This may be overridden by authentications further + * below! */ bool abort_upload = (!data->req.upload_done && !little_upload_remains); const char *ongoing_auth = NULL; @@ -446,9 +435,7 @@ static CURLcode http_perhapsrewind(struct Curl_easy *data, /* We'd like to abort the upload - but should we? */ #if defined(USE_NTLM) if((data->state.authproxy.picked == CURLAUTH_NTLM) || - (data->state.authhost.picked == CURLAUTH_NTLM) || - (data->state.authproxy.picked == CURLAUTH_NTLM_WB) || - (data->state.authhost.picked == CURLAUTH_NTLM_WB)) { + (data->state.authhost.picked == CURLAUTH_NTLM)) { ongoing_auth = "NTML"; if((conn->http_ntlm_state != NTLMSTATE_NONE) || (conn->proxy_ntlm_state != NTLMSTATE_NONE)) { @@ -488,7 +475,7 @@ static CURLcode http_perhapsrewind(struct Curl_easy *data, /* We decided to abort the ongoing transfer */ streamclose(conn, "Mid-auth HTTP and much data left to send"); /* FIXME: questionable manipulation here, can we do this differently? */ - data->req.size = 0; /* don't download any more than 0 bytes */ + data->req.size = 0; /* do not download any more than 0 bytes */ } return CURLE_OK; } @@ -561,7 +548,7 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data) /* no (known) authentication available, authentication is not "done" yet and no authentication seems to be required and - we didn't try HEAD or GET */ + we did not try HEAD or GET */ if((data->state.httpreq != HTTPREQ_GET) && (data->state.httpreq != HTTPREQ_HEAD)) { data->req.newurl = strdup(data->state.url); /* clone URL */ @@ -570,7 +557,7 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data) data->state.authhost.done = TRUE; } } - if(http_should_fail(data)) { + if(http_should_fail(data, data->req.httpcode)) { failf(data, "The requested URL returned error: %d", data->req.httpcode); result = CURLE_HTTP_RETURNED_ERROR; @@ -627,15 +614,6 @@ output_auth_headers(struct Curl_easy *data, } else #endif -#if defined(USE_NTLM) && defined(NTLM_WB_ENABLED) - if(authstatus->picked == CURLAUTH_NTLM_WB) { - auth = "NTLM_WB"; - result = Curl_output_ntlm_wb(data, conn, proxy); - if(result) - return result; - } - else -#endif #ifndef CURL_DISABLE_DIGEST_AUTH if(authstatus->picked == CURLAUTH_DIGEST) { auth = "Digest"; @@ -760,13 +738,13 @@ Curl_http_output_auth(struct Curl_easy *data, if(authhost->want && !authhost->picked) /* The app has selected one or more methods, but none has been picked so far by a server round-trip. Then we set the picked one to the - want one, and if this is one single bit it'll be used instantly. */ + want one, and if this is one single bit it will be used instantly. */ authhost->picked = authhost->want; if(authproxy->want && !authproxy->picked) /* The app has selected one or more methods, but none has been picked so far by a proxy round-trip. Then we set the picked one to the want one, - and if this is one single bit it'll be used instantly. */ + and if this is one single bit it will be used instantly. */ authproxy->picked = authproxy->want; #ifndef CURL_DISABLE_PROXY @@ -781,7 +759,7 @@ Curl_http_output_auth(struct Curl_easy *data, #else (void)proxytunnel; #endif /* CURL_DISABLE_PROXY */ - /* we have no proxy so let's pretend we're done authenticating + /* we have no proxy so let's pretend we are done authenticating with it */ authproxy->done = TRUE; @@ -925,31 +903,15 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy, /* NTLM support requires the SSL crypto libs */ if(checkprefix("NTLM", auth) && is_valid_auth_separator(auth[4])) { if((authp->avail & CURLAUTH_NTLM) || - (authp->avail & CURLAUTH_NTLM_WB) || Curl_auth_is_ntlm_supported()) { *availp |= CURLAUTH_NTLM; authp->avail |= CURLAUTH_NTLM; - if(authp->picked == CURLAUTH_NTLM || - authp->picked == CURLAUTH_NTLM_WB) { + if(authp->picked == CURLAUTH_NTLM) { /* NTLM authentication is picked and activated */ CURLcode result = Curl_input_ntlm(data, proxy, auth); if(!result) { data->state.authproblem = FALSE; -#ifdef NTLM_WB_ENABLED - if(authp->picked == CURLAUTH_NTLM_WB) { - *availp &= ~CURLAUTH_NTLM; - authp->avail &= ~CURLAUTH_NTLM; - *availp |= CURLAUTH_NTLM_WB; - authp->avail |= CURLAUTH_NTLM_WB; - - result = Curl_input_ntlm_wb(data, conn, proxy, auth); - if(result) { - infof(data, "Authentication problem. Ignoring this."); - data->state.authproblem = TRUE; - } - } -#endif } else { infof(data, "Authentication problem. Ignoring this."); @@ -971,7 +933,7 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy, authp->avail |= CURLAUTH_DIGEST; /* We call this function on input Digest headers even if Digest - * authentication isn't activated yet, as we need to store the + * authentication is not activated yet, as we need to store the * incoming data from this header in case we are going to use * Digest */ result = Curl_input_digest(data, proxy, auth); @@ -990,7 +952,7 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy, authp->avail |= CURLAUTH_BASIC; if(authp->picked == CURLAUTH_BASIC) { /* We asked for Basic authentication but got a 40X back - anyway, which basically means our name+password isn't + anyway, which basically means our name+password is not valid. */ authp->avail = CURLAUTH_NONE; infof(data, "Authentication problem. Ignoring this."); @@ -1006,7 +968,7 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy, authp->avail |= CURLAUTH_BEARER; if(authp->picked == CURLAUTH_BEARER) { /* We asked for Bearer authentication but got a 40X back - anyway, which basically means our token isn't valid. */ + anyway, which basically means our token is not valid. */ authp->avail = CURLAUTH_NONE; infof(data, "Authentication problem. Ignoring this."); data->state.authproblem = TRUE; @@ -1026,7 +988,7 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy, /* there may be multiple methods on one line, so keep reading */ while(*auth && *auth != ',') /* read up to the next comma */ auth++; - if(*auth == ',') /* if we're on a comma, skip it */ + if(*auth == ',') /* if we are on a comma, skip it */ auth++; while(*auth && ISSPACE(*auth)) auth++; @@ -1036,24 +998,21 @@ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy, } /** - * http_should_fail() determines whether an HTTP response has gotten us + * http_should_fail() determines whether an HTTP response code has gotten us * into an error state or not. * * @retval FALSE communications should continue * * @retval TRUE communications should not continue */ -static bool http_should_fail(struct Curl_easy *data) +static bool http_should_fail(struct Curl_easy *data, int httpcode) { - int httpcode; DEBUGASSERT(data); DEBUGASSERT(data->conn); - httpcode = data->req.httpcode; - /* - ** If we haven't been asked to fail on error, - ** don't fail. + ** If we have not been asked to fail on error, + ** do not fail. */ if(!data->set.http_fail_on_error) return FALSE; @@ -1073,7 +1032,7 @@ static bool http_should_fail(struct Curl_easy *data) return FALSE; /* - ** Any code >= 400 that's not 401 or 407 is always + ** Any code >= 400 that is not 401 or 407 is always ** a terminal error */ if((httpcode != 401) && (httpcode != 407)) @@ -1085,22 +1044,19 @@ static bool http_should_fail(struct Curl_easy *data) DEBUGASSERT((httpcode == 401) || (httpcode == 407)); /* - ** Examine the current authentication state to see if this - ** is an error. The idea is for this function to get - ** called after processing all the headers in a response - ** message. So, if we've been to asked to authenticate a - ** particular stage, and we've done it, we're OK. But, if - ** we're already completely authenticated, it's not OK to - ** get another 401 or 407. + ** Examine the current authentication state to see if this is an error. The + ** idea is for this function to get called after processing all the headers + ** in a response message. So, if we have been to asked to authenticate a + ** particular stage, and we have done it, we are OK. If we are already + ** completely authenticated, it is not OK to get another 401 or 407. ** - ** It is possible for authentication to go stale such that - ** the client needs to reauthenticate. Once that info is - ** available, use it here. + ** It is possible for authentication to go stale such that the client needs + ** to reauthenticate. Once that info is available, use it here. */ /* - ** Either we're not authenticating, or we're supposed to - ** be authenticating something else. This is an error. + ** Either we are not authenticating, or we are supposed to be authenticating + ** something else. This is an error. */ if((httpcode == 401) && !data->state.aptr.user) return TRUE; @@ -1139,7 +1095,7 @@ Curl_compareheader(const char *headerline, /* line to check */ DEBUGASSERT(content); if(!strncasecompare(headerline, header, hlen)) - return FALSE; /* doesn't start with header */ + return FALSE; /* does not start with header */ /* pass the header */ start = &headerline[hlen]; @@ -1151,11 +1107,11 @@ Curl_compareheader(const char *headerline, /* line to check */ /* find the end of the header line */ end = strchr(start, '\r'); /* lines end with CRLF */ if(!end) { - /* in case there's a non-standard compliant line here */ + /* in case there is a non-standard compliant line here */ end = strchr(start, '\n'); if(!end) - /* hm, there's no line ending here, use the zero byte! */ + /* hm, there is no line ending here, use the zero byte! */ end = strchr(start, '\0'); } @@ -1186,7 +1142,7 @@ CURLcode Curl_http_connect(struct Curl_easy *data, bool *done) } /* this returns the socket to wait for in the DO and DOING state for the multi - interface and then we're always _sending_ a request and thus we wait for + interface and then we are always _sending_ a request and thus we wait for the single socket to become writable only */ int Curl_http_getsock_do(struct Curl_easy *data, struct connectdata *conn, @@ -1207,16 +1163,12 @@ CURLcode Curl_http_done(struct Curl_easy *data, CURLcode status, bool premature) { struct connectdata *conn = data->conn; - struct HTTP *http = data->req.p.http; - /* Clear multipass flag. If authentication isn't done yet, then it will get + /* Clear multipass flag. If authentication is not done yet, then it will get * a chance to be set back to true when we output the next auth header */ data->state.authhost.multipass = FALSE; data->state.authproxy.multipass = FALSE; - if(!http) - return CURLE_OK; - Curl_dyn_reset(&data->state.headerb); Curl_hyper_done(data); @@ -1230,8 +1182,8 @@ CURLcode Curl_http_done(struct Curl_easy *data, (data->req.bytecount + data->req.headerbytecount - data->req.deductheadercount) <= 0) { - /* If this connection isn't simply closed to be retried, AND nothing was - read from the HTTP server (that counts), this can't be right so we + /* If this connection is not simply closed to be retried, AND nothing was + read from the HTTP server (that counts), this cannot be right so we return an error here */ failf(data, "Empty reply from server"); /* Mark it as closed to avoid the "left intact" message */ @@ -1390,7 +1342,7 @@ CURLcode Curl_dynhds_add_custom(struct Curl_easy *data, DEBUGASSERT(name && value); if(data->state.aptr.host && - /* a Host: header was sent already, don't pass on any custom Host: + /* a Host: header was sent already, do not pass on any custom Host: header as that will produce *two* in the same request! */ hd_name_eq(name, namelen, STRCONST("Host:"))) ; @@ -1403,18 +1355,18 @@ CURLcode Curl_dynhds_add_custom(struct Curl_easy *data, hd_name_eq(name, namelen, STRCONST("Content-Type:"))) ; else if(data->req.authneg && - /* while doing auth neg, don't allow the custom length since + /* while doing auth neg, do not 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 + /* when asking for Transfer-Encoding, do not 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 */ + /* HTTP/2 does not support chunked requests */ ; else if((hd_name_eq(name, namelen, STRCONST("Authorization:")) || hd_name_eq(name, namelen, STRCONST("Cookie:"))) && @@ -1536,8 +1488,9 @@ CURLcode Curl_add_custom_headers(struct Curl_easy *data, char *compare = semicolonp ? semicolonp : headers->data; 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! */ + /* a Host: header was sent already, do not pass on any custom + Host: header as that will produce *two* in the same + request! */ checkprefix("Host:", compare)) ; else if(data->state.httpreq == HTTPREQ_POST_FORM && @@ -1549,18 +1502,18 @@ CURLcode Curl_add_custom_headers(struct Curl_easy *data, checkprefix("Content-Type:", compare)) ; else if(data->req.authneg && - /* while doing auth neg, don't allow the custom length since + /* while doing auth neg, do not allow the custom length since we will force length zero then */ checkprefix("Content-Length:", compare)) ; else if(data->state.aptr.te && - /* when asking for Transfer-Encoding, don't pass on a custom + /* when asking for Transfer-Encoding, do not pass on a custom Connection: */ checkprefix("Connection:", compare)) ; else if((conn->httpversion >= 20) && checkprefix("Transfer-Encoding:", compare)) - /* HTTP/2 doesn't support chunked requests */ + /* HTTP/2 does not support chunked requests */ ; else if((checkprefix("Authorization:", compare) || checkprefix("Cookie:", compare)) && @@ -1752,10 +1705,10 @@ CURLcode Curl_http_host(struct Curl_easy *data, struct connectdata *conn) if(ptr && (!data->state.this_is_a_follow || strcasecompare(data->state.first_host, conn->host.name))) { #if !defined(CURL_DISABLE_COOKIES) - /* If we have a given custom Host: header, we extract the host name in + /* If we have a given custom Host: header, we extract the hostname in order to possibly use it for cookie reasons later on. We only allow the custom Host: header if this is NOT a redirect, as setting Host: in the - redirected request is being out on thin ice. Except if the host name + redirected request is being out on thin ice. Except if the hostname is the same as the first one! */ char *cookiehost = Curl_copy_header_value(ptr); if(!cookiehost) @@ -1793,15 +1746,15 @@ CURLcode Curl_http_host(struct Curl_easy *data, struct connectdata *conn) } } else { - /* When building Host: headers, we must put the host name within - [brackets] if the host name is a plain IPv6-address. RFC2732-style. */ + /* When building Host: headers, we must put the hostname within + [brackets] if the hostname is a plain IPv6-address. RFC2732-style. */ const char *host = conn->host.name; if(((conn->given->protocol&(CURLPROTO_HTTPS|CURLPROTO_WSS)) && (conn->remote_port == PORT_HTTPS)) || ((conn->given->protocol&(CURLPROTO_HTTP|CURLPROTO_WS)) && (conn->remote_port == PORT_HTTP)) ) - /* if(HTTPS on port 443) OR (HTTP on port 80) then don't include + /* if(HTTPS on port 443) OR (HTTP on port 80) then do not include the port number in the host string */ aptr->host = aprintf("Host: %s%s%s\r\n", conn->bits.ipv6_ip?"[":"", host, conn->bits.ipv6_ip?"]":""); @@ -1811,7 +1764,7 @@ CURLcode Curl_http_host(struct Curl_easy *data, struct connectdata *conn) conn->remote_port); if(!aptr->host) - /* without Host: we can't make a nice request */ + /* without Host: we cannot make a nice request */ return CURLE_OUT_OF_MEMORY; } return CURLE_OK; @@ -1839,7 +1792,7 @@ CURLcode Curl_http_target(struct Curl_easy *data, /* The path sent to the proxy is in fact the entire URL. But if the remote host is a IDN-name, we must make sure that the request we produce only - uses the encoded host name! */ + uses the encoded hostname! */ /* and no fragment part */ CURLUcode uc; @@ -1862,7 +1815,7 @@ CURLcode Curl_http_target(struct Curl_easy *data, } if(strcasecompare("http", data->state.up.scheme)) { - /* when getting HTTP, we don't want the userinfo the URL */ + /* when getting HTTP, we do not want the userinfo the URL */ uc = curl_url_set(h, CURLUPART_USER, NULL, 0); if(uc) { curl_url_cleanup(h); @@ -1883,7 +1836,7 @@ CURLcode Curl_http_target(struct Curl_easy *data, curl_url_cleanup(h); - /* target or url */ + /* target or URL */ result = Curl_dyn_add(r, data->set.str[STRING_TARGET]? data->set.str[STRING_TARGET]:url); free(url); @@ -2046,8 +1999,19 @@ static CURLcode set_reader(struct Curl_easy *data, Curl_HttpReq httpreq) else result = Curl_creader_set_null(data); } - else { /* we read the bytes from the callback */ - result = Curl_creader_set_fread(data, postsize); + else { + /* we read the bytes from the callback. In case "chunked" encoding + * is forced by the application, we disregard `postsize`. This is + * a backward compatibility decision to earlier versions where + * chunking disregarded this. See issue #13229. */ + bool chunked = FALSE; + char *ptr = Curl_checkheaders(data, STRCONST("Transfer-Encoding")); + if(ptr) { + /* Some kind of TE is requested, check if 'chunked' is chosen */ + chunked = Curl_compareheader(ptr, STRCONST("Transfer-Encoding:"), + STRCONST("chunked")); + } + result = Curl_creader_set_fread(data, chunked? -1 : postsize); } return result; @@ -2075,7 +2039,7 @@ static CURLcode http_resume(struct Curl_easy *data, Curl_HttpReq httpreq) if(data->state.resume_from < 0) { /* * This is meant to get the size of the present remote-file by itself. - * We don't support this now. Bail out! + * We do not support this now. Bail out! */ data->state.resume_from = 0; } @@ -2115,6 +2079,13 @@ CURLcode Curl_http_req_set_reader(struct Curl_easy *data, data->req.upload_chunky = Curl_compareheader(ptr, STRCONST("Transfer-Encoding:"), STRCONST("chunked")); + if(data->req.upload_chunky && + Curl_use_http_1_1plus(data, data->conn) && + (data->conn->httpversion >= 20)) { + infof(data, "suppressing chunked transfer encoding on connection " + "using HTTP version 2 or higher"); + data->req.upload_chunky = FALSE; + } } else { curl_off_t req_clen = Curl_creader_total_length(data); @@ -2153,7 +2124,7 @@ static CURLcode addexpect(struct Curl_easy *data, struct dynbuf *r, if(data->req.upgr101 != UPGR101_INIT) return CURLE_OK; - /* For really small puts we don't use Expect: headers at all, and for + /* For really small puts we do not 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. */ @@ -2205,7 +2176,7 @@ CURLcode Curl_http_req_complete(struct Curl_easy *data, case HTTPREQ_POST_MIME: #endif /* We only set Content-Length and allow a custom Content-Length if - we don't upload data chunked, as RFC2616 forbids us to set both + we do not upload data chunked, as RFC2616 forbids us to set both kinds of headers (Transfer-Encoding: chunked and Content-Length). We do not override a custom "Content-Length" header, but during authentication negotiation that header is suppressed. @@ -2214,7 +2185,7 @@ CURLcode Curl_http_req_complete(struct Curl_easy *data, (data->req.authneg || !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 */ + although it is not very wise to actually set your own */ result = Curl_dyn_addf(r, "Content-Length: %" CURL_FORMAT_CURL_OFF_T "\r\n", req_clen); @@ -2253,14 +2224,16 @@ CURLcode Curl_http_req_complete(struct Curl_easy *data, /* end of headers */ result = Curl_dyn_addn(r, STRCONST("\r\n")); - Curl_pgrsSetUploadSize(data, req_clen); - if(announced_exp100) - result = http_exp100_add_reader(data); + if(!result) { + Curl_pgrsSetUploadSize(data, req_clen); + if(announced_exp100) + result = http_exp100_add_reader(data); + } out: if(!result) { /* setup variables for the upcoming transfer */ - Curl_xfer_setup(data, FIRSTSOCKET, -1, TRUE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SENDRECV, -1, TRUE); } return result; } @@ -2348,7 +2321,7 @@ CURLcode Curl_http_range(struct Curl_easy *data, { if(data->state.use_range) { /* - * A range is selected. We use different headers whether we're downloading + * A range is selected. We use different headers whether we are downloading * or uploading and we always let customized headers override our internal * ones if any such are specified. */ @@ -2366,7 +2339,7 @@ CURLcode Curl_http_range(struct Curl_easy *data, free(data->state.aptr.rangeline); if(data->set.set_resume_from < 0) { - /* Upload resume was asked for, but we don't know the size of the + /* Upload resume was asked for, but we do not know the size of the remote part so we tell the server (and act accordingly) that we upload the whole file (again) */ data->state.aptr.rangeline = @@ -2410,12 +2383,12 @@ CURLcode Curl_http_firstwrite(struct Curl_easy *data) if(data->req.newurl) { if(conn->bits.close) { /* Abort after the headers if "follow Location" is set - and we're set to close anyway. */ + and we are set to close anyway. */ k->keepon &= ~KEEP_RECV; k->done = TRUE; return CURLE_OK; } - /* We have a new url to load, but since we want to be able to reuse 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"); @@ -2426,7 +2399,7 @@ CURLcode Curl_http_firstwrite(struct Curl_easy *data) if(k->size == data->state.resume_from) { /* The resume point is at the end of file, consider this fine even if it - doesn't allow resume from here. */ + does not allow resume from here. */ infof(data, "The entire document is already downloaded"); streamclose(conn, "already downloaded"); /* Abort download */ @@ -2435,10 +2408,10 @@ CURLcode Curl_http_firstwrite(struct Curl_easy *data) return CURLE_OK; } - /* we wanted to resume a download, although the server doesn't seem to - * support this and we did this with a GET (if it wasn't a GET we did a + /* we wanted to resume a download, although the server does not seem to + * support this and we did this with a GET (if it was not a GET we did a * POST or PUT resume) */ - failf(data, "HTTP server doesn't seem to support " + failf(data, "HTTP server does not seem to support " "byte ranges. Cannot resume."); return CURLE_RANGE_ERROR; } @@ -2450,7 +2423,7 @@ CURLcode Curl_http_firstwrite(struct Curl_easy *data) if(!Curl_meets_timecondition(data, k->timeofdoc)) { k->done = TRUE; - /* We're simulating an HTTP 304 from server so we return + /* We are simulating an HTTP 304 from server so we return what should have been returned from the server */ data->info.httpcode = 304; infof(data, "Simulate an HTTP 304 response"); @@ -2472,7 +2445,7 @@ CURLcode Curl_transferencode(struct Curl_easy *data) /* When we are to insert a TE: header in the request, we must also insert TE in a Connection: header, so we need to merge the custom provided Connection: header and prevent the original to get sent. Note that if - the user has inserted his/her own TE: header we don't do this magic + the user has inserted his/her own TE: header we do not do this magic but then assume that the user will handle it all! */ char *cptr = Curl_checkheaders(data, STRCONST("Connection")); #define TE_HEADER "TE: gzip\r\n" @@ -2666,8 +2639,12 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done) httpstring, (data->state.aptr.host?data->state.aptr.host:""), +#ifndef CURL_DISABLE_PROXY data->state.aptr.proxyuserpwd? data->state.aptr.proxyuserpwd:"", +#else + "", +#endif data->state.aptr.userpwd?data->state.aptr.userpwd:"", (data->state.use_range && data->state.aptr.rangeline)? data->state.aptr.rangeline:"", @@ -2701,7 +2678,9 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done) /* clear userpwd and proxyuserpwd to avoid reusing old credentials * from reused connections */ Curl_safefree(data->state.aptr.userpwd); +#ifndef CURL_DISABLE_PROXY Curl_safefree(data->state.aptr.proxyuserpwd); +#endif free(altused); if(result) { @@ -2712,7 +2691,7 @@ CURLcode Curl_http(struct Curl_easy *data, bool *done) if(!(conn->handler->flags&PROTOPT_SSL) && conn->httpversion < 20 && (data->state.httpwant == CURL_HTTP_VERSION_2)) { - /* append HTTP2 upgrade magic stuff to the HTTP request if it isn't done + /* append HTTP2 upgrade magic stuff to the HTTP request if it is not done over SSL */ result = Curl_http2_request_upgrade(&req, data); if(result) { @@ -2842,9 +2821,10 @@ checkprotoprefix(struct Curl_easy *data, struct connectdata *conn, /* * Curl_http_header() parses a single response header. */ -CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn, - char *hd, size_t hdlen) +CURLcode Curl_http_header(struct Curl_easy *data, + const char *hd, size_t hdlen) { + struct connectdata *conn = data->conn; CURLcode result; struct SingleRequest *k = &data->req; const char *v; @@ -2854,8 +2834,8 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn, case 'A': #ifndef CURL_DISABLE_ALTSVC v = (data->asi && - ((conn->handler->flags & PROTOPT_SSL) || -#ifdef CURLDEBUG + ((data->conn->handler->flags & PROTOPT_SSL) || +#ifdef DEBUGBUILD /* allow debug builds to circumvent the HTTPS restriction */ getenv("CURL_ALTSVC_HTTP") #else @@ -2907,7 +2887,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn, * Process Content-Encoding. Look for the values: identity, * gzip, deflate, compress, x-gzip and x-compress. x-gzip and * x-compress are the same as gzip and compress. (Sec 3.5 RFC - * 2616). zlib cannot handle compress. However, errors are + * 2616). zlib cannot handle compress. However, errors are * handled further down when the response body is processed */ return Curl_build_unencoding_stack(data, v, FALSE); @@ -2942,7 +2922,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn, /* * 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. + * pleasure. Default action for 1.0 is to close. * * [RFC2068, section 19.7.1] */ connkeep(conn, "Connection keep-alive"); @@ -3035,13 +3015,13 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn, * connection will be kept alive for our pleasure. * Default action for 1.0 is to close. */ - connkeep(conn, "Proxy-Connection keep-alive"); /* don't close */ + connkeep(conn, "Proxy-Connection keep-alive"); /* do not close */ infof(data, "HTTP/1.0 proxy connection set to keep alive"); } else if((conn->httpversion == 11) && conn->bits.httpproxy && HD_IS_AND_SAYS(hd, hdlen, "Proxy-Connection:", "close")) { /* - * We get an 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 will * close down after this transfer. */ connclose(conn, "Proxy-Connection: asked to close after done"); @@ -3101,7 +3081,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn, HD_VAL(hd, hdlen, "Set-Cookie:") : NULL; if(v) { /* If there is a custom-set Host: name, use it here, or else use - * real peer host name. */ + * real peer hostname. */ const char *host = data->state.aptr.cookiehost? data->state.aptr.cookiehost:conn->host.name; const bool secure_context = @@ -3122,7 +3102,7 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn, /* If enabled, the header is incoming and this is over HTTPS */ v = (data->hsts && ((conn->handler->flags & PROTOPT_SSL) || -#ifdef CURLDEBUG +#ifdef DEBUGBUILD /* allow debug builds to circumvent the HTTPS restriction */ getenv("CURL_HSTS_HTTP") #else @@ -3145,24 +3125,28 @@ CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn, break; case 't': case 'T': - v = !k->http_bodyless? HD_VAL(hd, hdlen, "Transfer-Encoding:") : NULL; + /* RFC 9112, ch. 6.1 + * "Transfer-Encoding MAY be sent in a response to a HEAD request or + * in a 304 (Not Modified) response (Section 15.4.5 of [HTTP]) to a + * GET request, neither of which includes a message body, to indicate + * that the origin server would have applied a transfer coding to the + * message body if the request had been an unconditional GET." + * + * Read: in these cases the 'Transfer-Encoding' does not apply + * to any data following the response headers. Do not add any decoders. + */ + v = (!k->http_bodyless && + (data->state.httpreq != HTTPREQ_HEAD) && + (k->httpcode != 304))? + HD_VAL(hd, hdlen, "Transfer-Encoding:") : NULL; if(v) { /* One or more encodings. We check for chunked and/or a compression algorithm. */ - /* - * [RFC 2616, section 3.6.1] A 'chunked' transfer encoding - * means that the server will send a series of "chunks". Each - * chunk starts with line with info (including size of the - * coming block) (terminated with CRLF), then a block of data - * with the previously mentioned size. There can be any amount - * of chunks, and a chunk-data set to zero signals the - * end-of-chunks. */ - result = Curl_build_unencoding_stack(data, v, TRUE); if(result) return result; if(!k->chunk && data->set.http_transfer_encoding) { - /* if this isn't chunked, only close can signal the end of this + /* if this is not 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"); @@ -3207,13 +3191,16 @@ CURLcode Curl_http_statusline(struct Curl_easy *data, #ifdef USE_HTTP2 case 20: #endif -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 case 30: #endif - /* TODO: we should verify that responses do not switch major - * HTTP version of the connection. Now, it seems we might accept - * a HTTP/2 response on a HTTP/1.1 connection, which is wrong. */ - conn->httpversion = (unsigned char)k->httpversion; + /* no major version switch mid-connection */ + if(conn->httpversion && + (k->httpversion/10 != conn->httpversion/10)) { + failf(data, "Version mismatch (from HTTP/%u to HTTP/%u)", + conn->httpversion/10, k->httpversion/10); + return CURLE_UNSUPPORTED_PROTOCOL; + } break; default: failf(data, "Unsupported HTTP version (%u.%d) in response", @@ -3230,11 +3217,11 @@ CURLcode Curl_http_statusline(struct Curl_easy *data, data->state.httpversion = (unsigned char)k->httpversion; /* - * This code executes as part of processing the header. As a - * result, it's not totally clear how to interpret the + * This code executes as part of processing the header. As a + * result, it is not totally clear how to interpret the * response code yet as that depends on what other headers may - * be present. 401 and 407 may be errors, but may be OK - * depending on how authentication is working. Other codes + * be present. 401 and 407 may be errors, but may be OK + * depending on how authentication is working. Other codes * are definitely errors, so give up here. */ if(data->state.resume_from && data->state.httpreq == HTTPREQ_GET && @@ -3258,10 +3245,6 @@ CURLcode Curl_http_statusline(struct Curl_easy *data, of the protocol */ conn->bundle->multiuse = BUNDLE_MULTIPLEX; } - else if(k->httpversion >= 11 && !conn->bits.close) { - /* If HTTP version is >= 1.1 and connection is persistent */ - DEBUGF(infof(data, "HTTP 1.1 or later with persistent connection")); - } k->http_bodyless = k->httpcode >= 100 && k->httpcode < 200; switch(k->httpcode) { @@ -3290,7 +3273,7 @@ CURLcode Curl_http_statusline(struct Curl_easy *data, } /* Content-Length must be ignored if any Transfer-Encoding is present in the - response. Refer to RFC 7230 section 3.3.3 and RFC2616 section 4.4. This is + response. Refer to RFC 7230 section 3.3.3 and RFC2616 section 4.4. This is figured out here after all headers have been received but before the final call to the user's header callback, so that a valid content length can be retrieved by the user in the final call. */ @@ -3312,12 +3295,11 @@ CURLcode Curl_http_size(struct Curl_easy *data) return CURLE_OK; } -static CURLcode verify_header(struct Curl_easy *data) +static CURLcode verify_header(struct Curl_easy *data, + const char *hd, size_t hdlen) { struct SingleRequest *k = &data->req; - const char *header = Curl_dyn_ptr(&data->state.headerb); - size_t hlen = Curl_dyn_len(&data->state.headerb); - char *ptr = memchr(header, 0x00, hlen); + char *ptr = memchr(hd, 0x00, hdlen); if(ptr) { /* this is bad, bail out */ failf(data, "Nul byte in header"); @@ -3326,11 +3308,11 @@ static CURLcode verify_header(struct Curl_easy *data) if(k->headerline < 2) /* the first "header" is the status-line and it has no colon */ return CURLE_OK; - if(((header[0] == ' ') || (header[0] == '\t')) && k->headerline > 2) - /* line folding, can't happen on line 2 */ + if(((hd[0] == ' ') || (hd[0] == '\t')) && k->headerline > 2) + /* line folding, cannot happen on line 2 */ ; else { - ptr = memchr(header, ':', hlen); + ptr = memchr(hd, ':', hdlen); if(!ptr) { /* this is bad, bail out */ failf(data, "Header without colon"); @@ -3367,15 +3349,41 @@ CURLcode Curl_bump_headersize(struct Curl_easy *data, return CURLE_OK; } +static CURLcode http_write_header(struct Curl_easy *data, + const char *hd, size_t hdlen) +{ + CURLcode result; + int writetype; + + /* now, only output this if the header AND body are requested: + */ + Curl_debug(data, CURLINFO_HEADER_IN, (char *)hd, hdlen); + + writetype = CLIENTWRITE_HEADER | + ((data->req.httpcode/100 == 1) ? CLIENTWRITE_1XX : 0); + + result = Curl_client_write(data, writetype, hd, hdlen); + if(result) + return result; + + result = Curl_bump_headersize(data, hdlen, FALSE); + if(result) + return result; + + data->req.deductheadercount = (100 <= data->req.httpcode && + 199 >= data->req.httpcode)? + data->req.headerbytecount:0; + return result; +} static CURLcode http_on_response(struct Curl_easy *data, + const char *last_hd, size_t last_hd_len, const char *buf, size_t blen, size_t *pconsumed) { struct connectdata *conn = data->conn; CURLcode result = CURLE_OK; struct SingleRequest *k = &data->req; - bool switch_to_h2 = FALSE; (void)buf; /* not used without HTTP2 enabled */ *pconsumed = 0; @@ -3389,101 +3397,110 @@ static CURLcode http_on_response(struct Curl_easy *data, conn->bundle->multiuse = BUNDLE_NO_MULTIUSE; } + if(k->httpcode < 200 && last_hd) { + /* Intermediate responses might trigger processing of more + * responses, write the last header to the client before + * proceeding. */ + result = http_write_header(data, last_hd, last_hd_len); + last_hd = NULL; /* handled it */ + if(result) + goto out; + } + if(k->httpcode < 100) { failf(data, "Unsupported response code in HTTP response"); - return CURLE_UNSUPPORTED_PROTOCOL; + result = CURLE_UNSUPPORTED_PROTOCOL; + goto out; } else if(k->httpcode < 200) { - /* "A user agent MAY ignore unexpected 1xx status responses." */ + /* "A user agent MAY ignore unexpected 1xx status responses." + * By default, we expect to get more responses after this one. */ + k->header = TRUE; + k->headerline = 0; /* restart the header line counter */ + switch(k->httpcode) { case 100: /* * 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 - * back into the header-parsing state! */ - k->header = TRUE; - k->headerline = 0; /* restart the header line counter */ - - /* if we did wait for this do enable write now! */ Curl_http_exp100_got100(data); break; case 101: - if(conn->httpversion == 11) { - /* Switching Protocols only allowed from HTTP/1.1 */ - if(k->upgr101 == UPGR101_H2) { - /* Switching to HTTP/2 */ - infof(data, "Received 101, Switching to HTTP/2"); - k->upgr101 = UPGR101_RECEIVED; - - /* we'll get more headers (HTTP/2 response) */ - k->header = TRUE; - k->headerline = 0; /* restart the header line counter */ - switch_to_h2 = TRUE; - } + /* Switching Protocols only allowed from HTTP/1.1 */ + + if(conn->httpversion != 11) { + /* invalid for other HTTP versions */ + failf(data, "unexpected 101 response code"); + result = CURLE_WEIRD_SERVER_REPLY; + goto out; + } + if(k->upgr101 == UPGR101_H2) { + /* Switching to HTTP/2, where we will get more responses */ + infof(data, "Received 101, Switching to HTTP/2"); + k->upgr101 = UPGR101_RECEIVED; + /* We expect more response from HTTP/2 later */ + k->header = TRUE; + k->headerline = 0; /* restart the header line counter */ + /* Any remaining `buf` bytes are already HTTP/2 and passed to + * be processed. */ + result = Curl_http2_upgrade(data, conn, FIRSTSOCKET, buf, blen); + if(result) + goto out; + *pconsumed += blen; + } #ifdef USE_WEBSOCKETS - else if(k->upgr101 == UPGR101_WS) { - /* verify the response */ - result = Curl_ws_accept(data, buf, blen); - if(result) - return result; - k->header = FALSE; /* no more header to parse! */ - *pconsumed += blen; /* ws accept handled the data */ - blen = 0; - if(data->set.connect_only) - k->keepon &= ~KEEP_RECV; /* read no more content */ - } -#endif - else { - /* Not switching to another protocol */ - k->header = FALSE; /* no more header to parse! */ - } + else if(k->upgr101 == UPGR101_WS) { + /* verify the response. Any passed `buf` bytes are already in + * WebSockets format and taken in by the protocol handler. */ + result = Curl_ws_accept(data, buf, blen); + if(result) + goto out; + *pconsumed += blen; /* ws accept handled the data */ + k->header = FALSE; /* we will not get more responses */ + if(data->set.connect_only) + k->keepon &= ~KEEP_RECV; /* read no more content */ } +#endif else { - /* invalid for other HTTP versions */ - failf(data, "unexpected 101 response code"); - return CURLE_WEIRD_SERVER_REPLY; + /* We silently accept this as the final response. + * TODO: this looks, uhm, wrong. What are we switching to if we + * did not ask for an Upgrade? Maybe the application provided an + * `Upgrade: xxx` header? */ + k->header = FALSE; } break; default: - /* the status code 1xx indicates a provisional response, so - we'll get another set of headers */ - k->header = TRUE; - k->headerline = 0; /* restart the header line counter */ + /* The server may send us other 1xx responses, like informative + * 103. This have no influence on request processing and we expect + * to receive a final response eventually. */ break; } + goto out; } - else { - /* k->httpcode >= 200, final response */ - k->header = FALSE; - 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->httpcode >= 200, final response */ + k->header = FALSE; - if((k->size == -1) && !k->chunk && !conn->bits.close && - (conn->httpversion == 11) && - !(conn->handler->protocol & CURLPROTO_RTSP) && - data->state.httpreq != HTTPREQ_HEAD) { - /* On HTTP 1.1, when connection is not to get closed, but no - Content-Length nor Transfer-Encoding chunked have been - received, according to RFC2616 section 4.4 point 5, we - assume that the server will close the connection to - signal the end of the document. */ - infof(data, "no chunk, no close, no size. Assume close to " - "signal end"); - streamclose(conn, "HTTP: No end-of-message indicator"); - } + 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); } - if(!k->header) { - result = Curl_http_size(data); - if(result) - return result; + if((k->size == -1) && !k->chunk && !conn->bits.close && + (conn->httpversion == 11) && + !(conn->handler->protocol & CURLPROTO_RTSP) && + data->state.httpreq != HTTPREQ_HEAD) { + /* On HTTP 1.1, when connection is not to get closed, but no + Content-Length nor Transfer-Encoding chunked have been + received, according to RFC2616 section 4.4 point 5, we + assume that the server will close the connection to + signal the end of the document. */ + infof(data, "no chunk, no close, no size. Assume close to " + "signal end"); + streamclose(conn, "HTTP: No end-of-message indicator"); } /* At this point we have some idea about the fate of the connection. @@ -3517,33 +3534,29 @@ static CURLcode http_on_response(struct Curl_easy *data, } #endif - /* - * When all the headers have been parsed, see if we should give - * up and return an error. - */ - if(http_should_fail(data)) { - failf(data, "The requested URL returned error: %d", - k->httpcode); - return CURLE_HTTP_RETURNED_ERROR; - } - #ifdef USE_WEBSOCKETS - /* All non-101 HTTP status codes are bad when wanting to upgrade to - websockets */ + /* All >=200 HTTP status codes are errors when wanting websockets */ if(data->req.upgr101 == UPGR101_WS) { failf(data, "Refused WebSockets upgrade: %d", k->httpcode); - return CURLE_HTTP_RETURNED_ERROR; + result = CURLE_HTTP_RETURNED_ERROR; + goto out; } #endif + /* Check if this response means the transfer errored. */ + if(http_should_fail(data, data->req.httpcode)) { + failf(data, "The requested URL returned error: %d", + k->httpcode); + result = CURLE_HTTP_RETURNED_ERROR; + goto out; + } /* Curl_http_auth_act() checks what authentication methods * that are available and decides which one (if any) to * use. It will set 'newurl' if an auth method was picked. */ result = Curl_http_auth_act(data); - if(result) - return result; + goto out; if(k->httpcode >= 300) { if((!data->req.authneg) && !conn->bits.close && @@ -3566,7 +3579,7 @@ static CURLcode http_on_response(struct Curl_easy *data, case HTTPREQ_POST_MIME: /* We got an error response. If this happened before the whole * request body has been sent we stop sending and mark the - * connection for closure after we've read the entire response. + * connection for closure after we have read the entire response. */ if(!Curl_req_done_sending(data)) { if((k->httpcode == 417) && Curl_http_exp100_is_selected(data)) { @@ -3581,7 +3594,7 @@ static CURLcode http_on_response(struct Curl_easy *data, "Stop sending data before everything sent"); result = http_perhapsrewind(data, conn); if(result) - return result; + goto out; } data->state.disableexpect = TRUE; DEBUGASSERT(!data->req.newurl); @@ -3597,7 +3610,7 @@ static CURLcode http_on_response(struct Curl_easy *data, streamclose(conn, "Stop sending data before everything sent"); result = Curl_req_abort_sending(data); if(result) - return result; + goto out; } } break; @@ -3612,65 +3625,242 @@ static CURLcode http_on_response(struct Curl_easy *data, infof(data, "Keep sending data to get tossed away"); k->keepon |= KEEP_SEND; } + } - if(!k->header) { - /* - * really end-of-headers. - * - * If we requested a "no body", this is a good time to get - * out and return home. - */ - if(data->req.no_body) - k->download_done = TRUE; - - /* If max download size is *zero* (nothing) we already have - nothing and can safely return ok now! But for HTTP/2, we'd - like to call http2_handle_stream_close to properly close a - stream. In order to do this, we keep reading until we - close the stream. */ - if(0 == k->maxdownload - && !Curl_conn_is_http2(data, conn, FIRSTSOCKET) - && !Curl_conn_is_http3(data, conn, FIRSTSOCKET)) - k->download_done = TRUE; - } - - if(switch_to_h2) { - /* Having handled the headers, we can do the HTTP/2 switch. - * Any remaining `buf` bytes are already HTTP/2 and passed to - * be processed. */ - result = Curl_http2_upgrade(data, conn, FIRSTSOCKET, buf, blen); + /* This is the last response that we will got for the current request. + * Check on the body size and determine if the response is complete. + */ + result = Curl_http_size(data); + if(result) + goto out; + + /* If we requested a "no body", this is a good time to get + * out and return home. + */ + if(data->req.no_body) + k->download_done = TRUE; + + /* If max download size is *zero* (nothing) we already have + nothing and can safely return ok now! But for HTTP/2, we would + like to call http2_handle_stream_close to properly close a + stream. In order to do this, we keep reading until we + close the stream. */ + if(0 == k->maxdownload + && !Curl_conn_is_http2(data, conn, FIRSTSOCKET) + && !Curl_conn_is_http3(data, conn, FIRSTSOCKET)) + k->download_done = TRUE; + + /* final response without error, prepare to receive the body */ + result = Curl_http_firstwrite(data); + +out: + if(last_hd) { + /* if not written yet, write it now */ + CURLcode r2 = http_write_header(data, last_hd, last_hd_len); + if(!result) + result = r2; + } + return result; +} + +static CURLcode http_rw_hd(struct Curl_easy *data, + const char *hd, size_t hdlen, + const char *buf_remain, size_t blen, + size_t *pconsumed) +{ + CURLcode result = CURLE_OK; + struct SingleRequest *k = &data->req; + int writetype; + + *pconsumed = 0; + if((0x0a == *hd) || (0x0d == *hd)) { + /* Empty header line means end of headers! */ + struct dynbuf last_header; + size_t consumed; + + Curl_dyn_init(&last_header, hdlen + 1); + result = Curl_dyn_addn(&last_header, hd, hdlen); if(result) return result; - *pconsumed += blen; + + /* analyze the response to find out what to do. */ + /* Caveat: we clear anything in the header brigade, because a + * response might switch HTTP version which may call use recursively. + * Not nice, but that is currently the way of things. */ + Curl_dyn_reset(&data->state.headerb); + result = http_on_response(data, Curl_dyn_ptr(&last_header), + Curl_dyn_len(&last_header), + buf_remain, blen, &consumed); + *pconsumed += consumed; + Curl_dyn_free(&last_header); + return result; + } + + /* + * Checks for special headers coming up. + */ + + writetype = CLIENTWRITE_HEADER; + 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! */ + bool fine_statusline = FALSE; + + k->httpversion = 0; /* Do not know yet */ + if(data->conn->handler->protocol & PROTO_FAMILY_HTTP) { + /* + * https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2 + * + * The response code is always a three-digit number in HTTP as the spec + * says. We allow any three-digit number here, but we cannot make + * guarantees on future behaviors since it is not within the protocol. + */ + const char *p = hd; + + 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])) { + k->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; + k->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(!fine_statusline) { + /* If user has set option HTTP200ALIASES, + compare header line against list of aliases + */ + statusline check = checkhttpprefix(data, hd, hdlen); + if(check == STATUS_DONE) { + fine_statusline = TRUE; + k->httpcode = 200; + k->httpversion = 10; + } + } + } + else if(data->conn->handler->protocol & CURLPROTO_RTSP) { + const char *p = hd; + 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; + k->httpversion = 11; /* RTSP acts like HTTP 1.1 */ + } + } + } + } + } + if(!fine_statusline) + return CURLE_WEIRD_SERVER_REPLY; + } + } + + if(fine_statusline) { + result = Curl_http_statusline(data, data->conn); + if(result) + return result; + writetype |= CLIENTWRITE_STATUS; + } + else { + k->header = FALSE; /* this is not a header line */ + return CURLE_WEIRD_SERVER_REPLY; + } } + result = verify_header(data, hd, hdlen); + if(result) + return result; + + result = Curl_http_header(data, hd, hdlen); + if(result) + return result; + + /* + * Taken in one (more) header. Write it to the client. + */ + Curl_debug(data, CURLINFO_HEADER_IN, (char *)hd, hdlen); + + if(k->httpcode/100 == 1) + writetype |= CLIENTWRITE_1XX; + result = Curl_client_write(data, writetype, hd, hdlen); + if(result) + return result; + + result = Curl_bump_headersize(data, hdlen, FALSE); + if(result) + return result; + return CURLE_OK; } + /* * Read any HTTP header lines from the server and pass them to the client app. */ -static CURLcode http_rw_headers(struct Curl_easy *data, - const char *buf, size_t blen, - size_t *pconsumed) +static CURLcode http_parse_headers(struct Curl_easy *data, + const char *buf, size_t blen, + size_t *pconsumed) { struct connectdata *conn = data->conn; CURLcode result = CURLE_OK; struct SingleRequest *k = &data->req; - char *hd; - size_t hdlen; char *end_ptr; bool leftover_body = FALSE; /* header line within buffer loop */ *pconsumed = 0; - do { - size_t line_length; - int writetype; - - /* data is in network encoding so use 0x0a instead of '\n' */ - end_ptr = memchr(buf, 0x0a, blen); + while(blen && k->header) { + size_t consumed; + end_ptr = memchr(buf, '\n', blen); if(!end_ptr) { /* Not a complete header line within buffer, append the data to the end of the headerbuff. */ @@ -3706,14 +3896,13 @@ static CURLcode http_rw_headers(struct Curl_easy *data, } /* decrease the size of the remaining (supposed) header line */ - line_length = (end_ptr - buf) + 1; - result = Curl_dyn_addn(&data->state.headerb, buf, line_length); + consumed = (end_ptr - buf) + 1; + result = Curl_dyn_addn(&data->state.headerb, buf, consumed); if(result) return result; - - blen -= line_length; - buf += line_length; - *pconsumed += line_length; + blen -= consumed; + buf += consumed; + *pconsumed += consumed; /**** * We now have a FULL header line in 'headerb'. @@ -3741,195 +3930,21 @@ static CURLcode http_rw_headers(struct Curl_easy *data, } } - /* headers are in network encoding so use 0x0a and 0x0d instead of '\n' - and '\r' */ - hd = Curl_dyn_ptr(&data->state.headerb); - hdlen = Curl_dyn_len(&data->state.headerb); - if((0x0a == *hd) || (0x0d == *hd)) { - /* Empty header line means end of headers! */ - size_t consumed; - - /* now, only output this if the header AND body are requested: - */ - Curl_debug(data, CURLINFO_HEADER_IN, hd, hdlen); - - writetype = CLIENTWRITE_HEADER | - ((k->httpcode/100 == 1) ? CLIENTWRITE_1XX : 0); - - result = Curl_client_write(data, writetype, hd, hdlen); - if(result) - return result; - - result = Curl_bump_headersize(data, hdlen, FALSE); - if(result) - return result; - /* We are done with this line. We reset because response - * processing might switch to HTTP/2 and that might call us - * directly again. */ - Curl_dyn_reset(&data->state.headerb); - - data->req.deductheadercount = - (100 <= k->httpcode && 199 >= k->httpcode)?data->req.headerbytecount:0; - - /* analyze the response to find out what to do */ - result = http_on_response(data, buf, blen, &consumed); - if(result) - return result; - *pconsumed += consumed; + result = http_rw_hd(data, Curl_dyn_ptr(&data->state.headerb), + Curl_dyn_len(&data->state.headerb), + buf, blen, &consumed); + /* We are done with this line. We reset because response + * processing might switch to HTTP/2 and that might call us + * directly again. */ + Curl_dyn_reset(&data->state.headerb); + if(consumed) { blen -= consumed; buf += consumed; - - if(!k->header || !blen) - goto out; /* exit header line loop */ - - continue; - } - - /* - * Checks for special headers coming up. - */ - - writetype = CLIENTWRITE_HEADER; - 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! */ - bool fine_statusline = FALSE; - - k->httpversion = 0; /* Don't know yet */ - if(conn->handler->protocol & PROTO_FAMILY_HTTP) { - /* - * https://datatracker.ietf.org/doc/html/rfc7230#section-3.1.2 - * - * The response code is always a three-digit number in HTTP as the spec - * says. We allow any three-digit number here, but we cannot make - * guarantees on future behaviors since it isn't within the protocol. - */ - char *p = hd; - - 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])) { - k->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; - k->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(!fine_statusline) { - /* If user has set option HTTP200ALIASES, - compare header line against list of aliases - */ - statusline check = checkhttpprefix(data, hd, hdlen); - if(check == STATUS_DONE) { - fine_statusline = TRUE; - k->httpcode = 200; - k->httpversion = 10; - } - } - } - else if(conn->handler->protocol & CURLPROTO_RTSP) { - char *p = hd; - 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; - k->httpversion = 11; /* RTSP acts like HTTP 1.1 */ - } - } - } - } - } - if(!fine_statusline) - return CURLE_WEIRD_SERVER_REPLY; - } - } - - if(fine_statusline) { - result = Curl_http_statusline(data, conn); - if(result) - return result; - writetype |= CLIENTWRITE_STATUS; - } - else { - k->header = FALSE; /* this is not a header line */ - break; - } + *pconsumed += consumed; } - - result = verify_header(data); if(result) return result; - - result = Curl_http_header(data, conn, hd, hdlen); - if(result) - return result; - - /* - * Taken in one (more) header. Write it to the client. - */ - Curl_debug(data, CURLINFO_HEADER_IN, hd, hdlen); - - if(k->httpcode/100 == 1) - writetype |= CLIENTWRITE_1XX; - result = Curl_client_write(data, writetype, hd, hdlen); - if(result) - return result; - - result = Curl_bump_headersize(data, hdlen, FALSE); - if(result) - return result; - - Curl_dyn_reset(&data->state.headerb); } - 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 @@ -3941,6 +3956,22 @@ static CURLcode http_rw_headers(struct Curl_easy *data, return CURLE_OK; } +CURLcode Curl_http_write_resp_hd(struct Curl_easy *data, + const char *hd, size_t hdlen, + bool is_eos) +{ + CURLcode result; + size_t consumed; + char tmp = 0; + + result = http_rw_hd(data, hd, hdlen, &tmp, 0, &consumed); + if(!result && is_eos) { + result = Curl_client_write(data, (CLIENTWRITE_BODY|CLIENTWRITE_EOS), + &tmp, 0); + } + return result; +} + /* * HTTP protocol `write_resp` implementation. Will parse headers * when not done yet and otherwise return without consuming data. @@ -3956,11 +3987,8 @@ CURLcode Curl_http_write_resp_hds(struct Curl_easy *data, else { CURLcode result; - result = http_rw_headers(data, buf, blen, pconsumed); + result = http_parse_headers(data, buf, blen, pconsumed); if(!result && !data->req.header) { - /* we have successfully finished parsing the HEADERs */ - result = Curl_http_firstwrite(data); - if(!data->req.no_body && Curl_dyn_len(&data->state.headerb)) { /* leftover from parsing something that turned out not * to be a header, only happens if we allow for @@ -4429,7 +4457,7 @@ static CURLcode cr_exp100_read(struct Curl_easy *data, *eos = FALSE; return CURLE_OK; } - /* we've waited long enough, continue anyway */ + /* we have waited long enough, continue anyway */ http_exp100_continue(data, reader); infof(data, "Done waiting for 100-continue"); FALLTHROUGH(); @@ -4458,6 +4486,7 @@ static const struct Curl_crtype cr_exp100 = { Curl_creader_def_resume_from, Curl_creader_def_rewind, Curl_creader_def_unpause, + Curl_creader_def_is_paused, cr_exp100_done, sizeof(struct cr_exp100_ctx) }; diff --git a/lib/http.h b/lib/http.h index 047709f20..bb5974d94 100644 --- a/lib/http.h +++ b/lib/http.h @@ -44,7 +44,7 @@ typedef enum { #ifndef CURL_DISABLE_HTTP -#if defined(ENABLE_QUIC) +#if defined(USE_HTTP3) #include #endif @@ -73,7 +73,6 @@ char *Curl_checkProxyheaders(struct Curl_easy *data, const struct connectdata *conn, const char *thisheader, const size_t thislen); -struct HTTP; /* see below */ CURLcode Curl_add_timecondition(struct Curl_easy *data, #ifndef USE_HYPER @@ -102,8 +101,8 @@ CURLcode Curl_http_target(struct Curl_easy *data, struct connectdata *conn, struct dynbuf *req); CURLcode Curl_http_statusline(struct Curl_easy *data, struct connectdata *conn); -CURLcode Curl_http_header(struct Curl_easy *data, struct connectdata *conn, - char *headp, size_t hdlen); +CURLcode Curl_http_header(struct Curl_easy *data, + const char *hd, size_t hdlen); CURLcode Curl_transferencode(struct Curl_easy *data); CURLcode Curl_http_req_set_reader(struct Curl_easy *data, Curl_HttpReq httpreq, @@ -134,6 +133,9 @@ int Curl_http_getsock_do(struct Curl_easy *data, struct connectdata *conn, CURLcode Curl_http_write_resp(struct Curl_easy *data, const char *buf, size_t blen, bool is_eos); +CURLcode Curl_http_write_resp_hd(struct Curl_easy *data, + const char *hd, size_t hdlen, + bool is_eos); /* These functions are in http.c */ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy, @@ -144,7 +146,7 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data); selected to use no auth at all. Ie, we actively select no auth, as opposed to not having one selected. The other CURLAUTH_* defines are present in the public curl/curl.h header. */ -#define CURLAUTH_PICKNONE (1<<30) /* don't use auth */ +#define CURLAUTH_PICKNONE (1<<30) /* do not use auth */ /* MAX_INITIAL_POST_SIZE indicates the number of bytes that will make the POST data get included in the initial data chunk sent to the server. If the @@ -184,14 +186,6 @@ void Curl_http_exp100_got100(struct Curl_easy *data); /**************************************************************************** * HTTP unique setup ***************************************************************************/ -struct HTTP { -#ifndef CURL_DISABLE_HTTP - void *h2_ctx; /* HTTP/2 implementation context */ - void *h3_ctx; /* HTTP/3 implementation context */ -#else - char unused; -#endif -}; CURLcode Curl_http_size(struct Curl_easy *data); @@ -241,7 +235,7 @@ struct httpreq { }; /** - * Create a HTTP request struct. + * Create an HTTP request struct. */ CURLcode Curl_http_req_make(struct httpreq **preq, const char *method, size_t m_len, @@ -291,7 +285,7 @@ struct http_resp { }; /** - * Create a HTTP response struct. + * Create an HTTP response struct. */ CURLcode Curl_http_resp_make(struct http_resp **presp, int status, diff --git a/lib/http1.c b/lib/http1.c index 182234ca9..d7e21fdce 100644 --- a/lib/http1.c +++ b/lib/http1.c @@ -217,7 +217,7 @@ static CURLcode start_req(struct h1_req_parser *parser, 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; + unsigned int url_options; url = curl_url(); if(!url) { diff --git a/lib/http2.c b/lib/http2.c index 99d7f3b0e..6a979c136 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -29,6 +29,7 @@ #include #include "urldata.h" #include "bufq.h" +#include "hash.h" #include "http1.h" #include "http2.h" #include "http.h" @@ -82,18 +83,17 @@ /* 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. */ +/* 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. 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) +static size_t 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); @@ -111,7 +111,7 @@ static ssize_t populate_binsettings(uint8_t *binsettings, struct Curl_easy *data) { nghttp2_settings_entry iv[H2_SETTINGS_IV_LEN]; - int ivlen; + size_t ivlen; ivlen = populate_settings(iv, data); /* this returns number of bytes it wrote or a negative number on error. */ @@ -127,13 +127,17 @@ struct cf_h2_ctx { struct bufq inbufq; /* network input */ struct bufq outbufq; /* network output */ struct bufc_pool stream_bufcp; /* spares for stream buffers */ + struct dynbuf scratch; /* scratch buffer for temp use */ + struct Curl_hash streams; /* hash of `data->id` to `h2_stream_ctx` */ size_t drain_total; /* sum of all stream's UrlState drain */ uint32_t max_concurrent_streams; - int32_t goaway_error; - int32_t last_stream_id; + uint32_t goaway_error; /* goaway error code from server */ + int32_t remote_max_sid; /* max id processed by server */ + int32_t local_max_sid; /* max id processed by us */ BIT(conn_closed); - BIT(goaway); + BIT(rcvd_goaway); + BIT(sent_goaway); BIT(enable_push); BIT(nw_out_blocked); }; @@ -153,6 +157,9 @@ static void cf_h2_ctx_clear(struct cf_h2_ctx *ctx) Curl_bufq_free(&ctx->inbufq); Curl_bufq_free(&ctx->outbufq); Curl_bufcp_free(&ctx->stream_bufcp); + Curl_dyn_free(&ctx->scratch); + Curl_hash_clean(&ctx->streams); + Curl_hash_destroy(&ctx->streams); memset(ctx, 0, sizeof(*ctx)); ctx->call_data = save; } @@ -187,6 +194,7 @@ struct h2_stream_ctx { int status_code; /* HTTP response status code */ uint32_t error; /* stream error code */ + CURLcode xfer_result; /* Result of writing out response */ uint32_t local_window_size; /* the local recv window size */ int32_t id; /* HTTP/2 protocol identifier for stream */ BIT(resp_hds_complete); /* we have a complete, final response */ @@ -198,13 +206,58 @@ struct h2_stream_ctx { buffered data in stream->sendbuf to upload. */ }; -#define H2_STREAM_CTX(d) ((struct h2_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) +#define H2_STREAM_CTX(ctx,data) ((struct h2_stream_ctx *)(\ + data? Curl_hash_offt_get(&(ctx)->streams, (data)->id) : NULL)) + +static struct h2_stream_ctx *h2_stream_ctx_create(struct cf_h2_ctx *ctx) +{ + struct h2_stream_ctx *stream; + + (void)ctx; + stream = calloc(1, sizeof(*stream)); + if(!stream) + return NULL; + + stream->id = -1; + Curl_bufq_initp(&stream->sendbuf, &ctx->stream_bufcp, + H2_STREAM_SEND_CHUNKS, BUFQ_OPT_NONE); + 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; + stream->nrcvd_data = 0; + return stream; +} + +static void free_push_headers(struct h2_stream_ctx *stream) +{ + size_t i; + for(i = 0; ipush_headers_used; i++) + free(stream->push_headers[i]); + Curl_safefree(stream->push_headers); + stream->push_headers_used = 0; +} + +static void h2_stream_ctx_free(struct h2_stream_ctx *stream) +{ + Curl_bufq_free(&stream->sendbuf); + Curl_h1_req_parse_free(&stream->h1); + Curl_dynhds_free(&stream->resp_trailers); + free_push_headers(stream); + free(stream); +} + +static void h2_stream_hash_free(void *stream) +{ + DEBUGASSERT(stream); + h2_stream_ctx_free((struct h2_stream_ctx *)stream); +} /* * Mark this transfer to get "drained". @@ -237,53 +290,29 @@ static CURLcode http2_data_setup(struct Curl_cfilter *cf, (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); + stream = H2_STREAM_CTX(ctx, data); if(stream) { *pstream = stream; return CURLE_OK; } - stream = calloc(1, sizeof(*stream)); + stream = h2_stream_ctx_create(ctx); 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_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; - stream->nrcvd_data = 0; + if(!Curl_hash_offt_set(&ctx->streams, data->id, stream)) { + h2_stream_ctx_free(stream); + return CURLE_OUT_OF_MEMORY; + } - H2_STREAM_LCTX(data) = stream; *pstream = stream; return CURLE_OK; } -static void free_push_headers(struct h2_stream_ctx *stream) -{ - size_t i; - for(i = 0; ipush_headers_used; i++) - free(stream->push_headers[i]); - Curl_safefree(stream->push_headers); - stream->push_headers_used = 0; -} - static void http2_data_done(struct Curl_cfilter *cf, struct Curl_easy *data) { struct cf_h2_ctx *ctx = cf->ctx; - struct h2_stream_ctx *stream = H2_STREAM_CTX(data); + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); DEBUGASSERT(ctx); if(!stream) @@ -310,12 +339,7 @@ static void http2_data_done(struct Curl_cfilter *cf, struct Curl_easy *data) nghttp2_session_send(ctx->h2); } - Curl_bufq_free(&stream->sendbuf); - Curl_h1_req_parse_free(&stream->h1); - Curl_dynhds_free(&stream->resp_trailers); - free_push_headers(stream); - free(stream); - H2_STREAM_LCTX(data) = NULL; + Curl_hash_offt_remove(&ctx->streams, data->id); } static int h2_client_new(struct Curl_cfilter *cf, @@ -408,7 +432,9 @@ static CURLcode cf_h2_ctx_init(struct Curl_cfilter *cf, 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; + Curl_dyn_init(&ctx->scratch, CURL_MAX_HTTP_HEADER); + Curl_hash_offt_init(&ctx->streams, 63, h2_stream_hash_free); + ctx->remote_max_sid = 2147483647; rc = nghttp2_session_callbacks_new(&cbs); if(rc) { @@ -457,7 +483,7 @@ static CURLcode cf_h2_ctx_init(struct Curl_cfilter *cf, DEBUGASSERT(stream); stream->id = 1; /* queue SETTINGS frame (again) */ - rc = nghttp2_session_upgrade2(ctx->h2, binsettings, binlen, + rc = nghttp2_session_upgrade2(ctx->h2, binsettings, (size_t)binlen, data->state.httpreq == HTTPREQ_HEAD, NULL); if(rc) { @@ -478,7 +504,7 @@ static CURLcode cf_h2_ctx_init(struct Curl_cfilter *cf, } else { nghttp2_settings_entry iv[H2_SETTINGS_IV_LEN]; - int ivlen; + size_t ivlen; ivlen = populate_settings(iv, data); rc = nghttp2_submit_settings(ctx->h2, NGHTTP2_FLAG_NONE, @@ -583,8 +609,8 @@ static bool http2_connisalive(struct Curl_cfilter *cf, struct Curl_easy *data, 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, + /* This happens before we have sent off a request and the connection is + not in use by any other transfer, there should not be any data here, only "protocol frames" */ CURLcode result; ssize_t nread = -1; @@ -706,6 +732,7 @@ static ssize_t send_callback(nghttp2_session *h2, the struct are hidden from the user. */ struct curl_pushheaders { struct Curl_easy *data; + struct h2_stream_ctx *stream; const nghttp2_push_promise *frame; }; @@ -719,9 +746,8 @@ char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num) if(!h || !GOOD_EASY_HANDLE(h->data)) return NULL; else { - struct h2_stream_ctx *stream = H2_STREAM_CTX(h->data); - if(stream && num < stream->push_headers_used) - return stream->push_headers[num]; + if(h->stream && num < h->stream->push_headers_used) + return h->stream->push_headers[num]; } return NULL; } @@ -744,7 +770,7 @@ char *curl_pushheader_byname(struct curl_pushheaders *h, const char *header) !strcmp(header, ":") || strchr(header + 1, ':')) return NULL; - stream = H2_STREAM_CTX(h->data); + stream = h->stream; if(!stream) return NULL; @@ -765,18 +791,9 @@ static struct Curl_easy *h2_duphandle(struct Curl_cfilter *cf, { struct Curl_easy *second = curl_easy_duphandle(data); if(second) { - /* setup the request struct */ - struct HTTP *http = calloc(1, sizeof(struct HTTP)); - if(!http) { - (void)Curl_close(&second); - } - else { - struct h2_stream_ctx *second_stream; - - second->req.p.http = http; - http2_data_setup(cf, second, &second_stream); - second->state.priority.weight = data->state.priority.weight; - } + struct h2_stream_ctx *second_stream; + http2_data_setup(cf, second, &second_stream); + second->state.priority.weight = data->state.priority.weight; } return second; } @@ -804,7 +821,7 @@ static int set_transfer_url(struct Curl_easy *data, v = curl_pushheader_byname(hp, HTTP_PSEUDO_AUTHORITY); if(v) { - uc = Curl_url_set_authority(u, v, CURLU_DISALLOW_USER); + uc = Curl_url_set_authority(u, v); if(uc) { rc = 2; goto fail; @@ -838,9 +855,7 @@ static int set_transfer_url(struct Curl_easy *data, static void discard_newhandle(struct Curl_cfilter *cf, struct Curl_easy *newhandle) { - if(newhandle->req.p.http) { - http2_data_done(cf, newhandle); - } + http2_data_done(cf, newhandle); (void)Curl_close(&newhandle); } @@ -867,12 +882,10 @@ static int push_promise(struct Curl_cfilter *cf, goto fail; } - heads.data = data; - heads.frame = frame; /* ask the application */ CURL_TRC_CF(data, cf, "Got PUSH_PROMISE, ask application"); - stream = H2_STREAM_CTX(data); + stream = H2_STREAM_CTX(ctx, data); if(!stream) { failf(data, "Internal NULL stream"); discard_newhandle(cf, newhandle); @@ -880,6 +893,10 @@ static int push_promise(struct Curl_cfilter *cf, goto fail; } + heads.data = data; + heads.stream = stream; + heads.frame = frame; + rv = set_transfer_url(newhandle, &heads); if(rv) { discard_newhandle(cf, newhandle); @@ -936,6 +953,10 @@ static int push_promise(struct Curl_cfilter *cf, rv = CURL_PUSH_DENY; goto fail; } + + /* success, remember max stream id processed */ + if(newstream->id > ctx->local_max_sid) + ctx->local_max_sid = newstream->id; } else { CURL_TRC_CF(data, cf, "Got PUSH_PROMISE, ignore it"); @@ -945,12 +966,39 @@ static int push_promise(struct Curl_cfilter *cf, return rv; } -static CURLcode recvbuf_write_hds(struct Curl_cfilter *cf, +static void h2_xfer_write_resp_hd(struct Curl_cfilter *cf, struct Curl_easy *data, - const char *buf, size_t blen) + struct h2_stream_ctx *stream, + const char *buf, size_t blen, bool eos) { - (void)cf; - return Curl_xfer_write_resp(data, (char *)buf, blen, FALSE); + + /* If we already encountered an error, skip further writes */ + if(!stream->xfer_result) { + stream->xfer_result = Curl_xfer_write_resp_hd(data, buf, blen, eos); + if(stream->xfer_result) + CURL_TRC_CF(data, cf, "[%d] error %d writing %zu bytes of headers", + stream->id, stream->xfer_result, blen); + } +} + +static void h2_xfer_write_resp(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct h2_stream_ctx *stream, + const char *buf, size_t blen, bool eos) +{ + + /* If we already encountered an error, skip further writes */ + if(!stream->xfer_result) + stream->xfer_result = Curl_xfer_write_resp(data, buf, blen, eos); + /* If the transfer write is errored, we do not want any more data */ + if(stream->xfer_result) { + struct cf_h2_ctx *ctx = cf->ctx; + CURL_TRC_CF(data, cf, "[%d] error %d writing %zu bytes of data, " + "RST-ing stream", + stream->id, stream->xfer_result, blen); + nghttp2_submit_rst_stream(ctx->h2, 0, stream->id, + (uint32_t)NGHTTP2_ERR_CALLBACK_FAILURE); + } } static CURLcode on_stream_frame(struct Curl_cfilter *cf, @@ -958,9 +1006,8 @@ static CURLcode on_stream_frame(struct Curl_cfilter *cf, const nghttp2_frame *frame) { struct cf_h2_ctx *ctx = cf->ctx; - struct h2_stream_ctx *stream = H2_STREAM_CTX(data); + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); int32_t stream_id = frame->hd.stream_id; - CURLcode result; int rv; if(!stream) { @@ -991,7 +1038,7 @@ static CURLcode on_stream_frame(struct Curl_cfilter *cf, break; case NGHTTP2_HEADERS: if(stream->bodystarted) { - /* Only valid HEADERS after body started is trailer HEADERS. We + /* Only valid HEADERS after body started is trailer HEADERS. We buffer them in on_header callback. */ break; } @@ -1008,9 +1055,7 @@ static CURLcode on_stream_frame(struct Curl_cfilter *cf, stream->status_code = -1; } - result = recvbuf_write_hds(cf, data, STRCONST("\r\n")); - if(result) - return result; + h2_xfer_write_resp_hd(cf, data, stream, STRCONST("\r\n"), stream->closed); if(stream->status_code / 100 != 1) { stream->resp_hds_complete = TRUE; @@ -1189,7 +1234,7 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame, * 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 h2_stream_ctx *stream = H2_STREAM_CTX(data); + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); if(stream) drain_stream(cf, data, stream); } @@ -1197,12 +1242,12 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame, break; } case NGHTTP2_GOAWAY: - ctx->goaway = TRUE; + ctx->rcvd_goaway = TRUE; ctx->goaway_error = frame->goaway.error_code; - ctx->last_stream_id = frame->goaway.last_stream_id; + ctx->remote_max_sid = frame->goaway.last_stream_id; if(data) { - infof(data, "received GOAWAY, error=%d, last_stream=%u", - ctx->goaway_error, ctx->last_stream_id); + infof(data, "received GOAWAY, error=%u, last_stream=%u", + ctx->goaway_error, ctx->remote_max_sid); Curl_multi_connchanged(data->multi); } break; @@ -1229,7 +1274,6 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags, struct cf_h2_ctx *ctx = cf->ctx; struct h2_stream_ctx *stream; struct Curl_easy *data_s; - CURLcode result; (void)flags; DEBUGASSERT(stream_id); /* should never be a zero stream ID here */ @@ -1248,13 +1292,11 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags, return 0; } - stream = H2_STREAM_CTX(data_s); + stream = H2_STREAM_CTX(ctx, data_s); if(!stream) return NGHTTP2_ERR_CALLBACK_FAILURE; - result = Curl_xfer_write_resp(data_s, (char *)mem, len, FALSE); - if(result && result != CURLE_AGAIN) - return NGHTTP2_ERR_CALLBACK_FAILURE; + h2_xfer_write_resp(cf, data_s, stream, (char *)mem, len, FALSE); nghttp2_session_consume(ctx->h2, stream_id, len); stream->nrcvd_data += (curl_off_t)len; @@ -1268,6 +1310,7 @@ static int on_stream_close(nghttp2_session *session, int32_t stream_id, uint32_t error_code, void *userp) { struct Curl_cfilter *cf = userp; + struct cf_h2_ctx *ctx = cf->ctx; struct Curl_easy *data_s, *call_data = CF_DATA_CURRENT(cf); struct h2_stream_ctx *stream; int rv; @@ -1292,7 +1335,7 @@ static int on_stream_close(nghttp2_session *session, int32_t stream_id, (void)nghttp2_session_set_stream_user_data(session, stream_id, 0); return NGHTTP2_ERR_CALLBACK_FAILURE; } - stream = H2_STREAM_CTX(data_s); + stream = H2_STREAM_CTX(ctx, data_s); if(!stream) { CURL_TRC_CF(data_s, cf, "[%d] on_stream_close, GOOD easy but no stream", stream_id); @@ -1327,6 +1370,7 @@ static int on_begin_headers(nghttp2_session *session, const nghttp2_frame *frame, void *userp) { struct Curl_cfilter *cf = userp; + struct cf_h2_ctx *ctx = cf->ctx; struct h2_stream_ctx *stream; struct Curl_easy *data_s = NULL; @@ -1340,7 +1384,7 @@ static int on_begin_headers(nghttp2_session *session, return 0; } - stream = H2_STREAM_CTX(data_s); + stream = H2_STREAM_CTX(ctx, data_s); if(!stream || !stream->bodystarted) { return 0; } @@ -1356,6 +1400,7 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame, void *userp) { struct Curl_cfilter *cf = userp; + struct cf_h2_ctx *ctx = cf->ctx; struct h2_stream_ctx *stream; struct Curl_easy *data_s; int32_t stream_id = frame->hd.stream_id; @@ -1371,7 +1416,7 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame, internal error more than anything else! */ return NGHTTP2_ERR_CALLBACK_FAILURE; - stream = H2_STREAM_CTX(data_s); + stream = H2_STREAM_CTX(ctx, data_s); if(!stream) { failf(data_s, "Internal NULL stream"); return NGHTTP2_ERR_CALLBACK_FAILURE; @@ -1465,14 +1510,15 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame, result = Curl_headers_push(data_s, buffer, CURLH_PSEUDO); if(result) return NGHTTP2_ERR_CALLBACK_FAILURE; - result = recvbuf_write_hds(cf, data_s, STRCONST("HTTP/2 ")); - if(result) - return NGHTTP2_ERR_CALLBACK_FAILURE; - 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 = recvbuf_write_hds(cf, data_s, STRCONST(" \r\n")); + Curl_dyn_reset(&ctx->scratch); + result = Curl_dyn_addn(&ctx->scratch, STRCONST("HTTP/2 ")); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, value, valuelen); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, STRCONST(" \r\n")); + if(!result) + h2_xfer_write_resp_hd(cf, data_s, stream, Curl_dyn_ptr(&ctx->scratch), + Curl_dyn_len(&ctx->scratch), FALSE); if(result) return NGHTTP2_ERR_CALLBACK_FAILURE; /* if we receive data for another handle, wake that up */ @@ -1487,16 +1533,17 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame, /* nghttp2 guarantees that namelen > 0, and :status was already received, and this is not pseudo-header field . */ /* 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 = recvbuf_write_hds(cf, data_s, STRCONST(": ")); - if(result) - return NGHTTP2_ERR_CALLBACK_FAILURE; - result = recvbuf_write_hds(cf, data_s, (const char *)value, valuelen); - if(result) - return NGHTTP2_ERR_CALLBACK_FAILURE; - result = recvbuf_write_hds(cf, data_s, STRCONST("\r\n")); + Curl_dyn_reset(&ctx->scratch); + result = Curl_dyn_addn(&ctx->scratch, (const char *)name, namelen); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, STRCONST(": ")); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, (const char *)value, valuelen); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, STRCONST("\r\n")); + if(!result) + h2_xfer_write_resp_hd(cf, data_s, stream, Curl_dyn_ptr(&ctx->scratch), + Curl_dyn_len(&ctx->scratch), FALSE); if(result) return NGHTTP2_ERR_CALLBACK_FAILURE; /* if we receive data for another handle, wake that up */ @@ -1517,6 +1564,7 @@ static ssize_t req_body_read_callback(nghttp2_session *session, void *userp) { struct Curl_cfilter *cf = userp; + struct cf_h2_ctx *ctx = cf->ctx; struct Curl_easy *data_s; struct h2_stream_ctx *stream = NULL; CURLcode result; @@ -1533,7 +1581,7 @@ static ssize_t req_body_read_callback(nghttp2_session *session, internal error more than anything else! */ return NGHTTP2_ERR_CALLBACK_FAILURE; - stream = H2_STREAM_CTX(data_s); + stream = H2_STREAM_CTX(ctx, data_s); if(!stream) return NGHTTP2_ERR_CALLBACK_FAILURE; } @@ -1596,7 +1644,7 @@ CURLcode Curl_http2_request_upgrade(struct dynbuf *req, return CURLE_FAILED_INIT; } - result = Curl_base64url_encode((const char *)binsettings, binlen, + result = Curl_base64url_encode((const char *)binsettings, (size_t)binlen, &base64, &blen); if(result) { Curl_dyn_free(req); @@ -1620,7 +1668,7 @@ static CURLcode http2_data_done_send(struct Curl_cfilter *cf, { struct cf_h2_ctx *ctx = cf->ctx; CURLcode result = CURLE_OK; - struct h2_stream_ctx *stream = H2_STREAM_CTX(data); + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); if(!ctx || !ctx->h2 || !stream) goto out; @@ -1652,12 +1700,21 @@ static ssize_t http2_handle_stream_close(struct Curl_cfilter *cf, if(stream->error == NGHTTP2_REFUSED_STREAM) { 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 */ + connclose(cf->conn, "REFUSED_STREAM"); /* do not 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) { + if(stream->resp_hds_complete && data->req.no_body) { + CURL_TRC_CF(data, cf, "[%d] error after response headers, but we did " + "not want a body anyway, ignore: %s (err %u)", + stream->id, nghttp2_http2_strerror(stream->error), + stream->error); + stream->close_handled = TRUE; + *err = CURLE_OK; + goto out; + } failf(data, "HTTP/2 stream %u was not closed cleanly: %s (err %u)", stream->id, nghttp2_http2_strerror(stream->error), stream->error); @@ -1736,11 +1793,12 @@ static int sweight_in_effect(const struct Curl_easy *data) * struct. */ -static void h2_pri_spec(struct Curl_easy *data, +static void h2_pri_spec(struct cf_h2_ctx *ctx, + struct Curl_easy *data, nghttp2_priority_spec *pri_spec) { struct Curl_data_priority *prio = &data->set.priority; - struct h2_stream_ctx *depstream = H2_STREAM_CTX(prio->parent); + struct h2_stream_ctx *depstream = H2_STREAM_CTX(ctx, prio->parent); int32_t depstream_id = depstream? depstream->id:0; nghttp2_priority_spec_init(pri_spec, depstream_id, sweight_wanted(data), @@ -1749,7 +1807,7 @@ static void h2_pri_spec(struct Curl_easy *data, } /* - * Check if there's been an update in the priority / + * Check if there is 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. @@ -1758,7 +1816,7 @@ static CURLcode h2_progress_egress(struct Curl_cfilter *cf, struct Curl_easy *data) { struct cf_h2_ctx *ctx = cf->ctx; - struct h2_stream_ctx *stream = H2_STREAM_CTX(data); + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); int rv = 0; if(stream && stream->id > 0 && @@ -1768,7 +1826,7 @@ static CURLcode h2_progress_egress(struct Curl_cfilter *cf, /* send new weight and/or dependency */ nghttp2_priority_spec pri_spec; - h2_pri_spec(data, &pri_spec); + h2_pri_spec(ctx, data, &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, @@ -1799,13 +1857,18 @@ static ssize_t stream_recv(struct Curl_cfilter *cf, struct Curl_easy *data, (void)buf; *err = CURLE_AGAIN; - if(stream->closed) { + if(stream->xfer_result) { + CURL_TRC_CF(data, cf, "[%d] xfer write failed", stream->id); + *err = stream->xfer_result; + nread = -1; + } + else if(stream->closed) { CURL_TRC_CF(data, cf, "[%d] returning CLOSE", stream->id); nread = http2_handle_stream_close(cf, data, stream, err); } else if(stream->reset || (ctx->conn_closed && Curl_bufq_is_empty(&ctx->inbufq)) || - (ctx->goaway && ctx->last_stream_id < stream->id)) { + (ctx->rcvd_goaway && ctx->remote_max_sid < stream->id)) { CURL_TRC_CF(data, cf, "[%d] returning ERR", stream->id); *err = data->req.bytecount? CURLE_PARTIAL_FILE : CURLE_HTTP2; nread = -1; @@ -1838,7 +1901,7 @@ static CURLcode h2_progress_ingress(struct Curl_cfilter *cf, * 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); + stream = H2_STREAM_CTX(ctx, data); if(stream && (stream->closed || !data_max_bytes)) { /* We would like to abort here and stop processing, so that * the transfer loop can handle the data/close here. However, @@ -1884,7 +1947,7 @@ 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 h2_stream_ctx *stream = H2_STREAM_CTX(data); + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); ssize_t nread = -1; CURLcode result; struct cf_call_data save; @@ -1942,7 +2005,7 @@ static ssize_t cf_h2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, out: result = h2_progress_egress(cf, data); if(result == CURLE_AGAIN) { - /* pending data to send, need to be called again. Ideally, we'd + /* pending data to send, need to be called again. Ideally, we would * monitor the socket for POLLOUT, but we might not be in SENDING * transfer state any longer and are unable to make this happen. */ @@ -2016,7 +2079,7 @@ static ssize_t h2_submit(struct h2_stream_ctx **pstream, goto out; } - h2_pri_spec(data, &pri_spec); + h2_pri_spec(ctx, data, &pri_spec); if(!nghttp2_session_check_request_allowed(ctx->h2)) CURL_TRC_CF(data, cf, "send request NOT allowed (via nghttp2)"); @@ -2113,7 +2176,7 @@ 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 h2_stream_ctx *stream = H2_STREAM_CTX(data); + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); struct cf_call_data save; int rv; ssize_t nwritten; @@ -2219,8 +2282,8 @@ static ssize_t cf_h2_send(struct Curl_cfilter *cf, struct Curl_easy *data, /* 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); + size_t rwin = (size_t)nghttp2_session_get_stream_remote_window_size( + ctx->h2, stream->id); /* At the start of a stream, we are called with request headers * and, possibly, parts of the body. Later, only body data. * If we cannot send pure body data, we EAGAIN. If there had been @@ -2285,6 +2348,7 @@ static void cf_h2_adjust_pollset(struct Curl_cfilter *cf, struct easy_pollset *ps) { struct cf_h2_ctx *ctx = cf->ctx; + struct cf_call_data save; curl_socket_t sock; bool want_recv, want_send; @@ -2294,8 +2358,7 @@ static void cf_h2_adjust_pollset(struct Curl_cfilter *cf, sock = Curl_conn_cf_get_socket(cf, data); Curl_pollset_check(data, ps, sock, &want_recv, &want_send); if(want_recv || want_send) { - struct h2_stream_ctx *stream = H2_STREAM_CTX(data); - struct cf_call_data save; + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); bool c_exhaust, s_exhaust; CF_DATA_SAVE(save, cf, data); @@ -2310,6 +2373,14 @@ static void cf_h2_adjust_pollset(struct Curl_cfilter *cf, Curl_pollset_set(data, ps, sock, want_recv, want_send); CF_DATA_RESTORE(cf, save); } + else if(ctx->sent_goaway && !cf->shutdown) { + /* shutdown in progress */ + CF_DATA_SAVE(save, cf, data); + want_send = nghttp2_session_want_write(ctx->h2); + want_recv = nghttp2_session_want_read(ctx->h2); + Curl_pollset_set(data, ps, sock, want_recv, want_send); + CF_DATA_RESTORE(cf, save); + } } static CURLcode cf_h2_connect(struct Curl_cfilter *cf, @@ -2373,6 +2444,7 @@ static void cf_h2_close(struct Curl_cfilter *cf, struct Curl_easy *data) CF_DATA_SAVE(save, cf, data); cf_h2_ctx_clear(ctx); CF_DATA_RESTORE(cf, save); + cf->connected = FALSE; } if(cf->next) cf->next->cft->do_close(cf->next, data); @@ -2389,22 +2461,66 @@ static void cf_h2_destroy(struct Curl_cfilter *cf, struct Curl_easy *data) } } +static CURLcode cf_h2_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, bool *done) +{ + struct cf_h2_ctx *ctx = cf->ctx; + struct cf_call_data save; + CURLcode result; + int rv; + + if(!cf->connected || !ctx->h2 || cf->shutdown || ctx->conn_closed) { + *done = TRUE; + return CURLE_OK; + } + + CF_DATA_SAVE(save, cf, data); + + if(!ctx->sent_goaway) { + rv = nghttp2_submit_goaway(ctx->h2, NGHTTP2_FLAG_NONE, + ctx->local_max_sid, 0, + (const uint8_t *)"shutown", sizeof("shutown")); + if(rv) { + failf(data, "nghttp2_submit_goaway() failed: %s(%d)", + nghttp2_strerror(rv), rv); + result = CURLE_SEND_ERROR; + goto out; + } + ctx->sent_goaway = TRUE; + } + /* GOAWAY submitted, process egress and ingress until nghttp2 is done. */ + result = CURLE_OK; + if(nghttp2_session_want_write(ctx->h2)) + result = h2_progress_egress(cf, data); + if(!result && nghttp2_session_want_read(ctx->h2)) + result = h2_progress_ingress(cf, data, 0); + + *done = (ctx->conn_closed || + (!result && !nghttp2_session_want_write(ctx->h2) && + !nghttp2_session_want_read(ctx->h2))); + +out: + CF_DATA_RESTORE(cf, save); + cf->shutdown = (result || *done); + return result; +} + static CURLcode http2_data_pause(struct Curl_cfilter *cf, struct Curl_easy *data, bool pause) { #ifdef NGHTTP2_HAS_SET_LOCAL_WINDOW_SIZE struct cf_h2_ctx *ctx = cf->ctx; - struct h2_stream_ctx *stream = H2_STREAM_CTX(data); + struct h2_stream_ctx *stream = H2_STREAM_CTX(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->id, - window); + int rv = (int)nghttp2_session_set_local_window_size(ctx->h2, + NGHTTP2_FLAG_NONE, + stream->id, + (int32_t)window); if(rv) { failf(data, "nghttp2_session_set_local_window_size() failed: %s(%d)", nghttp2_strerror(rv), rv); @@ -2432,7 +2548,7 @@ static CURLcode http2_data_pause(struct Curl_cfilter *cf, #ifdef DEBUGBUILD { /* read out the stream local window again */ - uint32_t window2 = + uint32_t window2 = (uint32_t) nghttp2_session_get_stream_local_window_size(ctx->h2, stream->id); DEBUGF(infof(data, "HTTP/2 window size is now %u for stream %u", @@ -2480,7 +2596,7 @@ static bool cf_h2_data_pending(struct Curl_cfilter *cf, const struct Curl_easy *data) { struct cf_h2_ctx *ctx = cf->ctx; - struct h2_stream_ctx *stream = H2_STREAM_CTX(data); + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); if(ctx && (!Curl_bufq_is_empty(&ctx->inbufq) || (stream && !Curl_bufq_is_empty(&stream->sendbuf)))) @@ -2539,6 +2655,11 @@ static CURLcode cf_h2_query(struct Curl_cfilter *cf, *pres1 = (effective_max > INT_MAX)? INT_MAX : (int)effective_max; CF_DATA_RESTORE(cf, save); return CURLE_OK; + case CF_QUERY_STREAM_ERROR: { + struct h2_stream_ctx *stream = H2_STREAM_CTX(ctx, data); + *pres1 = stream? (int)stream->error : 0; + return CURLE_OK; + } default: break; } @@ -2554,6 +2675,7 @@ struct Curl_cftype Curl_cft_nghttp2 = { cf_h2_destroy, cf_h2_connect, cf_h2_close, + cf_h2_shutdown, Curl_cf_def_get_host, cf_h2_adjust_pollset, cf_h2_data_pending, @@ -2651,7 +2773,7 @@ bool Curl_http2_may_switch(struct Curl_easy *data, 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 + /* We do not support HTTP/2 proxies yet. Also it is debatable whether or not this setting should apply to HTTP/2 proxies. */ infof(data, "Ignoring HTTP/2 prior knowledge due to proxy"); return FALSE; @@ -2675,7 +2797,7 @@ CURLcode Curl_http2_switch(struct Curl_easy *data, if(result) return result; - conn->httpversion = 20; /* we know we're on HTTP/2 now */ + conn->httpversion = 20; /* we know we are on HTTP/2 now */ conn->bits.multiplex = TRUE; /* at least potentially multiplexed */ conn->bundle->multiuse = BUNDLE_MULTIPLEX; Curl_multi_connchanged(data->multi); @@ -2699,7 +2821,7 @@ CURLcode Curl_http2_switch_at(struct Curl_cfilter *cf, struct Curl_easy *data) return result; cf_h2 = cf->next; - cf->conn->httpversion = 20; /* we know we're on HTTP/2 now */ + cf->conn->httpversion = 20; /* we know we are on HTTP/2 now */ cf->conn->bits.multiplex = TRUE; /* at least potentially multiplexed */ cf->conn->bundle->multiuse = BUNDLE_MULTIPLEX; Curl_multi_connchanged(data->multi); @@ -2752,7 +2874,7 @@ CURLcode Curl_http2_upgrade(struct Curl_easy *data, " after upgrade: len=%zu", nread); } - conn->httpversion = 20; /* we know we're on HTTP/2 now */ + conn->httpversion = 20; /* we know we are on HTTP/2 now */ conn->bits.multiplex = TRUE; /* at least potentially multiplexed */ conn->bundle->multiuse = BUNDLE_MULTIPLEX; Curl_multi_connchanged(data->multi); @@ -2768,8 +2890,11 @@ CURLcode Curl_http2_upgrade(struct Curl_easy *data, CURLE_HTTP2_STREAM error! */ bool Curl_h2_http_1_1_error(struct Curl_easy *data) { - struct h2_stream_ctx *stream = H2_STREAM_CTX(data); - return (stream && stream->error == NGHTTP2_HTTP_1_1_REQUIRED); + if(Curl_conn_is_http2(data, data->conn, FIRSTSOCKET)) { + int err = Curl_conn_get_stream_error(data, data->conn, FIRSTSOCKET); + return (err == NGHTTP2_HTTP_1_1_REQUIRED); + } + return FALSE; } #else /* !USE_NGHTTP2 */ diff --git a/lib/http_aws_sigv4.c b/lib/http_aws_sigv4.c index c9382918e..9e4f72016 100644 --- a/lib/http_aws_sigv4.c +++ b/lib/http_aws_sigv4.c @@ -158,10 +158,7 @@ static CURLcode make_headers(struct Curl_easy *data, msnprintf(date_full_hdr, DATE_FULL_HDR_LEN, "x-%s-date:%s", provider1, timestamp); - if(Curl_checkheaders(data, STRCONST("Host"))) { - head = NULL; - } - else { + if(!Curl_checkheaders(data, STRCONST("Host"))) { char full_host[FULL_HOST_LEN + 1]; if(data->state.aptr.host) { @@ -426,6 +423,76 @@ static int compare_func(const void *a, const void *b) #define MAX_QUERYPAIRS 64 +/** + * found_equals have a double meaning, + * detect if an equal have been found when called from canon_query, + * and mark that this function is called to compute the path, + * if found_equals is NULL. + */ +static CURLcode canon_string(const char *q, size_t len, + struct dynbuf *dq, bool *found_equals) +{ + CURLcode result = CURLE_OK; + + for(; 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 '%': + /* 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: { + const char hex[] = "0123456789ABCDEF"; + char out[3]={'%'}; + + if(!found_equals) { + /* if found_equals is NULL assuming, been in path */ + if(*q == '/') { + /* allowed as if */ + result = Curl_dyn_addn(dq, q, 1); + break; + } + } + else { + /* allowed as-is */ + if(*q == '=') { + result = Curl_dyn_addn(dq, q, 1); + *found_equals = true; + break; + } + } + /* URL encode */ + out[1] = hex[((unsigned char)*q)>>4]; + out[2] = hex[*q & 0xf]; + result = Curl_dyn_addn(dq, out, 3); + break; + } + } + } + } + return result; +} + + static CURLcode canon_query(struct Curl_easy *data, const char *query, struct dynbuf *dq) { @@ -463,54 +530,11 @@ static CURLcode canon_query(struct Curl_easy *data, 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; - } - } - } - } + result = canon_string(q, ap->len, dq, &found_equals); if(!result && !found_equals) { /* queries without value still need an equals */ result = Curl_dyn_addn(dq, "=", 1); @@ -543,6 +567,7 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy) struct dynbuf canonical_headers; struct dynbuf signed_headers; struct dynbuf canonical_query; + struct dynbuf canonical_path; char *date_header = NULL; Curl_HttpReq httpreq; const char *method = NULL; @@ -573,6 +598,7 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy) 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); + Curl_dyn_init(&canonical_path, CURL_MAX_HTTP_HEADER); /* * Parameters parsing @@ -594,7 +620,7 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy) ":%" MAX_SIGV4_LEN_TXT "s", provider0, provider1, region, service); if(!provider0[0]) { - failf(data, "first aws-sigv4 provider can't be empty"); + failf(data, "first aws-sigv4 provider cannot be empty"); result = CURLE_BAD_FUNCTION_ARGUMENT; goto fail; } @@ -668,10 +694,10 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy) if(force_timestamp) clock = 0; else - time(&clock); + clock = time(NULL); } #else - time(&clock); + clock = time(NULL); #endif result = Curl_gmtime(clock, &tm); if(result) { @@ -701,6 +727,11 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy) result = canon_query(data, data->state.up.query, &canonical_query); if(result) goto fail; + + result = canon_string(data->state.up.path, strlen(data->state.up.path), + &canonical_path, NULL); + if(result) + goto fail; result = CURLE_OUT_OF_MEMORY; canonical_request = @@ -711,7 +742,7 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy) "%s\n" /* SignedHeaders */ "%.*s", /* HashedRequestPayload in hex */ method, - data->state.up.path, + Curl_dyn_ptr(&canonical_path), Curl_dyn_ptr(&canonical_query) ? Curl_dyn_ptr(&canonical_query) : "", Curl_dyn_ptr(&canonical_headers), @@ -779,7 +810,7 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy) "SignedHeaders=%s, " "Signature=%s\r\n" /* - * date_header is added here, only if it wasn't + * date_header is added here, only if it was not * user-specified (using CURLOPT_HTTPHEADER). * date_header includes \r\n */ @@ -803,6 +834,7 @@ CURLcode Curl_output_aws_sigv4(struct Curl_easy *data, bool proxy) fail: Curl_dyn_free(&canonical_query); + Curl_dyn_free(&canonical_path); Curl_dyn_free(&canonical_headers); Curl_dyn_free(&signed_headers); free(canonical_request); diff --git a/lib/http_chunks.c b/lib/http_chunks.c index ac9d72470..001185da9 100644 --- a/lib/http_chunks.c +++ b/lib/http_chunks.c @@ -28,6 +28,7 @@ #include "urldata.h" /* it includes http_chunks.h */ #include "curl_printf.h" +#include "curl_trc.h" #include "sendf.h" /* for the client write stuff */ #include "dynbuf.h" #include "content_encoding.h" @@ -181,12 +182,15 @@ static CURLcode httpchunk_readwrite(struct Curl_easy *data, case CHUNK_LF: /* waiting for the LF after a chunk size */ if(*buf == 0x0a) { - /* we're now expecting data to come, unless size was zero! */ + /* we are now expecting data to come, unless size was zero! */ if(0 == ch->datasize) { ch->state = CHUNK_TRAILER; /* now check for trailers */ } - else + else { ch->state = CHUNK_DATA; + CURL_TRC_WRITE(data, "http_chunked, chunk start of %" + CURL_FORMAT_CURL_OFF_T " bytes", ch->datasize); + } } buf++; @@ -221,6 +225,9 @@ static CURLcode httpchunk_readwrite(struct Curl_easy *data, ch->datasize -= piece; /* decrease amount left to expect */ buf += piece; /* move read pointer forward */ blen -= piece; /* decrease space left in this round */ + CURL_TRC_WRITE(data, "http_chunked, write %zu body bytes, %" + CURL_FORMAT_CURL_OFF_T " bytes in chunk remain", + piece, ch->datasize); if(0 == ch->datasize) /* end of data this round, we now expect a trailing CRLF */ @@ -282,9 +289,9 @@ static CURLcode httpchunk_readwrite(struct Curl_easy *data, break; } else { - /* no trailer, we're on the final CRLF pair */ + /* no trailer, we are on the final CRLF pair */ ch->state = CHUNK_TRAILER_POSTCR; - break; /* don't advance the pointer */ + break; /* do not advance the pointer */ } } else { @@ -337,14 +344,17 @@ static CURLcode httpchunk_readwrite(struct Curl_easy *data, blen--; (*pconsumed)++; /* Record the length of any data left in the end of the buffer - even if there's no more chunks to read */ + even if there is no more chunks to read */ ch->datasize = blen; ch->state = CHUNK_DONE; + CURL_TRC_WRITE(data, "http_chunk, response complete"); return CURLE_OK; } else { ch->state = CHUNK_FAILED; ch->last_code = CHUNKE_BAD_CHUNK; + CURL_TRC_WRITE(data, "http_chunk error, expected 0x0a, seeing 0x%ux", + (unsigned int)*buf); return CURLE_RECV_ERROR; } case CHUNK_DONE: @@ -460,7 +470,7 @@ const struct Curl_cwtype Curl_httpchunk_unencoder = { sizeof(struct chunked_writer) }; -/* max length of a HTTP chunk that we want to generate */ +/* max length of an HTTP chunk that we want to generate */ #define CURL_CHUNKED_MINLEN (1024) #define CURL_CHUNKED_MAXLEN (64 * 1024) @@ -498,6 +508,7 @@ static CURLcode add_last_chunk(struct Curl_easy *data, int rc; if(!data->set.trailer_callback) { + CURL_TRC_READ(data, "http_chunk, added last, empty chunk"); return Curl_bufq_cwrite(&ctx->chunkbuf, STRCONST("0\r\n\r\n"), &n); } @@ -535,6 +546,8 @@ static CURLcode add_last_chunk(struct Curl_easy *data, out: curl_slist_free_all(trailers); + CURL_TRC_READ(data, "http_chunk, added last chunk with trailers " + "from client -> %d", result); return result; } @@ -581,6 +594,8 @@ static CURLcode add_chunk(struct Curl_easy *data, result = Curl_bufq_cwrite(&ctx->chunkbuf, buf, nread, &n); if(!result) result = Curl_bufq_cwrite(&ctx->chunkbuf, "\r\n", 2, &n); + CURL_TRC_READ(data, "http_chunk, made chunk of %zu bytes -> %d", + nread, result); if(result) return result; } @@ -644,6 +659,7 @@ const struct Curl_crtype Curl_httpchunk_encoder = { Curl_creader_def_resume_from, Curl_creader_def_rewind, Curl_creader_def_unpause, + Curl_creader_def_is_paused, Curl_creader_def_done, sizeof(struct chunked_reader) }; diff --git a/lib/http_chunks.h b/lib/http_chunks.h index d3ecc36c7..34951ea0f 100644 --- a/lib/http_chunks.h +++ b/lib/http_chunks.h @@ -33,12 +33,12 @@ struct connectdata; /* * The longest possible hexadecimal number we support in a chunked transfer. * Neither RFC2616 nor the later HTTP specs define a maximum chunk size. - * For 64 bit curl_off_t we support 16 digits. For 32 bit, 8 digits. + * For 64-bit curl_off_t we support 16 digits. For 32-bit, 8 digits. */ #define CHUNK_MAXNUM_LEN (SIZEOF_CURL_OFF_T * 2) typedef enum { - /* await and buffer all hexadecimal digits until we get one that isn't a + /* await and buffer all hexadecimal digits until we get one that is not a hexadecimal digit. When done, we go CHUNK_LF */ CHUNK_HEX, @@ -54,9 +54,9 @@ typedef enum { big deal. */ CHUNK_POSTLF, - /* Used to mark that we're out of the game. NOTE: that there's a 'datasize' - field in the struct that will tell how many bytes that were not passed to - the client in the end of the last buffer! */ + /* Used to mark that we are out of the game. NOTE: that there is a + 'datasize' field in the struct that will tell how many bytes that were + not passed to the client in the end of the last buffer! */ CHUNK_STOP, /* At this point optional trailer headers can be found, unless the next line diff --git a/lib/http_negotiate.c b/lib/http_negotiate.c index 153e3d4ab..629de834f 100644 --- a/lib/http_negotiate.c +++ b/lib/http_negotiate.c @@ -95,7 +95,7 @@ CURLcode Curl_input_negotiate(struct Curl_easy *data, struct connectdata *conn, Curl_http_auth_cleanup_negotiate(conn); } else if(state != GSS_AUTHNONE) { - /* The server rejected our authentication and hasn't supplied any more + /* The server rejected our authentication and has not supplied any more negotiation mechanisms */ Curl_http_auth_cleanup_negotiate(conn); return CURLE_LOGIN_DENIED; @@ -120,16 +120,29 @@ CURLcode Curl_input_negotiate(struct Curl_easy *data, struct connectdata *conn, CURLcode Curl_output_negotiate(struct Curl_easy *data, struct connectdata *conn, bool proxy) { - struct negotiatedata *neg_ctx = proxy ? &conn->proxyneg : - &conn->negotiate; - struct auth *authp = proxy ? &data->state.authproxy : &data->state.authhost; - curlnegotiate *state = proxy ? &conn->proxy_negotiate_state : - &conn->http_negotiate_state; + struct negotiatedata *neg_ctx; + struct auth *authp; + curlnegotiate *state; char *base64 = NULL; size_t len = 0; char *userp; CURLcode result; + if(proxy) { +#ifndef CURL_DISABLE_PROXY + neg_ctx = &conn->proxyneg; + authp = &data->state.authproxy; + state = &conn->proxy_negotiate_state; +#else + return CURLE_NOT_BUILT_IN; +#endif + } + else { + neg_ctx = &conn->negotiate; + authp = &data->state.authhost; + state = &conn->http_negotiate_state; + } + authp->done = FALSE; if(*state == GSS_AUTHRECV) { @@ -171,8 +184,10 @@ CURLcode Curl_output_negotiate(struct Curl_easy *data, base64); if(proxy) { +#ifndef CURL_DISABLE_PROXY Curl_safefree(data->state.aptr.proxyuserpwd); data->state.aptr.proxyuserpwd = userp; +#endif } else { Curl_safefree(data->state.aptr.userpwd); @@ -203,7 +218,7 @@ CURLcode Curl_output_negotiate(struct Curl_easy *data, if(*state == GSS_AUTHDONE || *state == GSS_AUTHSUCC) { /* connection is already authenticated, - * don't send a header in future requests */ + * do not send a header in future requests */ authp->done = TRUE; } diff --git a/lib/http_ntlm.c b/lib/http_ntlm.c index b845ddf37..95c138d4f 100644 --- a/lib/http_ntlm.c +++ b/lib/http_ntlm.c @@ -40,7 +40,6 @@ #include "strcase.h" #include "http_ntlm.h" #include "curl_ntlm_core.h" -#include "curl_ntlm_wb.h" #include "curl_base64.h" #include "vauth/vauth.h" #include "url.h" @@ -201,7 +200,7 @@ CURLcode Curl_output_ntlm(struct Curl_easy *data, bool proxy) Curl_bufref_init(&ntlmmsg); - /* connection is already authenticated, don't send a header in future + /* connection is already authenticated, do not send a header in future * requests so go directly to NTLMSTATE_LAST */ if(*state == NTLMSTATE_TYPE3) *state = NTLMSTATE_LAST; @@ -266,10 +265,6 @@ void Curl_http_auth_cleanup_ntlm(struct connectdata *conn) { Curl_auth_cleanup_ntlm(&conn->ntlm); Curl_auth_cleanup_ntlm(&conn->proxyntlm); - -#if defined(NTLM_WB_ENABLED) - Curl_http_auth_cleanup_ntlm_wb(conn); -#endif } #endif /* !CURL_DISABLE_HTTP && USE_NTLM */ diff --git a/lib/http_proxy.c b/lib/http_proxy.c index 113c43a41..a5f27f5ce 100644 --- a/lib/http_proxy.c +++ b/lib/http_proxy.c @@ -293,11 +293,12 @@ static void http_proxy_cf_close(struct Curl_cfilter *cf, struct Curl_cftype Curl_cft_http_proxy = { "HTTP-PROXY", - CF_TYPE_IP_CONNECT, + CF_TYPE_IP_CONNECT|CF_TYPE_PROXY, 0, http_proxy_cf_destroy, http_proxy_cf_connect, http_proxy_cf_close, + Curl_cf_def_shutdown, Curl_cf_http_proxy_get_host, Curl_cf_def_adjust_pollset, Curl_cf_def_data_pending, diff --git a/lib/idn.c b/lib/idn.c index 81a177f8c..ef55ddfec 100644 --- a/lib/idn.c +++ b/lib/idn.c @@ -50,6 +50,63 @@ #include "curl_memory.h" #include "memdebug.h" +/* for macOS and iOS targets */ +#if defined(USE_APPLE_IDN) +#include + +#define MAX_HOST_LENGTH 512 + +static CURLcode mac_idn_to_ascii(const char *in, char **out) +{ + size_t inlen = strlen(in); + if(inlen < MAX_HOST_LENGTH) { + UErrorCode err = U_ZERO_ERROR; + UIDNA* idna = uidna_openUTS46( + UIDNA_CHECK_BIDI|UIDNA_NONTRANSITIONAL_TO_ASCII, &err); + if(!U_FAILURE(err)) { + UIDNAInfo info = UIDNA_INFO_INITIALIZER; + char buffer[MAX_HOST_LENGTH] = {0}; + (void)uidna_nameToASCII_UTF8(idna, in, -1, buffer, + sizeof(buffer) - 1, &info, &err); + uidna_close(idna); + if(!U_FAILURE(err)) { + *out = strdup(buffer); + if(*out) + return CURLE_OK; + else + return CURLE_OUT_OF_MEMORY; + } + } + } + return CURLE_URL_MALFORMAT; +} + +static CURLcode mac_ascii_to_idn(const char *in, char **out) +{ + size_t inlen = strlen(in); + if(inlen < MAX_HOST_LENGTH) { + UErrorCode err = U_ZERO_ERROR; + UIDNA* idna = uidna_openUTS46( + UIDNA_CHECK_BIDI|UIDNA_NONTRANSITIONAL_TO_UNICODE, &err); + if(!U_FAILURE(err)) { + UIDNAInfo info = UIDNA_INFO_INITIALIZER; + char buffer[MAX_HOST_LENGTH] = {0}; + (void)uidna_nameToUnicodeUTF8(idna, in, -1, buffer, + sizeof(buffer) - 1, &info, &err); + uidna_close(idna); + if(!U_FAILURE(err)) { + *out = strdup(buffer); + if(*out) + return CURLE_OK; + else + return CURLE_OUT_OF_MEMORY; + } + } + } + return CURLE_URL_MALFORMAT; +} +#endif + #ifdef USE_WIN32_IDN /* using Windows kernel32 and normaliz libraries. */ @@ -150,7 +207,7 @@ bool Curl_is_ASCII_name(const char *hostname) * 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_URL_MALFORMAT - the hostname could not be converted * CURLE_OUT_OF_MEMORY - memory problem * */ @@ -181,6 +238,8 @@ static CURLcode idn_decode(const char *input, char **output) result = CURLE_NOT_BUILT_IN; #elif defined(USE_WIN32_IDN) result = win32_idn_to_ascii(input, &decoded); +#elif defined(USE_APPLE_IDN) + result = mac_idn_to_ascii(input, &decoded); #endif if(!result) *output = decoded; @@ -198,6 +257,10 @@ static CURLcode idn_encode(const char *puny, char **output) CURLcode result = win32_ascii_to_idn(puny, &enc); if(result) return result; +#elif defined(USE_APPLE_IDN) + CURLcode result = mac_ascii_to_idn(puny, &enc); + if(result) + return result; #endif *output = enc; return CURLE_OK; @@ -246,11 +309,7 @@ CURLcode Curl_idn_encode(const char *puny, char **output) */ 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; - } + Curl_safefree(host->encalloc); } #endif /* USE_IDN */ @@ -260,27 +319,18 @@ void Curl_free_idnconverted_hostname(struct hostname *host) */ CURLcode Curl_idnconvert_hostname(struct hostname *host) { - /* set the name we use to display the host name */ + /* set the name we use to display the hostname */ 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 + CURLcode result = Curl_idn_decode(host->name, &decoded); + if(result) return result; + /* successful */ + host->name = host->encalloc = decoded; } #endif return CURLE_OK; diff --git a/lib/idn.h b/lib/idn.h index 74bbcaf49..2bdce8927 100644 --- a/lib/idn.h +++ b/lib/idn.h @@ -26,16 +26,11 @@ bool Curl_is_ASCII_name(const char *hostname); CURLcode Curl_idnconvert_hostname(struct hostname *host); -#if defined(USE_LIBIDN2) || defined(USE_WIN32_IDN) +#if defined(USE_LIBIDN2) || defined(USE_WIN32_IDN) || defined(USE_APPLE_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 Curl_idn_free(x) free(x) -#endif #else #define Curl_free_idnconverted_hostname(x) diff --git a/lib/if2ip.c b/lib/if2ip.c index 5249f6cc7..42e14500b 100644 --- a/lib/if2ip.c +++ b/lib/if2ip.c @@ -62,7 +62,7 @@ /* ------------------------------------------------------------------ */ -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 /* Return the scope of the given address. */ unsigned int Curl_ipv6_scope(const struct sockaddr *sa) { @@ -97,17 +97,17 @@ unsigned int Curl_ipv6_scope(const struct sockaddr *sa) #if defined(HAVE_GETIFADDRS) if2ip_result_t Curl_if2ip(int af, -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 unsigned int remote_scope, unsigned int local_scope_id, #endif const char *interf, - char *buf, int buf_size) + char *buf, size_t buf_size) { struct ifaddrs *iface, *head; if2ip_result_t res = IF2IP_NOT_FOUND; -#if defined(ENABLE_IPV6) && \ +#if defined(USE_IPV6) && \ !defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID) (void) local_scope_id; #endif @@ -121,7 +121,7 @@ if2ip_result_t Curl_if2ip(int af, const char *ip; char scope[12] = ""; char ipstr[64]; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(af == AF_INET6) { #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID unsigned int scopeid = 0; @@ -182,12 +182,12 @@ if2ip_result_t Curl_if2ip(int af, #elif defined(HAVE_IOCTL_SIOCGIFADDR) if2ip_result_t Curl_if2ip(int af, -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 unsigned int remote_scope, unsigned int local_scope_id, #endif const char *interf, - char *buf, int buf_size) + char *buf, size_t buf_size) { struct ifreq req; struct in_addr in; @@ -196,7 +196,7 @@ if2ip_result_t Curl_if2ip(int af, size_t len; const char *r; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 (void)remote_scope; (void)local_scope_id; #endif @@ -237,15 +237,15 @@ if2ip_result_t Curl_if2ip(int af, #else if2ip_result_t Curl_if2ip(int af, -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 unsigned int remote_scope, unsigned int local_scope_id, #endif const char *interf, - char *buf, int buf_size) + char *buf, size_t buf_size) { (void) af; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 (void) remote_scope; (void) local_scope_id; #endif diff --git a/lib/if2ip.h b/lib/if2ip.h index 1f973505c..f4b2f4c15 100644 --- a/lib/if2ip.h +++ b/lib/if2ip.h @@ -32,7 +32,7 @@ #define IPV6_SCOPE_UNIQUELOCAL 3 /* Unique local */ #define IPV6_SCOPE_NODELOCAL 4 /* Loopback. */ -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 unsigned int Curl_ipv6_scope(const struct sockaddr *sa); #else #define Curl_ipv6_scope(x) 0 @@ -45,12 +45,12 @@ typedef enum { } if2ip_result_t; if2ip_result_t Curl_if2ip(int af, -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 unsigned int remote_scope, unsigned int local_scope_id, #endif const char *interf, - char *buf, int buf_size); + char *buf, size_t buf_size); #ifdef __INTERIX diff --git a/lib/imap.c b/lib/imap.c index 0e013e740..efe91b14b 100644 --- a/lib/imap.c +++ b/lib/imap.c @@ -117,7 +117,7 @@ static CURLcode imap_get_message(struct Curl_easy *data, struct bufref *out); */ const struct Curl_handler Curl_handler_imap = { - "IMAP", /* scheme */ + "imap", /* scheme */ imap_setup_connection, /* setup_connection */ imap_do, /* do_it */ imap_done, /* done */ @@ -131,6 +131,7 @@ const struct Curl_handler Curl_handler_imap = { ZERO_NULL, /* perform_getsock */ imap_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_IMAP, /* defport */ @@ -146,7 +147,7 @@ const struct Curl_handler Curl_handler_imap = { */ const struct Curl_handler Curl_handler_imaps = { - "IMAPS", /* scheme */ + "imaps", /* scheme */ imap_setup_connection, /* setup_connection */ imap_do, /* do_it */ imap_done, /* done */ @@ -160,6 +161,7 @@ const struct Curl_handler Curl_handler_imaps = { ZERO_NULL, /* perform_getsock */ imap_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_IMAPS, /* defport */ @@ -510,7 +512,7 @@ static CURLcode imap_perform_login(struct Curl_easy *data, char *passwd; /* Check we have a username and password to authenticate with and end the - connect phase if we don't */ + connect phase if we do not */ if(!data->state.aptr.user) { imap_state(data, IMAP_STOP); @@ -610,7 +612,7 @@ static CURLcode imap_perform_authentication(struct Curl_easy *data, saslprogress progress; /* Check if already authenticated OR if there is enough data to authenticate - with and end the connect phase if we don't */ + with and end the connect phase if we do not */ if(imapc->preauth || !Curl_sasl_can_authenticate(&imapc->sasl, data)) { imap_state(data, IMAP_STOP); @@ -774,7 +776,7 @@ static CURLcode imap_perform_append(struct Curl_easy *data) /* Prepare the mime data if some. */ if(data->set.mimepost.kind != MIMEKIND_NONE) { /* Use the whole structure as data. */ - data->set.mimepost.flags &= ~MIME_BODY_ONLY; + data->set.mimepost.flags &= ~(unsigned int)MIME_BODY_ONLY; /* Add external headers and mime version. */ curl_mime_headers(&data->set.mimepost, data->set.headers, 0); @@ -1185,7 +1187,7 @@ static CURLcode imap_state_fetch_resp(struct Curl_easy *data, chunk = (size_t)size; if(!chunk) { - /* no size, we're done with the data */ + /* no size, we are done with the data */ imap_state(data, IMAP_STOP); return CURLE_OK; } @@ -1212,18 +1214,18 @@ static CURLcode imap_state_fetch_resp(struct Curl_easy *data, if(data->req.bytecount == size) /* The entire data is already transferred! */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); else { /* IMAP download */ data->req.maxdownload = size; /* force a recv/send check of this connection, as the data might've been read off the socket already */ data->state.select_bits = CURL_CSELECT_IN; - Curl_xfer_setup(data, FIRSTSOCKET, size, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, size, FALSE); } } else { - /* We don't know how to parse this line */ + /* We do not know how to parse this line */ failf(data, "Failed to parse FETCH response."); result = CURLE_WEIRD_SERVER_REPLY; } @@ -1267,7 +1269,7 @@ static CURLcode imap_state_append_resp(struct Curl_easy *data, int imapcode, Curl_pgrsSetUploadSize(data, data->state.infilesize); /* IMAP upload */ - Curl_xfer_setup(data, -1, -1, FALSE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SEND, -1, FALSE); /* End of DO phase */ imap_state(data, IMAP_STOP); @@ -1692,7 +1694,7 @@ static CURLcode imap_dophase_done(struct Curl_easy *data, bool connected) if(imap->transfer != PPTRANSFER_BODY) /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); return CURLE_OK; } diff --git a/lib/inet_ntop.c b/lib/inet_ntop.c index c9cee0c57..3a81eef6e 100644 --- a/lib/inet_ntop.c +++ b/lib/inet_ntop.c @@ -42,11 +42,11 @@ #define INT16SZ 2 /* - * If ENABLE_IPV6 is disabled, we still want to parse IPv6 addresses, so make + * If USE_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) +#if !defined(USE_IPV6) && !defined(AF_INET6) #define AF_INET6 (AF_INET + 1) #endif @@ -58,7 +58,7 @@ * - uses no statics * - takes a unsigned char* not an in_addr as input */ -static char *inet_ntop4 (const unsigned char *src, char *dst, size_t size) +static char *inet_ntop4(const unsigned char *src, char *dst, size_t size) { char tmp[sizeof("255.255.255.255")]; size_t len; @@ -84,14 +84,14 @@ static char *inet_ntop4 (const unsigned char *src, char *dst, size_t size) /* * Convert IPv6 binary address into presentation (printable) format. */ -static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size) +static char *inet_ntop6(const unsigned char *src, char *dst, size_t size) { /* * Note that int32_t and int16_t need only be "at least" large enough - * to contain a value of the specified size. On some systems, like + * to contain a value of the specified size. On some systems, like * Crays, there is no such thing as an integer variable with 16 bits. * Keep this in mind if you think this function should have been coded - * to use pointer overlays. All the world's not a VAX. + * to use pointer overlays. All the world's not a VAX. */ char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; char *tp; @@ -168,7 +168,7 @@ static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size) *tp++ = ':'; *tp++ = '\0'; - /* Check for overflow, copy, and we're done. + /* Check for overflow, copy, and we are done. */ if((size_t)(tp - tmp) > size) { errno = ENOSPC; @@ -185,10 +185,9 @@ static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size) * Returns NULL on error and errno set with the specific * error, EAFNOSUPPORT or ENOSPC. * - * On Windows we store the error in the thread errno, not - * in the winsock error code. This is to avoid losing the - * actual last winsock error. So when this function returns - * NULL, check errno not SOCKERRNO. + * On Windows we store the error in the thread errno, not in the winsock error + * code. This is to avoid losing the actual last winsock error. When this + * function returns NULL, check errno not SOCKERRNO. */ char *Curl_inet_ntop(int af, const void *src, char *buf, size_t size) { diff --git a/lib/inet_ntop.h b/lib/inet_ntop.h index 7c3ead434..f592f2525 100644 --- a/lib/inet_ntop.h +++ b/lib/inet_ntop.h @@ -32,8 +32,13 @@ char *Curl_inet_ntop(int af, const void *addr, char *buf, size_t size); #ifdef HAVE_ARPA_INET_H #include #endif +#ifdef _WIN32 #define Curl_inet_ntop(af,addr,buf,size) \ - inet_ntop(af, addr, buf, (curl_socklen_t)size) + inet_ntop(af, addr, buf, size) +#else +#define Curl_inet_ntop(af,addr,buf,size) \ + inet_ntop(af, addr, buf, (curl_socklen_t)(size)) +#endif #endif #endif /* HEADER_CURL_INET_NTOP_H */ diff --git a/lib/inet_pton.c b/lib/inet_pton.c index 176cc956f..49b923f18 100644 --- a/lib/inet_pton.c +++ b/lib/inet_pton.c @@ -39,17 +39,17 @@ #define INT16SZ 2 /* - * If ENABLE_IPV6 is disabled, we still want to parse IPv6 addresses, so make + * If USE_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) +#if !defined(USE_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. + * WARNING: Do not 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); @@ -61,12 +61,12 @@ static int inet_pton6(const char *src, unsigned char *dst); * to network format (which is usually some kind of binary format). * return: * 1 if the address was valid for the specified address family - * 0 if the address wasn't valid (`dst' is untouched in this case) + * 0 if the address was not valid (`dst' is untouched in this case) * -1 if some other error occurred (`dst' is untouched in this case, too) * notice: * On Windows we store the error in the thread errno, not * in the winsock error code. This is to avoid losing the - * actual last winsock error. So when this function returns + * actual last winsock error. When this function returns * -1, check errno not SOCKERRNO. * author: * Paul Vixie, 1996. @@ -92,7 +92,7 @@ Curl_inet_pton(int af, const char *src, void *dst) * return: * 1 if `src' is a valid dotted quad, else 0. * notice: - * does not touch `dst' unless it's returning 1. + * does not touch `dst' unless it is returning 1. * author: * Paul Vixie, 1996. */ @@ -147,7 +147,7 @@ inet_pton4(const char *src, unsigned char *dst) * return: * 1 if `src' is a valid [RFC1884 2.2] address, else 0. * notice: - * (1) does not touch `dst' unless it's returning 1. + * (1) does not touch `dst' unless it is returning 1. * (2) :: in a full address is silently ignored. * credit: * inspired by Mark Andrews. @@ -221,7 +221,7 @@ inet_pton6(const char *src, unsigned char *dst) if(colonp) { /* * Since some memmove()'s erroneously fail to handle - * overlapping regions, we'll do the shift by hand. + * overlapping regions, we will do the shift by hand. */ const ssize_t n = tp - colonp; ssize_t i; diff --git a/lib/krb5.c b/lib/krb5.c index 309e12a58..45944cefc 100644 --- a/lib/krb5.c +++ b/lib/krb5.c @@ -25,7 +25,7 @@ * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) @@ -169,7 +169,7 @@ krb5_encode(void *app_data, const void *from, int length, int level, void **to) * libraries modify the input buffer in gss_wrap() */ dec.value = (void *)from; - dec.length = length; + dec.length = (size_t)length; maj = gss_wrap(&min, *context, level == PROT_PRIVATE, GSS_C_QOP_DEFAULT, @@ -178,7 +178,7 @@ krb5_encode(void *app_data, const void *from, int length, int level, void **to) if(maj != GSS_S_COMPLETE) return -1; - /* malloc a new buffer, in case gss_release_buffer doesn't work as + /* malloc a new buffer, in case gss_release_buffer does not work as expected */ *to = malloc(enc.length); if(!*to) @@ -227,7 +227,7 @@ krb5_auth(void *app_data, struct Curl_easy *data, struct connectdata *conn) /* this loop will execute twice (once for service, once for host) */ for(;;) { - /* this really shouldn't be repeated here, but can't help it */ + /* this really should not be repeated here, but cannot help it */ if(service == srv_host) { result = ftpsend(data, conn, "AUTH GSSAPI"); if(result) @@ -329,7 +329,7 @@ krb5_auth(void *app_data, struct Curl_easy *data, struct connectdata *conn) size_t len = Curl_dyn_len(&pp->recvbuf); p = Curl_dyn_ptr(&pp->recvbuf); if((len < 4) || (p[0] != '2' && p[0] != '3')) { - infof(data, "Server didn't accept auth data"); + infof(data, "Server did not accept auth data"); ret = AUTH_ERROR; break; } @@ -524,24 +524,33 @@ static CURLcode read_data(struct Curl_easy *data, int sockindex, return result; if(len) { - /* only realloc if there was a length */ - len = ntohl(len); + len = (int)ntohl((uint32_t)len); if(len > CURL_MAX_INPUT_LENGTH) - len = 0; - else - buf->data = Curl_saferealloc(buf->data, len); + return CURLE_TOO_LARGE; + + Curl_dyn_reset(&buf->buf); } - if(!len || !buf->data) - return CURLE_OUT_OF_MEMORY; + else + return CURLE_RECV_ERROR; - result = socket_read(data, sockindex, buf->data, len); - if(result) - return result; - nread = conn->mech->decode(conn->app_data, buf->data, len, - conn->data_prot, conn); + do { + char buffer[1024]; + nread = CURLMIN(len, (int)sizeof(buffer)); + result = socket_read(data, sockindex, buffer, (size_t)nread); + if(result) + return result; + result = Curl_dyn_addn(&buf->buf, buffer, nread); + if(result) + return result; + len -= nread; + } while(len); + /* this decodes the dynbuf *in place* */ + nread = conn->mech->decode(conn->app_data, + Curl_dyn_ptr(&buf->buf), + len, conn->data_prot, conn); if(nread < 0) return CURLE_RECV_ERROR; - buf->size = (size_t)nread; + Curl_dyn_setlen(&buf->buf, nread); buf->index = 0; return CURLE_OK; } @@ -549,9 +558,10 @@ static CURLcode read_data(struct Curl_easy *data, int sockindex, static size_t buffer_read(struct krb5buffer *buf, void *data, size_t len) { - if(buf->size - buf->index < len) - len = buf->size - buf->index; - memcpy(data, (char *)buf->data + buf->index, len); + size_t size = Curl_dyn_len(&buf->buf); + if(size - buf->index < len) + len = size - buf->index; + memcpy(data, Curl_dyn_ptr(&buf->buf) + buf->index, len); buf->index += len; return len; } @@ -586,7 +596,7 @@ static ssize_t sec_recv(struct Curl_easy *data, int sockindex, while(len > 0) { if(read_data(data, sockindex, &conn->in_buffer)) return -1; - if(conn->in_buffer.size == 0) { + if(Curl_dyn_len(&conn->in_buffer.buf) == 0) { if(bytes_read > 0) conn->in_buffer.eof_flag = 1; return bytes_read; @@ -620,7 +630,7 @@ static void do_sec_send(struct Curl_easy *data, struct connectdata *conn, else prot_level = conn->command_prot; } - bytes = conn->mech->encode(conn->app_data, from, length, prot_level, + bytes = conn->mech->encode(conn->app_data, from, length, (int)prot_level, (void **)&buffer); if(!buffer || bytes <= 0) return; /* error */ @@ -648,7 +658,7 @@ static void do_sec_send(struct Curl_easy *data, struct connectdata *conn, } } else { - htonl_bytes = htonl(bytes); + htonl_bytes = (int)htonl((OM_uint32)bytes); socket_write(data, fd, &htonl_bytes, sizeof(htonl_bytes)); socket_write(data, fd, buffer, curlx_sitouz(bytes)); } @@ -714,7 +724,7 @@ int Curl_sec_read_msg(struct Curl_easy *data, struct connectdata *conn, decoded_len = curlx_uztosi(decoded_sz); decoded_len = conn->mech->decode(conn->app_data, buf, decoded_len, - level, conn); + (int)level, conn); if(decoded_len <= 0) { free(buf); return -1; @@ -779,7 +789,7 @@ static int sec_set_protection_level(struct Curl_easy *data) if(pbsz) { /* stick to default value if the check fails */ if(ISDIGIT(pbsz[5])) - buffer_size = atoi(&pbsz[5]); + buffer_size = (unsigned int)atoi(&pbsz[5]); if(buffer_size < conn->buffer_size) conn->buffer_size = buffer_size; } @@ -835,6 +845,7 @@ static CURLcode choose_mech(struct Curl_easy *data, struct connectdata *conn) mech->name); return CURLE_FAILED_INIT; } + Curl_dyn_init(&conn->in_buffer.buf, CURL_MAX_INPUT_LENGTH); } infof(data, "Trying mechanism %s...", mech->name); @@ -867,7 +878,7 @@ static CURLcode choose_mech(struct Curl_easy *data, struct connectdata *conn) if(ret != AUTH_CONTINUE) { if(ret != AUTH_OK) { - /* Mechanism has dumped the error to stderr, don't error here. */ + /* Mechanism has dumped the error to stderr, do not error here. */ return CURLE_USE_SSL_FAILED; } DEBUGASSERT(ret == AUTH_OK); @@ -899,15 +910,10 @@ Curl_sec_end(struct connectdata *conn) { if(conn->mech && conn->mech->end) conn->mech->end(conn->app_data); - free(conn->app_data); - conn->app_data = NULL; - if(conn->in_buffer.data) { - free(conn->in_buffer.data); - conn->in_buffer.data = NULL; - conn->in_buffer.size = 0; - conn->in_buffer.index = 0; - conn->in_buffer.eof_flag = 0; - } + Curl_safefree(conn->app_data); + Curl_dyn_free(&conn->in_buffer.buf); + conn->in_buffer.index = 0; + conn->in_buffer.eof_flag = 0; conn->sec_complete = 0; conn->data_prot = PROT_CLEAR; conn->mech = NULL; diff --git a/lib/ldap.c b/lib/ldap.c index 394fd32d4..addb9b353 100644 --- a/lib/ldap.c +++ b/lib/ldap.c @@ -164,7 +164,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done); */ const struct Curl_handler Curl_handler_ldap = { - "LDAP", /* scheme */ + "ldap", /* scheme */ ZERO_NULL, /* setup_connection */ ldap_do, /* do_it */ ZERO_NULL, /* done */ @@ -178,6 +178,7 @@ const struct Curl_handler Curl_handler_ldap = { ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_LDAP, /* defport */ @@ -192,7 +193,7 @@ const struct Curl_handler Curl_handler_ldap = { */ const struct Curl_handler Curl_handler_ldaps = { - "LDAPS", /* scheme */ + "ldaps", /* scheme */ ZERO_NULL, /* setup_connection */ ldap_do, /* do_it */ ZERO_NULL, /* done */ @@ -206,6 +207,7 @@ const struct Curl_handler Curl_handler_ldaps = { ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_LDAPS, /* defport */ @@ -250,16 +252,17 @@ static int ldap_win_bind_auth(LDAP *server, const char *user, } if(method && user && passwd) { - rc = Curl_create_sspi_identity(user, passwd, &cred); + CURLcode res = Curl_create_sspi_identity(user, passwd, &cred); + rc = (int)res; if(!rc) { - rc = ldap_bind_s(server, NULL, (TCHAR *)&cred, method); + rc = (int)ldap_bind_s(server, NULL, (TCHAR *)&cred, method); Curl_sspi_free_identity(&cred); } } else { /* proceed with current user credentials */ method = LDAP_AUTH_NEGOTIATE; - rc = ldap_bind_s(server, NULL, NULL, method); + rc = (int)ldap_bind_s(server, NULL, NULL, method); } return rc; } @@ -277,14 +280,14 @@ static int ldap_win_bind(struct Curl_easy *data, LDAP *server, inuser = curlx_convert_UTF8_to_tchar((char *) user); inpass = curlx_convert_UTF8_to_tchar((char *) passwd); - rc = ldap_simple_bind_s(server, inuser, inpass); + rc = (int)ldap_simple_bind_s(server, inuser, inpass); curlx_unicodefree(inuser); curlx_unicodefree(inpass); } #if defined(USE_WINDOWS_SSPI) else { - rc = ldap_win_bind_auth(server, user, passwd, data->set.httpauth); + rc = (int)ldap_win_bind_auth(server, user, passwd, data->set.httpauth); } #endif @@ -294,8 +297,10 @@ static int ldap_win_bind(struct Curl_easy *data, LDAP *server, #if defined(USE_WIN32_LDAP) #define FREE_ON_WINLDAP(x) curlx_unicodefree(x) +#define curl_ldap_num_t ULONG #else #define FREE_ON_WINLDAP(x) +#define curl_ldap_num_t int #endif @@ -335,7 +340,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done) rc = _ldap_url_parse(data, conn, &ludp); #endif if(rc) { - failf(data, "Bad LDAP URL: %s", ldap_err2string(rc)); + failf(data, "Bad LDAP URL: %s", ldap_err2string((curl_ldap_num_t)rc)); result = CURLE_URL_MALFORMAT; goto quit; } @@ -370,8 +375,8 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done) if(ldap_ssl) { #ifdef HAVE_LDAP_SSL #ifdef USE_WIN32_LDAP - /* Win32 LDAP SDK doesn't support insecure mode without CA! */ - server = ldap_sslinit(host, conn->primary.remote_port, 1); + /* Win32 LDAP SDK does not support insecure mode without CA! */ + server = ldap_sslinit(host, (curl_ldap_num_t)conn->primary.remote_port, 1); ldap_set_option(server, LDAP_OPT_SSL, LDAP_OPT_ON); #else int ldap_option; @@ -483,6 +488,8 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done) } */ #else + (void)ldap_option; + (void)ldap_ca; /* we should probably never come up to here since configure should check in first place if we can support LDAP SSL/TLS */ failf(data, "LDAP local: SSL/TLS not supported with this version " @@ -499,7 +506,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done) goto quit; } else { - server = ldap_init(host, conn->primary.remote_port); + server = ldap_init(host, (curl_ldap_num_t)conn->primary.remote_port); if(!server) { failf(data, "LDAP local: Cannot connect to %s:%u", conn->host.dispname, conn->primary.remote_port); @@ -525,7 +532,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done) if(rc) { #ifdef USE_WIN32_LDAP failf(data, "LDAP local: bind via ldap_win_bind %s", - ldap_err2string(rc)); + ldap_err2string((ULONG)rc)); #else failf(data, "LDAP local: bind via ldap_simple_bind_s %s", ldap_err2string(rc)); @@ -535,16 +542,18 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done) } Curl_pgrsSetDownloadCounter(data, 0); - rc = ldap_search_s(server, ludp->lud_dn, ludp->lud_scope, - ludp->lud_filter, ludp->lud_attrs, 0, &ldapmsg); + rc = (int)ldap_search_s(server, ludp->lud_dn, + (curl_ldap_num_t)ludp->lud_scope, + ludp->lud_filter, ludp->lud_attrs, 0, &ldapmsg); if(rc && rc != LDAP_SIZELIMIT_EXCEEDED) { - failf(data, "LDAP remote: %s", ldap_err2string(rc)); + failf(data, "LDAP remote: %s", ldap_err2string((curl_ldap_num_t)rc)); result = CURLE_LDAP_SEARCH_FAILED; goto quit; } - for(num = 0, entryIterator = ldap_first_entry(server, ldapmsg); + num = 0; + for(entryIterator = ldap_first_entry(server, ldapmsg); entryIterator; entryIterator = ldap_next_entry(server, entryIterator), num++) { BerElement *ber = NULL; @@ -749,7 +758,7 @@ static CURLcode ldap_do(struct Curl_easy *data, bool *done) FREE_ON_WINLDAP(host); /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); connclose(conn, "LDAP connection always disable reuse"); return result; diff --git a/lib/libcurl.plist b/lib/libcurl.plist deleted file mode 100644 index f82bef7a6..000000000 --- a/lib/libcurl.plist +++ /dev/null @@ -1,35 +0,0 @@ - - - - - CFBundleInfoDictionaryVersion - 6.0 - - CFBundleDevelopmentRegion - English - - CFBundleExecutable - curl - - CFBundleIdentifier - se.curl.libcurl - - CFBundleVersion - 7.87.0 - - CFBundleName - libcurl - - CFBundlePackageType - FMWK - - CFBundleSignature - ???? - - CFBundleShortVersionString - libcurl 7.87.0 - - CFBundleGetInfoString - libcurl.plist 7.87.0 - - diff --git a/lib/libcurl.plist.in b/lib/libcurl.plist.in deleted file mode 100644 index d2e6492f6..000000000 --- a/lib/libcurl.plist.in +++ /dev/null @@ -1,35 +0,0 @@ - - - - - CFBundleInfoDictionaryVersion - 6.0 - - CFBundleDevelopmentRegion - English - - CFBundleExecutable - curl - - CFBundleIdentifier - se.curl.libcurl - - CFBundleVersion - @CURL_PLIST_VERSION@ - - CFBundleName - libcurl - - CFBundlePackageType - FMWK - - CFBundleSignature - ???? - - CFBundleShortVersionString - libcurl @CURL_PLIST_VERSION@ - - CFBundleGetInfoString - libcurl.plist @CURL_PLIST_VERSION@ - - diff --git a/lib/libcurl.rc b/lib/libcurl.rc index daa2d62d8..1ceb4691f 100644 --- a/lib/libcurl.rc +++ b/lib/libcurl.rc @@ -32,7 +32,7 @@ VS_VERSION_INFO VERSIONINFO FILEVERSION RC_VERSION PRODUCTVERSION RC_VERSION FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#if defined(DEBUGBUILD) || defined(_DEBUG) +#if defined(DEBUGBUILD) || defined(UNITTESTS) || defined(CURLDEBUG) || defined(_DEBUG) FILEFLAGS VS_FF_DEBUG #else FILEFLAGS 0L diff --git a/lib/llist.c b/lib/llist.c index 5b6b0336d..716f0cd57 100644 --- a/lib/llist.c +++ b/lib/llist.c @@ -88,6 +88,22 @@ Curl_llist_insert_next(struct Curl_llist *list, struct Curl_llist_element *e, ++list->size; } +/* + * Curl_llist_append() + * + * Adds a new list element to the end of the list. + * + * The 'ne' argument should be a pointer into the object to store. + * + * @unittest: 1300 + */ +void +Curl_llist_append(struct Curl_llist *list, const void *p, + struct Curl_llist_element *ne) +{ + Curl_llist_insert_next(list, list->tail, p, ne); +} + /* * @unittest: 1300 */ diff --git a/lib/llist.h b/lib/llist.h index 320580e33..d75582fa9 100644 --- a/lib/llist.h +++ b/lib/llist.h @@ -45,6 +45,8 @@ struct Curl_llist { void Curl_llist_init(struct Curl_llist *, Curl_llist_dtor); void Curl_llist_insert_next(struct Curl_llist *, struct Curl_llist_element *, const void *, struct Curl_llist_element *node); +void Curl_llist_append(struct Curl_llist *, + const void *, struct Curl_llist_element *node); void Curl_llist_remove(struct Curl_llist *, struct Curl_llist_element *, void *); size_t Curl_llist_count(struct Curl_llist *); diff --git a/lib/macos.c b/lib/macos.c index 9e8e76e86..205d30db3 100644 --- a/lib/macos.c +++ b/lib/macos.c @@ -38,8 +38,8 @@ 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. + * first. As Curl currently does not support system-wide HTTP proxies, we + * therefore do not 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 diff --git a/lib/md4.c b/lib/md4.c index 58dd1166c..f006bdcf0 100644 --- a/lib/md4.c +++ b/lib/md4.c @@ -37,6 +37,9 @@ #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) && !defined(USE_AMISSL) /* OpenSSL 3.0.0 marks the MD4 functions as deprecated */ #define OPENSSL_NO_MD4 +#else +/* Cover also OPENSSL_NO_MD4 configured in openssl */ +#include #endif #endif /* USE_OPENSSL */ @@ -55,7 +58,8 @@ #else #include #endif -#if(MBEDTLS_VERSION_NUMBER >= 0x02070000) +#if(MBEDTLS_VERSION_NUMBER >= 0x02070000) && \ + (MBEDTLS_VERSION_NUMBER < 0x03000000) #define HAS_MBEDTLS_RESULT_CODE_BASED_FUNCTIONS #endif #endif /* USE_MBEDTLS */ @@ -216,7 +220,7 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx) } #else -/* When no other crypto library is available, or the crypto library doesn't +/* When no other crypto library is available, or the crypto library does not * support MD4, we use this code segment this implementation of it * * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc. @@ -228,8 +232,8 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx) * Author: * Alexander Peslyak, better known as Solar Designer * - * This software was written by Alexander Peslyak in 2001. No copyright is - * claimed, and the software is hereby placed in the public domain. In case + * This software was written by Alexander Peslyak in 2001. No copyright is + * claimed, and the software is hereby placed in the public domain. In case * this attempt to disclaim copyright and place the software in the public * domain is deemed null and void, then the software is Copyright (c) 2001 * Alexander Peslyak and it is hereby released to the general public under the @@ -238,19 +242,19 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx) * Redistribution and use in source and binary forms, with or without * modification, are permitted. * - * There's ABSOLUTELY NO WARRANTY, express or implied. + * There is ABSOLUTELY NO WARRANTY, express or implied. * * (This is a heavily cut-down "BSD license".) * * This differs from Colin Plumb's older public domain implementation in that * no exactly 32-bit integer data type is required (any 32-bit or wider - * unsigned integer data type will do), there's no compile-time endianness - * configuration, and the function prototypes match OpenSSL's. No code from + * unsigned integer data type will do), there is no compile-time endianness + * configuration, and the function prototypes match OpenSSL's. No code from * Colin Plumb's implementation has been reused; this comment merely compares * the properties of the two independent implementations. * * The primary goals of this implementation are portability and ease of use. - * It is meant to be fast, but not as fast as possible. Some known + * It is meant to be fast, but not as fast as possible. Some known * optimizations are not included to reduce source code size and avoid * compile-time configuration. */ @@ -276,14 +280,14 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx); * F and G are optimized compared to their RFC 1320 definitions, with the * optimization for F borrowed from Colin Plumb's MD5 implementation. */ -#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) -#define G(x, y, z) (((x) & ((y) | (z))) | ((y) & (z))) -#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define MD4_F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define MD4_G(x, y, z) (((x) & ((y) | (z))) | ((y) & (z))) +#define MD4_H(x, y, z) ((x) ^ (y) ^ (z)) /* * The MD4 transformation for all three rounds. */ -#define STEP(f, a, b, c, d, x, s) \ +#define MD4_STEP(f, a, b, c, d, x, s) \ (a) += f((b), (c), (d)) + (x); \ (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); @@ -292,30 +296,31 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx); * in a properly aligned word in host byte order. * * The check for little-endian architectures that tolerate unaligned - * memory accesses is just an optimization. Nothing will break if it - * doesn't work. + * memory accesses is just an optimization. Nothing will break if it + * does not work. */ #if defined(__i386__) || defined(__x86_64__) || defined(__vax__) -#define SET(n) \ +#define MD4_SET(n) \ (*(MD4_u32plus *)(void *)&ptr[(n) * 4]) -#define GET(n) \ - SET(n) +#define MD4_GET(n) \ + MD4_SET(n) #else -#define SET(n) \ +#define MD4_SET(n) \ (ctx->block[(n)] = \ (MD4_u32plus)ptr[(n) * 4] | \ ((MD4_u32plus)ptr[(n) * 4 + 1] << 8) | \ ((MD4_u32plus)ptr[(n) * 4 + 2] << 16) | \ ((MD4_u32plus)ptr[(n) * 4 + 3] << 24)) -#define GET(n) \ +#define MD4_GET(n) \ (ctx->block[(n)]) #endif /* * This processes one or more 64-byte data blocks, but does NOT update - * the bit counters. There are no alignment requirements. + * the bit counters. There are no alignment requirements. */ -static const void *body(MD4_CTX *ctx, const void *data, unsigned long size) +static const void *my_md4_body(MD4_CTX *ctx, + const void *data, unsigned long size) { const unsigned char *ptr; MD4_u32plus a, b, c, d; @@ -336,58 +341,58 @@ static const void *body(MD4_CTX *ctx, const void *data, unsigned long size) saved_d = d; /* Round 1 */ - STEP(F, a, b, c, d, SET(0), 3) - STEP(F, d, a, b, c, SET(1), 7) - STEP(F, c, d, a, b, SET(2), 11) - STEP(F, b, c, d, a, SET(3), 19) - STEP(F, a, b, c, d, SET(4), 3) - STEP(F, d, a, b, c, SET(5), 7) - STEP(F, c, d, a, b, SET(6), 11) - STEP(F, b, c, d, a, SET(7), 19) - STEP(F, a, b, c, d, SET(8), 3) - STEP(F, d, a, b, c, SET(9), 7) - STEP(F, c, d, a, b, SET(10), 11) - STEP(F, b, c, d, a, SET(11), 19) - STEP(F, a, b, c, d, SET(12), 3) - STEP(F, d, a, b, c, SET(13), 7) - STEP(F, c, d, a, b, SET(14), 11) - STEP(F, b, c, d, a, SET(15), 19) + MD4_STEP(MD4_F, a, b, c, d, MD4_SET(0), 3) + MD4_STEP(MD4_F, d, a, b, c, MD4_SET(1), 7) + MD4_STEP(MD4_F, c, d, a, b, MD4_SET(2), 11) + MD4_STEP(MD4_F, b, c, d, a, MD4_SET(3), 19) + MD4_STEP(MD4_F, a, b, c, d, MD4_SET(4), 3) + MD4_STEP(MD4_F, d, a, b, c, MD4_SET(5), 7) + MD4_STEP(MD4_F, c, d, a, b, MD4_SET(6), 11) + MD4_STEP(MD4_F, b, c, d, a, MD4_SET(7), 19) + MD4_STEP(MD4_F, a, b, c, d, MD4_SET(8), 3) + MD4_STEP(MD4_F, d, a, b, c, MD4_SET(9), 7) + MD4_STEP(MD4_F, c, d, a, b, MD4_SET(10), 11) + MD4_STEP(MD4_F, b, c, d, a, MD4_SET(11), 19) + MD4_STEP(MD4_F, a, b, c, d, MD4_SET(12), 3) + MD4_STEP(MD4_F, d, a, b, c, MD4_SET(13), 7) + MD4_STEP(MD4_F, c, d, a, b, MD4_SET(14), 11) + MD4_STEP(MD4_F, b, c, d, a, MD4_SET(15), 19) /* Round 2 */ - STEP(G, a, b, c, d, GET(0) + 0x5a827999, 3) - STEP(G, d, a, b, c, GET(4) + 0x5a827999, 5) - STEP(G, c, d, a, b, GET(8) + 0x5a827999, 9) - STEP(G, b, c, d, a, GET(12) + 0x5a827999, 13) - STEP(G, a, b, c, d, GET(1) + 0x5a827999, 3) - STEP(G, d, a, b, c, GET(5) + 0x5a827999, 5) - STEP(G, c, d, a, b, GET(9) + 0x5a827999, 9) - STEP(G, b, c, d, a, GET(13) + 0x5a827999, 13) - STEP(G, a, b, c, d, GET(2) + 0x5a827999, 3) - STEP(G, d, a, b, c, GET(6) + 0x5a827999, 5) - STEP(G, c, d, a, b, GET(10) + 0x5a827999, 9) - STEP(G, b, c, d, a, GET(14) + 0x5a827999, 13) - STEP(G, a, b, c, d, GET(3) + 0x5a827999, 3) - STEP(G, d, a, b, c, GET(7) + 0x5a827999, 5) - STEP(G, c, d, a, b, GET(11) + 0x5a827999, 9) - STEP(G, b, c, d, a, GET(15) + 0x5a827999, 13) + MD4_STEP(MD4_G, a, b, c, d, MD4_GET(0) + 0x5a827999, 3) + MD4_STEP(MD4_G, d, a, b, c, MD4_GET(4) + 0x5a827999, 5) + MD4_STEP(MD4_G, c, d, a, b, MD4_GET(8) + 0x5a827999, 9) + MD4_STEP(MD4_G, b, c, d, a, MD4_GET(12) + 0x5a827999, 13) + MD4_STEP(MD4_G, a, b, c, d, MD4_GET(1) + 0x5a827999, 3) + MD4_STEP(MD4_G, d, a, b, c, MD4_GET(5) + 0x5a827999, 5) + MD4_STEP(MD4_G, c, d, a, b, MD4_GET(9) + 0x5a827999, 9) + MD4_STEP(MD4_G, b, c, d, a, MD4_GET(13) + 0x5a827999, 13) + MD4_STEP(MD4_G, a, b, c, d, MD4_GET(2) + 0x5a827999, 3) + MD4_STEP(MD4_G, d, a, b, c, MD4_GET(6) + 0x5a827999, 5) + MD4_STEP(MD4_G, c, d, a, b, MD4_GET(10) + 0x5a827999, 9) + MD4_STEP(MD4_G, b, c, d, a, MD4_GET(14) + 0x5a827999, 13) + MD4_STEP(MD4_G, a, b, c, d, MD4_GET(3) + 0x5a827999, 3) + MD4_STEP(MD4_G, d, a, b, c, MD4_GET(7) + 0x5a827999, 5) + MD4_STEP(MD4_G, c, d, a, b, MD4_GET(11) + 0x5a827999, 9) + MD4_STEP(MD4_G, b, c, d, a, MD4_GET(15) + 0x5a827999, 13) /* Round 3 */ - STEP(H, a, b, c, d, GET(0) + 0x6ed9eba1, 3) - STEP(H, d, a, b, c, GET(8) + 0x6ed9eba1, 9) - STEP(H, c, d, a, b, GET(4) + 0x6ed9eba1, 11) - STEP(H, b, c, d, a, GET(12) + 0x6ed9eba1, 15) - STEP(H, a, b, c, d, GET(2) + 0x6ed9eba1, 3) - STEP(H, d, a, b, c, GET(10) + 0x6ed9eba1, 9) - STEP(H, c, d, a, b, GET(6) + 0x6ed9eba1, 11) - STEP(H, b, c, d, a, GET(14) + 0x6ed9eba1, 15) - STEP(H, a, b, c, d, GET(1) + 0x6ed9eba1, 3) - STEP(H, d, a, b, c, GET(9) + 0x6ed9eba1, 9) - STEP(H, c, d, a, b, GET(5) + 0x6ed9eba1, 11) - STEP(H, b, c, d, a, GET(13) + 0x6ed9eba1, 15) - STEP(H, a, b, c, d, GET(3) + 0x6ed9eba1, 3) - STEP(H, d, a, b, c, GET(11) + 0x6ed9eba1, 9) - STEP(H, c, d, a, b, GET(7) + 0x6ed9eba1, 11) - STEP(H, b, c, d, a, GET(15) + 0x6ed9eba1, 15) + MD4_STEP(MD4_H, a, b, c, d, MD4_GET(0) + 0x6ed9eba1, 3) + MD4_STEP(MD4_H, d, a, b, c, MD4_GET(8) + 0x6ed9eba1, 9) + MD4_STEP(MD4_H, c, d, a, b, MD4_GET(4) + 0x6ed9eba1, 11) + MD4_STEP(MD4_H, b, c, d, a, MD4_GET(12) + 0x6ed9eba1, 15) + MD4_STEP(MD4_H, a, b, c, d, MD4_GET(2) + 0x6ed9eba1, 3) + MD4_STEP(MD4_H, d, a, b, c, MD4_GET(10) + 0x6ed9eba1, 9) + MD4_STEP(MD4_H, c, d, a, b, MD4_GET(6) + 0x6ed9eba1, 11) + MD4_STEP(MD4_H, b, c, d, a, MD4_GET(14) + 0x6ed9eba1, 15) + MD4_STEP(MD4_H, a, b, c, d, MD4_GET(1) + 0x6ed9eba1, 3) + MD4_STEP(MD4_H, d, a, b, c, MD4_GET(9) + 0x6ed9eba1, 9) + MD4_STEP(MD4_H, c, d, a, b, MD4_GET(5) + 0x6ed9eba1, 11) + MD4_STEP(MD4_H, b, c, d, a, MD4_GET(13) + 0x6ed9eba1, 15) + MD4_STEP(MD4_H, a, b, c, d, MD4_GET(3) + 0x6ed9eba1, 3) + MD4_STEP(MD4_H, d, a, b, c, MD4_GET(11) + 0x6ed9eba1, 9) + MD4_STEP(MD4_H, c, d, a, b, MD4_GET(7) + 0x6ed9eba1, 11) + MD4_STEP(MD4_H, b, c, d, a, MD4_GET(15) + 0x6ed9eba1, 15) a += saved_a; b += saved_b; @@ -441,11 +446,11 @@ static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size) memcpy(&ctx->buffer[used], data, available); data = (const unsigned char *)data + available; size -= available; - body(ctx, ctx->buffer, 64); + my_md4_body(ctx, ctx->buffer, 64); } if(size >= 64) { - data = body(ctx, data, size & ~(unsigned long)0x3f); + data = my_md4_body(ctx, data, size & ~(unsigned long)0x3f); size &= 0x3f; } @@ -464,7 +469,7 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx) if(available < 8) { memset(&ctx->buffer[used], 0, available); - body(ctx, ctx->buffer, 64); + my_md4_body(ctx, ctx->buffer, 64); used = 0; available = 64; } @@ -481,7 +486,7 @@ static void MD4_Final(unsigned char *result, MD4_CTX *ctx) ctx->buffer[62] = curlx_ultouc((ctx->hi >> 16)&0xff); ctx->buffer[63] = curlx_ultouc(ctx->hi >> 24); - body(ctx, ctx->buffer, 64); + my_md4_body(ctx, ctx->buffer, 64); result[0] = curlx_ultouc((ctx->a)&0xff); result[1] = curlx_ultouc((ctx->a >> 8)&0xff); diff --git a/lib/md5.c b/lib/md5.c index 01415af91..7b51429b4 100644 --- a/lib/md5.c +++ b/lib/md5.c @@ -172,7 +172,7 @@ static void my_md5_final(unsigned char *digest, my_md5_ctx *ctx) /* For Apple operating systems: CommonCrypto has the functions we need. These functions are available on Tiger and later, as well as iOS 2.0 - and later. If you're building for an older cat, well, sorry. + and later. If you are building for an older cat, well, sorry. Declaring the functions as static like this seems to be a bit more reliable than defining COMMON_DIGEST_FOR_OPENSSL on older cats. */ @@ -254,7 +254,7 @@ static void my_md5_final(unsigned char *digest, my_md5_ctx *ctx) * Author: * Alexander Peslyak, better known as Solar Designer * - * This software was written by Alexander Peslyak in 2001. No copyright is + * This software was written by Alexander Peslyak in 2001. No copyright is * claimed, and the software is hereby placed in the public domain. * In case this attempt to disclaim copyright and place the software in the * public domain is deemed null and void, then the software is @@ -264,19 +264,19 @@ static void my_md5_final(unsigned char *digest, my_md5_ctx *ctx) * Redistribution and use in source and binary forms, with or without * modification, are permitted. * - * There's ABSOLUTELY NO WARRANTY, express or implied. + * There is ABSOLUTELY NO WARRANTY, express or implied. * * (This is a heavily cut-down "BSD license".) * * This differs from Colin Plumb's older public domain implementation in that * no exactly 32-bit integer data type is required (any 32-bit or wider - * unsigned integer data type will do), there's no compile-time endianness - * configuration, and the function prototypes match OpenSSL's. No code from + * unsigned integer data type will do), there is no compile-time endianness + * configuration, and the function prototypes match OpenSSL's. No code from * Colin Plumb's implementation has been reused; this comment merely compares * the properties of the two independent implementations. * * The primary goals of this implementation are portability and ease of use. - * It is meant to be fast, but not as fast as possible. Some known + * It is meant to be fast, but not as fast as possible. Some known * optimizations are not included to reduce source code size and avoid * compile-time configuration. */ @@ -304,16 +304,16 @@ static void my_md5_final(unsigned char *result, my_md5_ctx *ctx); * architectures that lack an AND-NOT instruction, just like in Colin Plumb's * implementation. */ -#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) -#define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y)))) -#define H(x, y, z) (((x) ^ (y)) ^ (z)) -#define H2(x, y, z) ((x) ^ ((y) ^ (z))) -#define I(x, y, z) ((y) ^ ((x) | ~(z))) +#define MD5_F(x, y, z) ((z) ^ ((x) & ((y) ^ (z)))) +#define MD5_G(x, y, z) ((y) ^ ((z) & ((x) ^ (y)))) +#define MD5_H(x, y, z) (((x) ^ (y)) ^ (z)) +#define MD5_H2(x, y, z) ((x) ^ ((y) ^ (z))) +#define MD5_I(x, y, z) ((y) ^ ((x) | ~(z))) /* * The MD5 transformation for all four rounds. */ -#define STEP(f, a, b, c, d, x, t, s) \ +#define MD5_STEP(f, a, b, c, d, x, t, s) \ (a) += f((b), (c), (d)) + (x) + (t); \ (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \ (a) += (b); @@ -323,30 +323,31 @@ static void my_md5_final(unsigned char *result, my_md5_ctx *ctx); * in a properly aligned word in host byte order. * * The check for little-endian architectures that tolerate unaligned - * memory accesses is just an optimization. Nothing will break if it - * doesn't work. + * memory accesses is just an optimization. Nothing will break if it + * does not work. */ #if defined(__i386__) || defined(__x86_64__) || defined(__vax__) -#define SET(n) \ +#define MD5_SET(n) \ (*(MD5_u32plus *)(void *)&ptr[(n) * 4]) -#define GET(n) \ - SET(n) +#define MD5_GET(n) \ + MD5_SET(n) #else -#define SET(n) \ +#define MD5_SET(n) \ (ctx->block[(n)] = \ (MD5_u32plus)ptr[(n) * 4] | \ ((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \ ((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \ ((MD5_u32plus)ptr[(n) * 4 + 3] << 24)) -#define GET(n) \ +#define MD5_GET(n) \ (ctx->block[(n)]) #endif /* * This processes one or more 64-byte data blocks, but does NOT update - * the bit counters. There are no alignment requirements. + * the bit counters. There are no alignment requirements. */ -static const void *body(my_md5_ctx *ctx, const void *data, unsigned long size) +static const void *my_md5_body(my_md5_ctx *ctx, + const void *data, unsigned long size) { const unsigned char *ptr; MD5_u32plus a, b, c, d; @@ -367,76 +368,76 @@ static const void *body(my_md5_ctx *ctx, const void *data, unsigned long size) saved_d = d; /* Round 1 */ - STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7) - STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12) - STEP(F, c, d, a, b, SET(2), 0x242070db, 17) - STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22) - STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7) - STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12) - STEP(F, c, d, a, b, SET(6), 0xa8304613, 17) - STEP(F, b, c, d, a, SET(7), 0xfd469501, 22) - STEP(F, a, b, c, d, SET(8), 0x698098d8, 7) - STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12) - STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17) - STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22) - STEP(F, a, b, c, d, SET(12), 0x6b901122, 7) - STEP(F, d, a, b, c, SET(13), 0xfd987193, 12) - STEP(F, c, d, a, b, SET(14), 0xa679438e, 17) - STEP(F, b, c, d, a, SET(15), 0x49b40821, 22) + MD5_STEP(MD5_F, a, b, c, d, MD5_SET(0), 0xd76aa478, 7) + MD5_STEP(MD5_F, d, a, b, c, MD5_SET(1), 0xe8c7b756, 12) + MD5_STEP(MD5_F, c, d, a, b, MD5_SET(2), 0x242070db, 17) + MD5_STEP(MD5_F, b, c, d, a, MD5_SET(3), 0xc1bdceee, 22) + MD5_STEP(MD5_F, a, b, c, d, MD5_SET(4), 0xf57c0faf, 7) + MD5_STEP(MD5_F, d, a, b, c, MD5_SET(5), 0x4787c62a, 12) + MD5_STEP(MD5_F, c, d, a, b, MD5_SET(6), 0xa8304613, 17) + MD5_STEP(MD5_F, b, c, d, a, MD5_SET(7), 0xfd469501, 22) + MD5_STEP(MD5_F, a, b, c, d, MD5_SET(8), 0x698098d8, 7) + MD5_STEP(MD5_F, d, a, b, c, MD5_SET(9), 0x8b44f7af, 12) + MD5_STEP(MD5_F, c, d, a, b, MD5_SET(10), 0xffff5bb1, 17) + MD5_STEP(MD5_F, b, c, d, a, MD5_SET(11), 0x895cd7be, 22) + MD5_STEP(MD5_F, a, b, c, d, MD5_SET(12), 0x6b901122, 7) + MD5_STEP(MD5_F, d, a, b, c, MD5_SET(13), 0xfd987193, 12) + MD5_STEP(MD5_F, c, d, a, b, MD5_SET(14), 0xa679438e, 17) + MD5_STEP(MD5_F, b, c, d, a, MD5_SET(15), 0x49b40821, 22) /* Round 2 */ - STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5) - STEP(G, d, a, b, c, GET(6), 0xc040b340, 9) - STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14) - STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20) - STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5) - STEP(G, d, a, b, c, GET(10), 0x02441453, 9) - STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14) - STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20) - STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5) - STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9) - STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14) - STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20) - STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5) - STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9) - STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14) - STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20) + MD5_STEP(MD5_G, a, b, c, d, MD5_GET(1), 0xf61e2562, 5) + MD5_STEP(MD5_G, d, a, b, c, MD5_GET(6), 0xc040b340, 9) + MD5_STEP(MD5_G, c, d, a, b, MD5_GET(11), 0x265e5a51, 14) + MD5_STEP(MD5_G, b, c, d, a, MD5_GET(0), 0xe9b6c7aa, 20) + MD5_STEP(MD5_G, a, b, c, d, MD5_GET(5), 0xd62f105d, 5) + MD5_STEP(MD5_G, d, a, b, c, MD5_GET(10), 0x02441453, 9) + MD5_STEP(MD5_G, c, d, a, b, MD5_GET(15), 0xd8a1e681, 14) + MD5_STEP(MD5_G, b, c, d, a, MD5_GET(4), 0xe7d3fbc8, 20) + MD5_STEP(MD5_G, a, b, c, d, MD5_GET(9), 0x21e1cde6, 5) + MD5_STEP(MD5_G, d, a, b, c, MD5_GET(14), 0xc33707d6, 9) + MD5_STEP(MD5_G, c, d, a, b, MD5_GET(3), 0xf4d50d87, 14) + MD5_STEP(MD5_G, b, c, d, a, MD5_GET(8), 0x455a14ed, 20) + MD5_STEP(MD5_G, a, b, c, d, MD5_GET(13), 0xa9e3e905, 5) + MD5_STEP(MD5_G, d, a, b, c, MD5_GET(2), 0xfcefa3f8, 9) + MD5_STEP(MD5_G, c, d, a, b, MD5_GET(7), 0x676f02d9, 14) + MD5_STEP(MD5_G, b, c, d, a, MD5_GET(12), 0x8d2a4c8a, 20) /* Round 3 */ - STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4) - STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11) - STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16) - STEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23) - STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4) - STEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11) - STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16) - STEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23) - STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4) - STEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11) - STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16) - STEP(H2, b, c, d, a, GET(6), 0x04881d05, 23) - STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4) - STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11) - STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16) - STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23) + MD5_STEP(MD5_H, a, b, c, d, MD5_GET(5), 0xfffa3942, 4) + MD5_STEP(MD5_H2, d, a, b, c, MD5_GET(8), 0x8771f681, 11) + MD5_STEP(MD5_H, c, d, a, b, MD5_GET(11), 0x6d9d6122, 16) + MD5_STEP(MD5_H2, b, c, d, a, MD5_GET(14), 0xfde5380c, 23) + MD5_STEP(MD5_H, a, b, c, d, MD5_GET(1), 0xa4beea44, 4) + MD5_STEP(MD5_H2, d, a, b, c, MD5_GET(4), 0x4bdecfa9, 11) + MD5_STEP(MD5_H, c, d, a, b, MD5_GET(7), 0xf6bb4b60, 16) + MD5_STEP(MD5_H2, b, c, d, a, MD5_GET(10), 0xbebfbc70, 23) + MD5_STEP(MD5_H, a, b, c, d, MD5_GET(13), 0x289b7ec6, 4) + MD5_STEP(MD5_H2, d, a, b, c, MD5_GET(0), 0xeaa127fa, 11) + MD5_STEP(MD5_H, c, d, a, b, MD5_GET(3), 0xd4ef3085, 16) + MD5_STEP(MD5_H2, b, c, d, a, MD5_GET(6), 0x04881d05, 23) + MD5_STEP(MD5_H, a, b, c, d, MD5_GET(9), 0xd9d4d039, 4) + MD5_STEP(MD5_H2, d, a, b, c, MD5_GET(12), 0xe6db99e5, 11) + MD5_STEP(MD5_H, c, d, a, b, MD5_GET(15), 0x1fa27cf8, 16) + MD5_STEP(MD5_H2, b, c, d, a, MD5_GET(2), 0xc4ac5665, 23) /* Round 4 */ - STEP(I, a, b, c, d, GET(0), 0xf4292244, 6) - STEP(I, d, a, b, c, GET(7), 0x432aff97, 10) - STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15) - STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21) - STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6) - STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10) - STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15) - STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21) - STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6) - STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10) - STEP(I, c, d, a, b, GET(6), 0xa3014314, 15) - STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21) - STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6) - STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10) - STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15) - STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21) + MD5_STEP(MD5_I, a, b, c, d, MD5_GET(0), 0xf4292244, 6) + MD5_STEP(MD5_I, d, a, b, c, MD5_GET(7), 0x432aff97, 10) + MD5_STEP(MD5_I, c, d, a, b, MD5_GET(14), 0xab9423a7, 15) + MD5_STEP(MD5_I, b, c, d, a, MD5_GET(5), 0xfc93a039, 21) + MD5_STEP(MD5_I, a, b, c, d, MD5_GET(12), 0x655b59c3, 6) + MD5_STEP(MD5_I, d, a, b, c, MD5_GET(3), 0x8f0ccc92, 10) + MD5_STEP(MD5_I, c, d, a, b, MD5_GET(10), 0xffeff47d, 15) + MD5_STEP(MD5_I, b, c, d, a, MD5_GET(1), 0x85845dd1, 21) + MD5_STEP(MD5_I, a, b, c, d, MD5_GET(8), 0x6fa87e4f, 6) + MD5_STEP(MD5_I, d, a, b, c, MD5_GET(15), 0xfe2ce6e0, 10) + MD5_STEP(MD5_I, c, d, a, b, MD5_GET(6), 0xa3014314, 15) + MD5_STEP(MD5_I, b, c, d, a, MD5_GET(13), 0x4e0811a1, 21) + MD5_STEP(MD5_I, a, b, c, d, MD5_GET(4), 0xf7537e82, 6) + MD5_STEP(MD5_I, d, a, b, c, MD5_GET(11), 0xbd3af235, 10) + MD5_STEP(MD5_I, c, d, a, b, MD5_GET(2), 0x2ad7d2bb, 15) + MD5_STEP(MD5_I, b, c, d, a, MD5_GET(9), 0xeb86d391, 21) a += saved_a; b += saved_b; @@ -492,11 +493,11 @@ static void my_md5_update(my_md5_ctx *ctx, const void *data, memcpy(&ctx->buffer[used], data, available); data = (const unsigned char *)data + available; size -= available; - body(ctx, ctx->buffer, 64); + my_md5_body(ctx, ctx->buffer, 64); } if(size >= 64) { - data = body(ctx, data, size & ~(unsigned long)0x3f); + data = my_md5_body(ctx, data, size & ~(unsigned long)0x3f); size &= 0x3f; } @@ -515,7 +516,7 @@ static void my_md5_final(unsigned char *result, my_md5_ctx *ctx) if(available < 8) { memset(&ctx->buffer[used], 0, available); - body(ctx, ctx->buffer, 64); + my_md5_body(ctx, ctx->buffer, 64); used = 0; available = 64; } @@ -532,7 +533,7 @@ static void my_md5_final(unsigned char *result, my_md5_ctx *ctx) ctx->buffer[62] = curlx_ultouc((ctx->hi >> 16)&0xff); ctx->buffer[63] = curlx_ultouc(ctx->hi >> 24); - body(ctx, ctx->buffer, 64); + my_md5_body(ctx, ctx->buffer, 64); result[0] = curlx_ultouc((ctx->a)&0xff); result[1] = curlx_ultouc((ctx->a >> 8)&0xff); diff --git a/lib/memdebug.c b/lib/memdebug.c index fce933a32..57fe591ed 100644 --- a/lib/memdebug.c +++ b/lib/memdebug.c @@ -30,7 +30,7 @@ #include "urldata.h" -#define MEMDEBUG_NODEFINES /* don't redefine the standard functions */ +#define MEMDEBUG_NODEFINES /* do not redefine the standard functions */ /* The last 3 #include files should be in this order */ #include "curl_printf.h" @@ -44,8 +44,8 @@ struct memdebug { double d; void *p; } mem[1]; - /* I'm hoping this is the thing with the strictest alignment - * requirements. That also means we waste some space :-( */ + /* I am hoping this is the thing with the strictest alignment + * requirements. That also means we waste some space :-( */ }; /* @@ -53,7 +53,7 @@ struct memdebug { * remain so. For advanced analysis, record a log file and write perl scripts * to analyze them! * - * Don't use these with multithreaded test programs! + * Do not use these with multithreaded test programs! */ FILE *curl_dbg_logfile = NULL; @@ -75,7 +75,7 @@ static void curl_dbg_cleanup(void) curl_dbg_logfile = NULL; } -/* this sets the log file name */ +/* this sets the log filename */ void curl_dbg_memdebug(const char *logname) { if(!curl_dbg_logfile) { @@ -84,7 +84,7 @@ void curl_dbg_memdebug(const char *logname) else curl_dbg_logfile = stderr; #ifdef MEMDEBUG_LOG_SYNC - /* Flush the log file after every line so the log isn't lost in a crash */ + /* Flush the log file after every line so the log is not lost in a crash */ if(curl_dbg_logfile) setbuf(curl_dbg_logfile, (char *)NULL); #endif @@ -103,7 +103,7 @@ void curl_dbg_memlimit(long limit) } } -/* returns TRUE if this isn't allowed! */ +/* returns TRUE if this is not allowed! */ static bool countcheck(const char *func, int line, const char *source) { /* if source is NULL, then the call is made internally and this check diff --git a/lib/memdebug.h b/lib/memdebug.h index 51147cdcb..fd5cc2c94 100644 --- a/lib/memdebug.h +++ b/lib/memdebug.h @@ -137,13 +137,14 @@ CURL_EXTERN int curl_dbg_fclose(FILE *file, int line, const char *source); #undef socket #define socket(domain,type,protocol)\ - curl_dbg_socket(domain, type, protocol, __LINE__, __FILE__) + curl_dbg_socket((int)domain, type, protocol, __LINE__, __FILE__) #undef accept /* for those with accept as a macro */ #define accept(sock,addr,len)\ curl_dbg_accept(sock, addr, len, __LINE__, __FILE__) #ifdef HAVE_SOCKETPAIR #define socketpair(domain,type,protocol,socket_vector)\ - curl_dbg_socketpair(domain, type, protocol, socket_vector, __LINE__, __FILE__) + curl_dbg_socketpair((int)domain, type, protocol, socket_vector, \ + __LINE__, __FILE__) #endif #ifdef HAVE_GETADDRINFO diff --git a/lib/mime.c b/lib/mime.c index 5bc6d3893..e9eeb1bf7 100644 --- a/lib/mime.c +++ b/lib/mime.c @@ -1137,7 +1137,7 @@ static void cleanup_part_content(curl_mimepart *part) part->datasize = (curl_off_t) 0; /* No size yet. */ cleanup_encoder_state(&part->encstate); part->kind = MIMEKIND_NONE; - part->flags &= ~MIME_FAST_READ; + part->flags &= ~(unsigned int)MIME_FAST_READ; part->lastreadstatus = 1; /* Successful read status. */ part->state.state = MIMESTATE_BEGIN; } @@ -1147,7 +1147,7 @@ static void mime_subparts_free(void *ptr) curl_mime *mime = (curl_mime *) ptr; if(mime && mime->parent) { - mime->parent->freefunc = NULL; /* Be sure we won't be called again. */ + mime->parent->freefunc = NULL; /* Be sure we will not be called again. */ cleanup_part_content(mime->parent); /* Avoid dangling pointer in part. */ } curl_mime_free(mime); @@ -1159,7 +1159,7 @@ static void mime_subparts_unbind(void *ptr) curl_mime *mime = (curl_mime *) ptr; if(mime && mime->parent) { - mime->parent->freefunc = NULL; /* Be sure we won't be called again. */ + mime->parent->freefunc = NULL; /* Be sure we will not be called again. */ cleanup_part_content(mime->parent); /* Avoid dangling pointer in part. */ mime->parent = NULL; } @@ -1186,7 +1186,7 @@ void curl_mime_free(curl_mime *mime) curl_mimepart *part; if(mime) { - mime_subparts_unbind(mime); /* Be sure it's not referenced anymore. */ + mime_subparts_unbind(mime); /* Be sure it is not referenced anymore. */ while(mime->firstpart) { part = mime->firstpart; mime->firstpart = part->nextpart; @@ -1354,7 +1354,7 @@ CURLcode curl_mime_name(curl_mimepart *part, const char *name) return CURLE_OK; } -/* Set mime part remote file name. */ +/* Set mime part remote filename. */ CURLcode curl_mime_filename(curl_mimepart *part, const char *filename) { if(!part) @@ -1413,36 +1413,35 @@ CURLcode curl_mime_filedata(curl_mimepart *part, const char *filename) char *base; struct_stat sbuf; - if(stat(filename, &sbuf) || access(filename, R_OK)) + if(stat(filename, &sbuf)) result = CURLE_READ_ERROR; - - part->data = strdup(filename); - if(!part->data) - result = CURLE_OUT_OF_MEMORY; - - part->datasize = -1; - if(!result && S_ISREG(sbuf.st_mode)) { - part->datasize = filesize(filename, sbuf); - part->seekfunc = mime_file_seek; - } - - part->readfunc = mime_file_read; - part->freefunc = mime_file_free; - part->kind = MIMEKIND_FILE; - - /* As a side effect, set the filename to the current file's base name. - It is possible to withdraw this by explicitly calling - curl_mime_filename() with a NULL filename argument after the current - call. */ - base = strippath(filename); - if(!base) - result = CURLE_OUT_OF_MEMORY; else { - CURLcode res = curl_mime_filename(part, base); + part->data = strdup(filename); + if(!part->data) + result = CURLE_OUT_OF_MEMORY; + else { + part->datasize = -1; + if(S_ISREG(sbuf.st_mode)) { + part->datasize = filesize(filename, sbuf); + part->seekfunc = mime_file_seek; + } - if(res) - result = res; - free(base); + part->readfunc = mime_file_read; + part->freefunc = mime_file_free; + part->kind = MIMEKIND_FILE; + + /* As a side effect, set the filename to the current file's base name. + It is possible to withdraw this by explicitly calling + curl_mime_filename() with a NULL filename argument after the current + call. */ + base = strippath(filename); + if(!base) + result = CURLE_OUT_OF_MEMORY; + else { + result = curl_mime_filename(part, base); + free(base); + } + } } } return result; @@ -1498,7 +1497,7 @@ CURLcode curl_mime_headers(curl_mimepart *part, if(part->flags & MIME_USERHEADERS_OWNER) { if(part->userheaders != headers) /* Allow setting twice the same list. */ curl_slist_free_all(part->userheaders); - part->flags &= ~MIME_USERHEADERS_OWNER; + part->flags &= ~(unsigned int)MIME_USERHEADERS_OWNER; } part->userheaders = headers; if(headers && take_ownership) @@ -1555,7 +1554,7 @@ CURLcode Curl_mime_set_subparts(curl_mimepart *part, while(root->parent && root->parent->parent) root = root->parent->parent; if(subparts == root) { - /* Can't add as a subpart of itself. */ + /* cannot add as a subpart of itself. */ return CURLE_BAD_FUNCTION_ARGUMENT; } } @@ -1663,7 +1662,8 @@ static curl_off_t mime_size(curl_mimepart *part) if(size >= 0 && !(part->flags & MIME_BODY_ONLY)) { /* Compute total part size. */ size += slist_size(part->curlheaders, 2, NULL, 0); - size += slist_size(part->userheaders, 2, STRCONST("Content-Type")); + size += slist_size(part->userheaders, 2, + STRCONST("Content-Type")); size += 2; /* CRLF after headers. */ } return size; @@ -1771,7 +1771,7 @@ CURLcode Curl_mime_prepare_headers(struct Curl_easy *data, curl_slist_free_all(part->curlheaders); part->curlheaders = NULL; - /* Be sure we won't access old headers later. */ + /* Be sure we will not access old headers later. */ if(part->state.state == MIMESTATE_CURLHEADERS) mimesetstate(&part->state, MIMESTATE_CURLHEADERS, NULL); @@ -1971,7 +1971,7 @@ static CURLcode cr_mime_read(struct Curl_easy *data, switch(nread) { case 0: if((ctx->total_len >= 0) && (ctx->read_len < ctx->total_len)) { - failf(data, "client mime read EOF fail, only " + failf(data, "client mime read EOF fail, " "only %"CURL_FORMAT_CURL_OFF_T"/%"CURL_FORMAT_CURL_OFF_T " of needed bytes read", ctx->read_len, ctx->total_len); return CURLE_READ_ERROR; @@ -2072,7 +2072,7 @@ static CURLcode cr_mime_resume_from(struct Curl_easy *data, return CURLE_PARTIAL_FILE; } } - /* we've passed, proceed as normal */ + /* we have passed, proceed as normal */ } return CURLE_OK; } @@ -2096,6 +2096,14 @@ static CURLcode cr_mime_unpause(struct Curl_easy *data, return CURLE_OK; } +static bool cr_mime_is_paused(struct Curl_easy *data, + struct Curl_creader *reader) +{ + struct cr_mime_ctx *ctx = reader->ctx; + (void)data; + return (ctx->part && ctx->part->lastreadstatus == CURL_READFUNC_PAUSE); +} + static const struct Curl_crtype cr_mime = { "cr-mime", cr_mime_init, @@ -2106,6 +2114,7 @@ static const struct Curl_crtype cr_mime = { cr_mime_resume_from, cr_mime_rewind, cr_mime_unpause, + cr_mime_is_paused, Curl_creader_def_done, sizeof(struct cr_mime_ctx) }; diff --git a/lib/mime.h b/lib/mime.h index 954b3ccf3..5073a38f7 100644 --- a/lib/mime.h +++ b/lib/mime.h @@ -112,7 +112,7 @@ struct curl_mimepart { curl_mimepart *nextpart; /* Forward linked list. */ enum mimekind kind; /* The part kind. */ unsigned int flags; /* Flags. */ - char *data; /* Memory data or file name. */ + char *data; /* Memory data or filename. */ curl_read_callback readfunc; /* Read function. */ curl_seek_callback seekfunc; /* Seek function. */ curl_free_callback freefunc; /* Argument free function. */ @@ -121,7 +121,7 @@ struct curl_mimepart { struct curl_slist *curlheaders; /* Part headers. */ struct curl_slist *userheaders; /* Part headers. */ char *mimetype; /* Part mime type. */ - char *filename; /* Remote file name. */ + char *filename; /* Remote filename. */ char *name; /* Data name. */ curl_off_t datasize; /* Expected data size. */ struct mime_state state; /* Current readback state. */ diff --git a/lib/mprintf.c b/lib/mprintf.c index 4c60d1330..89cbb87ce 100644 --- a/lib/mprintf.c +++ b/lib/mprintf.c @@ -77,7 +77,7 @@ static const char upper_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; #define OUTCHAR(x) \ do { \ - if(!stream(x, userp)) \ + if(!stream((unsigned char)x, userp)) \ done++; \ else \ return done; /* return on failure */ \ @@ -243,7 +243,7 @@ static int parsefmt(const char *format, struct va_input *iptr; bool loopit = TRUE; fmt++; - outlen = fmt - start - 1; + outlen = (size_t)(fmt - start - 1); if(*fmt == '%') { /* this means a %% that should be output only as %. Create an output segment. */ @@ -261,7 +261,8 @@ static int parsefmt(const char *format, continue; /* while */ } - flags = width = precision = 0; + flags = 0; + width = precision = 0; if(use_dollar != DOLLAR_NOPE) { param = dollarstring(fmt, &fmt); @@ -291,7 +292,7 @@ static int parsefmt(const char *format, break; case '-': flags |= FLAGS_LEFT; - flags &= ~FLAGS_PAD_NIL; + flags &= ~(unsigned int)FLAGS_PAD_NIL; break; case '#': flags |= FLAGS_ALT; @@ -549,7 +550,7 @@ static int parsefmt(const char *format, optr = &out[ocount++]; if(ocount > MAX_SEGMENTS) return PFMT_MANYSEGS; - optr->input = param; + optr->input = (unsigned int)param; optr->flags = flags; optr->width = width; optr->precision = precision; @@ -562,7 +563,7 @@ static int parsefmt(const char *format, } /* is there a trailing piece */ - outlen = fmt - start; + outlen = (size_t)(fmt - start); if(outlen) { optr = &out[ocount++]; if(ocount > MAX_SEGMENTS) @@ -688,7 +689,7 @@ static int formatf( mp_intmax_t signed_num; /* Used to convert negative in positive. */ char *w; size_t outlen = optr->outlen; - int flags = optr->flags; + unsigned int flags = optr->flags; if(outlen) { char *str = optr->start; @@ -710,7 +711,7 @@ static int formatf( else width = -width; flags |= FLAGS_LEFT; - flags &= ~FLAGS_PAD_NIL; + flags &= ~(unsigned int)FLAGS_PAD_NIL; } } else @@ -862,12 +863,12 @@ static int formatf( str = (char *)iptr->val.str; if(!str) { - /* Write null string if there's space. */ + /* Write null string if there is space. */ if(prec == -1 || prec >= (int) sizeof(nilstr) - 1) { str = nilstr; len = sizeof(nilstr) - 1; /* Disable quotes around (nil) */ - flags &= (~FLAGS_ALT); + flags &= ~(unsigned int)FLAGS_ALT; } else { str = ""; @@ -886,13 +887,13 @@ static int formatf( if(flags & FLAGS_ALT) OUTCHAR('"'); - if(!(flags&FLAGS_LEFT)) + if(!(flags & FLAGS_LEFT)) while(width-- > 0) OUTCHAR(' '); for(; len && *str; len--) OUTCHAR(*str++); - if(flags&FLAGS_LEFT) + if(flags & FLAGS_LEFT) while(width-- > 0) OUTCHAR(' '); @@ -952,12 +953,13 @@ static int formatf( *fptr = 0; if(width >= 0) { + size_t dlen; if(width >= (int)sizeof(work)) width = sizeof(work)-1; /* RECURSIVE USAGE */ - len = curl_msnprintf(fptr, left, "%d", width); - fptr += len; - left -= len; + dlen = (size_t)curl_msnprintf(fptr, left, "%d", width); + fptr += dlen; + left -= dlen; } if(prec >= 0) { /* for each digit in the integer part, we can have one less @@ -965,7 +967,7 @@ static int formatf( size_t maxprec = sizeof(work) - 2; double val = iptr->val.dnum; if(width > 0 && prec <= width) - maxprec -= width; + maxprec -= (size_t)width; while(val >= 10.0) { val /= 10; maxprec--; @@ -1038,8 +1040,8 @@ static int addbyter(unsigned char outc, void *f) { struct nsprintf *infop = f; if(infop->length < infop->max) { - /* only do this if we haven't reached max length yet */ - *infop->buffer++ = outc; /* store */ + /* only do this if we have not reached max length yet */ + *infop->buffer++ = (char)outc; /* store */ infop->length++; /* we are now one byte larger */ return 0; /* fputc() returns like this on success */ } @@ -1060,10 +1062,10 @@ int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format, if(info.max) { /* we terminate this with a zero byte */ if(info.max == info.length) { - /* we're at maximum, scrap the last letter */ + /* we are at maximum, scrap the last letter */ info.buffer[-1] = 0; DEBUGASSERT(retcode); - retcode--; /* don't count the nul byte */ + retcode--; /* do not count the nul byte */ } else info.buffer[0] = 0; @@ -1139,7 +1141,7 @@ char *curl_maprintf(const char *format, ...) static int storebuffer(unsigned char outc, void *f) { char **buffer = f; - **buffer = outc; + **buffer = (char)outc; (*buffer)++; return 0; } @@ -1160,9 +1162,7 @@ static int fputc_wrapper(unsigned char outc, void *f) int out = outc; FILE *s = f; int rc = fputc(out, s); - if(rc == out) - return 0; - return 1; + return rc == EOF; } int curl_mprintf(const char *format, ...) diff --git a/lib/mqtt.c b/lib/mqtt.c index 9290da031..8c461e163 100644 --- a/lib/mqtt.c +++ b/lib/mqtt.c @@ -75,7 +75,7 @@ static CURLcode mqtt_setup_conn(struct Curl_easy *data, */ const struct Curl_handler Curl_handler_mqtt = { - "MQTT", /* scheme */ + "mqtt", /* scheme */ mqtt_setup_conn, /* setup_connection */ mqtt_do, /* do_it */ mqtt_done, /* done */ @@ -89,6 +89,7 @@ const struct Curl_handler Curl_handler_mqtt = { ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_MQTT, /* defport */ @@ -153,15 +154,15 @@ static int mqtt_getsock(struct Curl_easy *data, static int mqtt_encode_len(char *buf, size_t len) { - unsigned char encoded; int i; for(i = 0; (len > 0) && (i<4); i++) { + unsigned char encoded; encoded = len % 0x80; len /= 0x80; if(len) encoded |= 0x80; - buf[i] = encoded; + buf[i] = (char)encoded; } return i; @@ -311,7 +312,7 @@ static CURLcode mqtt_connect(struct Curl_easy *data) start_user = pos + 3 + MQTT_CLIENTID_LEN; /* position where starts the password payload */ start_pwd = start_user + ulen; - /* if user name was provided, add it to the packet */ + /* if username was provided, add it to the packet */ if(ulen) { start_pwd += 2; @@ -584,7 +585,7 @@ static size_t mqtt_decode_len(unsigned char *buf, return len; } -#ifdef CURLDEBUG +#ifdef DEBUGBUILD static const char *statenames[]={ "MQTT_FIRST", "MQTT_REMAINING_LENGTH", @@ -605,7 +606,7 @@ static void mqstate(struct Curl_easy *data, { struct connectdata *conn = data->conn; struct mqtt_conn *mqtt = &conn->proto.mqtt; -#ifdef CURLDEBUG +#ifdef DEBUGBUILD infof(data, "%s (from %s) (next is %s)", statenames[state], statenames[mqtt->state], @@ -742,7 +743,7 @@ static CURLcode mqtt_doing(struct Curl_easy *data, bool *done) struct mqtt_conn *mqtt = &conn->proto.mqtt; struct MQTT *mq = data->req.p.mqtt; ssize_t nread; - unsigned char byte; + unsigned char recvbyte; *done = FALSE; @@ -775,13 +776,13 @@ static CURLcode mqtt_doing(struct Curl_easy *data, bool *done) FALLTHROUGH(); case MQTT_REMAINING_LENGTH: do { - result = Curl_xfer_recv(data, (char *)&byte, 1, &nread); - if(!nread) + result = Curl_xfer_recv(data, (char *)&recvbyte, 1, &nread); + if(result || !nread) break; - Curl_debug(data, CURLINFO_HEADER_IN, (char *)&byte, 1); - mq->pkt_hd[mq->npacket++] = byte; - } while((byte & 0x80) && (mq->npacket < 4)); - if(nread && (byte & 0x80)) + Curl_debug(data, CURLINFO_HEADER_IN, (char *)&recvbyte, 1); + mq->pkt_hd[mq->npacket++] = recvbyte; + } while((recvbyte & 0x80) && (mq->npacket < 4)); + if(!result && nread && (recvbyte & 0x80)) /* MQTT supports up to 127 * 128^0 + 127 * 128^1 + 127 * 128^2 + 127 * 128^3 bytes. server tried to send more */ result = CURLE_WEIRD_SERVER_REPLY; diff --git a/lib/multi.c b/lib/multi.c index ed9cac796..896f73049 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -57,7 +57,7 @@ /* 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 + to 911 takes on a 32-bit machine 4 x 804 = 3211 more bytes. Still, every CURL handle takes 45-50 K memory, therefore this 3K are not significant. */ #ifndef CURL_SOCKET_HASH_TABLE_SIZE @@ -86,6 +86,8 @@ ((x) && (x)->magic == CURL_MULTI_HANDLE) #endif +static void move_pending_to_connect(struct Curl_multi *multi, + struct Curl_easy *data); static CURLMcode singlesocket(struct Curl_multi *multi, struct Curl_easy *data); static CURLMcode add_next_timeout(struct curltime now, @@ -100,6 +102,7 @@ static void multi_xfer_bufs_free(struct Curl_multi *multi); static const char * const multi_statename[]={ "INIT", "PENDING", + "SETUP", "CONNECT", "RESOLVING", "CONNECTING", @@ -132,7 +135,7 @@ static void init_completed(struct Curl_easy *data) { /* this is a completed transfer */ - /* Important: reset the conn pointer so that we don't point to memory + /* Important: reset the conn pointer so that we do not point to memory that could be freed anytime */ Curl_detach_connection(data); Curl_expire_clear(data); /* stop all timers */ @@ -149,6 +152,7 @@ static void mstate(struct Curl_easy *data, CURLMstate state static const init_multistate_func finit[MSTATE_LAST] = { NULL, /* INIT */ NULL, /* PENDING */ + NULL, /* SETUP */ Curl_init_CONNECT, /* CONNECT */ NULL, /* RESOLVING */ NULL, /* CONNECTING */ @@ -171,7 +175,7 @@ static void mstate(struct Curl_easy *data, CURLMstate state #endif if(oldstate == state) - /* don't bother when the new state is the same as the old state */ + /* do not bother when the new state is the same as the old state */ return; data->mstate = state; @@ -187,7 +191,7 @@ static void mstate(struct Curl_easy *data, CURLMstate state #endif if(state == MSTATE_COMPLETED) { - /* changing to COMPLETED means there's one less easy handle 'alive' */ + /* changing to COMPLETED means there is one less easy handle 'alive' */ DEBUGASSERT(data->multi->num_alive > 0); data->multi->num_alive--; if(!data->multi->num_alive) { @@ -339,7 +343,7 @@ static size_t hash_fd(void *key, size_t key_length, size_t slots_num) curl_socket_t fd = *((curl_socket_t *) key); (void) key_length; - return (fd % slots_num); + return (fd % (curl_socket_t)slots_num); } /* @@ -350,22 +354,33 @@ static size_t hash_fd(void *key, size_t key_length, size_t slots_num) * "Some tests at 7000 and 9000 connections showed that the socket hash lookup * is somewhat of a bottle neck. Its current implementation may be a bit too * limiting. It simply has a fixed-size array, and on each entry in the array - * it has a linked list with entries. So the hash only checks which list to - * scan through. The code I had used so for used a list with merely 7 slots - * (as that is what the DNS hash uses) but with 7000 connections that would - * make an average of 1000 nodes in each list to run through. I upped that to - * 97 slots (I believe a prime is suitable) and noticed a significant speed - * increase. I need to reconsider the hash implementation or use a rather + * it has a linked list with entries. The hash only checks which list to scan + * through. The code I had used so for used a list with merely 7 slots (as + * that is what the DNS hash uses) but with 7000 connections that would make + * an average of 1000 nodes in each list to run through. I upped that to 97 + * slots (I believe a prime is suitable) and noticed a significant speed + * increase. I need to reconsider the hash implementation or use a rather * large default value like this. At 9000 connections I was still below 10us * per call." * */ -static void sh_init(struct Curl_hash *hash, int hashsize) +static void sh_init(struct Curl_hash *hash, size_t hashsize) { Curl_hash_init(hash, hashsize, hash_fd, fd_key_compare, sh_freeentry); } +/* multi->proto_hash destructor. Should never be called as elements + * MUST be added with their own destructor */ +static void ph_freeentry(void *p) +{ + (void)p; + /* Will always be FALSE. Cannot use a 0 assert here since compilers + * are not in agreement if they then want a NORETURN attribute or + * not. *sigh* */ + DEBUGASSERT(p == NULL); +} + /* * multi_addmsg() * @@ -374,13 +389,12 @@ static void sh_init(struct Curl_hash *hash, int hashsize) */ static void multi_addmsg(struct Curl_multi *multi, struct Curl_message *msg) { - Curl_llist_insert_next(&multi->msglist, multi->msglist.tail, msg, - &msg->list); + Curl_llist_append(&multi->msglist, msg, &msg->list); } -struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */ - int chashsize, /* connection hash */ - int dnssize) /* dns hash */ +struct Curl_multi *Curl_multi_handle(size_t hashsize, /* socket hash */ + size_t chashsize, /* connection hash */ + size_t dnssize) /* dns hash */ { struct Curl_multi *multi = calloc(1, sizeof(struct Curl_multi)); @@ -393,7 +407,10 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */ sh_init(&multi->sockhash, hashsize); - if(Curl_conncache_init(&multi->conn_cache, chashsize)) + Curl_hash_init(&multi->proto_hash, 23, + Curl_hash_str, Curl_str_key_compare, ph_freeentry); + + if(Curl_conncache_init(&multi->conn_cache, multi, chashsize)) goto error; Curl_llist_init(&multi->msglist, NULL); @@ -409,14 +426,7 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */ goto error; #else #ifdef ENABLE_WAKEUP - if(wakeup_create(multi->wakeup_pair) < 0) { - multi->wakeup_pair[0] = CURL_SOCKET_BAD; - multi->wakeup_pair[1] = CURL_SOCKET_BAD; - } - else if(curlx_nonblock(multi->wakeup_pair[0], TRUE) < 0 || - curlx_nonblock(multi->wakeup_pair[1], TRUE) < 0) { - wakeup_close(multi->wakeup_pair[0]); - wakeup_close(multi->wakeup_pair[1]); + if(wakeup_create(multi->wakeup_pair, TRUE) < 0) { multi->wakeup_pair[0] = CURL_SOCKET_BAD; multi->wakeup_pair[1] = CURL_SOCKET_BAD; } @@ -428,6 +438,7 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */ error: sockhash_destroy(&multi->sockhash); + Curl_hash_destroy(&multi->proto_hash); Curl_hash_destroy(&multi->hostcache); Curl_conncache_destroy(&multi->conn_cache); free(multi); @@ -541,14 +552,16 @@ CURLMcode curl_multi_add_handle(struct Curl_multi *multi, Curl_llist_init(&data->state.timeoutlist, NULL); /* - * No failure allowed in this function beyond this point. And no - * modification of easy nor multi handle allowed before this except for - * potential multi's connection cache growing which won't be undone in this - * function no matter what. + * No failure allowed in this function beyond this point. No modification of + * easy nor multi handle allowed before this except for potential multi's + * connection cache growing which will not be undone in this function no + * matter what. */ if(data->set.errorbuffer) data->set.errorbuffer[0] = 0; + data->state.os_errno = 0; + /* make the Curl_easy refer back to this multi handle - before Curl_expire() is called. */ data->multi = multi; @@ -679,8 +692,8 @@ static CURLcode multi_done(struct Curl_easy *data, case CURLE_ABORTED_BY_CALLBACK: case CURLE_READ_ERROR: case CURLE_WRITE_ERROR: - /* When we're aborted due to a callback return code it basically have to - be counted as premature as there is trouble ahead if we don't. We have + /* When we are aborted due to a callback return code it basically have to + be counted as premature as there is trouble ahead if we do not. We have many callbacks and protocols work differently, we could potentially do this more fine-grained in the future. */ premature = TRUE; @@ -744,8 +757,8 @@ static CURLcode multi_done(struct Curl_easy *data, restrictions in our or the server's end 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 reusing, so we're forced to close it. In a perfect world + the entire request operation is complete and thus we cannot know in what + state it is for reusing, so we are 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. */ @@ -858,7 +871,7 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi, if(data->conn && data->mstate > MSTATE_DO && data->mstate < MSTATE_COMPLETED) { - /* Set connection owner so that the DONE function closes it. We can + /* Set connection owner so that the DONE function closes it. We can safely do this here since connection is killed. */ streamclose(data->conn, "Removed with partial response"); } @@ -867,7 +880,7 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi, /* multi_done() clears the association between the easy handle and the connection. - Note that this ignores the return code simply because there's + Note that this ignores the return code simply because there is nothing really useful to do with it anyway! */ (void)multi_done(data, data->result, premature); } @@ -901,7 +914,7 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi, what we want */ data->mstate = MSTATE_COMPLETED; - /* This ignores the return code even in case of problems because there's + /* This ignores the return code even in case of problems because there is nothing more to do about that, here */ (void)singlesocket(multi, easy); /* to let the application know what sockets that vanish with this handle */ @@ -913,7 +926,7 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi, /* This removes a handle that was part the multi interface that used CONNECT_ONLY, that connection is now left alive but since this handle has bits.close set nothing can use that transfer anymore and it is - forbidden from reuse. And this easy handle cannot find the connection + forbidden from reuse. This easy handle cannot find the connection anymore once removed from the multi handle Better close the connection here, at once. @@ -940,12 +953,12 @@ CURLMcode curl_multi_remove_handle(struct Curl_multi *multi, #endif /* as this was using a shared connection cache we clear the pointer to that - since we're not part of that multi handle anymore */ + since we are not part of that multi handle anymore */ data->state.conn_cache = NULL; data->multi = NULL; /* clear the association to this multi handle */ - /* make sure there's no pending message in the queue sent from this easy + /* make sure there is 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; @@ -997,13 +1010,13 @@ void Curl_detach_connection(struct Curl_easy *data) * This is the only function that should assign data->conn */ void Curl_attach_connection(struct Curl_easy *data, - struct connectdata *conn) + struct connectdata *conn) { + DEBUGASSERT(data); DEBUGASSERT(!data->conn); DEBUGASSERT(conn); data->conn = conn; - Curl_llist_insert_next(&conn->easyq, conn->easyq.tail, data, - &data->conn_queue); + Curl_llist_append(&conn->easyq, data, &data->conn_queue); if(conn->handler && conn->handler->attach) conn->handler->attach(data, conn); Curl_conn_ev_data_attach(conn, data); @@ -1012,12 +1025,14 @@ void Curl_attach_connection(struct Curl_easy *data, static int connecting_getsock(struct Curl_easy *data, curl_socket_t *socks) { struct connectdata *conn = data->conn; - (void)socks; - /* Not using `conn->sockfd` as `Curl_xfer_setup()` initializes - * that *after* the connect. */ - if(conn && conn->sock[FIRSTSOCKET] != CURL_SOCKET_BAD) { + curl_socket_t sockfd; + + if(!conn) + return GETSOCK_BLANK; + sockfd = Curl_conn_get_socket(data, FIRSTSOCKET); + if(sockfd != CURL_SOCKET_BAD) { /* Default is to wait to something from the server */ - socks[0] = conn->sock[FIRSTSOCKET]; + socks[0] = sockfd; return GETSOCK_READSOCK(0); } return GETSOCK_BLANK; @@ -1026,11 +1041,16 @@ static int connecting_getsock(struct Curl_easy *data, curl_socket_t *socks) static int protocol_getsock(struct Curl_easy *data, curl_socket_t *socks) { struct connectdata *conn = data->conn; - if(conn && conn->handler->proto_getsock) + curl_socket_t sockfd; + + if(!conn) + return GETSOCK_BLANK; + if(conn->handler->proto_getsock) return conn->handler->proto_getsock(data, conn, socks); - else if(conn && conn->sockfd != CURL_SOCKET_BAD) { + sockfd = Curl_conn_get_socket(data, FIRSTSOCKET); + if(sockfd != CURL_SOCKET_BAD) { /* Default is to wait to something from the server */ - socks[0] = conn->sockfd; + socks[0] = sockfd; return GETSOCK_READSOCK(0); } return GETSOCK_BLANK; @@ -1039,9 +1059,11 @@ static int protocol_getsock(struct Curl_easy *data, curl_socket_t *socks) static int domore_getsock(struct Curl_easy *data, curl_socket_t *socks) { struct connectdata *conn = data->conn; - if(conn && conn->handler->domore_getsock) + if(!conn) + return GETSOCK_BLANK; + if(conn->handler->domore_getsock) return conn->handler->domore_getsock(data, conn, socks); - else if(conn && conn->sockfd != CURL_SOCKET_BAD) { + else if(conn->sockfd != CURL_SOCKET_BAD) { /* Default is that we want to send something to the server */ socks[0] = conn->sockfd; return GETSOCK_WRITESOCK(0); @@ -1052,9 +1074,11 @@ static int domore_getsock(struct Curl_easy *data, curl_socket_t *socks) static int doing_getsock(struct Curl_easy *data, curl_socket_t *socks) { struct connectdata *conn = data->conn; - if(conn && conn->handler->doing_getsock) + if(!conn) + return GETSOCK_BLANK; + if(conn->handler->doing_getsock) return conn->handler->doing_getsock(data, conn, socks); - else if(conn && conn->sockfd != CURL_SOCKET_BAD) { + else if(conn->sockfd != CURL_SOCKET_BAD) { /* Default is that we want to send something to the server */ socks[0] = conn->sockfd; return GETSOCK_WRITESOCK(0); @@ -1065,7 +1089,6 @@ static int doing_getsock(struct Curl_easy *data, curl_socket_t *socks) static int perform_getsock(struct Curl_easy *data, curl_socket_t *sock) { struct connectdata *conn = data->conn; - if(!conn) return GETSOCK_BLANK; else if(conn->handler->perform_getsock) @@ -1102,6 +1125,7 @@ static int perform_getsock(struct Curl_easy *data, curl_socket_t *sock) static void multi_getsock(struct Curl_easy *data, struct easy_pollset *ps) { + bool expect_sockets = TRUE; /* The no connection case can happen when this is called from curl_multi_remove_handle() => singlesocket() => multi_getsock(). */ @@ -1112,13 +1136,17 @@ static void multi_getsock(struct Curl_easy *data, switch(data->mstate) { case MSTATE_INIT: case MSTATE_PENDING: + case MSTATE_SETUP: case MSTATE_CONNECT: /* nothing to poll for yet */ + expect_sockets = FALSE; break; case MSTATE_RESOLVING: Curl_pollset_add_socks(data, ps, Curl_resolv_getsock); - /* connection filters are not involved in this phase */ + /* connection filters are not involved in this phase. It's ok if we get no + * sockets to wait for. Resolving can wake up from other sources. */ + expect_sockets = FALSE; break; case MSTATE_CONNECTING: @@ -1152,19 +1180,29 @@ static void multi_getsock(struct Curl_easy *data, case MSTATE_RATELIMITING: /* we need to let time pass, ignore socket(s) */ + expect_sockets = FALSE; break; case MSTATE_DONE: case MSTATE_COMPLETED: case MSTATE_MSGSENT: /* nothing more to poll for */ + expect_sockets = FALSE; break; default: failf(data, "multi_getsock: unexpected multi state %d", data->mstate); DEBUGASSERT(0); + expect_sockets = FALSE; break; } + + if(expect_sockets && !ps->num && + !(data->req.keepon & (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) && + Curl_conn_is_ip_connected(data, FIRSTSOCKET)) { + infof(data, "WARNING: no socket in pollset, transfer may stall!"); + DEBUGASSERT(0); + } } CURLMcode curl_multi_fdset(struct Curl_multi *multi, @@ -1192,7 +1230,7 @@ CURLMcode curl_multi_fdset(struct Curl_multi *multi, for(i = 0; i < ps.num; i++) { if(!FDSET_SOCK(ps.sockets[i])) - /* pretend it doesn't exist */ + /* pretend it does not exist */ continue; if(ps.actions[i] & CURL_POLL_IN) FD_SET(ps.sockets[i], read_fd_set); @@ -1208,8 +1246,48 @@ CURLMcode curl_multi_fdset(struct Curl_multi *multi, return CURLM_OK; } +CURLMcode curl_multi_waitfds(struct Curl_multi *multi, + struct curl_waitfd *ufds, + unsigned int size, + unsigned int *fd_count) +{ + struct Curl_easy *data; + struct curl_waitfds cwfds; + struct easy_pollset ps; + CURLMcode result = CURLM_OK; + + if(!ufds) + return CURLM_BAD_FUNCTION_ARGUMENT; + + if(!GOOD_MULTI_HANDLE(multi)) + return CURLM_BAD_HANDLE; + + if(multi->in_callback) + return CURLM_RECURSIVE_API_CALL; + + Curl_waitfds_init(&cwfds, ufds, size); + memset(&ps, 0, sizeof(ps)); + for(data = multi->easyp; data; data = data->next) { + multi_getsock(data, &ps); + if(Curl_waitfds_add_ps(&cwfds, &ps)) { + result = CURLM_OUT_OF_MEMORY; + goto out; + } + } + + if(Curl_conncache_add_waitfds(&multi->conn_cache, &cwfds)) { + result = CURLM_OUT_OF_MEMORY; + goto out; + } + +out: + if(fd_count) + *fd_count = cwfds.n; + return result; +} + #ifdef USE_WINSOCK -/* Reset FD_WRITE for TCP sockets. Nothing is actually sent. UDP sockets can't +/* Reset FD_WRITE for TCP sockets. Nothing is actually sent. UDP sockets cannot * be reset this way because an empty datagram would be sent. #9203 * * "On Windows the internal state of FD_WRITE as returned from @@ -1237,13 +1315,12 @@ static CURLMcode multi_wait(struct Curl_multi *multi, struct Curl_easy *data; struct easy_pollset ps; size_t i; - unsigned int nfds = 0; - unsigned int curlfds; long timeout_internal; int retcode = 0; struct pollfd a_few_on_stack[NUM_POLLS_ON_STACK]; - struct pollfd *ufds = &a_few_on_stack[0]; - bool ufds_malloc = FALSE; + struct curl_pollfds cpfds; + unsigned int curl_nfds = 0; /* how many pfds are for curl transfers */ + CURLMcode result = CURLM_OK; #ifdef USE_WINSOCK WSANETWORKEVENTS wsa_events; DEBUGASSERT(multi->wsa_event != WSA_INVALID_EVENT); @@ -1261,146 +1338,105 @@ static CURLMcode multi_wait(struct Curl_multi *multi, if(timeout_ms < 0) return CURLM_BAD_FUNCTION_ARGUMENT; - /* Count up how many fds we have from the multi handle */ + Curl_pollfds_init(&cpfds, a_few_on_stack, NUM_POLLS_ON_STACK); memset(&ps, 0, sizeof(ps)); + + /* Add the curl handles to our pollfds first */ 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 - the outside, then use the shorter time! But only if the internal timer - is actually larger than -1! */ - (void)multi_timeout(multi, &timeout_internal); - if((timeout_internal >= 0) && (timeout_internal < (long)timeout_ms)) - timeout_ms = (int)timeout_internal; - - curlfds = nfds; /* number of internal file descriptors */ - nfds += extra_nfds; /* add the externally provided ones */ - -#ifdef ENABLE_WAKEUP -#ifdef USE_WINSOCK - if(use_wakeup) { -#else - if(use_wakeup && multi->wakeup_pair[0] != CURL_SOCKET_BAD) { -#endif - ++nfds; + if(Curl_pollfds_add_ps(&cpfds, &ps)) { + result = CURLM_OUT_OF_MEMORY; + goto out; + } } -#endif - if(nfds > NUM_POLLS_ON_STACK) { - /* 'nfds' is a 32 bit value and 'struct pollfd' is typically 8 bytes - big, so at 2^29 sockets this value might wrap. When a process gets - the capability to actually handle over 500 million sockets this - calculation needs a integer overflow check. */ - ufds = malloc(nfds * sizeof(struct pollfd)); - if(!ufds) - return CURLM_OUT_OF_MEMORY; - ufds_malloc = TRUE; + if(Curl_conncache_add_pollfds(&multi->conn_cache, &cpfds)) { + result = CURLM_OUT_OF_MEMORY; + goto out; } - nfds = 0; - /* only do the second loop if we found descriptors in the first stage run - above */ - - if(curlfds) { - /* Add the curl handles to our pollfds first */ - for(data = multi->easyp; data; data = data->next) { - multi_getsock(data, &ps); - - for(i = 0; i < ps.num; i++) { - struct pollfd *ufd = &ufds[nfds++]; -#ifdef USE_WINSOCK - long mask = 0; -#endif - 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 - ufd->events |= POLLIN; - } - if(ps.actions[i] & CURL_POLL_OUT) { -#ifdef USE_WINSOCK - mask |= FD_WRITE|FD_CONNECT|FD_CLOSE; - reset_socket_fdwrite(ps.sockets[i]); -#endif - ufd->events |= POLLOUT; - } -#ifdef USE_WINSOCK - if(WSAEventSelect(ps.sockets[i], multi->wsa_event, mask) != 0) { - if(ufds_malloc) - free(ufds); - return CURLM_INTERNAL_ERROR; - } -#endif - } + curl_nfds = cpfds.n; /* what curl internally uses in cpfds */ + /* Add external file descriptions from poll-like struct curl_waitfd */ + for(i = 0; i < extra_nfds; i++) { + unsigned short events = 0; + if(extra_fds[i].events & CURL_WAIT_POLLIN) + events |= POLLIN; + if(extra_fds[i].events & CURL_WAIT_POLLPRI) + events |= POLLPRI; + if(extra_fds[i].events & CURL_WAIT_POLLOUT) + events |= POLLOUT; + if(Curl_pollfds_add_sock(&cpfds, extra_fds[i].fd, events)) { + result = CURLM_OUT_OF_MEMORY; + goto out; } } - /* Add external file descriptions from poll-like struct curl_waitfd */ - for(i = 0; i < extra_nfds; i++) { #ifdef USE_WINSOCK + /* Set the WSA events based on the collected pollds */ + for(i = 0; i < cpfds.n; i++) { long mask = 0; - if(extra_fds[i].events & CURL_WAIT_POLLIN) + if(cpfds.pfds[i].events & POLLIN) mask |= FD_READ|FD_ACCEPT|FD_CLOSE; - if(extra_fds[i].events & CURL_WAIT_POLLPRI) + if(cpfds.pfds[i].events & POLLPRI) mask |= FD_OOB; - if(extra_fds[i].events & CURL_WAIT_POLLOUT) { + if(cpfds.pfds[i].events & POLLOUT) { mask |= FD_WRITE|FD_CONNECT|FD_CLOSE; - reset_socket_fdwrite(extra_fds[i].fd); + reset_socket_fdwrite(cpfds.pfds[i].fd); } - if(WSAEventSelect(extra_fds[i].fd, multi->wsa_event, mask) != 0) { - if(ufds_malloc) - free(ufds); - return CURLM_INTERNAL_ERROR; + if(mask) { + if(WSAEventSelect(cpfds.pfds[i].fd, multi->wsa_event, mask) != 0) { + result = CURLM_OUT_OF_MEMORY; + goto out; + } } -#endif - ufds[nfds].fd = extra_fds[i].fd; - ufds[nfds].events = 0; - if(extra_fds[i].events & CURL_WAIT_POLLIN) - ufds[nfds].events |= POLLIN; - if(extra_fds[i].events & CURL_WAIT_POLLPRI) - ufds[nfds].events |= POLLPRI; - if(extra_fds[i].events & CURL_WAIT_POLLOUT) - ufds[nfds].events |= POLLOUT; - ++nfds; } +#endif #ifdef ENABLE_WAKEUP #ifndef USE_WINSOCK if(use_wakeup && multi->wakeup_pair[0] != CURL_SOCKET_BAD) { - ufds[nfds].fd = multi->wakeup_pair[0]; - ufds[nfds].events = POLLIN; - ++nfds; + if(Curl_pollfds_add_sock(&cpfds, multi->wakeup_pair[0], POLLIN)) { + result = CURLM_OUT_OF_MEMORY; + goto out; + } } #endif #endif + /* We check the internal timeout *AFTER* we collected all sockets to + * poll. Collecting the sockets may install new timers by protocols + * and connection filters. + * Use the shorter one of the internal and the caller requested timeout. */ + (void)multi_timeout(multi, &timeout_internal); + if((timeout_internal >= 0) && (timeout_internal < (long)timeout_ms)) + timeout_ms = (int)timeout_internal; + #if defined(ENABLE_WAKEUP) && defined(USE_WINSOCK) - if(nfds || use_wakeup) { + if(cpfds.n || use_wakeup) { #else - if(nfds) { + if(cpfds.n) { #endif int pollrc; #ifdef USE_WINSOCK - if(nfds) - pollrc = Curl_poll(ufds, nfds, 0); /* just pre-check with WinSock */ + if(cpfds.n) /* just pre-check with WinSock */ + pollrc = Curl_poll(cpfds.pfds, cpfds.n, 0); else pollrc = 0; #else - pollrc = Curl_poll(ufds, nfds, timeout_ms); /* wait... */ + pollrc = Curl_poll(cpfds.pfds, cpfds.n, timeout_ms); /* wait... */ #endif - if(pollrc < 0) - return CURLM_UNRECOVERABLE_POLL; + if(pollrc < 0) { + result = CURLM_UNRECOVERABLE_POLL; + goto out; + } if(pollrc > 0) { retcode = pollrc; #ifdef USE_WINSOCK } else { /* now wait... if not ready during the pre-check (pollrc == 0) */ - WSAWaitForMultipleEvents(1, &multi->wsa_event, FALSE, timeout_ms, FALSE); + WSAWaitForMultipleEvents(1, &multi->wsa_event, FALSE, (DWORD)timeout_ms, + FALSE); } /* With WinSock, we have to run the following section unconditionally to call WSAEventSelect(fd, event, 0) on all the sockets */ @@ -1410,7 +1446,7 @@ static CURLMcode multi_wait(struct Curl_multi *multi, struct, the bit values of the actual underlying poll() implementation may not be the same as the ones in the public libcurl API! */ for(i = 0; i < extra_nfds; i++) { - unsigned r = ufds[curlfds + i].revents; + unsigned r = (unsigned)cpfds.pfds[curl_nfds + i].revents; unsigned short mask = 0; #ifdef USE_WINSOCK curl_socket_t s = extra_fds[i].fd; @@ -1427,7 +1463,7 @@ static CURLMcode multi_wait(struct Curl_multi *multi, } WSAEventSelect(s, multi->wsa_event, 0); if(!pollrc) { - extra_fds[i].revents = mask; + extra_fds[i].revents = (short)mask; continue; } #endif @@ -1437,13 +1473,13 @@ static CURLMcode multi_wait(struct Curl_multi *multi, mask |= CURL_WAIT_POLLOUT; if(r & POLLPRI) mask |= CURL_WAIT_POLLPRI; - extra_fds[i].revents = mask; + extra_fds[i].revents = (short)mask; } #ifdef USE_WINSOCK /* Count up all our own sockets that had activity, and remove them from the event. */ - if(curlfds) { + if(curl_nfds) { for(data = multi->easyp; data; data = data->next) { multi_getsock(data, &ps); @@ -1464,7 +1500,7 @@ static CURLMcode multi_wait(struct Curl_multi *multi, #else #ifdef ENABLE_WAKEUP if(use_wakeup && multi->wakeup_pair[0] != CURL_SOCKET_BAD) { - if(ufds[curlfds + extra_nfds].revents & POLLIN) { + if(cpfds.pfds[curl_nfds + extra_nfds].revents & POLLIN) { char buf[64]; ssize_t nread; while(1) { @@ -1488,18 +1524,16 @@ static CURLMcode multi_wait(struct Curl_multi *multi, } } - if(ufds_malloc) - free(ufds); if(ret) *ret = retcode; #if defined(ENABLE_WAKEUP) && defined(USE_WINSOCK) - if(extrawait && !nfds && !use_wakeup) { + if(extrawait && !cpfds.n && !use_wakeup) { #else - if(extrawait && !nfds) { + if(extrawait && !cpfds.n) { #endif long sleep_ms = 0; - /* Avoid busy-looping when there's nothing particular to wait for */ + /* Avoid busy-looping when there is nothing particular to wait for */ if(!curl_multi_timeout(multi, &sleep_ms) && sleep_ms) { if(sleep_ms > timeout_ms) sleep_ms = timeout_ms; @@ -1511,7 +1545,9 @@ static CURLMcode multi_wait(struct Curl_multi *multi, } } - return CURLM_OK; +out: + Curl_pollfds_cleanup(&cpfds); + return result; } CURLMcode curl_multi_wait(struct Curl_multi *multi, @@ -1540,6 +1576,15 @@ CURLMcode curl_multi_wakeup(struct Curl_multi *multi) it has to be careful only to access parts of the Curl_multi struct that are constant */ +#if defined(ENABLE_WAKEUP) && !defined(USE_WINSOCK) +#ifdef USE_EVENTFD + const void *buf; + const uint64_t val = 1; +#else + char buf[1]; +#endif +#endif + /* GOOD_MULTI_HANDLE can be safely called */ if(!GOOD_MULTI_HANDLE(multi)) return CURLM_BAD_HANDLE; @@ -1553,8 +1598,11 @@ CURLMcode curl_multi_wakeup(struct Curl_multi *multi) making it safe to access from another thread after the init part and before cleanup */ if(multi->wakeup_pair[1] != CURL_SOCKET_BAD) { - char buf[1]; +#ifdef USE_EVENTFD + buf = &val; +#else buf[0] = 1; +#endif while(1) { /* swrite() is not thread-safe in general, because concurrent calls can have their messages interleaved, but in this case the content @@ -1563,7 +1611,7 @@ CURLMcode curl_multi_wakeup(struct Curl_multi *multi) The write socket is set to non-blocking, this way this function cannot block, making it safe to call even from the same thread that will call curl_multi_wait(). If swrite() returns that it - would block, it's considered successful because it means that + would block, it is considered successful because it means that previous calls to this function will wake up the poll(). */ if(wakeup_write(multi->wakeup_pair[1], buf, sizeof(buf)) < 0) { int err = SOCKERRNO; @@ -1627,7 +1675,7 @@ CURLMcode Curl_multi_add_perform(struct Curl_multi *multi, if(!rc) { struct SingleRequest *k = &data->req; - /* pass in NULL for 'conn' here since we don't want to init the + /* pass in NULL for 'conn' here since we do not want to init the connection, only this transfer */ Curl_init_do(data, NULL); @@ -1659,7 +1707,7 @@ static CURLcode multi_do(struct Curl_easy *data, bool *done) * second connection. * * 'complete' can return 0 for incomplete, 1 for done and -1 for go back to - * DOING state there's more work to do! + * DOING state there is more work to do! */ static CURLcode multi_do_more(struct Curl_easy *data, int *complete) @@ -1684,47 +1732,47 @@ static bool multi_handle_timeout(struct Curl_easy *data, CURLcode *result, bool connect_timeout) { - timediff_t timeout_ms; - timeout_ms = Curl_timeleft(data, now, connect_timeout); - + timediff_t timeout_ms = Curl_timeleft(data, now, connect_timeout); if(timeout_ms < 0) { /* Handle timed out */ + struct curltime since; + if(connect_timeout) + since = data->progress.t_startsingle; + else + since = data->progress.t_startop; if(data->mstate == MSTATE_RESOLVING) failf(data, "Resolving timed out after %" CURL_FORMAT_TIMEDIFF_T - " milliseconds", - Curl_timediff(*now, data->progress.t_startsingle)); + " milliseconds", Curl_timediff(*now, since)); else if(data->mstate == MSTATE_CONNECTING) failf(data, "Connection timed out after %" CURL_FORMAT_TIMEDIFF_T - " milliseconds", - Curl_timediff(*now, data->progress.t_startsingle)); + " milliseconds", Curl_timediff(*now, since)); else { struct SingleRequest *k = &data->req; 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(*now, data->progress.t_startsingle), - k->bytecount, k->size); + Curl_timediff(*now, since), 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(*now, data->progress.t_startsingle), - k->bytecount); + " bytes received", Curl_timediff(*now, since), k->bytecount); } } - - /* Force connection closed if the connection has indeed been used */ - if(data->mstate > MSTATE_DO) { - streamclose(data->conn, "Disconnected with pending data"); - *stream_error = TRUE; - } *result = CURLE_OPERATION_TIMEDOUT; - (void)multi_done(data, *result, TRUE); + if(data->conn) { + /* Force connection closed if the connection has indeed been used */ + if(data->mstate > MSTATE_DO) { + streamclose(data->conn, "Disconnect due to timeout"); + *stream_error = TRUE; + } + (void)multi_done(data, *result, TRUE); + } + return TRUE; } - return (timeout_ms < 0); + return FALSE; } /* @@ -1787,10 +1835,10 @@ static CURLcode protocol_connect(struct Curl_easy *data, && 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. + or proxy. Note that we do not know if the protocol is actually done. - Unless this protocol doesn't have any protocol-connect callback, as - then we know we're done. */ + Unless this protocol does not have any protocol-connect callback, as + then we know we are done. */ if(!conn->handler->connecting) *protocol_done = TRUE; @@ -1807,7 +1855,7 @@ static CURLcode protocol_connect(struct Curl_easy *data, else *protocol_done = TRUE; - /* it has started, possibly even completed but that knowledge isn't stored + /* it has started, possibly even completed but that knowledge is not stored in this bit! */ if(!result) conn->bits.protoconnstart = TRUE; @@ -1816,22 +1864,23 @@ static CURLcode protocol_connect(struct Curl_easy *data, return result; /* pass back status */ } -/* - * Curl_preconnect() is called immediately before a connect starts. When a - * redirect is followed, this is then called multiple times during a single - * transfer. - */ -CURLcode Curl_preconnect(struct Curl_easy *data) +static void set_in_callback(struct Curl_multi *multi, bool value) { - /* this used to do data->state.buffer allocation, - maybe remove completely now? */ - (void)data; - return CURLE_OK; + multi->in_callback = value; } -static void set_in_callback(struct Curl_multi *multi, bool value) +/* + * posttransfer() is called immediately after a transfer ends + */ +static void multi_posttransfer(struct Curl_easy *data) { - multi->in_callback = value; +#if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(HAVE_MSG_NOSIGNAL) + /* restore the signal handler for SIGPIPE before we get back */ + if(!data->set.no_signal) + signal(SIGPIPE, data->state.prev_signal); +#else + (void)data; /* unused parameter */ +#endif } static CURLMcode multi_runsingle(struct Curl_multi *multi, @@ -1856,7 +1905,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, /* a multi-level callback returned error before, meaning every individual transfer now has failed */ result = CURLE_ABORTED_BY_CALLBACK; - Curl_posttransfer(data); + multi_posttransfer(data); multi_done(data, result, FALSE); multistate(data, MSTATE_COMPLETED); } @@ -1882,51 +1931,44 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, return CURLM_INTERNAL_ERROR; } - if(data->conn && - (data->mstate >= MSTATE_CONNECT) && - (data->mstate < MSTATE_COMPLETED)) { - /* Check for overall operation timeout here but defer handling the - * connection timeout to later, to allow for a connection to be set up - * in the window since we last checked timeout. This prevents us - * tearing down a completed connection in the case where we were slow - * to check the timeout (e.g. process descheduled during this loop). - * We set connect_timeout=FALSE to do this. */ - - /* we need to wait for the connect state as only then is the start time - stored, but we must not check already completed handles */ - if(multi_handle_timeout(data, nowp, &stream_error, &result, FALSE)) { - /* Skip the statemachine and go directly to error handling section. */ - goto statemachine_end; - } - } + /* Wait for the connect state as only then is the start time stored, but + we must not check already completed handles */ + if((data->mstate >= MSTATE_CONNECT) && (data->mstate < MSTATE_COMPLETED) && + multi_handle_timeout(data, nowp, &stream_error, &result, FALSE)) + /* Skip the statemachine and go directly to error handling section. */ + goto statemachine_end; switch(data->mstate) { case MSTATE_INIT: - /* init this transfer. */ + /* Transitional state. init this transfer. A handle never comes + back to this state. */ result = Curl_pretransfer(data); - - if(!result) { - /* after init, go CONNECT */ - multistate(data, MSTATE_CONNECT); - *nowp = Curl_pgrsTime(data, TIMER_STARTOP); - rc = CURLM_CALL_MULTI_PERFORM; - } - break; - - case MSTATE_CONNECT: - /* Connect. We want to get a connection identifier filled in. */ - /* init this transfer. */ - result = Curl_preconnect(data); if(result) break; + /* after init, go SETUP */ + multistate(data, MSTATE_SETUP); + (void)Curl_pgrsTime(data, TIMER_STARTOP); + FALLTHROUGH(); + + case MSTATE_SETUP: + /* Transitional state. Setup things for a new transfer. The handle + can come back to this state on a redirect. */ *nowp = Curl_pgrsTime(data, TIMER_STARTSINGLE); if(data->set.timeout) Curl_expire(data, data->set.timeout, EXPIRE_TIMEOUT); - if(data->set.connecttimeout) + /* Since a connection might go to pending and back to CONNECT several + times before it actually takes off, we need to set the timeout once + in SETUP before we enter CONNECT the first time. */ Curl_expire(data, data->set.connecttimeout, EXPIRE_CONNECTTIMEOUT); + multistate(data, MSTATE_CONNECT); + FALLTHROUGH(); + + case MSTATE_CONNECT: + /* Connect. We want to get a connection identifier filled in. This state + can be entered from SETUP and from PENDING. */ result = Curl_connect(data, &async, &connected); if(CURLE_NO_CONNECTION_AVAILABLE == result) { /* There was no connection available. We will go to the pending @@ -1934,23 +1976,19 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, multistate(data, MSTATE_PENDING); /* add this handle to the list of connect-pending handles */ - Curl_llist_insert_next(&multi->pending, multi->pending.tail, data, - &data->connect_queue); + Curl_llist_append(&multi->pending, data, &data->connect_queue); /* unlink from the main list */ unlink_easy(multi, data); result = CURLE_OK; break; } - else if(data->state.previouslypending) { - /* this transfer comes from the pending queue so try move another */ - infof(data, "Transfer was pending, now try another"); + else process_pending_handles(data->multi); - } if(!result) { *nowp = Curl_pgrsTime(data, TIMER_POSTQUEUE); if(async) - /* We're now waiting for an asynchronous name lookup */ + /* We are now waiting for an asynchronous name lookup */ multistate(data, MSTATE_RESOLVING); else { /* after the connect has been sent off, go WAITCONNECT unless the @@ -2003,7 +2041,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, /* Update sockets here, because the socket(s) may have been closed and the application thus needs to be told, even if it is likely that the same socket(s) will again be used further - down. If the name has not yet been resolved, it is likely + down. If the name has not yet been resolved, it is likely that new sockets have been opened in an attempt to contact another resolver. */ rc = singlesocket(multi, data); @@ -2073,7 +2111,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } else if(result) { /* failure detected */ - Curl_posttransfer(data); + multi_posttransfer(data); multi_done(data, result, TRUE); stream_error = TRUE; break; @@ -2103,7 +2141,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } else { /* failure detected */ - Curl_posttransfer(data); + multi_posttransfer(data); multi_done(data, result, TRUE); stream_error = TRUE; } @@ -2119,7 +2157,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } else if(result) { /* failure detected */ - Curl_posttransfer(data); + multi_posttransfer(data); multi_done(data, result, TRUE); stream_error = TRUE; } @@ -2139,9 +2177,10 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, Curl_set_in_callback(data, false); if(prereq_rc != CURL_PREREQFUNC_OK) { failf(data, "operation aborted by pre-request callback"); - /* failure in pre-request callback - don't do any other processing */ + /* failure in pre-request callback - do not do any other + processing */ result = CURLE_ABORTED_BY_CALLBACK; - Curl_posttransfer(data); + multi_posttransfer(data); multi_done(data, result, FALSE); stream_error = TRUE; break; @@ -2171,7 +2210,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, /* skip some states if it is important */ multi_done(data, CURLE_OK, FALSE); - /* if there's no connection left, skip the DONE state */ + /* if there is no connection left, skip the DONE state */ multistate(data, data->conn ? MSTATE_DONE : MSTATE_COMPLETED); rc = CURLM_CALL_MULTI_PERFORM; @@ -2187,13 +2226,13 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, /* after DO, go DO_DONE... or DO_MORE */ else if(data->conn->bits.do_more) { - /* we're supposed to do more, but we need to sit down, relax + /* we are supposed to do more, but we need to sit down, relax and wait a little while first */ multistate(data, MSTATE_DOING_MORE); rc = CURLM_CALL_MULTI_PERFORM; } else { - /* we're done with the DO, now DID */ + /* we are done with the DO, now DID */ multistate(data, MSTATE_DID); rc = CURLM_CALL_MULTI_PERFORM; } @@ -2202,7 +2241,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, data->conn->bits.reuse) { /* * In this situation, a connection that we were trying to use - * may have unexpectedly died. If possible, send the connection + * may have unexpectedly died. If possible, send the connection * back to the CONNECT phase so we can try again. */ char *newurl = NULL; @@ -2216,7 +2255,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, stream_error = TRUE; } - Curl_posttransfer(data); + multi_posttransfer(data); drc = multi_done(data, result, FALSE); /* When set to retry the connection, we must go back to the CONNECT @@ -2226,7 +2265,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, follow = FOLLOW_RETRY; drc = Curl_follow(data, newurl, follow); if(!drc) { - multistate(data, MSTATE_CONNECT); + multistate(data, MSTATE_SETUP); rc = CURLM_CALL_MULTI_PERFORM; result = CURLE_OK; } @@ -2236,19 +2275,19 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } } else { - /* done didn't return OK or SEND_ERROR */ + /* done did not return OK or SEND_ERROR */ result = drc; } } else { - /* Have error handler disconnect conn if we can't retry */ + /* Have error handler disconnect conn if we cannot retry */ stream_error = TRUE; } free(newurl); } else { /* failure detected */ - Curl_posttransfer(data); + multi_posttransfer(data); if(data->conn) multi_done(data, result, FALSE); stream_error = TRUE; @@ -2270,7 +2309,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } else { /* failure detected */ - Curl_posttransfer(data); + multi_posttransfer(data); multi_done(data, result, FALSE); stream_error = TRUE; } @@ -2296,7 +2335,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } else { /* failure detected */ - Curl_posttransfer(data); + multi_posttransfer(data); multi_done(data, result, FALSE); stream_error = TRUE; } @@ -2308,7 +2347,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, /* Check if we can move pending requests to send pipe */ process_pending_handles(multi); /* multiplexed */ - /* Only perform the transfer if there's a good socket to work with. + /* Only perform the transfer if there is a good socket to work with. Having both BAD is a signal to skip immediately to DONE */ if((data->conn->sockfd != CURL_SOCKET_BAD) || (data->conn->writesockfd != CURL_SOCKET_BAD)) @@ -2338,7 +2377,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, result != CURLE_HTTP2_STREAM) streamclose(data->conn, "Transfer returned error"); - Curl_posttransfer(data); + multi_posttransfer(data); multi_done(data, result, TRUE); } else { @@ -2450,8 +2489,8 @@ 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 reused. This is because we can't possibly - * know if the connection is in a good shape or not now. Unless it is + * closed to prevent being reused. This is because we cannot 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. */ @@ -2460,13 +2499,13 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, result != CURLE_HTTP2_STREAM) streamclose(data->conn, "Transfer returned error"); - Curl_posttransfer(data); + multi_posttransfer(data); multi_done(data, result, TRUE); } - else if(data->req.done) { + else if(data->req.done && !Curl_cwriter_is_paused(data)) { /* call this even if the readwrite function returned error */ - Curl_posttransfer(data); + multi_posttransfer(data); /* When we follow redirects or is set to retry the connection, we must to go back to the CONNECT state */ @@ -2486,22 +2525,20 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, /* multi_done() might return CURLE_GOT_NOTHING */ result = Curl_follow(data, newurl, follow); if(!result) { - multistate(data, MSTATE_CONNECT); + multistate(data, MSTATE_SETUP); rc = CURLM_CALL_MULTI_PERFORM; } - free(newurl); } else { /* after the transfer is done, go DONE */ - /* but first check to see if we got a location info even though we're - not following redirects */ + /* but first check to see if we got a location info even though we + are not following redirects */ if(data->req.location) { free(newurl); newurl = data->req.location; data->req.location = NULL; result = Curl_follow(data, newurl, FOLLOW_FAKE); - free(newurl); if(result) { stream_error = TRUE; result = multi_done(data, result, TRUE); @@ -2514,12 +2551,13 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } } } - else if(data->state.select_bits) { + else if(data->state.select_bits && !Curl_xfer_is_blocked(data)) { /* This avoids CURLM_CALL_MULTI_PERFORM so that a very fast transfer - won't get stuck on this transfer at the expense of other concurrent - transfers */ + will not get stuck on this transfer at the expense of other + concurrent transfers */ Curl_expire(data, 0, EXPIRE_RUN_NOW); } + free(newurl); break; } @@ -2552,8 +2590,8 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } } #endif - /* after we have DONE what we're supposed to do, go COMPLETED, and - it doesn't matter what the multi_done() returned! */ + /* after we have DONE what we are supposed to do, go COMPLETED, and + it does not matter what the multi_done() returned! */ multistate(data, MSTATE_COMPLETED); break; @@ -2570,8 +2608,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, return CURLM_INTERNAL_ERROR; } - if(data->conn && - data->mstate >= MSTATE_CONNECT && + if(data->mstate >= MSTATE_CONNECT && data->mstate < MSTATE_DO && rc != CURLM_CALL_MULTI_PERFORM && !multi_ischanged(multi, false)) { @@ -2581,7 +2618,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, * (i.e. CURLM_CALL_MULTI_PERFORM == TRUE) then we should do that before * declaring the connection timed out as we may almost have a completed * connection. */ - multi_handle_timeout(data, nowp, &stream_error, &result, TRUE); + multi_handle_timeout(data, nowp, &stream_error, &result, FALSE); } statemachine_end: @@ -2589,7 +2626,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, if(data->mstate < MSTATE_COMPLETED) { if(result) { /* - * If an error was returned, and we aren't in completed state now, + * If an error was returned, and we are not in completed state now, * then we go to completed and consider this transfer aborted. */ @@ -2601,12 +2638,12 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, if(data->conn) { if(stream_error) { - /* Don't attempt to send data over a connection that timed out */ + /* Do not attempt to send data over a connection that timed out */ bool dead_connection = result == CURLE_OPERATION_TIMEDOUT; struct connectdata *conn = data->conn; /* This is where we make sure that the conn pointer is reset. - We don't have to do this in every case block above where a + We do not have to do this in every case block above where a failure is detected */ Curl_detach_connection(data); @@ -2619,13 +2656,14 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, } else if(data->mstate == MSTATE_CONNECT) { /* Curl_connect() failed */ - (void)Curl_posttransfer(data); + multi_posttransfer(data); + Curl_pgrsUpdate_nometer(data); } multistate(data, MSTATE_COMPLETED); rc = CURLM_CALL_MULTI_PERFORM; } - /* if there's still a connection to use, call the progress function */ + /* if there is still a connection to use, call the progress function */ else if(data->conn && Curl_pgrsUpdate(data)) { /* aborted due to progress callback return code must close the connection */ @@ -2658,8 +2696,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi, 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); + Curl_llist_append(&multi->msgsent, data, &data->connect_queue); /* unlink from the main list */ unlink_easy(multi, data); return CURLM_OK; @@ -2677,6 +2714,7 @@ CURLMcode curl_multi_perform(struct Curl_multi *multi, int *running_handles) CURLMcode returncode = CURLM_OK; struct Curl_tree *t; struct curltime now = Curl_now(); + SIGPIPE_VARIABLE(pipe_st); if(!GOOD_MULTI_HANDLE(multi)) return CURLM_BAD_HANDLE; @@ -2684,31 +2722,34 @@ CURLMcode curl_multi_perform(struct Curl_multi *multi, int *running_handles) if(multi->in_callback) return CURLM_RECURSIVE_API_CALL; + sigpipe_init(&pipe_st); data = multi->easyp; if(data) { CURLMcode result; - bool nosig = data->set.no_signal; - SIGPIPE_VARIABLE(pipe_st); - sigpipe_ignore(data, &pipe_st); /* 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; + + if(data != multi->conn_cache.closure_handle) { + /* connection cache handle is processed below */ + sigpipe_apply(data, &pipe_st); + result = multi_runsingle(multi, &now, data); + if(result) + returncode = result; } - result = multi_runsingle(multi, &now, data); - if(result) - returncode = result; + data = datanext; /* operate on next handle */ } while(data); - sigpipe_restore(&pipe_st); } + sigpipe_apply(multi->conn_cache.closure_handle, &pipe_st); + Curl_conncache_multi_perform(multi); + + sigpipe_restore(&pipe_st); + /* * Simply remove all expired timers from the splay since handles are dealt * with unconditionally by this function and curl_multi_timeout() requires @@ -2721,13 +2762,24 @@ CURLMcode curl_multi_perform(struct Curl_multi *multi, int *running_handles) */ do { multi->timetree = Curl_splaygetbest(now, multi->timetree, &t); - if(t) + if(t) { /* the removed may have another timeout in queue */ + data = t->payload; + if(data->mstate == MSTATE_PENDING) { + bool stream_unused; + CURLcode result_unused; + if(multi_handle_timeout(data, &now, &stream_unused, &result_unused, + FALSE)) { + infof(data, "PENDING handle timeout"); + move_pending_to_connect(multi, data); + } + } (void)add_next_timeout(now, multi, t->payload); - + } } while(t); - *running_handles = multi->num_alive; + if(running_handles) + *running_handles = (int)multi->num_alive; if(CURLM_OK >= returncode) returncode = Curl_update_timer(multi); @@ -2763,6 +2815,9 @@ CURLMcode curl_multi_cleanup(struct Curl_multi *multi) /* First remove all remaining easy handles */ data = multi->easyp; while(data) { + if(!GOOD_EASY_HANDLE(data)) + return CURLM_BAD_HANDLE; + nextdata = data->next; if(!data->state.done && data->conn) /* if DONE was never called for this handle */ @@ -2787,9 +2842,10 @@ CURLMcode curl_multi_cleanup(struct Curl_multi *multi) } /* Close all the connections in the connection cache */ - Curl_conncache_close_all_connections(&multi->conn_cache); + Curl_conncache_multi_close_all(multi); sockhash_destroy(&multi->sockhash); + Curl_hash_destroy(&multi->proto_hash); Curl_conncache_destroy(&multi->conn_cache); Curl_hash_destroy(&multi->hostcache); Curl_psl_destroy(&multi->psl); @@ -2799,12 +2855,10 @@ CURLMcode curl_multi_cleanup(struct Curl_multi *multi) #else #ifdef ENABLE_WAKEUP wakeup_close(multi->wakeup_pair[0]); +#ifndef USE_EVENTFD wakeup_close(multi->wakeup_pair[1]); #endif #endif - -#ifdef USE_SSL - Curl_free_multi_ssl_backend_data(multi->ssl_backend_data); #endif multi_xfer_bufs_free(multi); @@ -2861,41 +2915,54 @@ static CURLMcode singlesocket(struct Curl_multi *multi, struct Curl_easy *data) { struct easy_pollset cur_poll; - unsigned int i; - struct Curl_sh_entry *entry; - curl_socket_t s; - int rc; + CURLMcode mresult; /* Fill in the 'current' struct with the state as it is now: what sockets to supervise and for what actions */ multi_getsock(data, &cur_poll); + mresult = Curl_multi_pollset_ev(multi, data, &cur_poll, &data->last_poll); + + if(!mresult) /* Remember for next time */ + memcpy(&data->last_poll, &cur_poll, sizeof(cur_poll)); + return mresult; +} + +CURLMcode Curl_multi_pollset_ev(struct Curl_multi *multi, + struct Curl_easy *data, + struct easy_pollset *ps, + struct easy_pollset *last_ps) +{ + unsigned int i; + struct Curl_sh_entry *entry; + curl_socket_t s; + int rc; /* 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 < cur_poll.num; i++) { - unsigned char cur_action = cur_poll.actions[i]; + for(i = 0; i < ps->num; i++) { + unsigned char cur_action = ps->actions[i]; unsigned char last_action = 0; int comboaction; - s = cur_poll.sockets[i]; + s = ps->sockets[i]; /* get it from the hash */ entry = sh_getentry(&multi->sockhash, s); if(entry) { /* check if new for this transfer */ 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]; + for(j = 0; j< last_ps->num; j++) { + if(s == last_ps->sockets[j]) { + last_action = last_ps->actions[j]; break; } } } else { - /* this is a socket we didn't have before, add it to the hash! */ + /* this is a socket we did not have before, add it to the hash! */ entry = sh_addentry(&multi->sockhash, s); if(!entry) /* fatal */ @@ -2912,14 +2979,15 @@ static CURLMcode singlesocket(struct Curl_multi *multi, if(cur_action & CURL_POLL_OUT) entry->writers++; } - else if(!last_action) { + else if(!last_action && + !Curl_hash_pick(&entry->transfers, (char *)&data, /* hash key */ + sizeof(struct Curl_easy *))) { /* a new transfer using this socket */ entry->users++; if(cur_action & CURL_POLL_IN) entry->readers++; if(cur_action & CURL_POLL_OUT) entry->writers++; - /* add 'data' to the transfer hash on this socket! */ if(!Curl_hash_add(&entry->transfers, (char *)&data, /* hash key */ sizeof(struct Curl_easy *), data)) { @@ -2948,18 +3016,19 @@ static CURLMcode singlesocket(struct Curl_multi *multi, } } - entry->action = comboaction; /* store the current action state */ + /* store the current action state */ + entry->action = (unsigned int)comboaction; } - /* Check for last_poll.sockets that no longer appear in cur_poll.sockets. + /* Check for last_poll.sockets that no longer appear in ps->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++) { + for(i = 0; i < last_ps->num; i++) { unsigned int j; bool stillused = FALSE; - s = data->last_poll.sockets[i]; - for(j = 0; j < cur_poll.num; j++) { - if(s == cur_poll.sockets[j]) { + s = last_ps->sockets[i]; + for(j = 0; j < ps->num; j++) { + if(s == ps->sockets[j]) { /* this is still supervised */ stillused = TRUE; break; @@ -2972,7 +3041,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->last_poll.actions[i]; + unsigned char oldactions = last_ps->actions[i]; /* this socket has been removed. Decrease user count */ entry->users--; if(oldactions & CURL_POLL_OUT) @@ -3002,8 +3071,6 @@ static CURLMcode singlesocket(struct Curl_multi *multi, } } /* for loop over num */ - /* Remember for next time */ - memcpy(&data->last_poll, &cur_poll, sizeof(data->last_poll)); return CURLM_OK; } @@ -3019,7 +3086,7 @@ CURLcode Curl_updatesocket(struct Curl_easy *data) * Curl_multi_closed() * * Used by the connect code to tell the multi_socket code that one of the - * sockets we were using is about to be closed. This function will then + * sockets we were using is about to be closed. This function will then * remove it from the sockethash for this handle to make the multi_socket API * behave properly, especially for the case when libcurl will create another * socket again and it gets the same file descriptor number. @@ -3028,7 +3095,7 @@ CURLcode Curl_updatesocket(struct Curl_easy *data) void Curl_multi_closed(struct Curl_easy *data, curl_socket_t s) { if(data) { - /* if there's still an easy handle associated with this connection */ + /* if there is still an easy handle associated with this connection */ struct Curl_multi *multi = data->multi; if(multi) { /* this is set if this connection is part of a handle that is added to @@ -3104,7 +3171,7 @@ static CURLMcode add_next_timeout(struct curltime now, /* copy the first entry to 'tv' */ memcpy(tv, &node->time, sizeof(*tv)); - /* Insert this node again into the splay. Keep the timer in the list in + /* Insert this node again into the splay. Keep the timer in the list in case we need to recompute future timers. */ multi->timetree = Curl_splayinsert(*tv, multi->timetree, &d->state.timenode); @@ -3122,8 +3189,7 @@ 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; + bool run_conn_cache = FALSE; SIGPIPE_VARIABLE(pipe_st); if(checkall) { @@ -3146,13 +3212,16 @@ static CURLMcode multi_socket(struct Curl_multi *multi, if(s != CURL_SOCKET_TIMEOUT) { struct Curl_sh_entry *entry = sh_getentry(&multi->sockhash, s); - if(!entry) - /* Unmatched socket, we can't act on it but we ignore this fact. In + if(!entry) { + /* Unmatched socket, we cannot act on it but we ignore this fact. In real-world tests it has been proved that libevent can in fact give the application actions even though the socket was just previously asked to get removed, so thus we better survive stray socket actions and just move on. */ - ; + /* The socket might come from a connection that is being shut down + * by the multi's conncache. */ + Curl_conncache_multi_socket(multi, s, ev_bitmask); + } else { struct Curl_hash_iterator iter; struct Curl_hash_element *he; @@ -3165,19 +3234,23 @@ static CURLMcode multi_socket(struct Curl_multi *multi, DEBUGASSERT(data); DEBUGASSERT(data->magic == CURLEASY_MAGIC_NUMBER); - if(data->conn && !(data->conn->handler->flags & PROTOPT_DIRLOCK)) - /* set socket event bitmask if they're not locked */ - data->state.select_bits |= (unsigned char)ev_bitmask; + if(data == multi->conn_cache.closure_handle) + run_conn_cache = TRUE; + else { + if(data->conn && !(data->conn->handler->flags & PROTOPT_DIRLOCK)) + /* set socket event bitmask if they are not locked */ + data->state.select_bits |= (unsigned char)ev_bitmask; - Curl_expire(data, 0, EXPIRE_RUN_NOW); + Curl_expire(data, 0, EXPIRE_RUN_NOW); + } } - /* Now we fall-through and do the timer-based stuff, since we don't want + /* Now we fall-through and do the timer-based stuff, since we do not want to force the user to have to deal with timeouts as long as at least one connection in fact has traffic. */ data = NULL; /* set data to NULL again to avoid calling - multi_runsingle() in case there's no need to */ + multi_runsingle() in case there is no need to */ now = Curl_now(); /* get a newer time since the multi_runsingle() loop may have taken some time */ } @@ -3196,19 +3269,13 @@ static CURLMcode multi_socket(struct Curl_multi *multi, * to process in the splay and 'data' will be re-assigned for every expired * handle we deal with. */ + sigpipe_init(&pipe_st); do { + if(data == multi->conn_cache.closure_handle) + run_conn_cache = TRUE; /* the first loop lap 'data' can be NULL */ - if(data) { - 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 */ - } + else if(data) { + sigpipe_apply(data, &pipe_st); result = multi_runsingle(multi, &now, data); if(CURLM_OK >= result) { @@ -3220,7 +3287,7 @@ static CURLMcode multi_socket(struct Curl_multi *multi, } } - /* Check if there's one (more) expired timer to deal with! This function + /* Check if there is one (more) expired timer to deal with! This function extracts a matching node if there is one */ multi->timetree = Curl_splaygetbest(now, multi->timetree, &t); @@ -3230,10 +3297,16 @@ static CURLMcode multi_socket(struct Curl_multi *multi, } } while(t); - if(first) - sigpipe_restore(&pipe_st); - *running_handles = multi->num_alive; + if(run_conn_cache) { + sigpipe_apply(multi->conn_cache.closure_handle, &pipe_st); + Curl_conncache_multi_perform(multi); + } + + sigpipe_restore(&pipe_st); + + if(running_handles) + *running_handles = (int)multi->num_alive; return result; } @@ -3285,6 +3358,9 @@ CURLMcode curl_multi_setopt(struct Curl_multi *multi, break; case CURLMOPT_MAX_TOTAL_CONNECTIONS: multi->max_total_connections = va_arg(param, long); + /* for now, let this also decide the max number of connections + * in shutdown handling */ + multi->max_shutdown_connections = va_arg(param, long); break; /* options formerly used for pipelining */ case CURLMOPT_MAX_PIPELINE_LENGTH: @@ -3371,7 +3447,7 @@ 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_ceil(multi->timetree->key, now); - /* this should be safe even on 32 bit archs, as we don't use that + /* this should be safe even on 32-bit archs, as we do not use that overly long timeouts */ *timeout_ms = (long)diff; } @@ -3416,7 +3492,7 @@ CURLMcode Curl_update_timer(struct Curl_multi *multi) static const struct curltime none = {0, 0}; if(Curl_splaycomparekeys(none, multi->timer_lastcall)) { multi->timer_lastcall = none; - /* there's no timeout now but there was one previously, tell the app to + /* there is no timeout now but there was one previously, tell the app to disable it */ set_in_callback(multi, TRUE); rc = multi->timer_cb(multi, -1, multi->timer_userp); @@ -3537,8 +3613,8 @@ void Curl_expire(struct Curl_easy *data, timediff_t milli, expire_id id) DEBUGASSERT(id < EXPIRE_LAST); set = Curl_now(); - set.tv_sec += (time_t)(milli/1000); /* might be a 64 to 32 bit conversion */ - set.tv_usec += (unsigned int)(milli%1000)*1000; + set.tv_sec += (time_t)(milli/1000); /* might be a 64 to 32 bits conversion */ + set.tv_usec += (int)(milli%1000)*1000; if(set.tv_usec >= 1000000) { set.tv_sec++; @@ -3548,7 +3624,7 @@ void Curl_expire(struct Curl_easy *data, timediff_t milli, expire_id id) /* Remove any timer with the same id just in case. */ multi_deltimeout(data, id); - /* Add it to the timer list. It must stay in the list until it has expired + /* Add it to the timer list. It must stay in the list until it has expired in case we need to recompute the minimum timer later. */ multi_addtimeout(data, &set, id); @@ -3561,7 +3637,7 @@ void Curl_expire(struct Curl_easy *data, timediff_t milli, expire_id id) if(diff > 0) { /* The current splay tree entry is sooner than this new expiry time. - We don't need to update our splay tree entry. */ + We do not need to update our splay tree entry. */ return; } @@ -3652,12 +3728,12 @@ CURLMcode curl_multi_assign(struct Curl_multi *multi, curl_socket_t s, size_t Curl_multi_max_host_connections(struct Curl_multi *multi) { - return multi ? multi->max_host_connections : 0; + return multi ? (size_t)multi->max_host_connections : 0; } size_t Curl_multi_max_total_connections(struct Curl_multi *multi) { - return multi ? multi->max_total_connections : 0; + return multi ? (size_t)multi->max_total_connections : 0; } /* @@ -3678,47 +3754,55 @@ 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) +static void move_pending_to_connect(struct Curl_multi *multi, + struct Curl_easy *data) { - struct Curl_llist_element *e = multi->pending.head; - if(e) { - struct Curl_easy *data = e->ptr; + DEBUGASSERT(data->mstate == MSTATE_PENDING); - DEBUGASSERT(data->mstate == MSTATE_PENDING); + /* put it back into the main list */ + link_easy(multi, data); - /* put it back into the main list */ - link_easy(multi, data); + multistate(data, MSTATE_CONNECT); - multistate(data, MSTATE_CONNECT); + /* Remove this node from the pending list */ + Curl_llist_remove(&multi->pending, &data->connect_queue, NULL); - /* Remove this node from the list */ - Curl_llist_remove(&multi->pending, e, NULL); + /* Make sure that the handle will be processed soonish. */ + Curl_expire(data, 0, EXPIRE_RUN_NOW); +} + +/* process_pending_handles() moves a handle from PENDING back into the main + list and change state to CONNECT. - /* Make sure that the handle will be processed soonish. */ - Curl_expire(data, 0, EXPIRE_RUN_NOW); + We do not move all transfers because that can be a significant amount. + Since this is tried every now and then doing too many too often becomes a + performance problem. - /* mark this as having been in the pending queue */ - data->state.previouslypending = TRUE; + When there is a change for connection limits like max host connections etc, + this likely only allows one new transfer. When there is a pipewait change, + it can potentially allow hundreds of new transfers. + + We could consider an improvement where we store the queue reason and allow + more pipewait rechecks than others. +*/ +static void process_pending_handles(struct Curl_multi *multi) +{ + struct Curl_llist_element *e = multi->pending.head; + if(e) { + struct Curl_easy *data = e->ptr; + move_pending_to_connect(multi, data); } } void Curl_set_in_callback(struct Curl_easy *data, bool value) { - /* might get called when there is no data pointer! */ - if(data) { - if(data->multi_easy) - data->multi_easy->in_callback = value; - else if(data->multi) - data->multi->in_callback = value; - } + if(data && data->multi) + data->multi->in_callback = value; } -bool Curl_is_in_callback(struct Curl_easy *easy) +bool Curl_is_in_callback(struct Curl_easy *data) { - return ((easy->multi && easy->multi->in_callback) || - (easy->multi_easy && easy->multi_easy->in_callback)); + return (data && data->multi && data->multi->in_callback); } unsigned int Curl_multi_max_concurrent_streams(struct Curl_multi *multi) diff --git a/lib/multihandle.h b/lib/multihandle.h index 3156c83ad..9b80beab9 100644 --- a/lib/multihandle.h +++ b/lib/multihandle.h @@ -44,24 +44,25 @@ struct Curl_message { typedef enum { MSTATE_INIT, /* 0 - start in this state */ MSTATE_PENDING, /* 1 - no connections, waiting for one */ - MSTATE_CONNECT, /* 2 - resolve/connect has been sent off */ - MSTATE_RESOLVING, /* 3 - awaiting the resolve to finalize */ - MSTATE_CONNECTING, /* 4 - awaiting the TCP connect to finalize */ - MSTATE_TUNNELING, /* 5 - awaiting HTTPS proxy SSL initialization to + MSTATE_SETUP, /* 2 - start a new transfer */ + MSTATE_CONNECT, /* 3 - resolve/connect has been sent off */ + MSTATE_RESOLVING, /* 4 - awaiting the resolve to finalize */ + MSTATE_CONNECTING, /* 5 - awaiting the TCP connect to finalize */ + MSTATE_TUNNELING, /* 6 - awaiting HTTPS proxy SSL initialization to complete and/or proxy CONNECT to finalize */ - MSTATE_PROTOCONNECT, /* 6 - initiate protocol connect procedure */ - MSTATE_PROTOCONNECTING, /* 7 - completing the protocol-specific connect + MSTATE_PROTOCONNECT, /* 7 - initiate protocol connect procedure */ + MSTATE_PROTOCONNECTING, /* 8 - completing the protocol-specific connect phase */ - MSTATE_DO, /* 8 - start send off the request (part 1) */ - MSTATE_DOING, /* 9 - sending off the request (part 1) */ - MSTATE_DOING_MORE, /* 10 - send off the request (part 2) */ - MSTATE_DID, /* 11 - done sending off request */ - MSTATE_PERFORMING, /* 12 - transfer data */ - MSTATE_RATELIMITING, /* 13 - wait because limit-rate exceeded */ - MSTATE_DONE, /* 14 - post data transfer operation */ - MSTATE_COMPLETED, /* 15 - operation complete */ - MSTATE_MSGSENT, /* 16 - the operation complete message is sent */ - MSTATE_LAST /* 17 - not a true state, never use this */ + MSTATE_DO, /* 9 - start send off the request (part 1) */ + MSTATE_DOING, /* 10 - sending off the request (part 1) */ + MSTATE_DOING_MORE, /* 11 - send off the request (part 2) */ + MSTATE_DID, /* 12 - done sending off request */ + MSTATE_PERFORMING, /* 13 - transfer data */ + MSTATE_RATELIMITING, /* 14 - wait because limit-rate exceeded */ + MSTATE_DONE, /* 15 - post data transfer operation */ + MSTATE_COMPLETED, /* 16 - operation complete */ + MSTATE_MSGSENT, /* 17 - the operation complete message is sent */ + MSTATE_LAST /* 18 - not a true state, never use this */ } CURLMstate; /* we support N sockets per easy handle. Set the corresponding bit to what @@ -79,10 +80,6 @@ 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 @@ -131,14 +128,17 @@ struct Curl_multi { char *xfer_ulbuf; /* the actual buffer */ size_t xfer_ulbuf_len; /* the allocated length */ -#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) */ struct Curl_hash sockhash; + /* `proto_hash` is a general key-value store for protocol implementations + * with the lifetime of the multi handle. The number of elements kept here + * should be in the order of supported protocols (and sub-protocols like + * TLS), *not* in the order of connections or current transfers! + * Elements need to be added with their own destructor to be invoked when + * the multi handle is cleaned up (see Curl_hash_add2()).*/ + struct Curl_hash proto_hash; /* Shared connection cache (bundles)*/ struct conncache conn_cache; @@ -148,6 +148,8 @@ struct Curl_multi { long max_total_connections; /* if >0, a fixed limit of the maximum number of connections in total */ + long max_shutdown_connections; /* if >0, a fixed limit of the maximum number + of connections in shutdown handling */ /* timer callback and user data pointer for the *socket() API */ curl_multi_timer_callback timer_cb; @@ -158,13 +160,14 @@ struct Curl_multi { WSAEVENT wsa_event; /* winsock event used for waits */ #else #ifdef ENABLE_WAKEUP - curl_socket_t wakeup_pair[2]; /* socketpair() used for wakeup - 0 is used for read, 1 is used for write */ + curl_socket_t wakeup_pair[2]; /* eventfd()/pipe()/socketpair() used for + wakeup 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 + entries we are allowed to grow the connection cache to */ #define IPV6_UNKNOWN 0 #define IPV6_DEAD 1 @@ -179,7 +182,7 @@ struct Curl_multi { BIT(dead); /* a callback returned error, everything needs to crash and burn */ BIT(xfer_buf_borrowed); /* xfer_buf is currently being borrowed */ - BIT(xfer_ulbuf_borrowed); /* xfer_buf is currently being borrowed */ + BIT(xfer_ulbuf_borrowed); /* xfer_ulbuf is currently being borrowed */ #ifdef DEBUGBUILD BIT(warned); /* true after user warned of DEBUGBUILD */ #endif diff --git a/lib/multiif.h b/lib/multiif.h index 37f7a4426..d3c12baee 100644 --- a/lib/multiif.h +++ b/lib/multiif.h @@ -38,15 +38,16 @@ void Curl_attach_connection(struct Curl_easy *data, void Curl_detach_connection(struct Curl_easy *data); bool Curl_multiplex_wanted(const struct Curl_multi *multi); void Curl_set_in_callback(struct Curl_easy *data, bool value); -bool Curl_is_in_callback(struct Curl_easy *easy); +bool Curl_is_in_callback(struct Curl_easy *data); 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, - int dnssize); +struct Curl_multi *Curl_multi_handle(size_t hashsize, + size_t chashsize, + size_t dnssize); /* the write bits start at bit 16 for the *getsock() bitmap */ #define GETSOCK_WRITEBITSTART 16 @@ -75,7 +76,7 @@ void Curl_multiuse_state(struct Curl_easy *data, * Curl_multi_closed() * * Used by the connect code to tell the multi_socket code that one of the - * sockets we were using is about to be closed. This function will then + * sockets we were using is about to be closed. This function will then * remove it from the sockethash for this handle to make the multi_socket API * behave properly, especially for the case when libcurl will create another * socket again and it gets the same file descriptor number. @@ -83,6 +84,15 @@ void Curl_multiuse_state(struct Curl_easy *data, void Curl_multi_closed(struct Curl_easy *data, curl_socket_t s); +/* Compare the two pollsets to notify the multi_socket API of changes + * in socket polling, e.g calling multi->socket_cb() with the changes if + * differences are seen. + */ +CURLMcode Curl_multi_pollset_ev(struct Curl_multi *multi, + struct Curl_easy *data, + struct easy_pollset *ps, + struct easy_pollset *last_ps); + /* * Add a handle and move it into PERFORM state at once. For pushed streams. */ diff --git a/lib/netrc.c b/lib/netrc.c index cd2a2844e..571fc7359 100644 --- a/lib/netrc.c +++ b/lib/netrc.c @@ -237,7 +237,7 @@ static int parsenetrc(const char *host, else if(strcasecompare("password", tok)) state_password = 1; else if(strcasecompare("machine", tok)) { - /* ok, there's machine here go => */ + /* ok, there is machine here go => */ state = HOSTFOUND; state_our_login = FALSE; } @@ -277,7 +277,7 @@ static int parsenetrc(const char *host, /* * @unittest: 1304 * - * *loginp and *passwordp MUST be allocated if they aren't NULL when passed + * *loginp and *passwordp MUST be allocated if they are not NULL when passed * in. */ int Curl_parsenetrc(const char *host, char **loginp, char **passwordp, diff --git a/lib/netrc.h b/lib/netrc.h index 9f2815f3b..37c95db5e 100644 --- a/lib/netrc.h +++ b/lib/netrc.h @@ -27,7 +27,7 @@ #include "curl_setup.h" #ifndef CURL_DISABLE_NETRC -/* returns -1 on failure, 0 if the host is found, 1 is the host isn't found */ +/* returns -1 on failure, 0 if the host is found, 1 is the host is not found */ int Curl_parsenetrc(const char *host, char **loginp, char **passwordp, char *filename); /* Assume: (*passwordp)[0]=0, host[0] != 0. diff --git a/lib/nonblock.c b/lib/nonblock.c index f4eb65612..9ee93db2e 100644 --- a/lib/nonblock.c +++ b/lib/nonblock.c @@ -50,9 +50,18 @@ int curlx_nonblock(curl_socket_t sockfd, /* operate on this */ /* most recent unix versions */ int flags; flags = sfcntl(sockfd, F_GETFL, 0); + if(flags < 0) + return -1; + /* Check if the current file status flags have already satisfied + * the request, if so, it is no need to call fcntl() to replicate it. + */ + if(!!(flags & O_NONBLOCK) == !!nonblock) + return 0; if(nonblock) - return sfcntl(sockfd, F_SETFL, flags | O_NONBLOCK); - return sfcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK)); + flags |= O_NONBLOCK; + else + flags &= ~O_NONBLOCK; + return sfcntl(sockfd, F_SETFL, flags); #elif defined(HAVE_IOCTL_FIONBIO) @@ -64,7 +73,7 @@ int curlx_nonblock(curl_socket_t sockfd, /* operate on this */ /* Windows */ unsigned long flags = nonblock ? 1UL : 0UL; - return ioctlsocket(sockfd, FIONBIO, &flags); + return ioctlsocket(sockfd, (long)FIONBIO, &flags); #elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO) diff --git a/lib/noproxy.c b/lib/noproxy.c index 5241640a3..dbfafc93e 100644 --- a/lib/noproxy.c +++ b/lib/noproxy.c @@ -78,23 +78,23 @@ UNITTEST bool Curl_cidr6_match(const char *ipv6, const char *network, unsigned int bits) { -#ifdef ENABLE_IPV6 - int bytes; - int rest; +#ifdef USE_IPV6 + unsigned int bytes; + unsigned int rest; unsigned char address[16]; unsigned char check[16]; if(!bits) bits = 128; - bytes = bits/8; + bytes = bits / 8; rest = bits & 0x07; + if((bytes > 16) || ((bytes == 16) && rest)) + return FALSE; if(1 != Curl_inet_pton(AF_INET6, ipv6, address)) return FALSE; if(1 != Curl_inet_pton(AF_INET6, network, check)) return FALSE; - if((bytes > 16) || ((bytes == 16) && rest)) - return FALSE; if(bytes && memcmp(address, check, bytes)) return FALSE; if(rest && !((address[bytes] ^ check[bytes]) & (0xff << (8 - rest)))) @@ -119,13 +119,12 @@ 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 *spacesep) +bool Curl_check_noproxy(const char *name, const char *no_proxy) { char hostip[128]; - *spacesep = FALSE; + /* - * If we don't have a hostname at all, like for example with a FILE + * If we do not 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') @@ -143,7 +142,7 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy, if(!strcmp("*", no_proxy)) return TRUE; - /* NO_PROXY was specified and it wasn't just an asterisk */ + /* NO_PROXY was specified and it was not just an asterisk */ if(name[0] == '[') { char *endptr; @@ -166,7 +165,7 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy, if(1 == Curl_inet_pton(AF_INET, name, &address)) type = TYPE_IPV4; else { - /* ignore trailing dots in the host name */ + /* ignore trailing dots in the hostname */ if(name[namelen - 1] == '.') namelen--; } @@ -232,7 +231,9 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy, slash = strchr(check, '/'); /* if the slash is part of this token, use it */ if(slash) { - bits = atoi(slash + 1); + /* if the bits variable gets a crazy value here, that is fine as + the value will then be rejected in the cidr function */ + bits = (unsigned int)atoi(slash + 1); *slash = 0; /* null terminate there */ } if(type == TYPE_IPV6) @@ -248,16 +249,14 @@ bool Curl_check_noproxy(const char *name, const char *no_proxy, /* pass blanks after pattern */ while(ISBLANK(*p)) p++; - /* if not a comma! */ - if(*p && (*p != ',')) { - *spacesep = TRUE; - continue; - } + /* if not a comma, this ends the loop */ + if(*p != ',') + break; /* pass any number of commas */ while(*p == ',') p++; } /* while(*p) */ - } /* NO_PROXY was specified and it wasn't just an asterisk */ + } /* NO_PROXY was specified and it was not just an asterisk */ return FALSE; } diff --git a/lib/noproxy.h b/lib/noproxy.h index a3a680772..71ae7eaaf 100644 --- a/lib/noproxy.h +++ b/lib/noproxy.h @@ -27,7 +27,7 @@ #ifndef CURL_DISABLE_PROXY -#ifdef DEBUGBUILD +#ifdef UNITTESTS UNITTEST bool Curl_cidr4_match(const char *ipv4, /* 1.2.3.4 address */ const char *network, /* 1.2.3.4 address */ @@ -37,9 +37,7 @@ UNITTEST bool Curl_cidr6_match(const char *ipv6, unsigned int bits); #endif -bool Curl_check_noproxy(const char *name, const char *no_proxy, - bool *spacesep); - +bool Curl_check_noproxy(const char *name, const char *no_proxy); #endif #endif /* HEADER_CURL_NOPROXY_H */ diff --git a/lib/openldap.c b/lib/openldap.c index 47266f64e..1b35ba0d7 100644 --- a/lib/openldap.c +++ b/lib/openldap.c @@ -117,7 +117,7 @@ static Curl_recv oldap_recv; */ const struct Curl_handler Curl_handler_ldap = { - "LDAP", /* scheme */ + "ldap", /* scheme */ oldap_setup_connection, /* setup_connection */ oldap_do, /* do_it */ oldap_done, /* done */ @@ -131,6 +131,7 @@ const struct Curl_handler Curl_handler_ldap = { ZERO_NULL, /* perform_getsock */ oldap_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_LDAP, /* defport */ @@ -145,7 +146,7 @@ const struct Curl_handler Curl_handler_ldap = { */ const struct Curl_handler Curl_handler_ldaps = { - "LDAPS", /* scheme */ + "ldaps", /* scheme */ oldap_setup_connection, /* setup_connection */ oldap_do, /* do_it */ oldap_done, /* done */ @@ -159,6 +160,7 @@ const struct Curl_handler Curl_handler_ldaps = { ZERO_NULL, /* perform_getsock */ oldap_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_LDAPS, /* defport */ @@ -548,9 +550,12 @@ static CURLcode oldap_connect(struct Curl_easy *data, bool *done) return result; } - hosturl = aprintf("ldap%s://%s:%d", - conn->handler->flags & PROTOPT_SSL? "s": "", - conn->host.name, conn->remote_port); + hosturl = aprintf("%s://%s%s%s:%d", + conn->handler->scheme, + conn->bits.ipv6_ip? "[": "", + conn->host.name, + conn->bits.ipv6_ip? "]": "", + conn->remote_port); if(!hosturl) return CURLE_OUT_OF_MEMORY; @@ -916,7 +921,7 @@ static CURLcode oldap_do(struct Curl_easy *data, bool *done) else { lr->msgid = msgid; data->req.p.ldap = lr; - Curl_xfer_setup(data, FIRSTSOCKET, -1, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, -1, FALSE); *done = TRUE; } } @@ -1147,7 +1152,7 @@ ldapsb_tls_remove(Sockbuf_IO_Desc *sbiod) return 0; } -/* We don't need to do anything because libcurl does it already */ +/* We do not need to do anything because libcurl does it already */ static int ldapsb_tls_close(Sockbuf_IO_Desc *sbiod) { diff --git a/lib/optiontable.pl b/lib/optiontable.pl deleted file mode 100755 index 511322a34..000000000 --- a/lib/optiontable.pl +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/env perl - -print <, et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - * SPDX-License-Identifier: curl - * - ***************************************************************************/ - -/* This source code is generated by optiontable.pl - DO NOT EDIT BY HAND */ - -#include "curl_setup.h" -#include "easyoptions.h" - -/* all easy setopt options listed in alphabetical order */ -struct curl_easyoption Curl_easyopts[] = { -HEAD - ; - -my $lastnum=0; - -sub add { - my($opt, $type, $num)=@_; - my $name; - # remove all spaces from the type - $type =~ s/ //g; - my $ext = $type; - - if($opt =~ /OBSOLETE/) { - # skip obsolete options - next; - } - - if($opt =~ /^CURLOPT_(.*)/) { - $name=$1; - } - $ext =~ s/CURLOPTTYPE_//; - $ext =~ s/CBPOINT/CBPTR/; - $ext =~ s/POINT\z//; - $type = "CURLOT_$ext"; - - $opt{$name} = $opt; - $type{$name} = $type; - push @names, $name; - if($num < $lastnum) { - print STDERR "ERROR: $opt has bad number: $num < $lastnum\n"; - exit 2; - } - else { - $lastnum = $num; - } -} - - -my $fl; -while() { - my $l = $_; - if($fl) { - # continued deprecation - if($l =~ /(.*)\),/) { - $fl .= $1; - - # the end - my @p=split(/, */, $fl); - add($p[0], $p[1], $p[2]); - undef $fl; - } - else { - # another line to append - chomp $l; - $fl .= $l; - } - } - - if(/^ *CURLOPTDEPRECATED\((.*)/) { - $fl = $1; - chomp $fl; - } - - if(/^ *CURLOPT\(([^,]*), ([^,]*), (\d+)\)/) { - my($opt, $type, $num)=($1,$2,$3); - add($opt, $type, $num); - } - - # alias for an older option - # old = new - if(/^#define (CURLOPT_[^ ]*) *(CURLOPT_\S*)/) { - my ($o, $n)=($1, $2); - # skip obsolete ones - if($n !~ /OBSOLETE/) { - $o =~ s/^CURLOPT_//; - $n =~ s/^CURLOPT_//; - $alias{$o} = $n; - push @names, $o, - } - } -} - - -for my $name (sort @names) { - my $oname = $name; - my $a = $alias{$name}; - my $flag = "0"; - if($a) { - $name = $alias{$name}; - $flag = "CURLOT_FLAG_ALIAS"; - } - $o = sprintf(" {\"%s\", %s, %s, %s},\n", - $oname, $opt{$name}, $type{$name}, $flag); - if(length($o) < 80) { - print $o; - } - else { - printf(" {\"%s\", %s,\n %s, %s},\n", - $oname, $opt{$name}, $type{$name}, $flag); - } -} - -print < 2105) { *output = TIME_T_MAX; return PARSEDATE_LATER; } #else - /* a signed 32 bit time_t can only hold dates to the beginning of 2038 */ + /* a signed 32-bit time_t can only hold dates to the beginning of 2038 */ if(yearnum > 2037) { *output = TIME_T_MAX; return PARSEDATE_LATER; @@ -549,7 +549,7 @@ static int parsedate(const char *date, time_t *output) return PARSEDATE_FAIL; /* clearly an illegal date */ /* time2epoch() returns a time_t. time_t is often 32 bits, sometimes even on - architectures that feature 64 bit 'long' but ultimately time_t is the + architectures that feature a 64 bits 'long' but ultimately time_t is the correct data type to use. */ t = time2epoch(secnum, minnum, hournum, mdaynum, monnum, yearnum); diff --git a/lib/pingpong.c b/lib/pingpong.c index 81576c08c..7ce81e8af 100644 --- a/lib/pingpong.c +++ b/lib/pingpong.c @@ -119,7 +119,7 @@ CURLcode Curl_pp_statemach(struct Curl_easy *data, interval_ms); if(block) { - /* if we didn't wait, we don't have to spend time on this now */ + /* if we did not wait, we do not have to spend time on this now */ if(Curl_pgrsUpdate(data)) result = CURLE_ABORTED_BY_CALLBACK; else @@ -179,7 +179,7 @@ CURLcode Curl_pp_vsendf(struct Curl_easy *data, DEBUGASSERT(pp->sendthis == NULL); if(!conn) - /* can't send without a connection! */ + /* cannot send without a connection! */ return CURLE_SEND_ERROR; Curl_dyn_reset(&pp->sendbuf); @@ -329,7 +329,7 @@ CURLcode Curl_pp_readresp(struct Curl_easy *data, char *nl = memchr(line, '\n', Curl_dyn_len(&pp->recvbuf)); if(nl) { /* a newline is CRLF in pp-talk, so the CR is ignored as - the line isn't really terminated until the LF comes */ + the line is not really terminated until the LF comes */ size_t length = nl - line + 1; /* output debug output if that is requested */ @@ -372,7 +372,7 @@ CURLcode Curl_pp_readresp(struct Curl_easy *data, break; } - } while(1); /* while there's buffer left to scan */ + } while(1); /* while there is buffer left to scan */ pp->pending_resp = FALSE; diff --git a/lib/pingpong.h b/lib/pingpong.h index 28172c728..62f2467fc 100644 --- a/lib/pingpong.h +++ b/lib/pingpong.h @@ -37,7 +37,7 @@ struct connectdata; typedef enum { PPTRANSFER_BODY, /* yes do transfer a body */ PPTRANSFER_INFO, /* do still go through to get info/headers */ - PPTRANSFER_NONE /* don't get anything and don't get info */ + PPTRANSFER_NONE /* do not get anything and do not get info */ } curl_pp_transfer; /* @@ -83,7 +83,7 @@ struct pingpong { * Curl_pp_statemach() * * called repeatedly until done. Set 'wait' to make it wait a while on the - * socket if there's no traffic. + * socket if there is no traffic. */ CURLcode Curl_pp_statemach(struct Curl_easy *data, struct pingpong *pp, bool block, bool disconnecting); diff --git a/lib/pop3.c b/lib/pop3.c index 993b2e1c7..4cf1782ac 100644 --- a/lib/pop3.c +++ b/lib/pop3.c @@ -112,7 +112,7 @@ static CURLcode pop3_get_message(struct Curl_easy *data, struct bufref *out); */ const struct Curl_handler Curl_handler_pop3 = { - "POP3", /* scheme */ + "pop3", /* scheme */ pop3_setup_connection, /* setup_connection */ pop3_do, /* do_it */ pop3_done, /* done */ @@ -126,6 +126,7 @@ const struct Curl_handler Curl_handler_pop3 = { ZERO_NULL, /* perform_getsock */ pop3_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_POP3, /* defport */ @@ -141,7 +142,7 @@ const struct Curl_handler Curl_handler_pop3 = { */ const struct Curl_handler Curl_handler_pop3s = { - "POP3S", /* scheme */ + "pop3s", /* scheme */ pop3_setup_connection, /* setup_connection */ pop3_do, /* do_it */ pop3_done, /* done */ @@ -155,6 +156,7 @@ const struct Curl_handler Curl_handler_pop3s = { ZERO_NULL, /* perform_getsock */ pop3_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_POP3S, /* defport */ @@ -404,7 +406,7 @@ static CURLcode pop3_perform_user(struct Curl_easy *data, CURLcode result = CURLE_OK; /* Check we have a username and password to authenticate with and end the - connect phase if we don't */ + connect phase if we do not */ if(!data->state.aptr.user) { pop3_state(data, POP3_STOP); @@ -438,7 +440,7 @@ static CURLcode pop3_perform_apop(struct Curl_easy *data, char secret[2 * MD5_DIGEST_LEN + 1]; /* Check we have a username and password to authenticate with and end the - connect phase if we don't */ + connect phase if we do not */ if(!data->state.aptr.user) { pop3_state(data, POP3_STOP); @@ -548,7 +550,7 @@ static CURLcode pop3_perform_authentication(struct Curl_easy *data, saslprogress progress = SASL_IDLE; /* Check we have enough data to authenticate with and end the - connect phase if we don't */ + connect phase if we do not */ if(!Curl_sasl_can_authenticate(&pop3c->sasl, data)) { pop3_state(data, POP3_STOP); return result; @@ -756,7 +758,7 @@ static CURLcode pop3_state_capa_resp(struct Curl_easy *data, int pop3code, } } else { - /* Clear text is supported when CAPA isn't recognised */ + /* Clear text is supported when CAPA is not recognised */ if(pop3code != '+') pop3c->authtypes |= POP3_TYPE_CLEARTEXT; @@ -929,12 +931,12 @@ static CURLcode pop3_state_command_resp(struct Curl_easy *data, pop3c->eob = 2; /* But since this initial CR LF pair is not part of the actual body, we set - the strip counter here so that these bytes won't be delivered. */ + the strip counter here so that these bytes will not be delivered. */ pop3c->strip = 2; if(pop3->transfer == PPTRANSFER_BODY) { /* POP3 download */ - Curl_xfer_setup(data, FIRSTSOCKET, -1, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, -1, FALSE); if(pp->overflow) { /* The recv buffer contains data that is actually body content so send @@ -1450,7 +1452,7 @@ static CURLcode pop3_parse_custom_request(struct Curl_easy *data) * This function scans the body after the end-of-body and writes everything * until the end is found. */ -CURLcode Curl_pop3_write(struct Curl_easy *data, char *str, size_t nread) +CURLcode Curl_pop3_write(struct Curl_easy *data, const char *str, size_t nread) { /* This code could be made into a special function in the handler struct */ CURLcode result = CURLE_OK; @@ -1475,7 +1477,7 @@ CURLcode Curl_pop3_write(struct Curl_easy *data, char *str, size_t nread) pop3c->eob++; if(i) { - /* Write out the body part that didn't match */ + /* Write out the body part that did not match */ result = Curl_client_write(data, CLIENTWRITE_BODY, &str[last], i - last); @@ -1488,7 +1490,7 @@ CURLcode Curl_pop3_write(struct Curl_easy *data, char *str, size_t nread) else if(pop3c->eob == 3) pop3c->eob++; else - /* If the character match wasn't at position 0 or 3 then restart the + /* If the character match was not at position 0 or 3 then restart the pattern matching */ pop3c->eob = 1; break; @@ -1497,7 +1499,7 @@ CURLcode Curl_pop3_write(struct Curl_easy *data, char *str, size_t nread) if(pop3c->eob == 1 || pop3c->eob == 4) pop3c->eob++; else - /* If the character match wasn't at position 1 or 4 then start the + /* If the character match was not at position 1 or 4 then start the search again */ pop3c->eob = 0; break; @@ -1511,7 +1513,7 @@ CURLcode Curl_pop3_write(struct Curl_easy *data, char *str, size_t nread) pop3c->eob = 0; } else - /* If the character match wasn't at position 2 then start the search + /* If the character match was not at position 2 then start the search again */ pop3c->eob = 0; break; diff --git a/lib/pop3.h b/lib/pop3.h index 83f0f831e..e8e98db04 100644 --- a/lib/pop3.h +++ b/lib/pop3.h @@ -92,6 +92,7 @@ extern const struct Curl_handler Curl_handler_pop3s; /* This function scans the body after the end-of-body and writes everything * until the end is found */ -CURLcode Curl_pop3_write(struct Curl_easy *data, char *str, size_t nread); +CURLcode Curl_pop3_write(struct Curl_easy *data, + const char *str, size_t nread); #endif /* HEADER_CURL_POP3_H */ diff --git a/lib/progress.c b/lib/progress.c index d05fcc3eb..34c29a270 100644 --- a/lib/progress.c +++ b/lib/progress.c @@ -82,13 +82,13 @@ static char *max5data(curl_off_t bytes, char *max5) msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "k", bytes/ONE_KILOBYTE); else if(bytes < CURL_OFF_T_C(100) * ONE_MEGABYTE) - /* 'XX.XM' is good as long as we're less than 100 megs */ + /* 'XX.XM' is good as long as we are less than 100 megs */ msnprintf(max5, 6, "%2" CURL_FORMAT_CURL_OFF_T ".%0" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE, (bytes%ONE_MEGABYTE) / (ONE_MEGABYTE/CURL_OFF_T_C(10)) ); else if(bytes < CURL_OFF_T_C(10000) * ONE_MEGABYTE) - /* 'XXXXM' is good until we're at 10000MB or above */ + /* 'XXXXM' is good until we are at 10000MB or above */ msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE); else if(bytes < CURL_OFF_T_C(100) * ONE_GIGABYTE) @@ -109,7 +109,7 @@ 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 + /* 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; @@ -140,7 +140,7 @@ int Curl_pgrsDone(struct Curl_easy *data) if(!(data->progress.flags & PGRS_HIDE) && !data->progress.callback) - /* only output if we don't use a progress callback and we're not + /* only output if we do not use a progress callback and we are not * hidden */ fprintf(data->set.err, "\n"); @@ -204,7 +204,7 @@ void Curl_pgrsTimeWas(struct Curl_easy *data, timerid timer, case TIMER_STARTTRANSFER: delta = &data->progress.t_starttransfer; /* prevent updating t_starttransfer unless: - * 1) this is the first time we're setting t_starttransfer + * 1) this is the first time we are setting t_starttransfer * 2) a redirect has occurred since the last time t_starttransfer was set * This prevents repeated invocations of the function from incorrectly * changing the t_starttransfer time. @@ -265,11 +265,11 @@ void Curl_pgrsStartNow(struct Curl_easy *data) /* * This is used to handle speed limits, calculating how many milliseconds to - * wait until we're back under the speed limit, if needed. + * wait until we are back under the speed limit, if needed. * * The way it works is by having a "starting point" (time & amount of data * transferred by then) used in the speed computation, to be used instead of - * the start of the transfer. This starting point is regularly moved as + * the start of the transfer. This starting point is regularly moved as * transfer goes on, to keep getting accurate values (instead of average over * the entire transfer). * @@ -336,7 +336,7 @@ CURLcode Curl_pgrsSetDownloadCounter(struct Curl_easy *data, curl_off_t size) */ void Curl_ratelimit(struct Curl_easy *data, struct curltime now) { - /* don't set a new stamp unless the time since last update is long enough */ + /* do not set a new stamp unless the time since last update is long enough */ if(data->set.max_recv_speed) { if(Curl_timediff(now, data->progress.dl_limit_start) >= MIN_RATE_LIMIT_PERIOD) { @@ -399,7 +399,7 @@ static curl_off_t trspeed(curl_off_t size, /* number of bytes */ return CURL_OFF_T_MAX; } -/* returns TRUE if it's time to show the progress meter */ +/* returns TRUE if it is time to show the progress meter */ static bool progress_calc(struct Curl_easy *data, struct curltime now) { bool timetoshow = FALSE; @@ -431,10 +431,10 @@ static bool progress_calc(struct Curl_easy *data, struct curltime now) /* figure out how many index entries of data we have stored in our speeder array. With N_ENTRIES filled in, we have about N_ENTRIES-1 seconds of transfer. Imagine, after one second we have filled in two entries, - after two seconds we've filled in three entries etc. */ + after two seconds we have filled in three entries etc. */ countindex = ((p->speeder_c >= CURR_TIME)? CURR_TIME:p->speeder_c) - 1; - /* first of all, we don't do this if there's no counted seconds yet */ + /* first of all, we do not do this if there is no counted seconds yet */ if(countindex) { int checkindex; timediff_t span_ms; @@ -587,14 +587,12 @@ static void progress_meter(struct Curl_easy *data) * Curl_pgrsUpdate() returns 0 for success or the value returned by the * progress callback! */ -int Curl_pgrsUpdate(struct Curl_easy *data) +static int pgrsupdate(struct Curl_easy *data, bool showprogress) { - struct curltime now = Curl_now(); /* what time is it */ - bool showprogress = progress_calc(data, now); if(!(data->progress.flags & PGRS_HIDE)) { if(data->set.fxferinfo) { int result; - /* There's a callback set, call that */ + /* There is a callback set, call that */ Curl_set_in_callback(data, true); result = data->set.fxferinfo(data->set.progress_client, data->progress.size_dl, @@ -631,3 +629,19 @@ int Curl_pgrsUpdate(struct Curl_easy *data) return 0; } + +int Curl_pgrsUpdate(struct Curl_easy *data) +{ + struct curltime now = Curl_now(); /* what time is it */ + bool showprogress = progress_calc(data, now); + return pgrsupdate(data, showprogress); +} + +/* + * Update all progress, do not do progress meter/callbacks. + */ +void Curl_pgrsUpdate_nometer(struct Curl_easy *data) +{ + struct curltime now = Curl_now(); /* what time is it */ + (void)progress_calc(data, now); +} diff --git a/lib/progress.h b/lib/progress.h index 73749419a..860257425 100644 --- a/lib/progress.h +++ b/lib/progress.h @@ -54,6 +54,8 @@ 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); +void Curl_pgrsUpdate_nometer(struct Curl_easy *data); + void Curl_pgrsResetTransferSizes(struct Curl_easy *data); struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer); timediff_t Curl_pgrsLimitWaitTime(curl_off_t cursize, diff --git a/lib/rand.c b/lib/rand.c index c62b1a403..4ee96fbb6 100644 --- a/lib/rand.c +++ b/lib/rand.c @@ -48,7 +48,8 @@ #ifdef _WIN32 -#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600 +#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600 && \ + !defined(CURL_WINDOWS_APP) # define HAVE_WIN_BCRYPTGENRANDOM # include # ifdef _MSC_VER @@ -105,7 +106,7 @@ static CURLcode randit(struct Curl_easy *data, unsigned int *rnd) static unsigned int randseed; static bool seeded = FALSE; -#ifdef CURLDEBUG +#ifdef DEBUGBUILD char *force_entropy = getenv("CURL_ENTROPY"); if(force_entropy) { if(!seeded) { @@ -150,7 +151,7 @@ static CURLcode randit(struct Curl_easy *data, unsigned int *rnd) #if defined(RANDOM_FILE) && !defined(_WIN32) if(!seeded) { - /* if there's a random file to read a seed from, use it */ + /* if there is a random file to read a seed from, use it */ int fd = open(RANDOM_FILE, O_RDONLY); if(fd > -1) { /* read random data into the randseed variable */ @@ -269,7 +270,7 @@ CURLcode Curl_rand_alnum(struct Curl_easy *data, unsigned char *rnd, size_t num) { CURLcode result = CURLE_OK; - const int alnumspace = sizeof(alnum) - 1; + const unsigned int alnumspace = sizeof(alnum) - 1; unsigned int r; DEBUGASSERT(num > 1); @@ -282,7 +283,7 @@ CURLcode Curl_rand_alnum(struct Curl_easy *data, unsigned char *rnd, return result; } while(r >= (UINT_MAX - UINT_MAX % alnumspace)); - *rnd++ = alnum[r % alnumspace]; + *rnd++ = (unsigned char)alnum[r % alnumspace]; num--; } *rnd = 0; diff --git a/lib/rename.c b/lib/rename.c index 4c8869806..8715a4306 100644 --- a/lib/rename.c +++ b/lib/rename.c @@ -41,7 +41,7 @@ int Curl_rename(const char *oldpath, const char *newpath) { #ifdef _WIN32 - /* rename() on Windows doesn't overwrite, so we can't use it here. + /* rename() on Windows does not overwrite, so we cannot use it here. MoveFileEx() will overwrite and is usually atomic, however it fails when there are open handles to the file. */ const int max_wait_ms = 1000; diff --git a/lib/request.c b/lib/request.c index b3b058245..5c8d52f69 100644 --- a/lib/request.c +++ b/lib/request.c @@ -40,10 +40,9 @@ #include "curl_memory.h" #include "memdebug.h" -CURLcode Curl_req_init(struct SingleRequest *req) +void Curl_req_init(struct SingleRequest *req) { memset(req, 0, sizeof(*req)); - return CURLE_OK; } CURLcode Curl_req_soft_reset(struct SingleRequest *req, @@ -55,6 +54,7 @@ CURLcode Curl_req_soft_reset(struct SingleRequest *req, req->upload_done = FALSE; req->download_done = FALSE; req->ignorebody = FALSE; + req->shutdown = FALSE; req->bytecount = 0; req->writebytecount = 0; req->header = TRUE; /* assume header */ @@ -109,17 +109,14 @@ void Curl_req_hard_reset(struct SingleRequest *req, struct Curl_easy *data) /* This is a bit ugly. `req->p` is a union and we assume we can * free this safely without leaks. */ - Curl_safefree(req->p.http); + Curl_safefree(req->p.ftp); Curl_safefree(req->newurl); Curl_client_reset(data); if(req->sendbuf_init) Curl_bufq_reset(&req->sendbuf); #ifndef CURL_DISABLE_DOH - if(req->doh) { - Curl_close(&req->doh->probe[0].easy); - Curl_close(&req->doh->probe[1].easy); - } + Curl_doh_close(data); #endif /* Can no longer memset() this struct as we need to keep some state */ req->size = -1; @@ -136,7 +133,6 @@ void Curl_req_hard_reset(struct SingleRequest *req, struct Curl_easy *data) req->keepon = 0; req->upgr101 = UPGR101_INIT; req->timeofdoc = 0; - req->bodywrites = 0; req->location = NULL; req->newurl = NULL; #ifndef CURL_DISABLE_COOKIES @@ -157,27 +153,24 @@ void Curl_req_hard_reset(struct SingleRequest *req, struct Curl_easy *data) req->getheader = FALSE; req->no_body = data->set.opt_no_body; req->authneg = FALSE; + req->shutdown = FALSE; +#ifdef USE_HYPER + req->bodywritten = FALSE; +#endif } void Curl_req_free(struct SingleRequest *req, struct Curl_easy *data) { /* This is a bit ugly. `req->p` is a union and we assume we can * free this safely without leaks. */ - Curl_safefree(req->p.http); + Curl_safefree(req->p.ftp); Curl_safefree(req->newurl); if(req->sendbuf_init) Curl_bufq_free(&req->sendbuf); Curl_client_cleanup(data); #ifndef CURL_DISABLE_DOH - if(req->doh) { - Curl_close(&req->doh->probe[0].easy); - Curl_close(&req->doh->probe[1].easy); - Curl_dyn_free(&req->doh->probe[0].serverdoh); - Curl_dyn_free(&req->doh->probe[1].serverdoh); - curl_slist_free_all(req->doh->headers); - Curl_safefree(req->doh); - } + Curl_doh_cleanup(data); #endif } @@ -188,7 +181,7 @@ static CURLcode xfer_send(struct Curl_easy *data, CURLcode result = CURLE_OK; *pnwritten = 0; -#ifdef CURLDEBUG +#ifdef DEBUGBUILD { /* Allow debug builds to override this logic to force short initial sends @@ -201,7 +194,7 @@ static CURLcode xfer_send(struct Curl_easy *data, } } #endif - /* Make sure this doesn't send more body bytes than what the max send + /* Make sure this does not send more body bytes than what the max send speed says. The headers do not count to the max speed. */ if(data->set.max_send_speed) { size_t body_bytes = blen - hds_len; @@ -252,7 +245,7 @@ static CURLcode req_set_upload_done(struct Curl_easy *data) { DEBUGASSERT(!data->req.upload_done); data->req.upload_done = TRUE; - data->req.keepon &= ~(KEEP_SEND|KEEP_SEND_TIMED); /* we're done sending */ + data->req.keepon &= ~(KEEP_SEND|KEEP_SEND_TIMED); /* we are done sending */ Curl_creader_done(data, data->req.upload_aborted); @@ -266,7 +259,7 @@ static CURLcode req_set_upload_done(struct Curl_easy *data) else if(data->req.writebytecount) infof(data, "upload completely sent off: %" CURL_FORMAT_CURL_OFF_T " bytes", data->req.writebytecount); - else + else if(!data->req.download_done) infof(data, Curl_creader_total_length(data)? "We are completely uploaded and fine" : "Request completely sent off"); @@ -292,6 +285,14 @@ static CURLcode req_flush(struct Curl_easy *data) if(!data->req.upload_done && data->req.eos_read && Curl_bufq_is_empty(&data->req.sendbuf)) { + if(data->req.shutdown) { + bool done; + result = Curl_xfer_send_shutdown(data, &done); + if(result) + return result; + if(!done) + return CURLE_AGAIN; + } return req_set_upload_done(data); } return CURLE_OK; @@ -395,6 +396,7 @@ CURLcode Curl_req_send_more(struct Curl_easy *data) result = req_flush(data); if(result == CURLE_AGAIN) result = CURLE_OK; + return result; } diff --git a/lib/request.h b/lib/request.h index 488fbdd4d..413dacaa4 100644 --- a/lib/request.h +++ b/lib/request.h @@ -51,10 +51,10 @@ enum upgrade101 { /* - * Request specific data in the easy handle (Curl_easy). Previously, + * Request specific data in the easy handle (Curl_easy). Previously, * these members were on the connectdata struct but since a conn struct may * now be shared between different Curl_easys, we store connection-specific - * data here. This struct only keeps stuff that's interesting for *this* + * data here. This struct only keeps stuff that is interesting for *this* * request, as it will be cleared between multiple ones */ struct SingleRequest { @@ -68,7 +68,7 @@ struct SingleRequest { 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 + unsigned int deductheadercount; /* this amount of bytes does not 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 @@ -93,7 +93,6 @@ struct SingleRequest { struct bufq sendbuf; /* data which needs to be send to the server */ size_t sendbuf_hds_len; /* amount of header bytes in sendbuf */ time_t timeofdoc; - long bodywrites; char *location; /* This points to an allocated version of the Location: header data */ char *newurl; /* Set to the new URL to use when a redirect or a retry is @@ -104,7 +103,6 @@ struct SingleRequest { union { struct FILEPROTO *file; struct FTP *ftp; - struct HTTP *http; struct IMAP *imap; struct ldapreqinfo *ldap; struct MQTT *mqtt; @@ -147,12 +145,16 @@ struct SingleRequest { but it is not the final request in the auth negotiation. */ BIT(sendbuf_init); /* sendbuf is initialized */ + BIT(shutdown); /* request end will shutdown connection */ +#ifdef USE_HYPER + BIT(bodywritten); +#endif }; /** * Initialize the state of the request for first use. */ -CURLcode Curl_req_init(struct SingleRequest *req); +void Curl_req_init(struct SingleRequest *req); /** * The request is about to start. Record time and do a soft reset. diff --git a/lib/rtsp.c b/lib/rtsp.c index 98468517a..a9050806d 100644 --- a/lib/rtsp.c +++ b/lib/rtsp.c @@ -79,7 +79,7 @@ static unsigned int rtsp_conncheck(struct Curl_easy *data, unsigned int checks_to_perform); /* this returns the socket to wait for in the DO and DOING state for the multi - interface and then we're always _sending_ a request and thus we wait for + interface and then we are always _sending_ a request and thus we wait for the single socket to become writable only */ static int rtsp_getsock_do(struct Curl_easy *data, struct connectdata *conn, curl_socket_t *socks) @@ -93,14 +93,14 @@ static int rtsp_getsock_do(struct Curl_easy *data, struct connectdata *conn, static 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); +CURLcode rtsp_parse_transport(struct Curl_easy *data, const char *transport); /* * RTSP handler interface. */ const struct Curl_handler Curl_handler_rtsp = { - "RTSP", /* scheme */ + "rtsp", /* scheme */ rtsp_setup_connection, /* setup_connection */ rtsp_do, /* do_it */ rtsp_done, /* done */ @@ -114,6 +114,7 @@ const struct Curl_handler Curl_handler_rtsp = { ZERO_NULL, /* perform_getsock */ rtsp_disconnect, /* disconnect */ rtsp_rtp_write_resp, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ rtsp_conncheck, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_RTSP, /* defport */ @@ -260,7 +261,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done) * Since all RTSP requests are included here, there is no need to * support custom requests like HTTP. **/ - data->req.no_body = TRUE; /* most requests don't contain a body */ + data->req.no_body = TRUE; /* most requests do not contain a body */ switch(rtspreq) { default: failf(data, "Got invalid RTSP request"); @@ -309,13 +310,15 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done) } if(rtspreq == RTSPREQ_RECEIVE) { - Curl_xfer_setup(data, FIRSTSOCKET, -1, TRUE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, -1, TRUE); goto out; } p_session_id = data->set.str[STRING_RTSP_SESSION_ID]; if(!p_session_id && - (rtspreq & ~(RTSPREQ_OPTIONS | RTSPREQ_DESCRIBE | RTSPREQ_SETUP))) { + (rtspreq & ~(Curl_RtspReq)(RTSPREQ_OPTIONS | + RTSPREQ_DESCRIBE | + RTSPREQ_SETUP))) { failf(data, "Refusing to issue an RTSP request [%s] without a session ID.", p_request); result = CURLE_BAD_FUNCTION_ARGUMENT; @@ -393,7 +396,9 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done) if(result) goto out; +#ifndef CURL_DISABLE_PROXY p_proxyuserpwd = data->state.aptr.proxyuserpwd; +#endif p_userpwd = data->state.aptr.userpwd; /* Referrer */ @@ -573,7 +578,7 @@ static CURLcode rtsp_do(struct Curl_easy *data, bool *done) if(result) goto out; - Curl_xfer_setup(data, FIRSTSOCKET, -1, TRUE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SENDRECV, -1, TRUE); /* issue the request */ result = Curl_req_send(data, &req_buffer); @@ -802,7 +807,7 @@ static CURLcode rtsp_rtp_write_resp(struct Curl_easy *data, DEBUGF(infof(data, "rtsp_rtp_write_resp(len=%zu, in_header=%d, eos=%d)", blen, rtspc->in_header, is_eos)); - /* If header parsing is not onging, extract RTP messages */ + /* If header parsing is not ongoing, extract RTP messages */ if(!rtspc->in_header) { result = rtsp_filter_rtp(data, buf, blen, &consumed); if(result) @@ -911,12 +916,12 @@ CURLcode rtp_client_write(struct Curl_easy *data, const char *ptr, size_t len) return CURLE_OK; } -CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, char *header) +CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, const char *header) { if(checkprefix("CSeq:", header)) { long CSeq = 0; char *endp; - char *p = &header[5]; + const char *p = &header[5]; while(ISBLANK(*p)) p++; CSeq = strtol(p, &endp, 10); @@ -931,8 +936,7 @@ CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, char *header) } } else if(checkprefix("Session:", header)) { - char *start; - char *end; + const char *start, *end; size_t idlen; /* Find the first non-space letter */ @@ -948,7 +952,7 @@ CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, char *header) /* Find the end of Session ID * * Allow any non whitespace content, up to the field separator or end of - * line. RFC 2326 isn't 100% clear on the session ID and for example + * line. RFC 2326 is not 100% clear on the session ID and for example * gstreamer does url-encoded session ID's not covered by the standard. */ end = start; @@ -987,14 +991,13 @@ CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, char *header) } static -CURLcode rtsp_parse_transport(struct Curl_easy *data, char *transport) +CURLcode rtsp_parse_transport(struct Curl_easy *data, const 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; + const char *start, *end; start = transport; while(start && *start) { while(*start && ISBLANK(*start) ) @@ -1003,7 +1006,7 @@ CURLcode rtsp_parse_transport(struct Curl_easy *data, char *transport) if(checkprefix("interleaved=", start)) { long chan1, chan2, chan; char *endp; - char *p = start + 12; + const 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; diff --git a/lib/rtsp.h b/lib/rtsp.h index 237b80f80..41b09503f 100644 --- a/lib/rtsp.h +++ b/lib/rtsp.h @@ -31,7 +31,7 @@ extern const struct Curl_handler Curl_handler_rtsp; -CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, char *header); +CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, const char *header); #else /* disabled */ @@ -62,16 +62,6 @@ struct rtsp_conn { * RTSP unique setup ***************************************************************************/ struct RTSP { - /* - * http_wrapper MUST be the first element of this structure for the wrap - * logic to work. In this way, we get a cheap polymorphism because - * &(data->state.proto.rtsp) == &(data->state.proto.http) per the C spec - * - * 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 */ - long CSeq_sent; /* CSeq of this request */ long CSeq_recv; /* CSeq received */ }; diff --git a/lib/select.c b/lib/select.c index d92e745a7..96b0632ff 100644 --- a/lib/select.c +++ b/lib/select.c @@ -33,7 +33,7 @@ #endif #if !defined(HAVE_SELECT) && !defined(HAVE_POLL_FINE) -#error "We can't compile without select() or poll() support." +#error "We cannot compile without select() or poll() support." #endif #ifdef MSDOS @@ -47,6 +47,10 @@ #include "select.h" #include "timediff.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" /* * Internal function used for waiting a specific amount of ms @@ -81,7 +85,7 @@ int Curl_wait_ms(timediff_t timeout_ms) #if TIMEDIFF_T_MAX >= ULONG_MAX if(timeout_ms >= ULONG_MAX) timeout_ms = ULONG_MAX-1; - /* don't use ULONG_MAX, because that is equal to INFINITE */ + /* do not use ULONG_MAX, because that is equal to INFINITE */ #endif Sleep((ULONG)timeout_ms); #else @@ -131,7 +135,7 @@ static int our_select(curl_socket_t maxfd, /* highest socket number */ struct timeval *ptimeout; #ifdef USE_WINSOCK - /* WinSock select() can't handle zero events. See the comment below. */ + /* WinSock select() cannot handle zero events. See the comment below. */ if((!fds_read || fds_read->fd_count == 0) && (!fds_write || fds_write->fd_count == 0) && (!fds_err || fds_err->fd_count == 0)) { @@ -144,14 +148,14 @@ static int our_select(curl_socket_t maxfd, /* highest socket number */ #ifdef USE_WINSOCK /* WinSock select() must not be called with an fd_set that contains zero - fd flags, or it will return WSAEINVAL. But, it also can't be called + fd flags, or it will return WSAEINVAL. But, it also cannot be called with no fd_sets at all! From the documentation: Any two of the parameters, readfds, writefds, or exceptfds, can be given as null. At least one must be non-null, and any non-null descriptor set must contain at least one handle to a socket. - It is unclear why WinSock doesn't just handle this for us instead of + It is unclear why WinSock does not just handle this for us instead of calling this an error. Luckily, with WinSock, we can _also_ ask how many bits are set on an fd_set. So, let's just check it beforehand. */ @@ -169,7 +173,7 @@ static int our_select(curl_socket_t maxfd, /* highest socket number */ /* * Wait for read or write events on a set of file descriptors. It uses poll() * when a fine poll() is available, in order to avoid limits with FD_SETSIZE, - * otherwise select() is used. An error is returned if select() is being used + * otherwise select() is used. An error is returned if select() is being used * and a file descriptor is too large for FD_SETSIZE. * * A negative timeout value makes this function wait indefinitely, @@ -226,7 +230,7 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */ num++; } - r = Curl_poll(pfd, num, timeout_ms); + r = Curl_poll(pfd, (unsigned int)num, timeout_ms); if(r <= 0) return r; @@ -257,8 +261,8 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */ } /* - * This is a wrapper around poll(). If poll() does not exist, then - * select() is used instead. An error is returned if select() is + * This is a wrapper around poll(). If poll() does not exist, then + * select() is used instead. An error is returned if select() is * being used and a file descriptor is too large for FD_SETSIZE. * A negative timeout value makes this function wait indefinitely, * unless no valid file descriptor is given, when this happens the @@ -357,7 +361,7 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, timediff_t timeout_ms) } /* - Note also that WinSock ignores the first argument, so we don't worry + Note also that WinSock ignores the first argument, so we do not worry about the fact that maxfd is computed incorrectly with WinSock (since curl_socket_t is unsigned in such cases and thus -1 is the largest value). @@ -401,3 +405,147 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, timediff_t timeout_ms) return r; } + +void Curl_pollfds_init(struct curl_pollfds *cpfds, + struct pollfd *static_pfds, + unsigned int static_count) +{ + DEBUGASSERT(cpfds); + memset(cpfds, 0, sizeof(*cpfds)); + if(static_pfds && static_count) { + cpfds->pfds = static_pfds; + cpfds->count = static_count; + } +} + +void Curl_pollfds_cleanup(struct curl_pollfds *cpfds) +{ + DEBUGASSERT(cpfds); + if(cpfds->allocated_pfds) { + free(cpfds->pfds); + } + memset(cpfds, 0, sizeof(*cpfds)); +} + +static CURLcode cpfds_increase(struct curl_pollfds *cpfds, unsigned int inc) +{ + struct pollfd *new_fds; + unsigned int new_count = cpfds->count + inc; + + new_fds = calloc(new_count, sizeof(struct pollfd)); + if(!new_fds) + return CURLE_OUT_OF_MEMORY; + + memcpy(new_fds, cpfds->pfds, cpfds->count * sizeof(struct pollfd)); + if(cpfds->allocated_pfds) + free(cpfds->pfds); + cpfds->pfds = new_fds; + cpfds->count = new_count; + cpfds->allocated_pfds = TRUE; + return CURLE_OK; +} + +static CURLcode cpfds_add_sock(struct curl_pollfds *cpfds, + curl_socket_t sock, short events, bool fold) +{ + int i; + + if(fold && cpfds->n <= INT_MAX) { + for(i = (int)cpfds->n - 1; i >= 0; --i) { + if(sock == cpfds->pfds[i].fd) { + cpfds->pfds[i].events |= events; + return CURLE_OK; + } + } + } + /* not folded, add new entry */ + if(cpfds->n >= cpfds->count) { + if(cpfds_increase(cpfds, 100)) + return CURLE_OUT_OF_MEMORY; + } + cpfds->pfds[cpfds->n].fd = sock; + cpfds->pfds[cpfds->n].events = events; + ++cpfds->n; + return CURLE_OK; +} + +CURLcode Curl_pollfds_add_sock(struct curl_pollfds *cpfds, + curl_socket_t sock, short events) +{ + return cpfds_add_sock(cpfds, sock, events, FALSE); +} + +CURLcode Curl_pollfds_add_ps(struct curl_pollfds *cpfds, + struct easy_pollset *ps) +{ + size_t i; + + DEBUGASSERT(cpfds); + DEBUGASSERT(ps); + for(i = 0; i < ps->num; i++) { + short events = 0; + if(ps->actions[i] & CURL_POLL_IN) + events |= POLLIN; + if(ps->actions[i] & CURL_POLL_OUT) + events |= POLLOUT; + if(events) { + if(cpfds_add_sock(cpfds, ps->sockets[i], events, TRUE)) + return CURLE_OUT_OF_MEMORY; + } + } + return CURLE_OK; +} + +void Curl_waitfds_init(struct curl_waitfds *cwfds, + struct curl_waitfd *static_wfds, + unsigned int static_count) +{ + DEBUGASSERT(cwfds); + DEBUGASSERT(static_wfds); + memset(cwfds, 0, sizeof(*cwfds)); + cwfds->wfds = static_wfds; + cwfds->count = static_count; +} + +static CURLcode cwfds_add_sock(struct curl_waitfds *cwfds, + curl_socket_t sock, short events) +{ + int i; + + if(cwfds->n <= INT_MAX) { + for(i = (int)cwfds->n - 1; i >= 0; --i) { + if(sock == cwfds->wfds[i].fd) { + cwfds->wfds[i].events |= events; + return CURLE_OK; + } + } + } + /* not folded, add new entry */ + if(cwfds->n >= cwfds->count) + return CURLE_OUT_OF_MEMORY; + cwfds->wfds[cwfds->n].fd = sock; + cwfds->wfds[cwfds->n].events = events; + ++cwfds->n; + return CURLE_OK; +} + +CURLcode Curl_waitfds_add_ps(struct curl_waitfds *cwfds, + struct easy_pollset *ps) +{ + size_t i; + + DEBUGASSERT(cwfds); + DEBUGASSERT(ps); + for(i = 0; i < ps->num; i++) { + short events = 0; + if(ps->actions[i] & CURL_POLL_IN) + events |= CURL_WAIT_POLLIN; + if(ps->actions[i] & CURL_POLL_OUT) + events |= CURL_WAIT_POLLOUT; + if(events) { + if(cwfds_add_sock(cwfds, ps->sockets[i], events)) + return CURLE_OUT_OF_MEMORY; + } + } + return CURLE_OK; +} diff --git a/lib/select.h b/lib/select.h index 5b1ca23eb..f01acbdef 100644 --- a/lib/select.h +++ b/lib/select.h @@ -111,4 +111,37 @@ int Curl_wait_ms(timediff_t timeout_ms); } while(0) #endif +struct curl_pollfds { + struct pollfd *pfds; + unsigned int n; + unsigned int count; + BIT(allocated_pfds); +}; + +void Curl_pollfds_init(struct curl_pollfds *cpfds, + struct pollfd *static_pfds, + unsigned int static_count); + +void Curl_pollfds_cleanup(struct curl_pollfds *cpfds); + +CURLcode Curl_pollfds_add_ps(struct curl_pollfds *cpfds, + struct easy_pollset *ps); + +CURLcode Curl_pollfds_add_sock(struct curl_pollfds *cpfds, + curl_socket_t sock, short events); + +struct curl_waitfds { + struct curl_waitfd *wfds; + unsigned int n; + unsigned int count; +}; + +void Curl_waitfds_init(struct curl_waitfds *cwfds, + struct curl_waitfd *static_wfds, + unsigned int static_count); + +CURLcode Curl_waitfds_add_ps(struct curl_waitfds *cwfds, + struct easy_pollset *ps); + + #endif /* HEADER_CURL_SELECT_H */ diff --git a/lib/sendf.c b/lib/sendf.c index 790195719..24b90d2ad 100644 --- a/lib/sendf.c +++ b/lib/sendf.c @@ -88,7 +88,10 @@ CURLcode Curl_client_write(struct Curl_easy *data, DEBUGASSERT(data->req.writer_stack); } - return Curl_cwriter_write(data, data->req.writer_stack, type, buf, blen); + result = Curl_cwriter_write(data, data->req.writer_stack, type, buf, blen); + CURL_TRC_WRITE(data, "client_write(type=%x, len=%zu) -> %d", + type, blen, result); + return result; } static void cl_reset_writer(struct Curl_easy *data) @@ -115,7 +118,6 @@ static void cl_reset_reader(struct Curl_easy *data) void Curl_client_cleanup(struct Curl_easy *data) { - DEBUGF(infof(data, "Curl_client_cleanup()")); cl_reset_reader(data); cl_reset_writer(data); @@ -127,10 +129,10 @@ void Curl_client_reset(struct Curl_easy *data) { if(data->req.rewind_read) { /* already requested */ - DEBUGF(infof(data, "Curl_client_reset(), will rewind_read")); + CURL_TRC_READ(data, "client_reset, will rewind reader"); } else { - DEBUGF(infof(data, "Curl_client_reset(), clear readers")); + CURL_TRC_READ(data, "client_reset, clear readers"); cl_reset_reader(data); } cl_reset_writer(data); @@ -145,7 +147,7 @@ CURLcode Curl_client_start(struct Curl_easy *data) struct Curl_creader *r = data->req.reader_stack; CURLcode result = CURLE_OK; - DEBUGF(infof(data, "client start, rewind readers")); + CURL_TRC_READ(data, "client start, rewind readers"); while(r) { result = r->crt->rewind(data, r); if(result) { @@ -171,8 +173,7 @@ void Curl_creader_set_rewind(struct Curl_easy *data, bool enable) data->req.rewind_read = !!enable; } -/* Write data using an unencoding writer stack. "nbytes" is not - allowed to be 0. */ +/* Write data using an unencoding writer stack. */ CURLcode Curl_cwriter_write(struct Curl_easy *data, struct Curl_cwriter *writer, int type, const char *buf, size_t nbytes) @@ -249,7 +250,10 @@ static CURLcode cw_download_write(struct Curl_easy *data, if(!(type & CLIENTWRITE_BODY)) { if(is_connect && data->set.suppress_connect_headers) return CURLE_OK; - return Curl_cwriter_write(data, writer->next, type, buf, nbytes); + result = Curl_cwriter_write(data, writer->next, type, buf, nbytes); + CURL_TRC_WRITE(data, "download_write header(type=%x, blen=%zu) -> %d", + type, nbytes, result); + return result; } /* Here, we deal with REAL BODY bytes. All filtering and transfer @@ -261,8 +265,8 @@ static CURLcode cw_download_write(struct Curl_easy *data, if(data->req.no_body && nbytes > 0) { /* BODY arrives although we want none, bail out */ streamclose(data->conn, "ignoring body"); - DEBUGF(infof(data, "did not want a BODY, but seeing %zu bytes", - nbytes)); + CURL_TRC_WRITE(data, "download_write body(type=%x, blen=%zu), " + "did not want a BODY", type, nbytes); data->req.download_done = TRUE; if(data->info.header_size) /* if headers have been received, this is fine */ @@ -285,6 +289,13 @@ static CURLcode cw_download_write(struct Curl_easy *data, if(nwrite == wmax) { data->req.download_done = TRUE; } + + if((type & CLIENTWRITE_EOS) && !data->req.no_body && + (data->req.maxdownload > data->req.bytecount)) { + failf(data, "end of response with %" CURL_FORMAT_CURL_OFF_T + " bytes missing", data->req.maxdownload - data->req.bytecount); + return CURLE_PARTIAL_FILE; + } } /* Error on too large filesize is handled below, after writing @@ -298,12 +309,16 @@ static CURLcode cw_download_write(struct Curl_easy *data, if(!data->req.ignorebody && (nwrite || (type & CLIENTWRITE_EOS))) { result = Curl_cwriter_write(data, writer->next, type, buf, nwrite); + CURL_TRC_WRITE(data, "download_write body(type=%x, blen=%zu) -> %d", + type, nbytes, result); if(result) return result; } /* Update stats, write and report progress */ data->req.bytecount += nwrite; - ++data->req.bodywrites; +#ifdef USE_HYPER + data->req.bodywritten = TRUE; +#endif result = Curl_pgrsSetDownloadCounter(data, data->req.bytecount); if(result) return result; @@ -333,7 +348,7 @@ static CURLcode cw_download_write(struct Curl_easy *data, } static const struct Curl_cwtype cw_download = { - "download", + "protocol", NULL, Curl_cwriter_def_init, cw_download_write, @@ -499,10 +514,22 @@ void Curl_cwriter_remove_by_name(struct Curl_easy *data, } } +bool Curl_cwriter_is_paused(struct Curl_easy *data) +{ + return Curl_cw_out_is_paused(data); +} + +CURLcode Curl_cwriter_unpause(struct Curl_easy *data) +{ + return Curl_cw_out_unpause(data); +} + CURLcode Curl_creader_read(struct Curl_easy *data, struct Curl_creader *reader, char *buf, size_t blen, size_t *nread, bool *eos) { + *nread = 0; + *eos = FALSE; if(!reader) return CURLE_READ_ERROR; return reader->crt->do_read(data, reader, buf, blen, nread, eos); @@ -579,6 +606,14 @@ CURLcode Curl_creader_def_unpause(struct Curl_easy *data, return CURLE_OK; } +bool Curl_creader_def_is_paused(struct Curl_easy *data, + struct Curl_creader *reader) +{ + (void)data; + (void)reader; + return FALSE; +} + void Curl_creader_def_done(struct Curl_easy *data, struct Curl_creader *reader, int premature) { @@ -597,6 +632,7 @@ struct cr_in_ctx { BIT(seen_eos); BIT(errored); BIT(has_used_cb); + BIT(is_paused); }; static CURLcode cr_in_init(struct Curl_easy *data, struct Curl_creader *reader) @@ -619,6 +655,8 @@ static CURLcode cr_in_read(struct Curl_easy *data, struct cr_in_ctx *ctx = reader->ctx; size_t nread; + ctx->is_paused = FALSE; + /* Once we have errored, we will return the same error forever */ if(ctx->errored) { *pnread = 0; @@ -649,7 +687,7 @@ static CURLcode cr_in_read(struct Curl_easy *data, switch(nread) { case 0: if((ctx->total_len >= 0) && (ctx->read_len < ctx->total_len)) { - failf(data, "client read function EOF fail, only " + failf(data, "client read function EOF fail, " "only %"CURL_FORMAT_CURL_OFF_T"/%"CURL_FORMAT_CURL_OFF_T " of needed bytes read", ctx->read_len, ctx->total_len); return CURLE_READ_ERROR; @@ -670,12 +708,14 @@ static CURLcode cr_in_read(struct Curl_easy *data, case CURL_READFUNC_PAUSE: if(data->conn->handler->flags & PROTOPT_NONETWORK) { /* protocols that work without network cannot be paused. This is - actually only FILE:// just now, and it can't pause since the transfer - isn't done using the "normal" procedure. */ + actually only FILE:// just now, and it cannot pause since the transfer + is not done using the "normal" procedure. */ failf(data, "Read callback asked for PAUSE when not supported"); return CURLE_READ_ERROR; } /* CURL_READFUNC_PAUSE pauses read callbacks that feed socket writes */ + CURL_TRC_READ(data, "cr_in_read, callback returned CURL_READFUNC_PAUSE"); + ctx->is_paused = TRUE; data->req.keepon |= KEEP_SEND_PAUSE; /* mark socket send as paused */ *pnread = 0; *peos = FALSE; @@ -698,9 +738,10 @@ static CURLcode cr_in_read(struct Curl_easy *data, *peos = ctx->seen_eos; break; } - DEBUGF(infof(data, "cr_in_read(len=%zu, total=%"CURL_FORMAT_CURL_OFF_T - ", read=%"CURL_FORMAT_CURL_OFF_T") -> %d, %zu, %d", - blen, ctx->total_len, ctx->read_len, CURLE_OK, *pnread, *peos)); + CURL_TRC_READ(data, "cr_in_read(len=%zu, total=%"CURL_FORMAT_CURL_OFF_T + ", read=%"CURL_FORMAT_CURL_OFF_T") -> %d, nread=%zu, eos=%d", + blen, ctx->total_len, ctx->read_len, CURLE_OK, + *pnread, *peos); return CURLE_OK; } @@ -745,7 +786,7 @@ static CURLcode cr_in_resume_from(struct Curl_easy *data, failf(data, "Could not seek stream"); return CURLE_READ_ERROR; } - /* when seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */ + /* when seekerr == CURL_SEEKFUNC_CANTSEEK (cannot seek to offset) */ do { char scratch[4*1024]; size_t readthisamountnow = @@ -779,7 +820,7 @@ static CURLcode cr_in_resume_from(struct Curl_easy *data, return CURLE_PARTIAL_FILE; } } - /* we've passed, proceed as normal */ + /* we have passed, proceed as normal */ return CURLE_OK; } @@ -798,7 +839,7 @@ static CURLcode cr_in_rewind(struct Curl_easy *data, Curl_set_in_callback(data, true); err = (data->set.seek_func)(data->set.seek_client, 0, SEEK_SET); Curl_set_in_callback(data, false); - DEBUGF(infof(data, "cr_in, rewind via set.seek_func -> %d", err)); + CURL_TRC_READ(data, "cr_in, rewind via set.seek_func -> %d", err); if(err) { failf(data, "seek callback returned error %d", (int)err); return CURLE_SEND_FAIL_REWIND; @@ -811,7 +852,7 @@ static CURLcode cr_in_rewind(struct Curl_easy *data, err = (data->set.ioctl_func)(data, CURLIOCMD_RESTARTREAD, data->set.ioctl_client); Curl_set_in_callback(data, false); - DEBUGF(infof(data, "cr_in, rewind via set.ioctl_func -> %d", (int)err)); + CURL_TRC_READ(data, "cr_in, rewind via set.ioctl_func -> %d", (int)err); if(err) { failf(data, "ioctl callback returned error %d", (int)err); return CURLE_SEND_FAIL_REWIND; @@ -823,20 +864,36 @@ static CURLcode cr_in_rewind(struct Curl_easy *data, ourselves with fseek() */ if(data->state.fread_func == (curl_read_callback)fread) { int err = fseek(data->state.in, 0, SEEK_SET); - DEBUGF(infof(data, "cr_in, rewind via fseek -> %d(%d)", - (int)err, (int)errno)); + CURL_TRC_READ(data, "cr_in, rewind via fseek -> %d(%d)", + (int)err, (int)errno); if(-1 != err) /* successful rewind */ return CURLE_OK; } /* no callback set or failure above, makes us fail at once */ - failf(data, "necessary data rewind wasn't possible"); + failf(data, "necessary data rewind was not possible"); return CURLE_SEND_FAIL_REWIND; } return CURLE_OK; } +static CURLcode cr_in_unpause(struct Curl_easy *data, + struct Curl_creader *reader) +{ + struct cr_in_ctx *ctx = reader->ctx; + (void)data; + ctx->is_paused = FALSE; + return CURLE_OK; +} + +static bool cr_in_is_paused(struct Curl_easy *data, + struct Curl_creader *reader) +{ + struct cr_in_ctx *ctx = reader->ctx; + (void)data; + return ctx->is_paused; +} static const struct Curl_crtype cr_in = { "cr-in", @@ -847,7 +904,8 @@ static const struct Curl_crtype cr_in = { cr_in_total_length, cr_in_resume_from, cr_in_rewind, - Curl_creader_def_unpause, + cr_in_unpause, + cr_in_is_paused, Curl_creader_def_done, sizeof(struct cr_in_ctx) }; @@ -945,7 +1003,7 @@ static CURLcode cr_lc_read(struct Curl_easy *data, ctx->eos = TRUE; *pnread = nread; *peos = ctx->eos; - return CURLE_OK; + goto out; } /* at least one \n needs conversion to '\r\n', place into ctx->buf */ @@ -960,13 +1018,19 @@ static CURLcode cr_lc_read(struct Curl_easy *data, return result; start = i + 1; if(!data->set.crlf && (data->state.infilesize != -1)) { - /* we're here only because FTP is in ASCII mode... + /* we are here only because FTP is in ASCII mode... bump infilesize for the LF we just added */ data->state.infilesize++; /* comment: this might work for FTP, but in HTTP we could not change * the content length after having started the request... */ } } + + if(start < i) { /* leftover */ + result = Curl_bufq_cwrite(&ctx->buf, buf + start, i - start, &n); + if(result) + return result; + } } DEBUGASSERT(!Curl_bufq_is_empty(&ctx->buf)); @@ -977,6 +1041,10 @@ static CURLcode cr_lc_read(struct Curl_easy *data, ctx->eos = TRUE; *peos = TRUE; } + +out: + CURL_TRC_READ(data, "cr_lc_read(len=%zu) -> %d, nread=%zu, eos=%d", + blen, result, *pnread, *peos); return result; } @@ -999,6 +1067,7 @@ static const struct Curl_crtype cr_lc = { Curl_creader_def_resume_from, Curl_creader_def_rewind, Curl_creader_def_unpause, + Curl_creader_def_is_paused, Curl_creader_def_done, sizeof(struct cr_lc_ctx) }; @@ -1054,12 +1123,16 @@ CURLcode Curl_creader_set_fread(struct Curl_easy *data, curl_off_t len) result = Curl_creader_create(&r, data, &cr_in, CURL_CR_CLIENT); if(result) - return result; + goto out; ctx = r->ctx; ctx->total_len = len; cl_reset_reader(data); - return do_init_reader_stack(data, r); + result = do_init_reader_stack(data, r); +out: + CURL_TRC_READ(data, "add fread reader, len=%"CURL_FORMAT_CURL_OFF_T + " -> %d", len, result); + return result; } CURLcode Curl_creader_add(struct Curl_easy *data, @@ -1117,6 +1190,8 @@ CURLcode Curl_client_read(struct Curl_easy *data, char *buf, size_t blen, result = Curl_creader_read(data, data->req.reader_stack, buf, blen, nread, eos); + CURL_TRC_READ(data, "client_read(len=%zu) -> %d, nread=%zu, eos=%d", + blen, result, *nread, *eos); return result; } @@ -1124,8 +1199,10 @@ bool Curl_creader_needs_rewind(struct Curl_easy *data) { struct Curl_creader *reader = data->req.reader_stack; while(reader) { - if(reader->crt->needs_rewind(data, reader)) + if(reader->crt->needs_rewind(data, reader)) { + CURL_TRC_READ(data, "client reader needs rewind before next request"); return TRUE; + } reader = reader->next; } return FALSE; @@ -1164,6 +1241,7 @@ static const struct Curl_crtype cr_null = { Curl_creader_def_resume_from, Curl_creader_def_rewind, Curl_creader_def_unpause, + Curl_creader_def_is_paused, Curl_creader_def_done, sizeof(struct Curl_creader) }; @@ -1209,6 +1287,8 @@ static CURLcode cr_buf_read(struct Curl_easy *data, ctx->index += nread; *peos = (ctx->index == ctx->blen); } + CURL_TRC_READ(data, "cr_buf_read(len=%zu) -> 0, nread=%zu, eos=%d", + blen, *pnread, *peos); return CURLE_OK; } @@ -1261,6 +1341,7 @@ static const struct Curl_crtype cr_buf = { cr_buf_resume_from, Curl_creader_def_rewind, Curl_creader_def_unpause, + Curl_creader_def_is_paused, Curl_creader_def_done, sizeof(struct cr_buf_ctx) }; @@ -1274,14 +1355,17 @@ CURLcode Curl_creader_set_buf(struct Curl_easy *data, result = Curl_creader_create(&r, data, &cr_buf, CURL_CR_CLIENT); if(result) - return result; + goto out; ctx = r->ctx; ctx->buf = buf; ctx->blen = blen; ctx->index = 0; cl_reset_reader(data); - return do_init_reader_stack(data, r); + result = do_init_reader_stack(data, r); +out: + CURL_TRC_READ(data, "add buf reader, len=%zu -> %d", blen, result); + return result; } curl_off_t Curl_creader_total_length(struct Curl_easy *data) @@ -1320,6 +1404,18 @@ CURLcode Curl_creader_unpause(struct Curl_easy *data) return result; } +bool Curl_creader_is_paused(struct Curl_easy *data) +{ + struct Curl_creader *reader = data->req.reader_stack; + + while(reader) { + if(reader->crt->is_paused(data, reader)) + return TRUE; + reader = reader->next; + } + return FALSE; +} + void Curl_creader_done(struct Curl_easy *data, int premature) { struct Curl_creader *reader = data->req.reader_stack; diff --git a/lib/sendf.h b/lib/sendf.h index d736ce44a..dc1b82edf 100644 --- a/lib/sendf.h +++ b/lib/sendf.h @@ -180,6 +180,16 @@ CURLcode Curl_cwriter_write(struct Curl_easy *data, struct Curl_cwriter *writer, int type, const char *buf, size_t nbytes); +/** + * Return TRUE iff client writer is paused. + */ +bool Curl_cwriter_is_paused(struct Curl_easy *data); + +/** + * Unpause client writer and flush any buffered date to the client. + */ +CURLcode Curl_cwriter_unpause(struct Curl_easy *data); + /** * Default implementations for do_init, do_write, do_close that * do nothing and pass the data through. @@ -208,6 +218,7 @@ struct Curl_crtype { struct Curl_creader *reader, curl_off_t offset); CURLcode (*rewind)(struct Curl_easy *data, struct Curl_creader *reader); CURLcode (*unpause)(struct Curl_easy *data, struct Curl_creader *reader); + bool (*is_paused)(struct Curl_easy *data, struct Curl_creader *reader); void (*done)(struct Curl_easy *data, struct Curl_creader *reader, int premature); size_t creader_size; /* sizeof() allocated struct Curl_creader */ @@ -258,6 +269,8 @@ CURLcode Curl_creader_def_rewind(struct Curl_easy *data, struct Curl_creader *reader); CURLcode Curl_creader_def_unpause(struct Curl_easy *data, struct Curl_creader *reader); +bool Curl_creader_def_is_paused(struct Curl_easy *data, + struct Curl_creader *reader); void Curl_creader_def_done(struct Curl_easy *data, struct Curl_creader *reader, int premature); @@ -302,7 +315,7 @@ CURLcode Curl_creader_set(struct Curl_easy *data, struct Curl_creader *r); /** * Read at most `blen` bytes at `buf` from the client. - * @param date the transfer to read client bytes for + * @param data the transfer to read client bytes for * @param buf the memory location to read to * @param blen the amount of memory at `buf` * @param nread on return the number of bytes read into `buf` @@ -350,8 +363,8 @@ curl_off_t Curl_creader_client_length(struct Curl_easy *data); * Ask the installed reader at phase CURL_CR_CLIENT to start * reading from the given offset. On success, this will reduce * the `total_length()` by the amount. - * @param date the transfer to read client bytes for - * param offset the offset where to start reads from, negative + * @param data the transfer to read client bytes for + * @param offset the offset where to start reads from, negative * values will be ignored. * @return CURLE_OK if offset could be set * CURLE_READ_ERROR if not supported by reader or seek/read failed @@ -365,6 +378,11 @@ CURLcode Curl_creader_resume_from(struct Curl_easy *data, curl_off_t offset); */ CURLcode Curl_creader_unpause(struct Curl_easy *data); +/** + * Return TRUE iff any of the installed readers is paused. + */ +bool Curl_creader_is_paused(struct Curl_easy *data); + /** * Tell all client readers that they are done. */ diff --git a/lib/setopt.c b/lib/setopt.c index 8a5a5d7c3..7d35651d1 100644 --- a/lib/setopt.c +++ b/lib/setopt.c @@ -52,6 +52,8 @@ #include "hsts.h" #include "tftp.h" #include "strdup.h" +#include "escape.h" + /* The last 3 #include files should be in this order */ #include "curl_printf.h" #include "curl_memory.h" @@ -109,49 +111,72 @@ CURLcode Curl_setblobopt(struct curl_blob **blobp, static CURLcode setstropt_userpwd(char *option, char **userp, char **passwdp) { - CURLcode result = CURLE_OK; char *user = NULL; char *passwd = NULL; + DEBUGASSERT(userp); + DEBUGASSERT(passwdp); + /* Parse the login details if specified. It not then we treat NULL as a hint to clear the existing data */ if(option) { size_t len = strlen(option); + CURLcode result; 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); + result = Curl_parse_login_details(option, len, &user, &passwd, NULL); + if(result) + return result; } - if(!result) { - /* Store the username part of option if required */ - if(userp) { - if(!user && option && option[0] == ':') { - /* Allocate an empty string instead of returning NULL as user name */ - user = strdup(""); - if(!user) - result = CURLE_OUT_OF_MEMORY; - } + free(*userp); + *userp = user; - Curl_safefree(*userp); - *userp = user; - } + free(*passwdp); + *passwdp = passwd; - /* Store the password part of option if required */ - if(passwdp) { - Curl_safefree(*passwdp); - *passwdp = passwd; - } - } + return CURLE_OK; +} - return result; +static CURLcode setstropt_interface( + char *option, char **devp, char **ifacep, char **hostp) +{ + char *dev = NULL; + char *iface = NULL; + char *host = NULL; + size_t len; + CURLcode result; + + DEBUGASSERT(devp); + DEBUGASSERT(ifacep); + DEBUGASSERT(hostp); + + /* Parse the interface details */ + if(!option || !*option) + return CURLE_BAD_FUNCTION_ARGUMENT; + len = strlen(option); + if(len > 255) + return CURLE_BAD_FUNCTION_ARGUMENT; + + result = Curl_parse_interface(option, len, &dev, &iface, &host); + if(result) + return result; + + free(*devp); + *devp = dev; + + free(*ifacep); + *ifacep = iface; + + free(*hostp); + *hostp = host; + + return CURLE_OK; } #define C_SSLVERSION_VALUE(x) (x & 0xffff) -#define C_SSLVERSION_MAX_VALUE(x) (x & 0xffff0000) +#define C_SSLVERSION_MAX_VALUE(x) ((unsigned long)x & 0xffff0000) static CURLcode protocol2num(const char *str, curl_prot_t *val) { @@ -214,13 +239,17 @@ 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; + if(Curl_ssl_supports(data, SSLSUPP_CA_CACHE)) { + 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; + data->set.general_ssl.ca_cache_timeout = (int)arg; + } + else + return CURLE_NOT_BUILT_IN; break; case CURLOPT_DNS_USE_GLOBAL_CACHE: /* deprecated */ @@ -323,7 +352,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) break; case CURLOPT_FAILONERROR: /* - * Don't output the >=400 error code HTML-page, but instead only + * Do not output the >=400 error code HTML-page, but instead only * return error. */ data->set.http_fail_on_error = (0 != va_arg(param, long)); @@ -472,7 +501,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) arg = va_arg(param, long); version = C_SSLVERSION_VALUE(arg); - version_max = C_SSLVERSION_MAX_VALUE(arg); + version_max = (long)C_SSLVERSION_MAX_VALUE(arg); if(version < CURL_SSLVERSION_DEFAULT || version == CURL_SSLVERSION_SSLv2 || @@ -518,11 +547,12 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) data. */ char *p = Curl_memdup0(argptr, (size_t)data->set.postfieldsize); - (void) Curl_setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL); if(!p) result = CURLE_OUT_OF_MEMORY; - else + else { + free(data->set.str[STRING_COPYPOSTFIELDS]); data->set.str[STRING_COPYPOSTFIELDS] = p; + } } } @@ -536,7 +566,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) */ data->set.postfields = va_arg(param, void *); /* Release old copied data. */ - (void) Curl_setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL); + Curl_safefree(data->set.str[STRING_COPYPOSTFIELDS]); data->set.method = HTTPREQ_POST; break; @@ -552,7 +582,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) if(data->set.postfieldsize < bigsize && data->set.postfields == data->set.str[STRING_COPYPOSTFIELDS]) { /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */ - (void) Curl_setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL); + Curl_safefree(data->set.str[STRING_COPYPOSTFIELDS]); data->set.postfields = NULL; } @@ -571,7 +601,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) if(data->set.postfieldsize < bigsize && data->set.postfields == data->set.str[STRING_COPYPOSTFIELDS]) { /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */ - (void) Curl_setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL); + Curl_safefree(data->set.str[STRING_COPYPOSTFIELDS]); data->set.postfields = NULL; } @@ -592,7 +622,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) * * If the encoding is set to "" we use an Accept-Encoding header that * encompasses all the encodings we support. - * If the encoding is set to NULL we don't send an Accept-Encoding header + * If the encoding is set to NULL we do not send an Accept-Encoding header * and ignore an received Content-Encoding header. * */ @@ -656,7 +686,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) case CURLOPT_POST: /* Does this option serve a purpose anymore? Yes it does, when - CURLOPT_POSTFIELDS isn't used and the POST data is read off the + CURLOPT_POSTFIELDS is not used and the POST data is read off the callback! */ if(va_arg(param, long)) { data->set.method = HTTPREQ_POST; @@ -759,7 +789,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) /* general protection against mistakes and abuse */ if(strlen(argptr) > CURL_MAX_INPUT_LENGTH) return CURLE_BAD_FUNCTION_ARGUMENT; - /* append the cookie file name to the list of file names, and deal with + /* append the cookie filename to the list of filenames, and deal with them later */ cl = curl_slist_append(data->state.cookielist, argptr); if(!cl) { @@ -775,7 +805,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) data->state.cookielist = NULL; if(!data->share || !data->share->cookies) { - /* throw away all existing cookies if this isn't a shared cookie + /* throw away all existing cookies if this is not a shared cookie container */ Curl_cookie_clearall(data->cookies); Curl_cookie_cleanup(data->cookies); @@ -787,24 +817,22 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) case CURLOPT_COOKIEJAR: /* - * Set cookie file name to dump all cookies to when we're done. + * Set cookie filename to dump all cookies to when we are done. */ - { - struct CookieInfo *newcookies; result = Curl_setstropt(&data->set.str[STRING_COOKIEJAR], va_arg(param, char *)); - - /* - * Activate the cookie parser. This may or may not already - * have been made. - */ - newcookies = Curl_cookie_init(data, NULL, data->cookies, - data->set.cookiesession); - if(!newcookies) - result = CURLE_OUT_OF_MEMORY; - data->cookies = newcookies; - } - break; + if(!result) { + /* + * Activate the cookie parser. This may or may not already + * have been made. + */ + struct CookieInfo *newcookies = + Curl_cookie_init(data, NULL, data->cookies, data->set.cookiesession); + if(!newcookies) + result = CURLE_OUT_OF_MEMORY; + data->cookies = newcookies; + } + break; case CURLOPT_COOKIESESSION: /* @@ -913,7 +941,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) /* accepted */ break; #endif -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 case CURL_HTTP_VERSION_3: case CURL_HTTP_VERSION_3ONLY: /* accepted */ @@ -940,7 +968,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) break; case CURLOPT_HTTP09_ALLOWED: - arg = va_arg(param, unsigned long); + arg = (long)va_arg(param, unsigned long); if(arg > 1L) return CURLE_BAD_FUNCTION_ARGUMENT; #ifdef USE_HYPER @@ -1019,12 +1047,9 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) auth &= ~CURLAUTH_DIGEST_IE; /* unset ie digest bit */ } - /* switch off bits we can't support */ + /* switch off bits we cannot support */ #ifndef USE_NTLM auth &= ~CURLAUTH_NTLM; /* no NTLM support */ - auth &= ~CURLAUTH_NTLM_WB; /* no NTLM_WB support */ -#elif !defined(NTLM_WB_ENABLED) - auth &= ~CURLAUTH_NTLM_WB; /* no NTLM_WB support */ #endif #ifndef USE_SPNEGO auth &= ~CURLAUTH_NEGOTIATE; /* no Negotiate (SPNEGO) auth without @@ -1054,7 +1079,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) result = Curl_setstropt(&data->set.str[STRING_CUSTOMREQUEST], va_arg(param, char *)); - /* we don't set + /* we do not set data->set.method = HTTPREQ_CUSTOM; here, we continue as if we were using the already set type and this just changes the actual request keyword */ @@ -1100,12 +1125,9 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) auth |= CURLAUTH_DIGEST; /* set standard digest bit */ auth &= ~CURLAUTH_DIGEST_IE; /* unset ie digest bit */ } - /* switch off bits we can't support */ + /* switch off bits we cannot support */ #ifndef USE_NTLM auth &= ~CURLAUTH_NTLM; /* no NTLM support */ - auth &= ~CURLAUTH_NTLM_WB; /* no NTLM_WB support */ -#elif !defined(NTLM_WB_ENABLED) - auth &= ~CURLAUTH_NTLM_WB; /* no NTLM_WB support */ #endif #ifndef USE_SPNEGO auth &= ~CURLAUTH_NEGOTIATE; /* no Negotiate (SPNEGO) auth without @@ -1133,7 +1155,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) * Set proxy server:port to use as proxy. * * If the proxy is set to "" (and CURLOPT_SOCKS_PROXY is set to "" or NULL) - * we explicitly say that we don't want to use a proxy + * we explicitly say that we do not want to use a proxy * (even though there might be environment variables saying so). * * Setting it to NULL, means no proxy but allows the environment variables @@ -1147,7 +1169,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) /* * Set proxy server:port to use as SOCKS proxy. * - * If the proxy is set to "" or NULL we explicitly say that we don't want + * If the proxy is set to "" or NULL we explicitly say that we do not want * to use the socks proxy. */ result = Curl_setstropt(&data->set.str[STRING_PRE_PROXY], @@ -1318,6 +1340,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) return CURLE_BAD_FUNCTION_ARGUMENT; data->set.ftpsslauth = (unsigned char)(curl_ftpauth)arg; break; +#ifdef HAVE_GSSAPI case CURLOPT_KRBLEVEL: /* * A string that defines the kerberos security level. @@ -1327,6 +1350,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) data->set.krb = !!(data->set.str[STRING_KRB_LEVEL]); break; #endif +#endif #if !defined(CURL_DISABLE_FTP) || defined(USE_SSH) case CURLOPT_FTP_CREATE_MISSING_DIRS: /* @@ -1516,7 +1540,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) case CURLOPT_USERNAME: /* - * authentication user name to use in the operation + * authentication username to use in the operation */ result = Curl_setstropt(&data->set.str[STRING_USERNAME], va_arg(param, char *)); @@ -1557,7 +1581,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) * Prefix the HOST with dash (-) to _remove_ the entry from the cache. * * This API can remove any entry from the DNS cache, but only entries - * that aren't actually in use right now will be pruned immediately. + * that are not actually in use right now will be pruned immediately. */ data->set.resolve = va_arg(param, struct curl_slist *); data->state.resolve = data->set.resolve; @@ -1593,17 +1617,28 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) break; #ifndef CURL_DISABLE_PROXY - case CURLOPT_PROXYUSERPWD: + case CURLOPT_PROXYUSERPWD: { /* * user:password needed to use the proxy */ - result = setstropt_userpwd(va_arg(param, char *), - &data->set.str[STRING_PROXYUSERNAME], - &data->set.str[STRING_PROXYPASSWORD]); + char *u = NULL; + char *p = NULL; + result = setstropt_userpwd(va_arg(param, char *), &u, &p); + + /* URL decode the components */ + if(!result && u) + result = Curl_urldecode(u, 0, &data->set.str[STRING_PROXYUSERNAME], NULL, + REJECT_ZERO); + if(!result && p) + result = Curl_urldecode(p, 0, &data->set.str[STRING_PROXYPASSWORD], NULL, + REJECT_ZERO); + free(u); + free(p); + } break; case CURLOPT_PROXYUSERNAME: /* - * authentication user name to use in the operation + * authentication username to use in the operation */ result = Curl_setstropt(&data->set.str[STRING_PROXYUSERNAME], va_arg(param, char *)); @@ -1655,7 +1690,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) */ data->set.fdebug = va_arg(param, curl_debug_callback); /* - * if the callback provided is NULL, it'll use the default callback + * if the callback provided is NULL, it will use the default callback */ break; case CURLOPT_DEBUGDATA: @@ -1728,7 +1763,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) break; case CURLOPT_SSLCERT: /* - * String that holds file name of the SSL certificate to use + * String that holds filename of the SSL certificate to use */ result = Curl_setstropt(&data->set.str[STRING_CERT], va_arg(param, char *)); @@ -1743,7 +1778,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #ifndef CURL_DISABLE_PROXY case CURLOPT_PROXY_SSLCERT: /* - * String that holds file name of the SSL certificate to use for proxy + * String that holds filename of the SSL certificate to use for proxy */ result = Curl_setstropt(&data->set.str[STRING_CERT_PROXY], va_arg(param, char *)); @@ -1774,7 +1809,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #endif case CURLOPT_SSLKEY: /* - * String that holds file name of the SSL key to use + * String that holds filename of the SSL key to use */ result = Curl_setstropt(&data->set.str[STRING_KEY], va_arg(param, char *)); @@ -1789,7 +1824,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #ifndef CURL_DISABLE_PROXY case CURLOPT_PROXY_SSLKEY: /* - * String that holds file name of the SSL key to use for proxy + * String that holds filename of the SSL key to use for proxy */ result = Curl_setstropt(&data->set.str[STRING_KEY_PROXY], va_arg(param, char *)); @@ -1851,7 +1886,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) /* * flag to set engine as default. */ - Curl_setstropt(&data->set.str[STRING_SSL_ENGINE], NULL); + Curl_safefree(data->set.str[STRING_SSL_ENGINE]); result = Curl_ssl_set_engine_default(data); break; case CURLOPT_CRLF: @@ -1882,8 +1917,10 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) * Set what interface or address/hostname to bind the socket to when * performing an operation and thus what from-IP your connection will use. */ - result = Curl_setstropt(&data->set.str[STRING_DEVICE], - va_arg(param, char *)); + result = setstropt_interface(va_arg(param, char *), + &data->set.str[STRING_DEVICE], + &data->set.str[STRING_INTERFACE], + &data->set.str[STRING_BINDHOST]); break; #ifndef CURL_DISABLE_BINDLOCAL case CURLOPT_LOCALPORT: @@ -1944,12 +1981,12 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #endif case CURLOPT_SSL_VERIFYHOST: /* - * Enable verification of the host name in the peer certificate + * Enable verification of the hostname in the peer certificate */ arg = va_arg(param, long); /* Obviously people are not reading documentation and too many thought - this argument took a boolean when it wasn't and misused it. + this argument took a boolean when it was not and misused it. Treat 1 and 2 the same */ data->set.ssl.primary.verifyhost = !!(arg & 3); @@ -1959,7 +1996,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #ifndef CURL_DISABLE_DOH case CURLOPT_DOH_SSL_VERIFYHOST: /* - * Enable verification of the host name in the peer certificate for DoH + * Enable verification of the hostname in the peer certificate for DoH */ arg = va_arg(param, long); @@ -1970,7 +2007,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #ifndef CURL_DISABLE_PROXY case CURLOPT_PROXY_SSL_VERIFYHOST: /* - * Enable verification of the host name in the peer certificate for proxy + * Enable verification of the hostname in the peer certificate for proxy */ arg = va_arg(param, long); @@ -2051,7 +2088,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) case CURLOPT_PINNEDPUBLICKEY: /* * Set pinned public key for SSL connection. - * Specify file name of the public key in DER format. + * Specify filename of the public key in DER format. */ #ifdef USE_SSL if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY)) @@ -2065,7 +2102,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) case CURLOPT_PROXY_PINNEDPUBLICKEY: /* * Set pinned public key for SSL connection. - * Specify file name of the public key in DER format. + * Specify filename of the public key in DER format. */ #ifdef USE_SSL if(Curl_ssl_supports(data, SSLSUPP_PINNEDPUBKEY)) @@ -2078,7 +2115,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #endif case CURLOPT_CAINFO: /* - * Set CA info for SSL connection. Specify file name of the CA certificate + * Set CA info for SSL connection. Specify filename of the CA certificate */ result = Curl_setstropt(&data->set.str[STRING_SSL_CAFILE], va_arg(param, char *)); @@ -2100,7 +2137,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #ifndef CURL_DISABLE_PROXY case CURLOPT_PROXY_CAINFO: /* - * Set CA info SSL connection for proxy. Specify file name of the + * Set CA info SSL connection for proxy. Specify filename of the * CA certificate */ result = Curl_setstropt(&data->set.str[STRING_SSL_CAFILE_PROXY], @@ -2153,7 +2190,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #endif case CURLOPT_CRLFILE: /* - * Set CRL file info for SSL connection. Specify file name of the CRL + * Set CRL file info for SSL connection. Specify filename of the CRL * to check certificates revocation */ result = Curl_setstropt(&data->set.str[STRING_SSL_CRLFILE], @@ -2162,7 +2199,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) #ifndef CURL_DISABLE_PROXY case CURLOPT_PROXY_CRLFILE: /* - * Set CRL file info for SSL connection for proxy. Specify file name of the + * Set CRL file info for SSL connection for proxy. Specify filename of the * CRL to check certificates revocation */ result = Curl_setstropt(&data->set.str[STRING_SSL_CRLFILE_PROXY], @@ -2212,7 +2249,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) case CURLOPT_BUFFERSIZE: /* * The application kindly asks for a differently sized receive buffer. - * If it seems reasonable, we'll use it. + * If it seems reasonable, we will use it. */ arg = va_arg(param, long); @@ -2315,7 +2352,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) Curl_hsts_cleanup(&data->hsts); data->hsts = data->share->hsts; } -#endif /* CURL_DISABLE_HTTP */ +#endif #ifdef USE_SSL if(data->share->sslsession) { data->set.general_ssl.max_ssl_sessions = data->share->max_ssl_sessions; @@ -2500,16 +2537,17 @@ 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)); + data->set.ssl.primary.cache_session = (0 != va_arg(param, long)); #ifndef CURL_DISABLE_PROXY - data->set.proxy_ssl.primary.sessionid = data->set.ssl.primary.sessionid; + data->set.proxy_ssl.primary.cache_session = + data->set.ssl.primary.cache_session; #endif break; #ifdef USE_SSH /* we only include SSH options if explicitly built to support SSH */ case CURLOPT_SSH_AUTH_TYPES: - data->set.ssh_auth_types = (unsigned int)va_arg(param, long); + data->set.ssh_auth_types = (int)va_arg(param, long); break; case CURLOPT_SSH_PUBLIC_KEYFILE: @@ -2538,7 +2576,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) case CURLOPT_SSH_KNOWNHOSTS: /* - * Store the file name to read known hosts from. + * Store the filename to read known hosts from. */ result = Curl_setstropt(&data->set.str[STRING_SSH_KNOWNHOSTS], va_arg(param, char *)); @@ -2592,7 +2630,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) data->set.http_te_skip = (0 == va_arg(param, long)); break; #else - return CURLE_NOT_BUILT_IN; /* hyper doesn't support */ + return CURLE_NOT_BUILT_IN; /* hyper does not support */ #endif case CURLOPT_HTTP_CONTENT_DECODING: @@ -2625,12 +2663,12 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) break; #endif -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case CURLOPT_ADDRESS_SCOPE: /* * Use this scope id when using IPv6 * We always get longs when passed plain numericals so we should check - * that the value fits into an unsigned 32 bit integer. + * that the value fits into an unsigned 32-bit integer. */ uarg = va_arg(param, unsigned long); #if SIZEOF_LONG > 4 @@ -2673,7 +2711,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) } case CURLOPT_DEFAULT_PROTOCOL: - /* Set the protocol to use when the URL doesn't include any protocol */ + /* Set the protocol to use when the URL does not include any protocol */ result = Curl_setstropt(&data->set.str[STRING_DEFAULT_PROTOCOL], va_arg(param, char *)); break; @@ -2923,6 +2961,14 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) arg = INT_MAX; data->set.tcp_keepintvl = (int)arg; break; + case CURLOPT_TCP_KEEPCNT: + arg = va_arg(param, long); + if(arg < 0) + return CURLE_BAD_FUNCTION_ARGUMENT; + else if(arg > INT_MAX) + arg = INT_MAX; + data->set.tcp_keepcnt = (int)arg; + break; case CURLOPT_TCP_FASTOPEN: #if defined(CONNECT_DATA_IDEMPOTENT) || defined(MSG_FASTOPEN) || \ defined(TCP_FASTOPEN_CONNECT) @@ -3054,7 +3100,7 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) 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 + /* this needs to build a list of filenames 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); @@ -3132,6 +3178,49 @@ CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list param) data->set.ws_raw_mode = raw; break; } +#endif +#ifdef USE_ECH + case CURLOPT_ECH: { + size_t plen = 0; + + argptr = va_arg(param, char *); + if(!argptr) { + data->set.tls_ech = CURLECH_DISABLE; + result = CURLE_BAD_FUNCTION_ARGUMENT; + return result; + } + plen = strlen(argptr); + if(plen > CURL_MAX_INPUT_LENGTH) { + data->set.tls_ech = CURLECH_DISABLE; + result = CURLE_BAD_FUNCTION_ARGUMENT; + return result; + } + /* set tls_ech flag value, preserving CLA_CFG bit */ + if(plen == 5 && !strcmp(argptr, "false")) + data->set.tls_ech = CURLECH_DISABLE + | (data->set.tls_ech & CURLECH_CLA_CFG); + else if(plen == 6 && !strcmp(argptr, "grease")) + data->set.tls_ech = CURLECH_GREASE + | (data->set.tls_ech & CURLECH_CLA_CFG); + else if(plen == 4 && !strcmp(argptr, "true")) + data->set.tls_ech = CURLECH_ENABLE + | (data->set.tls_ech & CURLECH_CLA_CFG); + else if(plen == 4 && !strcmp(argptr, "hard")) + data->set.tls_ech = CURLECH_HARD + | (data->set.tls_ech & CURLECH_CLA_CFG); + else if(plen > 5 && !strncmp(argptr, "ecl:", 4)) { + result = Curl_setstropt(&data->set.str[STRING_ECH_CONFIG], argptr + 4); + if(result) + return result; + data->set.tls_ech |= CURLECH_CLA_CFG; + } + else if(plen > 4 && !strncmp(argptr, "pn:", 3)) { + result = Curl_setstropt(&data->set.str[STRING_ECH_PUBLIC], argptr + 3); + if(result) + return result; + } + break; + } #endif case CURLOPT_QUICK_EXIT: data->set.quick_exit = (0 != va_arg(param, long)) ? 1L:0L; diff --git a/lib/setopt.h b/lib/setopt.h index 3c14a05e3..b0237467b 100644 --- a/lib/setopt.h +++ b/lib/setopt.h @@ -24,9 +24,10 @@ * ***************************************************************************/ -CURLcode Curl_setstropt(char **charp, const char *s); +CURLcode Curl_setstropt(char **charp, const char *s) WARN_UNUSED_RESULT; CURLcode Curl_setblobopt(struct curl_blob **blobp, - const struct curl_blob *blob); -CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list arg); + const struct curl_blob *blob) WARN_UNUSED_RESULT; +CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list arg) + WARN_UNUSED_RESULT; #endif /* HEADER_CURL_SETOPT_H */ diff --git a/lib/setup-os400.h b/lib/setup-os400.h index 53e91777e..ef7baca67 100644 --- a/lib/setup-os400.h +++ b/lib/setup-os400.h @@ -38,6 +38,15 @@ typedef unsigned long u_int32_t; #define isatty(fd) 0 +/* Workaround bug in IBM QADRT runtime library: + * function puts() does not output the implicit trailing newline. + */ + +#include /* Be sure it is loaded. */ +#undef puts +#define puts(s) (fputs((s), stdout) == EOF? EOF: putchar('\n')) + + /* System API wrapper prototypes & definitions to support ASCII parameters. */ #include @@ -46,6 +55,8 @@ typedef unsigned long u_int32_t; #include #include +#ifdef BUILDING_LIBCURL + extern int Curl_getaddrinfo_a(const char *nodename, const char *servname, const struct addrinfo *hints, @@ -141,4 +152,6 @@ extern int Curl_os400_getsockname(int sd, struct sockaddr *addr, int *addrlen); #define inflateEnd Curl_os400_inflateEnd #endif +#endif /* BUILDING_LIBCURL */ + #endif /* HEADER_CURL_SETUP_OS400_H */ diff --git a/lib/setup-vms.h b/lib/setup-vms.h index 645cc1a9c..fc2156028 100644 --- a/lib/setup-vms.h +++ b/lib/setup-vms.h @@ -144,7 +144,7 @@ static struct passwd *vms_getpwuid(uid_t uid) { struct passwd *my_passwd; -/* Hack needed to support 64 bit builds, decc_getpwnam is 32 bit only */ +/* Hack needed to support 64-bit builds, decc_getpwnam is 32-bit only */ #ifdef __DECC # if __INITIAL_POINTER_SIZE __char_ptr32 unix_path; @@ -374,8 +374,8 @@ static struct passwd *vms_getpwuid(uid_t uid) #ifdef HAVE_NETDB_H #include #ifndef AI_NUMERICHOST -#ifdef ENABLE_IPV6 -#undef ENABLE_IPV6 +#ifdef USE_IPV6 +#undef USE_IPV6 #endif #endif #endif diff --git a/lib/setup-win32.h b/lib/setup-win32.h index d7e2e6be1..80efc25f1 100644 --- a/lib/setup-win32.h +++ b/lib/setup-win32.h @@ -65,7 +65,7 @@ * Include header files for windows builds before redefining anything. * Use this preprocessor block only to include or exclude windows.h, * winsock2.h or ws2tcpip.h. Any other windows thing belongs - * to any other further and independent block. Under Cygwin things work + * to any other further and independent block. Under Cygwin things work * just as under linux (e.g. ) and the winsock headers should * never be included when __CYGWIN__ is defined. */ @@ -78,7 +78,7 @@ # error "_UNICODE is defined but UNICODE is not defined" # endif /* - * Don't include unneeded stuff in Windows headers to avoid compiler + * Do not include unneeded stuff in Windows headers to avoid compiler * warnings and macro clashes. * Make sure to define this macro before including any Windows headers. */ diff --git a/lib/sha256.c b/lib/sha256.c index 4a02045d2..6ff66f741 100644 --- a/lib/sha256.c +++ b/lib/sha256.c @@ -334,14 +334,14 @@ static const unsigned long K[64] = { #define RORc(x, y) \ (((((unsigned long)(x) & 0xFFFFFFFFUL) >> (unsigned long)((y) & 31)) | \ ((unsigned long)(x) << (unsigned long)(32 - ((y) & 31)))) & 0xFFFFFFFFUL) -#define Ch(x,y,z) (z ^ (x & (y ^ z))) -#define Maj(x,y,z) (((x | y) & z) | (x & y)) -#define S(x, n) RORc((x), (n)) -#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) -#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22)) -#define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25)) -#define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3)) -#define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10)) +#define Sha256_Ch(x,y,z) (z ^ (x & (y ^ z))) +#define Sha256_Maj(x,y,z) (((x | y) & z) | (x & y)) +#define Sha256_S(x, n) RORc((x), (n)) +#define Sha256_R(x, n) (((x)&0xFFFFFFFFUL)>>(n)) +#define Sigma0(x) (Sha256_S(x, 2) ^ Sha256_S(x, 13) ^ Sha256_S(x, 22)) +#define Sigma1(x) (Sha256_S(x, 6) ^ Sha256_S(x, 11) ^ Sha256_S(x, 25)) +#define Gamma0(x) (Sha256_S(x, 7) ^ Sha256_S(x, 18) ^ Sha256_R(x, 3)) +#define Gamma1(x) (Sha256_S(x, 17) ^ Sha256_S(x, 19) ^ Sha256_R(x, 10)) /* Compress 512-bits */ static int sha256_compress(struct sha256_state *md, @@ -364,12 +364,12 @@ static int sha256_compress(struct sha256_state *md, } /* Compress */ -#define RND(a,b,c,d,e,f,g,h,i) \ - do { \ - unsigned long t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \ - unsigned long t1 = Sigma0(a) + Maj(a, b, c); \ - d += t0; \ - h = t0 + t1; \ +#define RND(a,b,c,d,e,f,g,h,i) \ + do { \ + unsigned long t0 = h + Sigma1(e) + Sha256_Ch(e, f, g) + K[i] + W[i]; \ + unsigned long t1 = Sigma0(a) + Sha256_Maj(a, b, c); \ + d += t0; \ + h = t0 + t1; \ } while(0) for(i = 0; i < 64; ++i) { @@ -467,7 +467,7 @@ static int my_sha256_final(unsigned char *out, md->buf[md->curlen++] = (unsigned char)0x80; /* If the length is currently above 56 bytes we append zeros - * then compress. Then we can fall back to padding zeros and length + * then compress. Then we can fall back to padding zeros and length * encoding like normal. */ if(md->curlen > 56) { @@ -542,4 +542,4 @@ const struct HMAC_params Curl_HMAC_SHA256[] = { }; -#endif /* AWS, DIGEST, or libSSH2 */ +#endif /* AWS, DIGEST, or libssh2 */ diff --git a/lib/share.c b/lib/share.c index 8fa5cda00..164aceb87 100644 --- a/lib/share.c +++ b/lib/share.c @@ -26,6 +26,7 @@ #include #include "urldata.h" +#include "connect.h" #include "share.h" #include "psl.h" #include "vtls/vtls.h" @@ -64,7 +65,7 @@ curl_share_setopt(struct Curl_share *share, CURLSHoption option, ...) return CURLSHE_INVALID; if(share->dirty) - /* don't allow setting options while one or more handles are already + /* do not allow setting options while one or more handles are already using this share */ return CURLSHE_IN_USE; @@ -119,7 +120,7 @@ curl_share_setopt(struct Curl_share *share, CURLSHoption option, ...) break; case CURL_LOCK_DATA_CONNECT: - if(Curl_conncache_init(&share->conn_cache, 103)) + if(Curl_conncache_init(&share->conn_cache, NULL, 103)) res = CURLSHE_NOMEM; break; @@ -268,7 +269,7 @@ Curl_share_lock(struct Curl_easy *data, curl_lock_data type, if(share->lockfunc) /* only call this if set! */ share->lockfunc(data, type, accesstype, share->clientdata); } - /* else if we don't share this, pretend successful lock */ + /* else if we do not share this, pretend successful lock */ return CURLSHE_OK; } diff --git a/lib/share.h b/lib/share.h index 632d9198f..f63a6f8fe 100644 --- a/lib/share.h +++ b/lib/share.h @@ -34,7 +34,7 @@ #define CURL_GOOD_SHARE 0x7e117a1e #define GOOD_SHARE_HANDLE(x) ((x) && (x)->magic == CURL_GOOD_SHARE) -/* this struct is libcurl-private, don't export details */ +/* this struct is libcurl-private, do not export details */ struct Curl_share { unsigned int magic; /* CURL_GOOD_SHARE */ unsigned int specifier; diff --git a/lib/sigpipe.h b/lib/sigpipe.h index 9b29403c2..b91a2f513 100644 --- a/lib/sigpipe.h +++ b/lib/sigpipe.h @@ -36,6 +36,11 @@ struct sigpipe_ignore { #define SIGPIPE_VARIABLE(x) struct sigpipe_ignore x +static void sigpipe_init(struct sigpipe_ignore *ig) +{ + memset(ig, 0, sizeof(*ig)); +} + /* * sigpipe_ignore() makes sure we ignore SIGPIPE while running libcurl * internals, and then sigpipe_restore() will restore the situation when we @@ -70,9 +75,20 @@ static void sigpipe_restore(struct sigpipe_ignore *ig) sigaction(SIGPIPE, &ig->old_pipe_act, NULL); } +static void sigpipe_apply(struct Curl_easy *data, + struct sigpipe_ignore *ig) +{ + if(data->set.no_signal != ig->no_signal) { + sigpipe_restore(ig); + sigpipe_ignore(data, ig); + } +} + #else /* for systems without sigaction */ #define sigpipe_ignore(x,y) Curl_nop_stmt +#define sigpipe_apply(x,y) Curl_nop_stmt +#define sigpipe_init(x) Curl_nop_stmt #define sigpipe_restore(x) Curl_nop_stmt #define SIGPIPE_VARIABLE(x) #endif diff --git a/lib/smb.c b/lib/smb.c index 77d34e31c..102662ace 100644 --- a/lib/smb.c +++ b/lib/smb.c @@ -259,7 +259,7 @@ static CURLcode smb_parse_url_path(struct Curl_easy *data, * SMB handler interface */ const struct Curl_handler Curl_handler_smb = { - "SMB", /* scheme */ + "smb", /* scheme */ smb_setup_connection, /* setup_connection */ smb_do, /* do_it */ ZERO_NULL, /* done */ @@ -273,6 +273,7 @@ const struct Curl_handler Curl_handler_smb = { ZERO_NULL, /* perform_getsock */ smb_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_SMB, /* defport */ @@ -286,7 +287,7 @@ const struct Curl_handler Curl_handler_smb = { * SMBS handler interface */ const struct Curl_handler Curl_handler_smbs = { - "SMBS", /* scheme */ + "smbs", /* scheme */ smb_setup_connection, /* setup_connection */ smb_do, /* do_it */ ZERO_NULL, /* done */ @@ -300,6 +301,7 @@ const struct Curl_handler Curl_handler_smbs = { ZERO_NULL, /* perform_getsock */ smb_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_SMBS, /* defport */ @@ -557,7 +559,7 @@ static void smb_format_message(struct Curl_easy *data, struct smb_header *h, h->flags2 = smb_swap16(SMB_FLAGS2_IS_LONG_NAME | SMB_FLAGS2_KNOWS_LONG_NAME); h->uid = smb_swap16(smbc->uid); h->tid = smb_swap16(req->tid); - pid = getpid(); + pid = (unsigned int)getpid(); h->pid_high = smb_swap16((unsigned short)(pid >> 16)); h->pid = smb_swap16((unsigned short) pid); } @@ -1069,7 +1071,7 @@ static CURLcode smb_request_state(struct Curl_easy *data, bool *done) break; case SMB_CLOSE: - /* We don't care if the close failed, proceed to tree disconnect anyway */ + /* We do not care if the close failed, proceed to tree disconnect anyway */ next_state = SMB_TREE_DISCONNECT; break; diff --git a/lib/smtp.c b/lib/smtp.c index 20763c0c8..5ee1b5ea3 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -118,7 +118,7 @@ static CURLcode cr_eob_add(struct Curl_easy *data); */ const struct Curl_handler Curl_handler_smtp = { - "SMTP", /* scheme */ + "smtp", /* scheme */ smtp_setup_connection, /* setup_connection */ smtp_do, /* do_it */ smtp_done, /* done */ @@ -132,6 +132,7 @@ const struct Curl_handler Curl_handler_smtp = { ZERO_NULL, /* perform_getsock */ smtp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_SMTP, /* defport */ @@ -147,7 +148,7 @@ const struct Curl_handler Curl_handler_smtp = { */ const struct Curl_handler Curl_handler_smtps = { - "SMTPS", /* scheme */ + "smtps", /* scheme */ smtp_setup_connection, /* setup_connection */ smtp_do, /* do_it */ smtp_done, /* done */ @@ -161,6 +162,7 @@ const struct Curl_handler Curl_handler_smtps = { ZERO_NULL, /* perform_getsock */ smtp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_SMTPS, /* defport */ @@ -532,16 +534,16 @@ static CURLcode smtp_perform_command(struct Curl_easy *data) if(smtp->rcpt) { /* We notify the server we are sending UTF-8 data if a) it supports the SMTPUTF8 extension and b) The mailbox contains UTF-8 characters, in - either the local address or host name parts. This is regardless of - whether the host name is encoded using IDN ACE */ + either the local address or hostname parts. This is regardless of + whether the hostname is encoded using IDN ACE */ bool utf8 = FALSE; if((!smtp->custom) || (!smtp->custom[0])) { char *address = NULL; struct hostname host = { NULL, NULL, NULL, NULL }; - /* Parse the mailbox to verify into the local address and host name - parts, converting the host name to an IDN A-label if necessary */ + /* Parse the mailbox to verify into the local address and hostname + parts, converting the hostname to an IDN A-label if necessary */ result = smtp_parse_address(smtp->rcpt->data, &address, &host); if(result) @@ -553,7 +555,7 @@ static CURLcode smtp_perform_command(struct Curl_easy *data) ((host.encalloc) || (!Curl_is_ASCII_name(address)) || (!Curl_is_ASCII_name(host.name))); - /* Send the VRFY command (Note: The host name part may be absent when the + /* Send the VRFY command (Note: The hostname part may be absent when the host is a local system) */ result = Curl_pp_sendf(data, &conn->proto.smtpc.pp, "VRFY %s%s%s%s", address, @@ -605,8 +607,8 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data) /* We notify the server we are sending UTF-8 data if a) it supports the SMTPUTF8 extension and b) The mailbox contains UTF-8 characters, in - either the local address or host name parts. This is regardless of - whether the host name is encoded using IDN ACE */ + either the local address or hostname parts. This is regardless of + whether the hostname is encoded using IDN ACE */ bool utf8 = FALSE; /* Calculate the FROM parameter */ @@ -614,8 +616,8 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data) char *address = NULL; struct hostname host = { NULL, NULL, NULL, NULL }; - /* Parse the FROM mailbox into the local address and host name parts, - converting the host name to an IDN A-label if necessary */ + /* Parse the FROM mailbox into the local address and hostname parts, + converting the hostname to an IDN A-label if necessary */ result = smtp_parse_address(data->set.str[STRING_MAIL_FROM], &address, &host); if(result) @@ -633,8 +635,8 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data) Curl_free_idnconverted_hostname(&host); } else - /* An invalid mailbox was provided but we'll simply let the server worry - about that and reply with a 501 error */ + /* An invalid mailbox was provided but we will simply let the server + worry about that and reply with a 501 error */ from = aprintf("<%s>", address); free(address); @@ -654,8 +656,8 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data) char *address = NULL; struct hostname host = { NULL, NULL, NULL, NULL }; - /* Parse the AUTH mailbox into the local address and host name parts, - converting the host name to an IDN A-label if necessary */ + /* Parse the AUTH mailbox into the local address and hostname parts, + converting the hostname to an IDN A-label if necessary */ result = smtp_parse_address(data->set.str[STRING_MAIL_AUTH], &address, &host); if(result) @@ -674,7 +676,7 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data) Curl_free_idnconverted_hostname(&host); } else - /* An invalid mailbox was provided but we'll simply let the server + /* An invalid mailbox was provided but we will simply let the server worry about it */ auth = aprintf("<%s>", address); free(address); @@ -693,7 +695,7 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data) /* Prepare the mime data if some. */ if(data->set.mimepost.kind != MIMEKIND_NONE) { /* Use the whole structure as data. */ - data->set.mimepost.flags &= ~MIME_BODY_ONLY; + data->set.mimepost.flags &= ~(unsigned int)MIME_BODY_ONLY; /* Add external headers and mime version. */ curl_mime_headers(&data->set.mimepost, data->set.headers, 0); @@ -729,7 +731,7 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data) } } - /* If the mailboxes in the FROM and AUTH parameters don't include a UTF-8 + /* If the mailboxes in the FROM and AUTH parameters do not include a UTF-8 based address then quickly scan through the recipient list and check if any there do, as we need to correctly identify our support for SMTPUTF8 in the envelope, as per RFC-6531 sect. 3.4 */ @@ -738,7 +740,7 @@ static CURLcode smtp_perform_mail(struct Curl_easy *data) struct curl_slist *rcpt = smtp->rcpt; while(rcpt && !utf8) { - /* Does the host name contain non-ASCII characters? */ + /* Does the hostname contain non-ASCII characters? */ if(!Curl_is_ASCII_name(rcpt->data)) utf8 = TRUE; @@ -788,8 +790,8 @@ static CURLcode smtp_perform_rcpt_to(struct Curl_easy *data) char *address = NULL; struct hostname host = { NULL, NULL, NULL, NULL }; - /* Parse the recipient mailbox into the local address and host name parts, - converting the host name to an IDN A-label if necessary */ + /* Parse the recipient mailbox into the local address and hostname parts, + converting the hostname to an IDN A-label if necessary */ result = smtp_parse_address(smtp->rcpt->data, &address, &host); if(result) @@ -800,7 +802,7 @@ static CURLcode smtp_perform_rcpt_to(struct Curl_easy *data) result = Curl_pp_sendf(data, &conn->proto.smtpc.pp, "RCPT TO:<%s@%s>", address, host.name); else - /* An invalid mailbox was provided but we'll simply let the server worry + /* An invalid mailbox was provided but we will simply let the server worry about that and reply with a 501 error */ result = Curl_pp_sendf(data, &conn->proto.smtpc.pp, "RCPT TO:<%s>", address); @@ -956,7 +958,7 @@ static CURLcode smtp_state_ehlo_resp(struct Curl_easy *data, if(smtpcode != 1) { if(data->set.use_ssl && !Curl_conn_is_ssl(conn, FIRSTSOCKET)) { - /* We don't have a SSL/TLS connection yet, but SSL is requested */ + /* We do not have a SSL/TLS connection yet, but SSL is requested */ if(smtpc->tls_supported) /* Switch to TLS connection now */ result = smtp_perform_starttls(data, conn); @@ -1100,7 +1102,7 @@ static CURLcode smtp_state_rcpt_resp(struct Curl_easy *data, is_smtp_err = (smtpcode/100 != 2) ? TRUE : FALSE; - /* If there's multiple RCPT TO to be issued, it's possible to ignore errors + /* If there is multiple RCPT TO to be issued, it is possible to ignore errors and proceed with only the valid addresses. */ is_smtp_blocking_err = (is_smtp_err && !data->set.mail_rcpt_allowfails) ? TRUE : FALSE; @@ -1127,7 +1129,7 @@ static CURLcode smtp_state_rcpt_resp(struct Curl_easy *data, /* Send the next RCPT TO command */ result = smtp_perform_rcpt_to(data); else { - /* We weren't able to issue a successful RCPT TO command while going + /* We were not able to issue a successful RCPT TO command while going over recipients (potentially multiple). Sending back last error. */ if(!smtp->rcpt_had_ok) { failf(data, "RCPT failed: %d (last error)", smtp->rcpt_last_error); @@ -1162,7 +1164,7 @@ static CURLcode smtp_state_data_resp(struct Curl_easy *data, int smtpcode, Curl_pgrsSetUploadSize(data, data->state.infilesize); /* SMTP upload */ - Curl_xfer_setup(data, -1, -1, FALSE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SEND, -1, FALSE); /* End of DO phase */ smtp_state(data, SMTP_STOP); @@ -1200,6 +1202,7 @@ static CURLcode smtp_statemachine(struct Curl_easy *data, size_t nread = 0; /* Busy upgrading the connection; right now all I/O is SSL/TLS, not SMTP */ +upgrade_tls: if(smtpc->state == SMTP_UPGRADETLS) return smtp_perform_upgrade_tls(data); @@ -1236,6 +1239,10 @@ static CURLcode smtp_statemachine(struct Curl_easy *data, case SMTP_STARTTLS: result = smtp_state_starttls_resp(data, smtpcode, smtpc->state); + /* During UPGRADETLS, leave the read loop as we need to connect + * (e.g. TLS handshake) before we continue sending/receiving. */ + if(!result && (smtpc->state == SMTP_UPGRADETLS)) + goto upgrade_tls; break; case SMTP_AUTH: @@ -1445,10 +1452,10 @@ static CURLcode smtp_perform(struct Curl_easy *data, bool *connected, /* Store the first recipient (or NULL if not specified) */ smtp->rcpt = data->set.mail_rcpt; - /* Track of whether we've successfully sent at least one RCPT TO command */ + /* Track of whether we have successfully sent at least one RCPT TO command */ smtp->rcpt_had_ok = FALSE; - /* Track of the last error we've received by sending RCPT TO command */ + /* Track of the last error we have received by sending RCPT TO command */ smtp->rcpt_last_error = 0; /* Initial data character is the first character in line: it is implicitly @@ -1548,7 +1555,7 @@ static CURLcode smtp_dophase_done(struct Curl_easy *data, bool connected) if(smtp->transfer != PPTRANSFER_BODY) /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); return CURLE_OK; } @@ -1706,7 +1713,7 @@ static CURLcode smtp_parse_custom_request(struct Curl_easy *data) * smtp_parse_address() * * Parse the fully qualified mailbox address into a local address part and the - * host name, converting the host name to an IDN A-label, as per RFC-5890, if + * hostname, converting the hostname to an IDN A-label, as per RFC-5890, if * necessary. * * Parameters: @@ -1717,8 +1724,8 @@ static CURLcode smtp_parse_custom_request(struct Curl_easy *data) * address [in/out] - A new allocated buffer which holds the local * address part of the mailbox. This buffer must be * free'ed by the caller. - * host [in/out] - The host name structure that holds the original, - * and optionally encoded, host name. + * host [in/out] - The hostname structure that holds the original, + * and optionally encoded, hostname. * Curl_free_idnconverted_hostname() must be called * once the caller has finished with the structure. * @@ -1726,14 +1733,14 @@ static CURLcode smtp_parse_custom_request(struct Curl_easy *data) * * Notes: * - * Should a UTF-8 host name require conversion to IDN ACE and we cannot honor + * Should a UTF-8 hostname require conversion to IDN ACE and we cannot honor * that conversion then we shall return success. This allow the caller to send * the data to the server as a U-label (as per RFC-6531 sect. 3.2). * * If an mailbox '@' separator cannot be located then the mailbox is considered * to be either a local mailbox or an invalid mailbox (depending on what the * calling function deems it to be) then the input will simply be returned in - * the address part with the host name being NULL. + * the address part with the hostname being NULL. */ static CURLcode smtp_parse_address(const char *fqma, char **address, struct hostname *host) @@ -1742,7 +1749,7 @@ static CURLcode smtp_parse_address(const char *fqma, char **address, size_t length; /* Duplicate the fully qualified email address so we can manipulate it, - ensuring it doesn't contain the delimiters if specified */ + ensuring it does not contain the delimiters if specified */ char *dup = strdup(fqma[0] == '<' ? fqma + 1 : fqma); if(!dup) return CURLE_OUT_OF_MEMORY; @@ -1753,17 +1760,17 @@ static CURLcode smtp_parse_address(const char *fqma, char **address, dup[length - 1] = '\0'; } - /* Extract the host name from the address (if we can) */ + /* Extract the hostname from the address (if we can) */ host->name = strpbrk(dup, "@"); if(host->name) { *host->name = '\0'; host->name = host->name + 1; - /* Attempt to convert the host name to IDN ACE */ + /* Attempt to convert the hostname to IDN ACE */ (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 + and send the hostname using UTF-8 rather than as 7-bit ACE (which is our preference) */ } @@ -1901,7 +1908,7 @@ static CURLcode cr_eob_read(struct Curl_easy *data, *peos = ctx->eos; DEBUGF(infof(data, "cr_eob_read(%zu) -> %d, %zd, %d", blen, result, *pnread, *peos)); - return CURLE_OK; + return result; } static curl_off_t cr_eob_total_length(struct Curl_easy *data, @@ -1923,6 +1930,7 @@ static const struct Curl_crtype cr_eob = { Curl_creader_def_resume_from, Curl_creader_def_rewind, Curl_creader_def_unpause, + Curl_creader_def_is_paused, Curl_creader_def_done, sizeof(struct cr_eob_ctx) }; diff --git a/lib/sockaddr.h b/lib/sockaddr.h index 5a6bb207d..2e2d375e0 100644 --- a/lib/sockaddr.h +++ b/lib/sockaddr.h @@ -30,7 +30,7 @@ struct Curl_sockaddr_storage { union { struct sockaddr sa; struct sockaddr_in sa_in; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct sockaddr_in6 sa_in6; #endif #ifdef HAVE_STRUCT_SOCKADDR_STORAGE diff --git a/lib/socketpair.c b/lib/socketpair.c index d01b25513..b14f5a5f1 100644 --- a/lib/socketpair.c +++ b/lib/socketpair.c @@ -27,7 +27,77 @@ #include "urldata.h" #include "rand.h" -#if !defined(HAVE_SOCKETPAIR) && !defined(CURL_DISABLE_SOCKETPAIR) +#if defined(USE_EVENTFD) +#ifdef HAVE_SYS_EVENTFD_H +#include +#endif + +int Curl_eventfd(curl_socket_t socks[2], bool nonblocking) +{ + int efd = eventfd(0, nonblocking ? EFD_CLOEXEC | EFD_NONBLOCK : EFD_CLOEXEC); + if(efd == -1) { + socks[0] = socks[1] = CURL_SOCKET_BAD; + return -1; + } + socks[0] = socks[1] = efd; + return 0; +} +#elif defined(HAVE_PIPE) +#ifdef HAVE_FCNTL +#include +#endif + +int Curl_pipe(curl_socket_t socks[2], bool nonblocking) +{ + if(pipe(socks)) + return -1; +#ifdef HAVE_FCNTL + if(fcntl(socks[0], F_SETFD, FD_CLOEXEC) || + fcntl(socks[1], F_SETFD, FD_CLOEXEC) ) { + close(socks[0]); + close(socks[1]); + socks[0] = socks[1] = CURL_SOCKET_BAD; + return -1; + } +#endif + if(nonblocking) { + if(curlx_nonblock(socks[0], TRUE) < 0 || + curlx_nonblock(socks[1], TRUE) < 0) { + close(socks[0]); + close(socks[1]); + socks[0] = socks[1] = CURL_SOCKET_BAD; + return -1; + } + } + + return 0; +} +#endif + + +#ifndef CURL_DISABLE_SOCKETPAIR +#ifdef HAVE_SOCKETPAIR +int Curl_socketpair(int domain, int type, int protocol, + curl_socket_t socks[2], bool nonblocking) +{ +#ifdef SOCK_NONBLOCK + type = nonblocking ? type | SOCK_NONBLOCK : type; +#endif + if(socketpair(domain, type, protocol, socks)) + return -1; +#ifndef SOCK_NONBLOCK + if(nonblocking) { + if(curlx_nonblock(socks[0], TRUE) < 0 || + curlx_nonblock(socks[1], TRUE) < 0) { + close(socks[0]); + close(socks[1]); + return -1; + } + } +#endif + return 0; +} +#else /* !HAVE_SOCKETPAIR */ #ifdef _WIN32 /* * This is a socketpair() implementation for Windows. @@ -59,7 +129,7 @@ #include "memdebug.h" int Curl_socketpair(int domain, int type, int protocol, - curl_socket_t socks[2]) + curl_socket_t socks[2], bool nonblocking) { union { struct sockaddr_in inaddr; @@ -85,7 +155,7 @@ 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 */ + /* do not set SO_REUSEADDR on Windows */ (void)reuse; #ifdef SO_EXCLUSIVEADDRUSE { @@ -113,7 +183,7 @@ int Curl_socketpair(int domain, int type, int protocol, if(connect(socks[0], &a.addr, sizeof(a.inaddr)) == -1) goto error; - /* use non-blocking accept to make sure we don't block forever */ + /* use non-blocking accept to make sure we do not block forever */ if(curlx_nonblock(listener, TRUE) < 0) goto error; pfd[0].fd = listener; @@ -147,7 +217,7 @@ int Curl_socketpair(int domain, int type, int protocol, nread = sread(socks[1], p, s); if(nread == -1) { int sockerr = SOCKERRNO; - /* Don't block forever */ + /* Do not block forever */ if(Curl_timediff(Curl_now(), start) > (60 * 1000)) goto error; if( @@ -177,6 +247,10 @@ int Curl_socketpair(int domain, int type, int protocol, } while(1); } + if(nonblocking) + if(curlx_nonblock(socks[0], TRUE) < 0 || + curlx_nonblock(socks[1], TRUE) < 0) + goto error; sclose(listener); return 0; @@ -186,5 +260,5 @@ int Curl_socketpair(int domain, int type, int protocol, sclose(socks[1]); return -1; } - -#endif /* ! HAVE_SOCKETPAIR */ +#endif +#endif /* !CURL_DISABLE_SOCKETPAIR */ diff --git a/lib/socketpair.h b/lib/socketpair.h index bd499abbe..42f4034fc 100644 --- a/lib/socketpair.h +++ b/lib/socketpair.h @@ -26,29 +26,73 @@ #include "curl_setup.h" -#ifdef HAVE_PIPE +#if defined(HAVE_EVENTFD) && \ + defined(__x86_64__) && \ + defined(__aarch64__) && \ + defined(__ia64__) && \ + defined(__ppc64__) && \ + defined(__mips64) && \ + defined(__sparc64__) && \ + defined(__riscv_64e) && \ + defined(__s390x__) + +/* Use eventfd only with 64-bit CPU architectures because eventfd has a + * stringent rule of requiring the 8-byte buffer when calling read(2) and + * write(2) on it. In some rare cases, the C standard library implementation + * on a 32-bit system might choose to define uint64_t as a 32-bit type for + * various reasons (memory limitations, compatibility with older code), + * which makes eventfd broken. + */ +#define USE_EVENTFD 1 #define wakeup_write write #define wakeup_read read #define wakeup_close close -#define wakeup_create pipe +#define wakeup_create(p,nb) Curl_eventfd(p,nb) + +#include +int Curl_eventfd(curl_socket_t socks[2], bool nonblocking); + +#elif defined(HAVE_PIPE) + +#define wakeup_write write +#define wakeup_read read +#define wakeup_close close +#define wakeup_create(p,nb) Curl_pipe(p,nb) + +#include +int Curl_pipe(curl_socket_t socks[2], bool nonblocking); -#else /* HAVE_PIPE */ +#else /* !USE_EVENTFD && !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 */ +#if defined(USE_UNIX_SOCKETS) && defined(HAVE_SOCKETPAIR) +#define SOCKETPAIR_FAMILY AF_UNIX +#elif !defined(HAVE_SOCKETPAIR) +#define SOCKETPAIR_FAMILY 0 /* not used */ +#else +#error "unsupported unix domain and socketpair build combo" +#endif -#ifndef HAVE_SOCKETPAIR +#ifdef SOCK_CLOEXEC +#define SOCKETPAIR_TYPE (SOCK_STREAM | SOCK_CLOEXEC) +#else +#define SOCKETPAIR_TYPE SOCK_STREAM +#endif + +#define wakeup_create(p,nb)\ +Curl_socketpair(SOCKETPAIR_FAMILY, SOCKETPAIR_TYPE, 0, p, nb) + +#endif /* USE_EVENTFD */ + +#ifndef CURL_DISABLE_SOCKETPAIR #include int Curl_socketpair(int domain, int type, int protocol, - curl_socket_t socks[2]); -#else -#define Curl_socketpair(a,b,c,d) socketpair(a,b,c,d) + curl_socket_t socks[2], bool nonblocking); #endif #endif /* HEADER_CURL_SOCKETPAIR_H */ diff --git a/lib/socks.c b/lib/socks.c index bd5962a87..094ff42cd 100644 --- a/lib/socks.c +++ b/lib/socks.c @@ -125,7 +125,7 @@ int Curl_blockread_all(struct Curl_cfilter *cf, } nread = Curl_conn_cf_recv(cf->next, data, buf, buffersize, &err); if(nread <= 0) { - result = err; + result = (int)err; if(CURLE_AGAIN == err) continue; if(err) { @@ -194,7 +194,7 @@ static void socksstate(struct socks_state *sx, struct Curl_easy *data, (void)data; if(oldstate == state) - /* don't bother when the new state is the same as the old state */ + /* do not bother when the new state is the same as the old state */ return; sx->state = state; @@ -335,7 +335,7 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf, goto CONNECT_RESOLVED; } - /* socks4a doesn't resolve anything locally */ + /* socks4a does not resolve anything locally */ sxstate(sx, data, CONNECT_REQ_INIT); goto CONNECT_REQ_INIT; @@ -365,7 +365,7 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf, { struct Curl_addrinfo *hp = NULL; /* - * We cannot use 'hostent' as a struct that Curl_resolv() returns. It + * We cannot use 'hostent' as a struct that Curl_resolv() returns. It * returns a Curl_addrinfo pointer that may not always look the same. */ if(dns) { @@ -413,7 +413,7 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf, /* 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"); + failf(data, "Too long SOCKS proxy username"); return CURLPX_LONG_USER; } /* copy the proxy name WITH trailing zero */ @@ -440,7 +440,7 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf, (packetsize + hostnamelen < sizeof(sx->buffer))) strcpy((char *)socksreq + packetsize, sx->hostname); else { - failf(data, "SOCKS4: too long host name"); + failf(data, "SOCKS4: too long hostname"); return CURLPX_LONG_HOSTNAME; } packetsize += hostnamelen; @@ -516,7 +516,7 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf, break; case 91: failf(data, - "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)" + "cannot complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)" ", request rejected or failed.", socksreq[4], socksreq[5], socksreq[6], socksreq[7], (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]), @@ -524,7 +524,7 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf, return CURLPX_REQUEST_FAILED; case 92: failf(data, - "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)" + "cannot complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)" ", request rejected because SOCKS server cannot connect to " "identd on the client.", socksreq[4], socksreq[5], socksreq[6], socksreq[7], @@ -533,7 +533,7 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf, return CURLPX_IDENTD; case 93: failf(data, - "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)" + "cannot complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)" ", request rejected because the client program and identd " "report different user-ids.", socksreq[4], socksreq[5], socksreq[6], socksreq[7], @@ -542,7 +542,7 @@ static CURLproxycode do_SOCKS4(struct Curl_cfilter *cf, return CURLPX_IDENTD_DIFFER; default: failf(data, - "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)" + "cannot complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)" ", Unknown.", socksreq[4], socksreq[5], socksreq[6], socksreq[7], (((unsigned char)socksreq[2] << 8) | (unsigned char)socksreq[3]), @@ -562,7 +562,7 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf, struct Curl_easy *data) { /* - According to the RFC1928, section "6. Replies". This is what a SOCK5 + According to the RFC1928, section "6. Replies". This is what a SOCK5 replies: +----+-----+-------+------+----------+----------+ @@ -714,7 +714,7 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf, CONNECT_AUTH_INIT: case CONNECT_AUTH_INIT: { - /* Needs user name and password */ + /* Needs username and password */ size_t proxy_user_len, proxy_password_len; if(sx->proxy_user && sx->proxy_password) { proxy_user_len = strlen(sx->proxy_user); @@ -738,7 +738,7 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf, if(sx->proxy_user && proxy_user_len) { /* the length must fit in a single byte */ if(proxy_user_len > 255) { - failf(data, "Excessive user name length for proxy auth"); + failf(data, "Excessive username length for proxy auth"); return CURLPX_LONG_USER; } memcpy(socksreq + len, sx->proxy_user, proxy_user_len); @@ -838,7 +838,7 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf, struct Curl_addrinfo *hp = NULL; if(dns) hp = dns->addr; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(data->set.ipver != CURL_IPRESOLVE_WHATEVER) { int wanted_family = data->set.ipver == CURL_IPRESOLVE_V4 ? AF_INET : AF_INET6; @@ -872,7 +872,7 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf, infof(data, "SOCKS5 connect to %s:%d (locally resolved)", dest, sx->remote_port); } -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else if(hp->ai_family == AF_INET6) { int i; struct sockaddr_in6 *saddr_in6; @@ -909,7 +909,7 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf, IPv6 == 4, IPv4 == 1 */ unsigned char ip4[4]; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(conn->bits.ipv6_ip) { char ip6[16]; if(1 != Curl_inet_pton(AF_INET6, sx->hostname, ip6)) @@ -990,7 +990,7 @@ static CURLproxycode do_SOCKS5(struct Curl_cfilter *cf, else if(socksreq[1]) { /* Anything besides 0 is an error */ CURLproxycode rc = CURLPX_REPLY_UNASSIGNED; int code = socksreq[1]; - failf(data, "Can't complete SOCKS5 connection to %s. (%d)", + failf(data, "cannot complete SOCKS5 connection to %s. (%d)", sx->hostname, (unsigned char)socksreq[1]); if(code < 9) { /* RFC 1928 section 6 lists: */ @@ -1120,7 +1120,7 @@ static void socks_proxy_cf_free(struct Curl_cfilter *cf) } /* 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 + the next magic steps. If 'done' is not set TRUE, it is not done yet and must be called again. Note: this function's sub-functions call failf() @@ -1244,11 +1244,12 @@ static void socks_cf_get_host(struct Curl_cfilter *cf, struct Curl_cftype Curl_cft_socks_proxy = { "SOCKS-PROXYY", - CF_TYPE_IP_CONNECT, + CF_TYPE_IP_CONNECT|CF_TYPE_PROXY, 0, socks_proxy_cf_destroy, socks_proxy_cf_connect, socks_proxy_cf_close, + Curl_cf_def_shutdown, socks_cf_get_host, socks_cf_adjust_pollset, Curl_cf_def_data_pending, diff --git a/lib/socks_gssapi.c b/lib/socks_gssapi.c index c0b42b871..edcc68326 100644 --- a/lib/socks_gssapi.c +++ b/lib/socks_gssapi.c @@ -172,7 +172,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, (void)curlx_nonblock(sock, FALSE); - /* As long as we need to keep sending some context info, and there's no */ + /* As long as we need to keep sending some context info, and there is no */ /* errors, keep sending it... */ for(;;) { gss_major_status = Curl_gss_init_sec_context(data, @@ -201,7 +201,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, if(gss_send_token.length) { socksreq[0] = 1; /* GSS-API subnegotiation version */ socksreq[1] = 1; /* authentication message type */ - us_length = htons((short)gss_send_token.length); + us_length = htons((unsigned short)gss_send_token.length); memcpy(socksreq + 2, &us_length, sizeof(short)); nwritten = Curl_conn_cf_send(cf->next, data, (char *)socksreq, 4, &code); @@ -306,7 +306,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, gss_minor_status, "gss_inquire_context")) { gss_delete_sec_context(&gss_status, &gss_context, NULL); gss_release_name(&gss_status, &gss_client_name); - failf(data, "Failed to determine user name."); + failf(data, "Failed to determine username."); return CURLE_COULDNT_CONNECT; } gss_major_status = gss_display_name(&gss_minor_status, gss_client_name, @@ -316,7 +316,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, gss_delete_sec_context(&gss_status, &gss_context, NULL); gss_release_name(&gss_status, &gss_client_name); gss_release_buffer(&gss_status, &gss_send_token); - failf(data, "Failed to determine user name."); + failf(data, "Failed to determine username."); return CURLE_COULDNT_CONNECT; } user = malloc(gss_send_token.length + 1); @@ -377,7 +377,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, * * The token is produced by encapsulating an octet containing the * required protection level using gss_seal()/gss_wrap() with conf_req - * set to FALSE. The token is verified using gss_unseal()/ + * set to FALSE. The token is verified using gss_unseal()/ * gss_unwrap(). * */ @@ -406,7 +406,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, } gss_release_buffer(&gss_status, &gss_send_token); - us_length = htons((short)gss_w_token.length); + us_length = htons((unsigned short)gss_w_token.length); memcpy(socksreq + 2, &us_length, sizeof(short)); } diff --git a/lib/socks_sspi.c b/lib/socks_sspi.c index 2baae2c2b..a83288dd0 100644 --- a/lib/socks_sspi.c +++ b/lib/socks_sspi.c @@ -158,7 +158,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, (void)curlx_nonblock(sock, FALSE); - /* As long as we need to keep sending some context info, and there's no */ + /* As long as we need to keep sending some context info, and there is no */ /* errors, keep sending it... */ for(;;) { TCHAR *sname; @@ -204,7 +204,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, if(sspi_send_token.cbBuffer) { socksreq[0] = 1; /* GSS-API subnegotiation version */ socksreq[1] = 1; /* authentication message type */ - us_length = htons((short)sspi_send_token.cbBuffer); + us_length = htons((unsigned short)sspi_send_token.cbBuffer); memcpy(socksreq + 2, &us_length, sizeof(short)); written = Curl_conn_cf_send(cf->next, data, (char *)socksreq, 4, &code); @@ -328,7 +328,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, if(check_sspi_err(data, status, "QueryCredentialAttributes")) { s_pSecFn->DeleteSecurityContext(&sspi_context); s_pSecFn->FreeContextBuffer(names.sUserName); - failf(data, "Failed to determine user name."); + failf(data, "Failed to determine username."); return CURLE_COULDNT_CONNECT; } else { @@ -383,13 +383,13 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, * * The token is produced by encapsulating an octet containing the * required protection level using gss_seal()/gss_wrap() with conf_req - * set to FALSE. The token is verified using gss_unseal()/ + * set to FALSE. The token is verified using gss_unseal()/ * gss_unwrap(). * */ if(data->set.socks5_gssapi_nec) { - us_length = htons((short)1); + us_length = htons((unsigned short)1); memcpy(socksreq + 2, &us_length, sizeof(short)); } else { @@ -472,7 +472,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(struct Curl_cfilter *cf, sspi_w_token[2].pvBuffer = NULL; sspi_w_token[2].cbBuffer = 0; - us_length = htons((short)sspi_send_token.cbBuffer); + us_length = htons((unsigned short)sspi_send_token.cbBuffer); memcpy(socksreq + 2, &us_length, sizeof(short)); } diff --git a/lib/splay.c b/lib/splay.c index 48e079b32..99bb14997 100644 --- a/lib/splay.c +++ b/lib/splay.c @@ -93,7 +93,7 @@ struct Curl_tree *Curl_splay(struct curltime i, return t; } -/* Insert key i into the tree t. Return a pointer to the resulting tree or +/* Insert key i into the tree t. Return a pointer to the resulting tree or * NULL if something went wrong. * * @unittest: 1309 @@ -150,7 +150,7 @@ struct Curl_tree *Curl_splayinsert(struct curltime i, } /* Finds and deletes the best-fit node from the tree. Return a pointer to the - resulting tree. best-fit means the smallest node if it is not larger than + resulting tree. best-fit means the smallest node if it is not larger than the key */ struct Curl_tree *Curl_splaygetbest(struct curltime i, struct Curl_tree *t, @@ -197,13 +197,13 @@ struct Curl_tree *Curl_splaygetbest(struct curltime i, } -/* Deletes the very node we point out from the tree if it's there. Stores a +/* Deletes the very node we point out from the tree if it is there. Stores a * pointer to the new resulting tree in 'newroot'. * * Returns zero on success and non-zero on errors! * When returning error, it does not touch the 'newroot' pointer. * - * NOTE: when the last node of the tree is removed, there's no tree left so + * NOTE: when the last node of the tree is removed, there is no tree left so * 'newroot' will be made to point to NULL. * * @unittest: 1309 @@ -241,7 +241,7 @@ int Curl_splayremove(struct Curl_tree *t, /* First make sure that we got the same root node as the one we want to remove, as otherwise we might be trying to remove a node that - isn't actually in the tree. + is not actually in the tree. We cannot just compare the keys here as a double remove in quick succession of a node with key != KEY_NOTUSED && same != NULL @@ -249,7 +249,7 @@ int Curl_splayremove(struct Curl_tree *t, if(t != removenode) return 2; - /* Check if there is a list with identical sizes, as then we're trying to + /* Check if there is a list with identical sizes, as then we are trying to remove the root node of a list of nodes with identical keys. */ x = t->samen; if(x != t) { diff --git a/lib/splay.h b/lib/splay.h index dd1d07ac2..20b2bb69a 100644 --- a/lib/splay.h +++ b/lib/splay.h @@ -32,7 +32,7 @@ struct Curl_tree { struct Curl_tree *samen; /* points to the next node with identical key */ struct Curl_tree *samep; /* points to the prev node with identical key */ struct curltime key; /* this node's "sort" key */ - void *payload; /* data the splay code doesn't care about */ + void *payload; /* data the splay code does not care about */ }; struct Curl_tree *Curl_splay(struct curltime i, diff --git a/lib/strcase.c b/lib/strcase.c index 7c0b4ef90..b22dd31fc 100644 --- a/lib/strcase.c +++ b/lib/strcase.c @@ -71,7 +71,7 @@ static const unsigned char tolowermap[256] = { altered by the current locale. */ char Curl_raw_toupper(char in) { - return touppermap[(unsigned char) in]; + return (char)touppermap[(unsigned char) in]; } @@ -79,7 +79,7 @@ char Curl_raw_toupper(char in) altered by the current locale. */ char Curl_raw_tolower(char in) { - return tolowermap[(unsigned char) in]; + return (char)tolowermap[(unsigned char) in]; } /* @@ -93,12 +93,12 @@ static int casecompare(const char *first, const char *second) { while(*first && *second) { if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second)) - /* get out of the loop as soon as they don't match */ + /* get out of the loop as soon as they do not match */ return 0; first++; second++; } - /* If we're here either the strings are the same or the length is different. + /* If we are here either the strings are the same or the length is different. We can just test if the "current" character is non-zero for one and zero for the other. Note that the characters may not be exactly the same even if they match, we only want to compare zero-ness. */ @@ -141,8 +141,8 @@ int curl_strnequal(const char *first, const char *second, size_t 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 +/* 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 * NUL-terminated if that limit is reached. */ @@ -156,8 +156,8 @@ void Curl_strntoupper(char *dest, const char *src, size_t n) } while(*src++ && --n); } -/* Copy a lower case version of the string from src to dest. The - * strings may overlap. No more than n characters of the string are copied +/* Copy a lower 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 * NUL-terminated if that limit is reached. */ diff --git a/lib/strerror.c b/lib/strerror.c index a900e78d1..76a8ba2d7 100644 --- a/lib/strerror.c +++ b/lib/strerror.c @@ -74,13 +74,13 @@ curl_easy_strerror(CURLcode error) " this libcurl due to a build-time decision."; case CURLE_COULDNT_RESOLVE_PROXY: - return "Couldn't resolve proxy name"; + return "Could not resolve proxy name"; case CURLE_COULDNT_RESOLVE_HOST: - return "Couldn't resolve host name"; + return "Could not resolve hostname"; case CURLE_COULDNT_CONNECT: - return "Couldn't connect to server"; + return "Could not connect to server"; case CURLE_WEIRD_SERVER_REPLY: return "Weird server reply"; @@ -107,19 +107,19 @@ curl_easy_strerror(CURLcode error) return "FTP: unknown 227 response format"; case CURLE_FTP_CANT_GET_HOST: - return "FTP: can't figure out the host in the PASV response"; + return "FTP: cannot figure out the host in the PASV response"; case CURLE_HTTP2: return "Error in the HTTP2 framing layer"; case CURLE_FTP_COULDNT_SET_TYPE: - return "FTP: couldn't set file type"; + return "FTP: could not set file type"; case CURLE_PARTIAL_FILE: return "Transferred a partial file"; case CURLE_FTP_COULDNT_RETR_FILE: - return "FTP: couldn't retrieve (RETR failed) the specified file"; + return "FTP: could not retrieve (RETR failed) the specified file"; case CURLE_QUOTE_ERROR: return "Quote command returned error"; @@ -158,10 +158,10 @@ curl_easy_strerror(CURLcode error) return "SSL connect error"; case CURLE_BAD_DOWNLOAD_RESUME: - return "Couldn't resume download"; + return "Could not resume download"; case CURLE_FILE_COULDNT_READ_FILE: - return "Couldn't read a file:// file"; + return "Could not read a file:// file"; case CURLE_LDAP_CANNOT_BIND: return "LDAP: cannot bind"; @@ -212,7 +212,7 @@ curl_easy_strerror(CURLcode error) return "Problem with the local SSL certificate"; case CURLE_SSL_CIPHER: - return "Couldn't use specified SSL cipher"; + return "Could not use specified SSL cipher"; case CURLE_PEER_FAILED_VERIFICATION: return "SSL peer certificate or SSH remote key was not OK"; @@ -322,6 +322,9 @@ curl_easy_strerror(CURLcode error) case CURLE_TOO_LARGE: return "A value or data field grew larger than allowed"; + case CURLE_ECH_REQUIRED: + return "ECH attempted but failed"; + /* error codes not used by current libcurl */ case CURLE_OBSOLETE20: case CURLE_OBSOLETE24: @@ -342,16 +345,15 @@ curl_easy_strerror(CURLcode error) /* * By using a switch, gcc -Wall will complain about enum values * which do not appear, helping keep this function up-to-date. - * By using gcc -Wall -Werror, you can't forget. + * By using gcc -Wall -Werror, you cannot forget. * - * A table would not have the same benefit. Most compilers will - * generate code very similar to a table in any case, so there - * is little performance gain from a table. And something is broken - * for the user's application, anyways, so does it matter how fast - * it _doesn't_ work? + * A table would not have the same benefit. Most compilers will generate + * code very similar to a table in any case, so there is little performance + * gain from a table. Something is broken for the user's application, + * anyways, so does it matter how fast it _does not_ work? * - * The line number for the error will be near this comment, which - * is why it is here, and not at the start of the switch. + * The line number for the error will be near this comment, which is why it + * is here, and not at the start of the switch. */ return "Unknown error"; #else @@ -792,7 +794,7 @@ get_winapi_error(int err, char *buf, size_t buflen) expect the local codepage (eg fprintf, failf, infof). FormatMessageW -> wcstombs is used for Windows CE compatibility. */ if(FormatMessageW((FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS), NULL, err, + FORMAT_MESSAGE_IGNORE_INSERTS), NULL, (DWORD)err, LANG_NEUTRAL, wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL)) { size_t written = wcstombs(buf, wbuf, buflen - 1); if(written != (size_t)-1) @@ -820,9 +822,9 @@ get_winapi_error(int err, char *buf, size_t buflen) * The 'err' argument passed in to this function MUST be a true errno number * as reported on this system. We do no range checking on the number before * we pass it to the "number-to-message" conversion function and there might - * be systems that don't do proper range checking in there themselves. + * be systems that do not do proper range checking in there themselves. * - * We don't do range checking (on systems other than Windows) since there is + * We do not do range checking (on systems other than Windows) since there is * no good reliable and portable way to do it. * * On Windows different types of error codes overlap. This function has an @@ -862,7 +864,7 @@ const char *Curl_strerror(int err, char *buf, size_t buflen) #ifdef USE_WINSOCK !get_winsock_error(err, buf, buflen) && #endif - !get_winapi_error((DWORD)err, buf, buflen)) + !get_winapi_error(err, buf, buflen)) msnprintf(buf, buflen, "Unknown error %d (%#x)", err, err); } #else /* not Windows coming up */ @@ -941,7 +943,7 @@ const char *Curl_winapi_strerror(DWORD err, char *buf, size_t buflen) *buf = '\0'; #ifndef CURL_DISABLE_VERBOSE_STRINGS - if(!get_winapi_error(err, buf, buflen)) { + if(!get_winapi_error((int)err, buf, buflen)) { msnprintf(buf, buflen, "Unknown error %lu (0x%08lX)", err, err); } #else diff --git a/lib/strtok.c b/lib/strtok.c index d8e1e8183..d2cc71c47 100644 --- a/lib/strtok.c +++ b/lib/strtok.c @@ -65,4 +65,4 @@ Curl_strtok_r(char *ptr, const char *sep, char **end) return NULL; } -#endif /* this was only compiled if strtok_r wasn't present */ +#endif /* this was only compiled if strtok_r was not present */ diff --git a/lib/strtoofft.c b/lib/strtoofft.c index 580fd23bf..8fac230f2 100644 --- a/lib/strtoofft.c +++ b/lib/strtoofft.c @@ -31,7 +31,7 @@ * NOTE: * * In the ISO C standard (IEEE Std 1003.1), there is a strtoimax() function we - * could use in case strtoll() doesn't exist... See + * could use in case strtoll() does not exist... See * https://www.opengroup.org/onlinepubs/009695399/functions/strtoimax.html */ @@ -73,7 +73,7 @@ static const char valchars[] = static int get_char(char c, int base); /** - * Custom version of the strtooff function. This extracts a curl_off_t + * Custom version of the strtooff function. This extracts a curl_off_t * value from the given input string and returns it. */ static curl_off_t strtooff(const char *nptr, char **endptr, int base) @@ -120,8 +120,8 @@ static curl_off_t strtooff(const char *nptr, char **endptr, int base) } } - /* Matching strtol, if the base is 0 and it doesn't look like - * the number is octal or hex, we assume it's base 10. + /* Matching strtol, if the base is 0 and it does not look like + * the number is octal or hex, we assume it is base 10. */ if(base == 0) { base = 10; @@ -168,7 +168,7 @@ static curl_off_t strtooff(const char *nptr, char **endptr, int base) * @param c the character to interpret according to base * @param base the base in which to interpret c * - * @return the value of c in base, or -1 if c isn't in range + * @return the value of c in base, or -1 if c is not in range */ static int get_char(char c, int base) { @@ -204,10 +204,10 @@ static int get_char(char c, int base) return value; } -#endif /* Only present if we need strtoll, but don't have it. */ +#endif /* Only present if we need strtoll, but do not have it. */ /* - * Parse a *positive* up to 64 bit number written in ascii. + * Parse a *positive* up to 64-bit number written in ascii. */ CURLofft curlx_strtoofft(const char *str, char **endp, int base, curl_off_t *num) @@ -222,7 +222,7 @@ CURLofft curlx_strtoofft(const char *str, char **endp, int base, str++; if(('-' == *str) || (ISSPACE(*str))) { if(endp) - *endp = (char *)str; /* didn't actually move */ + *endp = (char *)str; /* did not actually move */ return CURL_OFFT_INVAL; /* nothing parsed */ } number = strtooff(str, &end, base); diff --git a/lib/strtoofft.h b/lib/strtoofft.h index 34d293ba3..71808b719 100644 --- a/lib/strtoofft.h +++ b/lib/strtoofft.h @@ -30,7 +30,7 @@ * Determine which string to integral data type conversion function we use * to implement string conversion to our curl_off_t integral data type. * - * Notice that curl_off_t might be 64 or 32 bit wide, and that it might use + * Notice that curl_off_t might be 64 or 32 bits wide, and that it might use * an underlying data type which might be 'long', 'int64_t', 'long long' or * '__int64' and more remotely other data types. * diff --git a/lib/system_win32.c b/lib/system_win32.c index d2862de92..4af86699e 100644 --- a/lib/system_win32.c +++ b/lib/system_win32.c @@ -68,7 +68,7 @@ CURLcode Curl_win32_init(long flags) res = WSAStartup(wVersionRequested, &wsaData); if(res) - /* Tell the user that we couldn't find a usable */ + /* Tell the user that we could not find a usable */ /* winsock.dll. */ return CURLE_FAILED_INIT; @@ -80,7 +80,7 @@ CURLcode Curl_win32_init(long flags) if(LOBYTE(wsaData.wVersion) != LOBYTE(wVersionRequested) || HIBYTE(wsaData.wVersion) != HIBYTE(wVersionRequested) ) { - /* Tell the user that we couldn't find a usable */ + /* Tell the user that we could not find a usable */ /* winsock.dll. */ WSACleanup(); @@ -112,7 +112,11 @@ CURLcode Curl_win32_init(long flags) } #ifdef USE_WINSOCK +#ifdef CURL_WINDOWS_APP + ws2_32Dll = Curl_load_library(TEXT("ws2_32.dll")); +#else ws2_32Dll = GetModuleHandleA("ws2_32"); +#endif if(ws2_32Dll) { Curl_FreeAddrInfoExW = CURLX_FUNCTION_CAST(FREEADDRINFOEXW_FN, GetProcAddress(ws2_32Dll, "FreeAddrInfoExW")); @@ -208,7 +212,7 @@ HMODULE Curl_load_library(LPCTSTR filename) HMODULE hModule = NULL; LOADLIBRARYEX_FN pLoadLibraryEx = NULL; - /* Get a handle to kernel32 so we can access it's functions at runtime */ + /* Get a handle to kernel32 so we can access it is functions at runtime */ HMODULE hKernel32 = GetModuleHandle(TEXT("kernel32")); if(!hKernel32) return NULL; @@ -219,7 +223,7 @@ HMODULE Curl_load_library(LPCTSTR filename) CURLX_FUNCTION_CAST(LOADLIBRARYEX_FN, (GetProcAddress(hKernel32, LOADLIBARYEX))); - /* Detect if there's already a path in the filename and load the library if + /* Detect if there is already a path in the filename and load the library if there is. Note: Both back slashes and forward slashes have been supported since the earlier days of DOS at an API level although they are not supported by command prompt */ @@ -261,10 +265,22 @@ HMODULE Curl_load_library(LPCTSTR filename) } return hModule; #else - /* the Universal Windows Platform (UWP) can't do this */ + /* the Universal Windows Platform (UWP) cannot do this */ (void)filename; return NULL; #endif } +bool Curl_win32_impersonating(void) +{ +#ifndef CURL_WINDOWS_APP + HANDLE token = NULL; + if(OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE, &token)) { + CloseHandle(token); + return TRUE; + } +#endif + return FALSE; +} + #endif /* _WIN32 */ diff --git a/lib/system_win32.h b/lib/system_win32.h index bd490cabc..534a5e498 100644 --- a/lib/system_win32.h +++ b/lib/system_win32.h @@ -28,6 +28,8 @@ #ifdef _WIN32 +#include + extern LARGE_INTEGER Curl_freq; extern bool Curl_isVistaOrGreater; extern bool Curl_isWindows8OrGreater; @@ -68,6 +70,8 @@ extern FREEADDRINFOEXW_FN Curl_FreeAddrInfoExW; extern GETADDRINFOEXCANCEL_FN Curl_GetAddrInfoExCancel; extern GETADDRINFOEXW_FN Curl_GetAddrInfoExW; +bool Curl_win32_impersonating(void); + /* This is used to dynamically load DLLs */ HMODULE Curl_load_library(LPCTSTR filename); #else /* _WIN32 */ diff --git a/lib/telnet.c b/lib/telnet.c index 56ee0855f..91fa10ada 100644 --- a/lib/telnet.c +++ b/lib/telnet.c @@ -173,7 +173,7 @@ struct TELNET { */ const struct Curl_handler Curl_handler_telnet = { - "TELNET", /* scheme */ + "telnet", /* scheme */ ZERO_NULL, /* setup_connection */ telnet_do, /* do_it */ telnet_done, /* done */ @@ -187,6 +187,7 @@ const struct Curl_handler Curl_handler_telnet = { ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_TELNET, /* defport */ @@ -797,12 +798,12 @@ static CURLcode check_telnet_options(struct Curl_easy *data) struct TELNET *tn = data->req.p.telnet; CURLcode result = CURLE_OK; - /* Add the user name as an environment variable if it + /* Add the username as an environment variable if it was given on the command line */ if(data->state.aptr.user) { char buffer[256]; if(str_is_nonascii(data->conn->user)) { - DEBUGF(infof(data, "set a non ASCII user name in telnet")); + DEBUGF(infof(data, "set a non ASCII username in telnet")); return CURLE_BAD_FUNCTION_ARGUMENT; } msnprintf(buffer, sizeof(buffer), "USER,%s", data->conn->user); @@ -1190,12 +1191,12 @@ CURLcode telrcv(struct Curl_easy *data, if(c != CURL_SE) { if(c != CURL_IAC) { /* - * This is an error. We only expect to get "IAC IAC" or "IAC SE". - * Several things may have happened. An IAC was not doubled, the + * This is an error. We only expect to get "IAC IAC" or "IAC SE". + * Several things may have happened. An IAC was not doubled, the * IAC SE was left off, or another option got inserted into the - * suboption are all possibilities. If we assume that the IAC was + * suboption are all possibilities. If we assume that the IAC was * not doubled, and really the IAC SE was left off, we could get - * into an infinite loop here. So, instead, we terminate the + * into an infinite loop here. So, instead, we terminate the * suboption, and process the partial suboption if we can. */ CURL_SB_ACCUM(tn, CURL_IAC); @@ -1369,7 +1370,7 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done) else use the old WaitForMultipleObjects() way */ if(GetFileType(stdin_handle) == FILE_TYPE_PIPE || data->set.is_fread_set) { - /* Don't wait for stdin_handle, just wait for event_handle */ + /* Do not wait for stdin_handle, just wait for event_handle */ obj_count = 1; /* Check stdin_handle per 100 milliseconds */ wait_timeout = 100; @@ -1469,7 +1470,7 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done) if(events.lNetworkEvents & FD_READ) { /* read data from network */ result = Curl_xfer_recv(data, buffer, sizeof(buffer), &nread); - /* read would've blocked. Loop again */ + /* read would have blocked. Loop again */ if(result == CURLE_AGAIN) break; /* returned not-zero, this an error */ @@ -1491,7 +1492,7 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done) } /* Negotiate if the peer has started negotiating, - otherwise don't. We don't want to speak telnet with + otherwise do not. We do not want to speak telnet with non-telnet servers, like POP or SMTP. */ if(tn->please_negotiate && !tn->already_negotiated) { negotiate(data); @@ -1534,11 +1535,16 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done) pfd[1].events = POLLIN; poll_cnt = 2; interval_ms = 1 * 1000; + if(pfd[1].fd < 0) { + failf(data, "cannot read input"); + result = CURLE_RECV_ERROR; + keepon = FALSE; + } } while(keepon) { DEBUGF(infof(data, "telnet_do, poll %d fds", poll_cnt)); - switch(Curl_poll(pfd, poll_cnt, interval_ms)) { + switch(Curl_poll(pfd, (unsigned int)poll_cnt, interval_ms)) { case -1: /* error, stop reading */ keepon = FALSE; continue; @@ -1550,7 +1556,7 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done) if(pfd[0].revents & POLLIN) { /* read data from network */ result = Curl_xfer_recv(data, buffer, sizeof(buffer), &nread); - /* read would've blocked. Loop again */ + /* read would have blocked. Loop again */ if(result == CURLE_AGAIN) break; /* returned not-zero, this an error */ @@ -1582,7 +1588,7 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done) } /* Negotiate if the peer has started negotiating, - otherwise don't. We don't want to speak telnet with + otherwise do not. We do not want to speak telnet with non-telnet servers, like POP or SMTP. */ if(tn->please_negotiate && !tn->already_negotiated) { negotiate(data); @@ -1639,7 +1645,7 @@ static CURLcode telnet_do(struct Curl_easy *data, bool *done) } #endif /* mark this as "no further transfer wanted" */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); return result; } diff --git a/lib/tftp.c b/lib/tftp.c index ff2b7b745..c4cc8049d 100644 --- a/lib/tftp.c +++ b/lib/tftp.c @@ -168,7 +168,7 @@ static CURLcode tftp_translate_code(tftp_error_t error); */ const struct Curl_handler Curl_handler_tftp = { - "TFTP", /* scheme */ + "tftp", /* scheme */ tftp_setup_connection, /* setup_connection */ tftp_do, /* do_it */ tftp_done, /* done */ @@ -182,6 +182,7 @@ const struct Curl_handler Curl_handler_tftp = { ZERO_NULL, /* perform_getsock */ tftp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_TFTP, /* defport */ @@ -244,7 +245,7 @@ static CURLcode tftp_set_timeouts(struct tftp_state_data *state) (int)state->state, timeout_ms, state->retry_time, state->retry_max); /* init RX time */ - time(&state->rx_time); + state->rx_time = time(NULL); return CURLE_OK; } @@ -314,7 +315,7 @@ static CURLcode tftp_parse_option_ack(struct tftp_state_data *state, const char *tmp = ptr; struct Curl_easy *data = state->data; - /* if OACK doesn't contain blksize option, the default (512) must be used */ + /* if OACK does not contain blksize option, the default (512) must be used */ state->blksize = TFTP_BLKSIZE_DEFAULT; while(tmp < ptr + len) { @@ -348,7 +349,7 @@ static CURLcode tftp_parse_option_ack(struct tftp_state_data *state, return CURLE_TFTP_ILLEGAL; } else if(blksize > state->requested_blksize) { - /* could realloc pkt buffers here, but the spec doesn't call out + /* could realloc pkt buffers here, but the spec does not call out * support for the server requesting a bigger blksize than the client * requests */ failf(data, "%s (%ld)", @@ -460,7 +461,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state, setpacketevent(&state->spacket, TFTP_EVENT_RRQ); } /* As RFC3617 describes the separator slash is not actually part of the - file name so we skip the always-present first letter of the path + filename so we skip the always-present first letter of the path string. */ result = Curl_urldecode(&state->data->state.up.path[1], 0, &filename, NULL, REJECT_ZERO); @@ -468,9 +469,9 @@ static CURLcode tftp_send_first(struct tftp_state_data *state, return result; if(strlen(filename) > (state->blksize - strlen(mode) - 4)) { - failf(data, "TFTP file name too long"); + failf(data, "TFTP filename too long"); free(filename); - return CURLE_TFTP_ILLEGAL; /* too long file name field */ + return CURLE_TFTP_ILLEGAL; /* too long filename field */ } msnprintf((char *)state->spacket.data + 2, @@ -527,7 +528,7 @@ static CURLcode tftp_send_first(struct tftp_state_data *state, senddata = sendto(state->sockfd, (void *)state->spacket.data, (SEND_TYPE_ARG3)sbytes, 0, &data->conn->remote_addr->sa_addr, - data->conn->remote_addr->addrlen); + (curl_socklen_t)data->conn->remote_addr->addrlen); if(senddata != (ssize_t)sbytes) { char buffer[STRERROR_LEN]; failf(data, "%s", Curl_strerror(SOCKERRNO, buffer, sizeof(buffer))); @@ -589,7 +590,7 @@ static CURLcode tftp_rx(struct tftp_state_data *state, /* Is this the block we expect? */ rblock = getrpacketblock(&state->rpacket); if(NEXT_BLOCKNUM(state->block) == rblock) { - /* This is the expected block. Reset counters and ACK it. */ + /* This is the expected block. Reset counters and ACK it. */ state->retries = 0; } else if(state->block == rblock) { @@ -625,7 +626,7 @@ static CURLcode tftp_rx(struct tftp_state_data *state, else { state->state = TFTP_STATE_RX; } - time(&state->rx_time); + state->rx_time = time(NULL); break; case TFTP_EVENT_OACK: @@ -643,16 +644,16 @@ static CURLcode tftp_rx(struct tftp_state_data *state, return CURLE_SEND_ERROR; } - /* we're ready to RX data */ + /* we are ready to RX data */ state->state = TFTP_STATE_RX; - time(&state->rx_time); + state->rx_time = time(NULL); break; case TFTP_EVENT_TIMEOUT: /* Increment the retry count and fail if over the limit */ state->retries++; infof(data, - "Timeout waiting for block %d ACK. Retries = %d", + "Timeout waiting for block %d ACK. Retries = %d", NEXT_BLOCKNUM(state->block), state->retries); if(state->retries > state->retry_max) { state->error = TFTP_ERR_TIMEOUT; @@ -678,8 +679,8 @@ static CURLcode tftp_rx(struct tftp_state_data *state, 4, SEND_4TH_ARG, (struct sockaddr *)&state->remote_addr, state->remote_addrlen); - /* don't bother with the return code, but if the socket is still up we - * should be a good TFTP client and let the server know we're done */ + /* do not bother with the return code, but if the socket is still up we + * should be a good TFTP client and let the server know we are done */ state->state = TFTP_STATE_FIN; break; @@ -718,13 +719,13 @@ static CURLcode tftp_tx(struct tftp_state_data *state, tftp_event_t event) int rblock = getrpacketblock(&state->rpacket); if(rblock != state->block && - /* There's a bug in tftpd-hpa that causes it to send us an ack for - * 65535 when the block number wraps to 0. So when we're expecting + /* There is a bug in tftpd-hpa that causes it to send us an ack for + * 65535 when the block number wraps to 0. So when we are expecting * 0, also accept 65535. See * https://www.syslinux.org/archives/2010-September/015612.html * */ !(state->block == 0 && rblock == 65535)) { - /* This isn't the expected block. Log it and up the retry counter */ + /* This is not the expected block. Log it and up the retry counter */ infof(data, "Received ACK for block %d, expecting %d", rblock, state->block); state->retries++; @@ -737,7 +738,7 @@ static CURLcode tftp_tx(struct tftp_state_data *state, tftp_event_t event) else { /* Re-send the data packet */ sbytes = sendto(state->sockfd, (void *)state->spacket.data, - 4 + state->sbytes, SEND_4TH_ARG, + 4 + (SEND_TYPE_ARG3)state->sbytes, SEND_4TH_ARG, (struct sockaddr *)&state->remote_addr, state->remote_addrlen); /* Check all sbytes were sent */ @@ -750,9 +751,9 @@ static CURLcode tftp_tx(struct tftp_state_data *state, tftp_event_t event) return result; } - /* This is the expected packet. Reset the counters and send the next + /* This is the expected packet. Reset the counters and send the next block */ - time(&state->rx_time); + state->rx_time = time(NULL); state->block++; } else @@ -782,7 +783,7 @@ static CURLcode tftp_tx(struct tftp_state_data *state, tftp_event_t event) } while(state->sbytes < state->blksize && cb); sbytes = sendto(state->sockfd, (void *) state->spacket.data, - 4 + state->sbytes, SEND_4TH_ARG, + 4 + (SEND_TYPE_ARG3)state->sbytes, SEND_4TH_ARG, (struct sockaddr *)&state->remote_addr, state->remote_addrlen); /* Check all sbytes were sent */ @@ -800,7 +801,7 @@ static CURLcode tftp_tx(struct tftp_state_data *state, tftp_event_t event) state->retries++; infof(data, "Timeout waiting for block %d ACK. " " Retries = %d", NEXT_BLOCKNUM(state->block), state->retries); - /* Decide if we've had enough */ + /* Decide if we have had enough */ if(state->retries > state->retry_max) { state->error = TFTP_ERR_TIMEOUT; state->state = TFTP_STATE_FIN; @@ -808,7 +809,7 @@ static CURLcode tftp_tx(struct tftp_state_data *state, tftp_event_t event) else { /* Re-send the data packet */ sbytes = sendto(state->sockfd, (void *)state->spacket.data, - 4 + state->sbytes, SEND_4TH_ARG, + 4 + (SEND_TYPE_ARG3)state->sbytes, SEND_4TH_ARG, (struct sockaddr *)&state->remote_addr, state->remote_addrlen); /* Check all sbytes were sent */ @@ -828,8 +829,8 @@ static CURLcode tftp_tx(struct tftp_state_data *state, tftp_event_t event) (void)sendto(state->sockfd, (void *)state->spacket.data, 4, SEND_4TH_ARG, (struct sockaddr *)&state->remote_addr, state->remote_addrlen); - /* don't bother with the return code, but if the socket is still up we - * should be a good TFTP client and let the server know we're done */ + /* do not bother with the return code, but if the socket is still up we + * should be a good TFTP client and let the server know we are done */ state->state = TFTP_STATE_FIN; break; @@ -1000,7 +1001,7 @@ static CURLcode tftp_connect(struct Curl_easy *data, bool *done) return CURLE_OUT_OF_MEMORY; } - /* we don't keep TFTP connections up basically because there's none or very + /* we do not keep TFTP connections up basically because there is none or very * little gain for UDP */ connclose(conn, "TFTP"); @@ -1031,7 +1032,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->remote_addr->addrlen); + (curl_socklen_t)conn->remote_addr->addrlen); if(rc) { char buffer[STRERROR_LEN]; failf(data, "bind() failed; %s", @@ -1109,7 +1110,7 @@ static CURLcode tftp_receive_packet(struct Curl_easy *data) fromlen = sizeof(fromaddr); state->rbytes = (int)recvfrom(state->sockfd, (void *)state->rpacket.data, - state->blksize + 4, + (RECV_TYPE_ARG3)state->blksize + 4, 0, (struct sockaddr *)&fromaddr, &fromlen); @@ -1131,7 +1132,7 @@ static CURLcode tftp_receive_packet(struct Curl_easy *data) switch(state->event) { case TFTP_EVENT_DATA: - /* Don't pass to the client empty or retransmitted packets */ + /* Do not pass to the client empty or retransmitted packets */ if(state->rbytes > 4 && (NEXT_BLOCKNUM(state->block) == getrpacketblock(&state->rpacket))) { result = Curl_client_write(data, CLIENTWRITE_BODY, @@ -1203,11 +1204,11 @@ static timediff_t tftp_state_timeout(struct Curl_easy *data, state->state = TFTP_STATE_FIN; return 0; } - time(¤t); + current = time(NULL); if(current > state->rx_time + state->retry_time) { if(event) *event = TFTP_EVENT_TIMEOUT; - time(&state->rx_time); /* update even though we received nothing */ + state->rx_time = time(NULL); /* update even though we received nothing */ } return timeout_ms; @@ -1240,8 +1241,8 @@ static CURLcode tftp_multi_statemach(struct Curl_easy *data, bool *done) return result; *done = (state->state == TFTP_STATE_FIN) ? TRUE : FALSE; if(*done) - /* Tell curl we're done */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + /* Tell curl we are done */ + Curl_xfer_setup_nop(data); } else { /* no timeouts to handle, check our socket */ @@ -1263,8 +1264,8 @@ static CURLcode tftp_multi_statemach(struct Curl_easy *data, bool *done) return result; *done = (state->state == TFTP_STATE_FIN) ? TRUE : FALSE; if(*done) - /* Tell curl we're done */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + /* Tell curl we are done */ + Curl_xfer_setup_nop(data); } /* if rc == 0, then select() timed out */ } @@ -1288,7 +1289,7 @@ static CURLcode tftp_doing(struct Curl_easy *data, bool *dophase_done) DEBUGF(infof(data, "DO phase is complete")); } else if(!result) { - /* The multi code doesn't have this logic for the DOING state so we + /* The multi code does not have this logic for the DOING state so we provide it for TFTP since it may do the entire transfer in this state. */ if(Curl_pgrsUpdate(data)) @@ -1375,7 +1376,7 @@ static CURLcode tftp_setup_connection(struct Curl_easy *data, conn->transport = TRNSPRT_UDP; /* TFTP URLs support an extension like ";mode=" that - * we'll try to get now! */ + * we will try to get now! */ type = strstr(data->state.up.path, ";mode="); if(!type) diff --git a/lib/timediff.h b/lib/timediff.h index fb318d4f2..1ffa59e77 100644 --- a/lib/timediff.h +++ b/lib/timediff.h @@ -26,7 +26,7 @@ #include "curl_setup.h" -/* Use a larger type even for 32 bit time_t systems so that we can keep +/* Use a larger type even for 32-bit time_t systems so that we can keep microsecond accuracy in it */ typedef curl_off_t timediff_t; #define CURL_FORMAT_TIMEDIFF_T CURL_FORMAT_CURL_OFF_T diff --git a/lib/timeval.c b/lib/timeval.c index 5a6727cbc..10dbaf02c 100644 --- a/lib/timeval.c +++ b/lib/timeval.c @@ -51,8 +51,8 @@ struct curltime Curl_now(void) #pragma warning(pop) #endif - now.tv_sec = milliseconds / 1000; - now.tv_usec = (milliseconds % 1000) * 1000; + now.tv_sec = (time_t)(milliseconds / 1000); + now.tv_usec = (int)((milliseconds % 1000) * 1000); } return now; } @@ -77,7 +77,7 @@ struct curltime Curl_now(void) /* ** clock_gettime() may be defined by Apple's SDK as weak symbol thus - ** code compiles but fails during run-time if clock_gettime() is + ** code compiles but fails during runtime if clock_gettime() is ** called on unsupported OS version. */ #if defined(__APPLE__) && defined(HAVE_BUILTIN_AVAILABLE) && \ @@ -95,7 +95,7 @@ struct curltime Curl_now(void) #endif (0 == clock_gettime(CLOCK_MONOTONIC_RAW, &tsnow))) { cnow.tv_sec = tsnow.tv_sec; - cnow.tv_usec = (unsigned int)(tsnow.tv_nsec / 1000); + cnow.tv_usec = (int)(tsnow.tv_nsec / 1000); } else #endif @@ -107,18 +107,18 @@ struct curltime Curl_now(void) #endif (0 == clock_gettime(CLOCK_MONOTONIC, &tsnow))) { cnow.tv_sec = tsnow.tv_sec; - cnow.tv_usec = (unsigned int)(tsnow.tv_nsec / 1000); + cnow.tv_usec = (int)(tsnow.tv_nsec / 1000); } /* ** Even when the configure process has truly detected monotonic clock ** availability, it might happen that it is not actually available at - ** run-time. When this occurs simply fallback to other time source. + ** runtime. When this occurs simply fallback to other time source. */ #ifdef HAVE_GETTIMEOFDAY else { (void)gettimeofday(&now, NULL); cnow.tv_sec = now.tv_sec; - cnow.tv_usec = (unsigned int)now.tv_usec; + cnow.tv_usec = (int)now.tv_usec; } #else else { diff --git a/lib/transfer.c b/lib/transfer.c index e31d1d6db..6c95a4719 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -53,7 +53,7 @@ #endif #ifndef HAVE_SOCKET -#error "We can't compile without socket() support!" +#error "We cannot compile without socket() support!" #endif #include "urldata.h" @@ -160,6 +160,30 @@ bool Curl_meets_timecondition(struct Curl_easy *data, time_t timeofdoc) return TRUE; } +static CURLcode xfer_recv_shutdown(struct Curl_easy *data, bool *done) +{ + int sockindex; + + if(!data || !data->conn) + return CURLE_FAILED_INIT; + if(data->conn->sockfd == CURL_SOCKET_BAD) + return CURLE_FAILED_INIT; + sockindex = (data->conn->sockfd == data->conn->sock[SECONDARYSOCKET]); + return Curl_conn_shutdown(data, sockindex, done); +} + +static bool xfer_recv_shutdown_started(struct Curl_easy *data) +{ + int sockindex; + + if(!data || !data->conn) + return CURLE_FAILED_INIT; + if(data->conn->sockfd == CURL_SOCKET_BAD) + return CURLE_FAILED_INIT; + sockindex = (data->conn->sockfd == data->conn->sock[SECONDARYSOCKET]); + return Curl_shutdown_started(data, sockindex); +} + /** * Receive raw response data for the transfer. * @param data the transfer @@ -186,19 +210,36 @@ static ssize_t Curl_xfer_recv_resp(struct Curl_easy *data, else if(totalleft < (curl_off_t)blen) blen = (size_t)totalleft; } + else if(xfer_recv_shutdown_started(data)) { + /* we already reveived everything. Do not try more. */ + blen = 0; + } if(!blen) { - /* want nothing - continue as if read nothing. */ - DEBUGF(infof(data, "readwrite_data: we're done")); + /* want nothing more */ *err = CURLE_OK; - return 0; + nread = 0; + } + else { + *err = Curl_xfer_recv(data, buf, blen, &nread); } - *err = Curl_xfer_recv(data, buf, blen, &nread); if(*err) return -1; + if(nread == 0) { + if(data->req.shutdown) { + bool done; + *err = xfer_recv_shutdown(data, &done); + if(*err) + return -1; + if(!done) { + *err = CURLE_AGAIN; + return -1; + } + } + DEBUGF(infof(data, "readwrite_data: we are done")); + } DEBUGASSERT(nread >= 0); - *err = CURLE_OK; return nread; } @@ -240,13 +281,13 @@ static CURLcode readwrite_data(struct Curl_easy *data, buf = xfer_buf; bytestoread = xfer_blen; - if(bytestoread && data->set.max_recv_speed) { + if(bytestoread && data->set.max_recv_speed > 0) { /* In case of speed limit on receiving: if this loop already got * data, break out. If not, limit the amount of bytes to receive. * The overall, timed, speed limiting is done in multi.c */ if(total_received) break; - if((size_t)data->set.max_recv_speed < bytestoread) + if(data->set.max_recv_speed < (curl_off_t)bytestoread) bytestoread = (size_t)data->set.max_recv_speed; } @@ -272,10 +313,12 @@ static CURLcode readwrite_data(struct Curl_easy *data, DEBUGF(infof(data, "nread == 0, stream closed, bailing")); else DEBUGF(infof(data, "nread <= 0, server closed connection, bailing")); - if(k->eos_written) { /* already did write this to client, leave */ - k->keepon = 0; /* stop sending as well */ + /* stop receiving and ALL sending as well, including PAUSE and HOLD. + * We might still be paused on receive client writes though, so + * keep those bits around. */ + k->keepon &= ~(KEEP_RECV|KEEP_SENDBITS); + if(k->eos_written) /* already did write this to client, leave */ break; - } } total_received += blen; @@ -293,10 +336,11 @@ static CURLcode readwrite_data(struct Curl_easy *data, if((k->keepon & KEEP_RECV_PAUSE) || !(k->keepon & KEEP_RECV)) break; - } while(maxloops-- && data_pending(data)); + } while(maxloops--); - if(maxloops <= 0) { - /* did not read until EAGAIN, mark read-again-please */ + if((maxloops <= 0) || data_pending(data)) { + /* did not read until EAGAIN or there is still pending data, mark as + read-again-please */ data->state.select_bits = CURL_CSELECT_IN; if((k->keepon & KEEP_SENDBITS) == KEEP_SEND) data->state.select_bits |= CURL_CSELECT_OUT; @@ -304,8 +348,8 @@ static CURLcode readwrite_data(struct Curl_easy *data, if(((k->keepon & (KEEP_RECV|KEEP_SEND)) == KEEP_SEND) && (conn->bits.close || is_multiplex)) { - /* 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 + /* When we have read the entire thing and the close bit is set, the server + may now close the connection. If there is 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 */ @@ -319,37 +363,11 @@ static CURLcode readwrite_data(struct Curl_easy *data, return result; } -#if defined(_WIN32) && defined(USE_WINSOCK) -#ifndef SIO_IDEAL_SEND_BACKLOG_QUERY -#define SIO_IDEAL_SEND_BACKLOG_QUERY 0x4004747B -#endif - -static void win_update_buffer_size(curl_socket_t sockfd) -{ - int result; - ULONG ideal; - DWORD ideallen; - result = WSAIoctl(sockfd, SIO_IDEAL_SEND_BACKLOG_QUERY, 0, 0, - &ideal, sizeof(ideal), &ideallen, 0, 0); - if(result == 0) { - setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, - (const char *)&ideal, sizeof(ideal)); - } -} -#else -#define win_update_buffer_size(x) -#endif - -#define curl_upload_refill_watermark(data) \ - ((size_t)((data)->set.upload_buffer_size >> 5)) - /* * Send data to upload to the server, when the socket is writable. */ static CURLcode readwrite_upload(struct Curl_easy *data, int *didwhat) { - CURLcode result = CURLE_OK; - if((data->req.keepon & KEEP_SEND_PAUSE)) return CURLE_OK; @@ -360,23 +378,9 @@ static CURLcode readwrite_upload(struct Curl_easy *data, int *didwhat) if(!Curl_req_done_sending(data)) { *didwhat |= KEEP_SEND; - result = Curl_req_send_more(data); - if(result) - return result; - -#if defined(_WIN32) && defined(USE_WINSOCK) - /* FIXME: this looks like it would fit better into cf-socket.c - * but then I do not know enough Windows to say... */ - { - struct curltime n = Curl_now(); - if(Curl_timediff(n, data->conn->last_sndbuf_update) > 1000) { - win_update_buffer_size(data->conn->writesockfd); - data->conn->last_sndbuf_update = n; - } - } -#endif + return Curl_req_send_more(data); } - return result; + return CURLE_OK; } static int select_bits_paused(struct Curl_easy *data, int select_bits) @@ -516,9 +520,9 @@ CURLcode Curl_readwrite(struct Curl_easy *data) 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, - so we'll check to see if the discrepancy can be explained - by the number of CRLFs we've changed to LFs. + /* Most FTP servers do not adjust their file SIZE response for CRLFs, + so we will check to see if the discrepancy can be explained + by the number of CRLFs we have changed to LFs. */ (k->bytecount != (k->size + data->state.crlf_conversions)) && #endif /* CURL_DO_LINEEND_CONV */ @@ -563,7 +567,7 @@ CURLcode Curl_pretransfer(struct Curl_easy *data) CURLcode result; if(!data->state.url && !data->set.uh) { - /* we can't do anything without URL */ + /* we cannot do anything without URL */ failf(data, "No URL set"); return CURLE_URL_MALFORMAT; } @@ -587,7 +591,7 @@ CURLcode Curl_pretransfer(struct Curl_easy *data) } if(data->set.postfields && data->set.set_resume_from) { - /* we can't */ + /* we cannot */ failf(data, "cannot mix POSTFIELDS with RESUME_FROM"); return CURLE_BAD_FUNCTION_ARGUMENT; } @@ -689,7 +693,7 @@ CURLcode Curl_pretransfer(struct Curl_easy *data) /* * Set user-agent. Used for HTTP, but since we can attempt to tunnel - * basically anything through an HTTP proxy we can't limit this based on + * basically anything through an HTTP proxy we cannot limit this based on * protocol. */ if(data->set.str[STRING_USERAGENT]) { @@ -706,34 +710,20 @@ CURLcode Curl_pretransfer(struct Curl_easy *data) if(!result) result = Curl_setstropt(&data->state.aptr.passwd, data->set.str[STRING_PASSWORD]); +#ifndef CURL_DISABLE_PROXY if(!result) result = Curl_setstropt(&data->state.aptr.proxyuser, data->set.str[STRING_PROXYUSERNAME]); if(!result) result = Curl_setstropt(&data->state.aptr.proxypasswd, data->set.str[STRING_PROXYPASSWORD]); +#endif data->req.headerbytecount = 0; Curl_headers_cleanup(data); return result; } -/* - * Curl_posttransfer() is called immediately after a transfer ends - */ -CURLcode Curl_posttransfer(struct Curl_easy *data) -{ -#if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(HAVE_MSG_NOSIGNAL) - /* restore the signal handler for SIGPIPE before we get back */ - if(!data->set.no_signal) - signal(SIGPIPE, data->state.prev_signal); -#else - (void)data; /* unused parameter */ -#endif - - return CURLE_OK; -} - /* * Curl_follow() handles the URL redirect magic. Pass in the 'newurl' string * as given by the remote server and set up the new URL to request. @@ -815,16 +805,16 @@ CURLcode Curl_follow(struct Curl_easy *data, (data->req.httpcode != 401) && (data->req.httpcode != 407) && 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 */ + URL: do not allow a custom port number */ disallowport = TRUE; } DEBUGASSERT(data->state.uh); - uc = curl_url_set(data->state.uh, CURLUPART_URL, newurl, - (type == FOLLOW_FAKE) ? CURLU_NON_SUPPORT_SCHEME : - ((type == FOLLOW_REDIR) ? CURLU_URLENCODE : 0) | - CURLU_ALLOW_SPACE | - (data->set.path_as_is ? CURLU_PATH_AS_IS : 0)); + uc = curl_url_set(data->state.uh, CURLUPART_URL, newurl, (unsigned int) + ((type == FOLLOW_FAKE) ? CURLU_NON_SUPPORT_SCHEME : + ((type == FOLLOW_REDIR) ? CURLU_URLENCODE : 0) | + CURLU_ALLOW_SPACE | + (data->set.path_as_is ? CURLU_PATH_AS_IS : 0))); if(uc) { if(type != FOLLOW_FAKE) { failf(data, "The redirect target URL could not be parsed: %s", @@ -893,8 +883,8 @@ CURLcode Curl_follow(struct Curl_easy *data, } if(type == FOLLOW_FAKE) { - /* we're only figuring out the new url if we would've followed locations - but now we're done so we can get out! */ + /* we are only figuring out the new URL if we would have followed locations + but now we are done so we can get out! */ data->info.wouldredirect = newurl; if(reachedmax) { @@ -931,15 +921,15 @@ CURLcode Curl_follow(struct Curl_easy *data, /* 306 - Not used */ /* 307 - Temporary Redirect */ default: /* for all above (and the unknown ones) */ - /* Some codes are explicitly mentioned since I've checked RFC2616 and they - * seem to be OK to POST to. + /* Some codes are explicitly mentioned since I have checked RFC2616 and + * they seem to be OK to POST to. */ break; case 301: /* Moved Permanently */ /* (quote from RFC7231, section 6.4.2) * * Note: For historical reasons, a user agent MAY change the request - * method from POST to GET for the subsequent request. If this + * method from POST to GET for the subsequent request. If this * behavior is undesired, the 307 (Temporary Redirect) status code * can be used instead. * @@ -965,7 +955,7 @@ CURLcode Curl_follow(struct Curl_easy *data, /* (quote from RFC7231, section 6.4.3) * * Note: For historical reasons, a user agent MAY change the request - * method from POST to GET for the subsequent request. If this + * method from POST to GET for the subsequent request. If this * behavior is undesired, the 307 (Temporary Redirect) status code * can be used instead. * @@ -1006,14 +996,14 @@ CURLcode Curl_follow(struct Curl_easy *data, break; case 304: /* Not Modified */ /* 304 means we did a conditional request and it was "Not modified". - * We shouldn't get any Location: header in this response! + * We should not get any Location: header in this response! */ break; case 305: /* Use Proxy */ /* (quote from RFC2616, section 10.3.6): * "The requested resource MUST be accessed through the proxy given * by the Location field. The Location field gives the URI of the - * proxy. The recipient is expected to repeat this single request + * proxy. The recipient is expected to repeat this single request * via the proxy. 305 responses MUST only be generated by origin * servers." */ @@ -1035,8 +1025,9 @@ CURLcode Curl_retry_request(struct Curl_easy *data, char **url) bool retry = FALSE; *url = NULL; - /* 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 we are talking upload, we cannot do the checks below, unless the + protocol is HTTP as when uploading over HTTP we will still get a + response */ if(data->state.upload && !(conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_RTSP))) return CURLE_OK; @@ -1082,7 +1073,7 @@ CURLcode Curl_retry_request(struct Curl_easy *data, char **url) return CURLE_OUT_OF_MEMORY; connclose(conn, "retry"); /* close this connection */ - conn->bits.retry = TRUE; /* mark this as a connection we're about + conn->bits.retry = TRUE; /* mark this as a connection we are about to retry. Marking it this way should prevent i.e HTTP transfers to return error just because nothing has been @@ -1093,16 +1084,17 @@ CURLcode Curl_retry_request(struct Curl_easy *data, char **url) } /* - * Curl_xfer_setup() is called to setup some basic properties for the - * upcoming transfer. + * xfer_setup() is called to setup basic properties for the transfer. */ -void Curl_xfer_setup( +static void xfer_setup( struct Curl_easy *data, /* transfer */ int sockindex, /* socket index to read from or -1 */ curl_off_t size, /* -1 if unknown at this point */ bool getheader, /* TRUE if header parsing is wanted */ - int writesockindex /* socket index to write to, it may very well be + int writesockindex, /* socket index to write to, it may very well be the same we read from. -1 disables */ + bool shutdown /* shutdown connection at transfer end. Only + * supported when sending OR receiving. */ ) { struct SingleRequest *k = &data->req; @@ -1112,6 +1104,7 @@ void Curl_xfer_setup( DEBUGASSERT(conn != NULL); DEBUGASSERT((sockindex <= 1) && (sockindex >= -1)); DEBUGASSERT((writesockindex <= 1) && (writesockindex >= -1)); + DEBUGASSERT(!shutdown || (sockindex == -1) || (writesockindex == -1)); if(conn->bits.multiplex || conn->httpversion >= 20 || want_send) { /* when multiplexing, the read/write sockets need to be the same! */ @@ -1129,9 +1122,10 @@ void Curl_xfer_setup( conn->writesockfd = writesockindex == -1 ? CURL_SOCKET_BAD:conn->sock[writesockindex]; } - k->getheader = getheader; + k->getheader = getheader; k->size = size; + k->shutdown = shutdown; /* The code sequence below is placed in this function just because all necessary input is not always known in do_complete() as this function may @@ -1142,7 +1136,7 @@ void Curl_xfer_setup( if(size > 0) Curl_pgrsSetDownloadSize(data, size); } - /* we want header and/or body, if neither then don't do this! */ + /* we want header and/or body, if neither then do not do this! */ if(k->getheader || !data->req.no_body) { if(sockindex != -1) @@ -1154,8 +1148,35 @@ void Curl_xfer_setup( } +void Curl_xfer_setup_nop(struct Curl_easy *data) +{ + xfer_setup(data, -1, -1, FALSE, -1, FALSE); +} + +void Curl_xfer_setup1(struct Curl_easy *data, + int send_recv, + curl_off_t recv_size, + bool getheader) +{ + int recv_index = (send_recv & CURL_XFER_RECV)? FIRSTSOCKET : -1; + int send_index = (send_recv & CURL_XFER_SEND)? FIRSTSOCKET : -1; + DEBUGASSERT((recv_index >= 0) || (recv_size == -1)); + xfer_setup(data, recv_index, recv_size, getheader, send_index, FALSE); +} + +void Curl_xfer_setup2(struct Curl_easy *data, + int send_recv, + curl_off_t recv_size, + bool shutdown) +{ + int recv_index = (send_recv & CURL_XFER_RECV)? SECONDARYSOCKET : -1; + int send_index = (send_recv & CURL_XFER_SEND)? SECONDARYSOCKET : -1; + DEBUGASSERT((recv_index >= 0) || (recv_size == -1)); + xfer_setup(data, recv_index, recv_size, FALSE, send_index, shutdown); +} + CURLcode Curl_xfer_write_resp(struct Curl_easy *data, - char *buf, size_t blen, + const char *buf, size_t blen, bool is_eos) { CURLcode result = CURLE_OK; @@ -1189,9 +1210,23 @@ CURLcode Curl_xfer_write_resp(struct Curl_easy *data, data->req.eos_written = TRUE; data->req.download_done = TRUE; } + CURL_TRC_WRITE(data, "xfer_write_resp(len=%zu, eos=%d) -> %d", + blen, is_eos, result); return result; } +CURLcode Curl_xfer_write_resp_hd(struct Curl_easy *data, + const char *hd0, size_t hdlen, bool is_eos) +{ + if(data->conn->handler->write_resp_hd) { + /* protocol handlers offering this function take full responsibility + * for writing all received download data to the client. */ + return data->conn->handler->write_resp_hd(data, hd0, hdlen, is_eos); + } + /* No special handling by protocol handler, write as response bytes */ + return Curl_xfer_write_resp(data, hd0, hdlen, is_eos); +} + CURLcode Curl_xfer_write_done(struct Curl_easy *data, bool premature) { (void)premature; @@ -1221,6 +1256,9 @@ CURLcode Curl_xfer_send(struct Curl_easy *data, result = CURLE_OK; *pnwritten = 0; } + else if(!result && *pnwritten) + data->info.request_size += *pnwritten; + return result; } @@ -1251,3 +1289,27 @@ CURLcode Curl_xfer_send_close(struct Curl_easy *data) Curl_conn_ev_data_done_send(data); return CURLE_OK; } + +CURLcode Curl_xfer_send_shutdown(struct Curl_easy *data, bool *done) +{ + int sockindex; + + if(!data || !data->conn) + return CURLE_FAILED_INIT; + if(data->conn->writesockfd == CURL_SOCKET_BAD) + return CURLE_FAILED_INIT; + sockindex = (data->conn->writesockfd == data->conn->sock[SECONDARYSOCKET]); + return Curl_conn_shutdown(data, sockindex, done); +} + +bool Curl_xfer_is_blocked(struct Curl_easy *data) +{ + bool want_send = ((data)->req.keepon & KEEP_SEND); + bool want_recv = ((data)->req.keepon & KEEP_RECV); + if(!want_send) + return (want_recv && Curl_cwriter_is_paused(data)); + else if(!want_recv) + return (want_send && Curl_creader_is_paused(data)); + else + return Curl_creader_is_paused(data) && Curl_cwriter_is_paused(data); +} diff --git a/lib/transfer.h b/lib/transfer.h index e65b2b147..21ad25962 100644 --- a/lib/transfer.h +++ b/lib/transfer.h @@ -32,7 +32,6 @@ char *Curl_checkheaders(const struct Curl_easy *data, void Curl_init_CONNECT(struct Curl_easy *data); CURLcode Curl_pretransfer(struct Curl_easy *data); -CURLcode Curl_posttransfer(struct Curl_easy *data); typedef enum { FOLLOW_NONE, /* not used within the function, just a placeholder to @@ -62,21 +61,51 @@ bool Curl_meets_timecondition(struct Curl_easy *data, time_t timeofdoc); * @param blen the amount of bytes in `buf` * @param is_eos TRUE iff the connection indicates this to be the last * bytes of the response - * @param done on returnm, TRUE iff the response is complete */ CURLcode Curl_xfer_write_resp(struct Curl_easy *data, - char *buf, size_t blen, + const char *buf, size_t blen, bool is_eos); -/* This sets up a forthcoming transfer */ -void Curl_xfer_setup(struct Curl_easy *data, - int sockindex, /* socket index to read from or -1 */ - curl_off_t size, /* -1 if unknown at this point */ - bool getheader, /* TRUE if header parsing is wanted */ - int writesockindex /* socket index to write to. May be - the same we read from. -1 - disables */ - ); +/** + * Write a single "header" line from a server response. + * @param hd0 the 0-terminated, single header line + * @param hdlen the length of the header line + * @param is_eos TRUE iff this is the end of the response + */ +CURLcode Curl_xfer_write_resp_hd(struct Curl_easy *data, + const char *hd0, size_t hdlen, bool is_eos); + +#define CURL_XFER_NOP (0) +#define CURL_XFER_RECV (1<<(0)) +#define CURL_XFER_SEND (1<<(1)) +#define CURL_XFER_SENDRECV (CURL_XFER_RECV|CURL_XFER_SEND) + +/** + * The transfer is neither receiving nor sending now. + */ +void Curl_xfer_setup_nop(struct Curl_easy *data); + +/** + * The transfer will use socket 1 to send/recv. `recv_size` is + * the amount to receive or -1 if unknown. `getheader` indicates + * response header processing is expected. + */ +void Curl_xfer_setup1(struct Curl_easy *data, + int send_recv, + curl_off_t recv_size, + bool getheader); + +/** + * The transfer will use socket 2 to send/recv. `recv_size` is + * the amount to receive or -1 if unknown. With `shutdown` being + * set, the transfer is only allowed to either send OR receive + * and the socket 2 connection will be shutdown at the end of + * the transfer. An unclean shutdown will fail the transfer. + */ +void Curl_xfer_setup2(struct Curl_easy *data, + int send_recv, + curl_off_t recv_size, + bool shutdown); /** * Multi has set transfer to DONE. Last chance to trigger @@ -103,5 +132,13 @@ CURLcode Curl_xfer_recv(struct Curl_easy *data, ssize_t *pnrcvd); CURLcode Curl_xfer_send_close(struct Curl_easy *data); +CURLcode Curl_xfer_send_shutdown(struct Curl_easy *data, bool *done); + +/** + * Return TRUE iff the transfer is not done, but further progress + * is blocked. For example when it is only receiving and its writer + * is PAUSED. + */ +bool Curl_xfer_is_blocked(struct Curl_easy *data); #endif /* HEADER_CURL_TRANSFER_H */ diff --git a/lib/url.c b/lib/url.c index 224b9f3e2..914b5b653 100644 --- a/lib/url.c +++ b/lib/url.c @@ -56,7 +56,7 @@ #endif #ifndef HAVE_SOCKET -#error "We can't compile without socket() support!" +#error "We cannot compile without socket() support!" #endif #include @@ -136,7 +136,7 @@ static void data_priority_cleanup(struct Curl_easy *data); #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 + * more than just a few bytes to play with. Do not let it become too small or * bad things will happen. */ #if READBUFFER_SIZE < READBUFFER_MIN @@ -260,7 +260,7 @@ CURLcode Curl_close(struct Curl_easy **datap) if(data->state.rangestringalloc) free(data->state.range); - /* freed here just in case DONE wasn't called */ + /* freed here just in case DONE was not called */ Curl_req_free(&data->req, data); /* Close down all open SSL info and sessions */ @@ -278,10 +278,12 @@ CURLcode Curl_close(struct Curl_easy **datap) up_free(data); Curl_dyn_free(&data->state.headerb); Curl_flush_cookies(data, TRUE); +#ifndef CURL_DISABLE_ALTSVC 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]); +#endif #ifndef CURL_DISABLE_HSTS + Curl_hsts_save(data, data->hsts, data->set.str[STRING_HSTS]); if(!data->share || !data->share->hsts) Curl_hsts_cleanup(&data->hsts); curl_slist_free_all(data->state.hstslist); /* clean up list */ @@ -305,7 +307,9 @@ CURLcode Curl_close(struct Curl_easy **datap) Curl_share_unlock(data, CURL_LOCK_DATA_SHARE); } +#ifndef CURL_DISABLE_PROXY Curl_safefree(data->state.aptr.proxyuserpwd); +#endif Curl_safefree(data->state.aptr.uagent); Curl_safefree(data->state.aptr.userpwd); Curl_safefree(data->state.aptr.accept_encoding); @@ -313,12 +317,18 @@ CURLcode Curl_close(struct Curl_easy **datap) Curl_safefree(data->state.aptr.rangeline); Curl_safefree(data->state.aptr.ref); Curl_safefree(data->state.aptr.host); +#ifndef CURL_DISABLE_COOKIES Curl_safefree(data->state.aptr.cookiehost); +#endif +#ifndef CURL_DISABLE_RTSP Curl_safefree(data->state.aptr.rtsp_transport); +#endif Curl_safefree(data->state.aptr.user); Curl_safefree(data->state.aptr.passwd); +#ifndef CURL_DISABLE_PROXY Curl_safefree(data->state.aptr.proxyuser); Curl_safefree(data->state.aptr.proxypasswd); +#endif #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_FORM_API) Curl_mime_cleanpart(data->state.formp); @@ -355,7 +365,7 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data) set->seek_client = ZERO_NULL; - set->filesize = -1; /* we don't know the size */ + set->filesize = -1; /* we do not know the size */ set->postfieldsize = -1; /* unknown size */ set->maxredirs = 30; /* sensible default */ @@ -429,20 +439,22 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data) result = Curl_setstropt(&set->str[STRING_SSL_CAFILE], CURL_CA_BUNDLE); if(result) return result; - +#ifndef CURL_DISABLE_PROXY result = Curl_setstropt(&set->str[STRING_SSL_CAFILE_PROXY], CURL_CA_BUNDLE); if(result) return result; #endif +#endif #if defined(CURL_CA_PATH) result = Curl_setstropt(&set->str[STRING_SSL_CAPATH], CURL_CA_PATH); if(result) return result; - +#ifndef CURL_DISABLE_PROXY result = Curl_setstropt(&set->str[STRING_SSL_CAPATH_PROXY], CURL_CA_PATH); if(result) return result; +#endif #endif } @@ -455,6 +467,7 @@ CURLcode Curl_init_userdefined(struct Curl_easy *data) set->tcp_keepalive = FALSE; set->tcp_keepintvl = 60; set->tcp_keepidle = 60; + set->tcp_keepcnt = 9; set->tcp_fastopen = FALSE; set->tcp_nodelay = TRUE; set->ssl_enable_alpn = TRUE; @@ -504,12 +517,7 @@ CURLcode Curl_open(struct Curl_easy **curl) data->magic = CURLEASY_MAGIC_NUMBER; - result = Curl_req_init(&data->req); - if(result) { - DEBUGF(fprintf(stderr, "Error: request init failed\n")); - free(data); - return result; - } + Curl_req_init(&data->req); result = Curl_resolver_init(data, &data->state.async.resolver); if(result) { @@ -548,19 +556,7 @@ CURLcode Curl_open(struct Curl_easy **curl) return result; } -static void conn_shutdown(struct Curl_easy *data) -{ - DEBUGASSERT(data); - infof(data, "Closing connection"); - - /* possible left-overs from the async name resolvers */ - Curl_resolver_cancel(data); - - Curl_conn_close(data, SECONDARYSOCKET); - Curl_conn_close(data, FIRSTSOCKET); -} - -static void conn_free(struct Curl_easy *data, struct connectdata *conn) +void Curl_conn_free(struct Curl_easy *data, struct connectdata *conn) { size_t i; @@ -587,8 +583,8 @@ static void conn_free(struct Curl_easy *data, struct connectdata *conn) Curl_safefree(conn->sasl_authzid); Curl_safefree(conn->options); Curl_safefree(conn->oauth_bearer); - Curl_safefree(conn->host.rawalloc); /* host name buffer */ - Curl_safefree(conn->conn_to_host.rawalloc); /* host name buffer */ + Curl_safefree(conn->host.rawalloc); /* hostname buffer */ + Curl_safefree(conn->conn_to_host.rawalloc); /* hostname buffer */ Curl_safefree(conn->hostname_resolve); Curl_safefree(conn->secondaryhostname); Curl_safefree(conn->localdev); @@ -611,12 +607,10 @@ static void conn_free(struct Curl_easy *data, struct connectdata *conn) * disassociated from an easy handle. * * This function MUST NOT reset state in the Curl_easy struct if that - * isn't strictly bound to the life-time of *this* particular connection. - * + * is not strictly bound to the life-time of *this* particular connection. */ - void Curl_disconnect(struct Curl_easy *data, - struct connectdata *conn, bool dead_connection) + struct connectdata *conn, bool aborted) { /* there must be a connection to close */ DEBUGASSERT(conn); @@ -631,13 +625,14 @@ void Curl_disconnect(struct Curl_easy *data, DEBUGASSERT(!data->conn); DEBUGF(infof(data, "Curl_disconnect(conn #%" - CURL_FORMAT_CURL_OFF_T ", dead=%d)", - conn->connection_id, dead_connection)); + CURL_FORMAT_CURL_OFF_T ", aborted=%d)", + conn->connection_id, aborted)); + /* - * If this connection isn't marked to force-close, leave it open if there + * If this connection is not marked to force-close, leave it open if there * are other users of it */ - if(CONN_INUSE(conn) && !dead_connection) { + if(CONN_INUSE(conn) && !aborted) { DEBUGF(infof(data, "Curl_disconnect when inuse: %zu", CONN_INUSE(conn))); return; } @@ -654,23 +649,10 @@ void Curl_disconnect(struct Curl_easy *data, Curl_http_auth_cleanup_negotiate(conn); if(conn->connect_only) - /* treat the connection as dead in CONNECT_ONLY situations */ - dead_connection = TRUE; - - /* temporarily attach the connection to this transfer handle for the - disconnect and shutdown */ - Curl_attach_connection(data, conn); - - 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); + /* treat the connection as aborted in CONNECT_ONLY situations */ + aborted = TRUE; - /* detach it again */ - Curl_detach_connection(data); - - conn_free(data, conn); + Curl_conncache_disconnect(data, conn, aborted); } /* @@ -728,7 +710,7 @@ socks_proxy_info_matches(const struct proxy_info *data, return TRUE; } #else -/* disabled, won't get called */ +/* disabled, will not get called */ #define proxy_info_matches(x,y) FALSE #define socks_proxy_info_matches(x,y) FALSE #endif @@ -767,19 +749,19 @@ static bool conn_maxage(struct Curl_easy *data, } /* - * This function checks if the given connection is dead and extracts it from + * This function checks if the given connection is dead and prunes it from * the connection cache if so. * * When this is called as a Curl_conncache_foreach() callback, the connection * cache lock is held! * - * Returns TRUE if the connection was dead and extracted. + * Returns TRUE if the connection was dead and pruned. */ -static bool extract_if_dead(struct connectdata *conn, - struct Curl_easy *data) +static bool prune_if_dead(struct connectdata *conn, + struct Curl_easy *data) { if(!CONN_INUSE(conn)) { - /* The check for a dead socket makes sense only if the connection isn't in + /* The check for a dead socket makes sense only if the connection is not in use */ bool dead; struct curltime now = Curl_now(); @@ -803,7 +785,7 @@ static bool extract_if_dead(struct connectdata *conn, } else { - bool input_pending; + bool input_pending = FALSE; Curl_attach_connection(data, conn); dead = !Curl_conn_is_alive(data, conn, &input_pending); @@ -816,12 +798,14 @@ static bool extract_if_dead(struct connectdata *conn, * any time (HTTP/2 PING for example), the protocol handler needs * to install its own `connection_check` callback. */ + DEBUGF(infof(data, "connection has input pending, not reusable")); dead = TRUE; } Curl_detach_connection(data); } if(dead) { + /* remove connection from cache */ infof(data, "Connection %" CURL_FORMAT_CURL_OFF_T " seems to be dead", conn->connection_id); Curl_conncache_remove_conn(data, conn, FALSE); @@ -831,22 +815,17 @@ static bool extract_if_dead(struct connectdata *conn, return FALSE; } -struct prunedead { - struct Curl_easy *data; - struct connectdata *extracted; -}; - /* - * Wrapper to use extract_if_dead() function in Curl_conncache_foreach() + * Wrapper to use prune_if_dead() function in Curl_conncache_foreach() * */ -static int call_extract_if_dead(struct Curl_easy *data, - struct connectdata *conn, void *param) +static int call_prune_if_dead(struct Curl_easy *data, + struct connectdata *conn, void *param) { - struct prunedead *p = (struct prunedead *)param; - if(extract_if_dead(conn, data)) { - /* stop the iteration here, pass back the connection that was extracted */ - p->extracted = conn; + struct connectdata **pruned = (struct connectdata **)param; + if(prune_if_dead(conn, data)) { + /* stop the iteration here, pass back the connection that was pruned */ + *pruned = conn; return 1; } return 0; /* continue iteration */ @@ -870,18 +849,15 @@ static void prune_dead_connections(struct Curl_easy *data) CONNCACHE_UNLOCK(data); if(elapsed >= 1000L) { - struct prunedead prune; - prune.data = data; - prune.extracted = NULL; - while(Curl_conncache_foreach(data, data->state.conn_cache, &prune, - call_extract_if_dead)) { + struct connectdata *pruned = NULL; + while(Curl_conncache_foreach(data, data->state.conn_cache, &pruned, + call_prune_if_dead)) { /* unlocked */ - /* remove connection from cache */ - Curl_conncache_remove_conn(data, prune.extracted, TRUE); + /* connection previously removed from cache in prune_if_dead() */ - /* disconnect it */ - Curl_disconnect(data, prune.extracted, TRUE); + /* disconnect it, do not treat as aborted */ + Curl_disconnect(data, pruned, FALSE); } CONNCACHE_LOCK(data); data->state.conn_cache->last_cleanup = now; @@ -925,13 +901,12 @@ ConnectionExists(struct Curl_easy *data, struct Curl_llist_element *curr; #ifdef USE_NTLM - bool wantNTLMhttp = ((data->state.authhost.want & - (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) && + bool wantNTLMhttp = ((data->state.authhost.want & CURLAUTH_NTLM) && (needle->handler->protocol & PROTO_FAMILY_HTTP)); #ifndef CURL_DISABLE_PROXY bool wantProxyNTLMhttp = (needle->bits.proxy_user_passwd && ((data->state.authproxy.want & - (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) && + CURLAUTH_NTLM) && (needle->handler->protocol & PROTO_FAMILY_HTTP))); #else bool wantProxyNTLMhttp = FALSE; @@ -962,12 +937,12 @@ ConnectionExists(struct Curl_easy *data, if(IsMultiplexingPossible(data, needle)) { if(bundle->multiuse == BUNDLE_UNKNOWN) { if(data->set.pipewait) { - infof(data, "Server doesn't support multiplex yet, wait"); + infof(data, "Server does not support multiplex yet, wait"); *waitpipe = TRUE; CONNCACHE_UNLOCK(data); return FALSE; /* no reuse */ } - infof(data, "Server doesn't support multiplex (yet)"); + infof(data, "Server does not support multiplex (yet)"); } else if(bundle->multiuse == BUNDLE_MULTIPLEX) { if(Curl_multiplex_wanted(data->multi)) @@ -1002,15 +977,15 @@ ConnectionExists(struct Curl_easy *data, if(!canmultiplex) { if(Curl_resolver_asynch() && - /* remote_ip[0] is NUL only if the resolving of the name hasn't - completed yet and until then we don't reuse this connection */ + /* remote_ip[0] is NUL only if the resolving of the name has not + completed yet and until then we do not reuse this connection */ !check->primary.remote_ip[0]) continue; } if(CONN_INUSE(check)) { if(!canmultiplex) { - /* transfer can't be multiplexed and check is in use */ + /* transfer cannot be multiplexed and check is in use */ continue; } else { @@ -1024,9 +999,9 @@ ConnectionExists(struct Curl_easy *data, if(!Curl_conn_is_connected(check, FIRSTSOCKET)) { foundPendingCandidate = TRUE; - /* Don't pick a connection that hasn't connected yet */ + /* Do not pick a connection that has not connected yet */ infof(data, "Connection #%" CURL_FORMAT_CURL_OFF_T - " isn't open enough, can't reuse", check->connection_id); + " is not open enough, cannot reuse", check->connection_id); continue; } @@ -1051,20 +1026,20 @@ ConnectionExists(struct Curl_easy *data, if((needle->handler->flags&PROTOPT_SSL) != (check->handler->flags&PROTOPT_SSL)) - /* don't do mixed SSL and non-SSL connections */ + /* do not 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 */ + /* do not mix connections that use the "connect to host" feature and + * connections that do not 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 */ + /* do not mix connections that use the "connect to port" feature and + * connections that do not use this feature */ continue; #ifndef CURL_DISABLE_PROXY @@ -1092,7 +1067,7 @@ ConnectionExists(struct Curl_easy *data, 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", + " has different SSL proxy parameters, cannot reuse", check->connection_id)); continue; } @@ -1104,18 +1079,18 @@ ConnectionExists(struct Curl_easy *data, if(h2upgrade && !check->httpversion && canmultiplex) { if(data->set.pipewait) { - infof(data, "Server upgrade doesn't support multiplex yet, wait"); + infof(data, "Server upgrade does not 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 */ + continue; /* cannot 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 + reuse a random other one, although if we did not ask for a particular one we can reuse one that was bound. This comparison is a bit rough and too strict. Since the input @@ -1123,7 +1098,7 @@ ConnectionExists(struct Curl_easy *data, 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. + missing out a few edge cases should not hurt anyone very much. */ if((check->localport != needle->localport) || (check->localportrange != needle->localportrange) || @@ -1134,7 +1109,7 @@ ConnectionExists(struct Curl_easy *data, 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 */ + so verify that we are 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) || @@ -1177,7 +1152,7 @@ ConnectionExists(struct Curl_easy *data, #endif /* Additional match requirements if talking TLS OR - * not talking to a HTTP proxy OR using a tunnel through a proxy */ + * not talking to an 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 @@ -1207,7 +1182,7 @@ ConnectionExists(struct Curl_easy *data, !Curl_ssl_conn_config_match(data, check, FALSE)) { DEBUGF(infof(data, "Connection #%" CURL_FORMAT_CURL_OFF_T - " has different SSL parameters, can't reuse", + " has different SSL parameters, cannot reuse", check->connection_id)); continue; } @@ -1231,7 +1206,7 @@ ConnectionExists(struct Curl_easy *data, } } else if(check->http_ntlm_state != NTLMSTATE_NONE) { - /* Connection is using NTLM auth but we don't want NTLM */ + /* Connection is using NTLM auth but we do not want NTLM */ continue; } @@ -1250,7 +1225,7 @@ ConnectionExists(struct Curl_easy *data, continue; } else if(check->proxy_ntlm_state != NTLMSTATE_NONE) { - /* Proxy connection is using NTLM auth but we don't want NTLM */ + /* Proxy connection is using NTLM auth but we do not want NTLM */ continue; } #endif @@ -1277,7 +1252,7 @@ ConnectionExists(struct Curl_easy *data, if(CONN_INUSE(check)) { DEBUGASSERT(canmultiplex); DEBUGASSERT(check->bits.multiplex); - /* If multiplexed, make sure we don't go over concurrency limit */ + /* If multiplexed, make sure we do not go over concurrency limit */ if(CONN_INUSE(check) >= Curl_multi_max_concurrent_streams(data->multi)) { infof(data, "client side MAX_CONCURRENT_STREAMS reached" @@ -1293,9 +1268,9 @@ ConnectionExists(struct Curl_easy *data, /* 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); + else if(prune_if_dead(check, data)) { + /* disconnect it, do not treat as aborted */ + Curl_disconnect(data, check, FALSE); continue; } @@ -1358,7 +1333,7 @@ static struct connectdata *allocate_conn(struct Curl_easy *data) conn->primary.remote_port = -1; /* unknown at this point */ conn->remote_port = -1; /* unknown at this point */ - /* Default protocol-independent behavior doesn't support persistent + /* Default protocol-independent behavior does not support persistent connections, so we set this to force-close. Protocols that support this need to set this to FALSE in their "curl_do" functions. */ connclose(conn, "Default to force-close"); @@ -1403,12 +1378,6 @@ static struct connectdata *allocate_conn(struct Curl_easy *data) conn->connect_only = data->set.connect_only; conn->transport = TRNSPRT_TCP; /* most of them are TCP streams */ -#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \ - defined(NTLM_WB_ENABLED) - conn->ntlm.ntlm_auth_hlpr_socket = CURL_SOCKET_BAD; - conn->proxyntlm.ntlm_auth_hlpr_socket = CURL_SOCKET_BAD; -#endif - /* Initialize the easy handle list */ Curl_llist_init(&conn->easyq, NULL); @@ -1650,7 +1619,7 @@ const struct Curl_handler *Curl_getn_scheme_handler(const char *scheme, unsigned int c = 978; while(l) { c <<= 5; - c += Curl_raw_tolower(*s); + c += (unsigned int)Curl_raw_tolower(*s); s++; l--; } @@ -1685,7 +1654,7 @@ static CURLcode findprotocol(struct Curl_easy *data, } } - /* The protocol was not found in the table, but we don't have to assign it + /* The protocol was not found in the table, but we do not have to assign it to anything since it is already assigned to a dummy-struct in the create_conn() function when the connectdata struct is allocated. */ failf(data, "Protocol \"%s\" %s%s", protostr, @@ -1710,7 +1679,7 @@ CURLcode Curl_uc_to_curlcode(CURLUcode uc) } } -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 /* * If the URL was set with an IPv6 numerical address with a zone id part, set * the scope_id based on that! @@ -1803,12 +1772,12 @@ 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)); + uc = curl_url_set(uh, CURLUPART_URL, data->state.url, (unsigned int) + (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) { failf(data, "URL rejected: %s", curl_url_strerror(uc)); return Curl_uc_to_curlcode(uc); @@ -1834,7 +1803,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data, return CURLE_OUT_OF_MEMORY; } else if(strlen(data->state.up.hostname) > MAX_URL_LEN) { - failf(data, "Too long host name (maximum is %d)", MAX_URL_LEN); + failf(data, "Too long hostname (maximum is %d)", MAX_URL_LEN); return CURLE_URL_MALFORMAT; } hostname = data->state.up.hostname; @@ -1852,7 +1821,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data, zonefrom_url(uh, data, conn); } - /* make sure the connect struct gets its own copy of the host name */ + /* make sure the connect struct gets its own copy of the hostname */ conn->host.rawalloc = strdup(hostname ? hostname : ""); if(!conn->host.rawalloc) return CURLE_OUT_OF_MEMORY; @@ -1899,7 +1868,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data, return result; /* - * User name and password set with their own options override the + * username and password set with their own options override the * credentials possibly set in the URL. */ if(!data->set.str[STRING_PASSWORD]) { @@ -1921,7 +1890,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data, } if(!data->set.str[STRING_USERNAME]) { - /* we don't use the URL API's URL decoder option here since it rejects + /* we do not use the URL API's URL decoder option here since it rejects control codes and we want to allow them for some schemes in the user and password fields */ uc = curl_url_get(uh, CURLUPART_USER, &data->state.up.user, 0); @@ -1975,7 +1944,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data, (void)curl_url_get(uh, CURLUPART_QUERY, &data->state.up.query, 0); -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 if(data->set.scope_id) /* Override any scope that was set above. */ conn->scope_id = data->set.scope_id; @@ -1986,7 +1955,7 @@ static CURLcode parseurlandfillconn(struct Curl_easy *data, /* - * If we're doing a resumed transfer, we need to setup our stuff + * If we are doing a resumed transfer, we need to setup our stuff * properly. */ static CURLcode setup_range(struct Curl_easy *data) @@ -2081,27 +2050,21 @@ static char *detect_proxy(struct Curl_easy *data, * the first to check for.) * * For compatibility, the all-uppercase versions of these variables are - * checked if the lowercase versions don't exist. + * checked if the lowercase versions do not exist. */ - char proxy_env[128]; - const char *protop = conn->handler->scheme; + char proxy_env[20]; char *envp = proxy_env; #ifdef CURL_DISABLE_VERBOSE_STRINGS (void)data; #endif - /* Now, build _proxy and check for such a one to use */ - while(*protop) - *envp++ = Curl_raw_tolower(*protop++); - - /* append _proxy */ - strcpy(envp, "_proxy"); + msnprintf(proxy_env, sizeof(proxy_env), "%s_proxy", conn->handler->scheme); /* read the protocol proxy: */ proxy = curl_getenv(proxy_env); /* - * We don't try the uppercase version of HTTP_PROXY because of + * We do not try the uppercase version of HTTP_PROXY because of * security reasons: * * When curl is used in a webserver application @@ -2118,7 +2081,6 @@ static char *detect_proxy(struct Curl_easy *data, proxy = curl_getenv(proxy_env); } - envp = proxy_env; if(!proxy) { #ifdef USE_WEBSOCKETS /* websocket proxy fallbacks */ @@ -2151,7 +2113,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 reuse an existing connection + * hostname, 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, @@ -2298,7 +2260,7 @@ static CURLcode parse_proxy(struct Curl_easy *data, conn->primary.remote_port = port; } - /* now, clone the proxy host name */ + /* now, clone the proxy hostname */ uc = curl_url_get(uhp, CURLUPART_HOST, &host, CURLU_URLDECODE); if(uc) { result = CURLE_OUT_OF_MEMORY; @@ -2366,17 +2328,16 @@ 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 = 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); + CURLcode result = CURLE_OUT_OF_MEMORY; + + conn->http_proxy.user = strdup(proxyuser); + if(conn->http_proxy.user) { + conn->http_proxy.passwd = strdup(proxypasswd); + if(conn->http_proxy.passwd) + result = CURLE_OK; + else + Curl_safefree(conn->http_proxy.user); + } return result; } @@ -2389,7 +2350,6 @@ 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 @@ -2436,8 +2396,7 @@ 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, - &spacesep)) { + data->set.str[STRING_NOPROXY] : no_proxy)) { Curl_safefree(proxy); Curl_safefree(socksproxy); } @@ -2446,9 +2405,6 @@ 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); #ifdef USE_UNIX_SOCKETS @@ -2460,14 +2416,14 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data, #endif if(proxy && (!*proxy || (conn->handler->flags & PROTOPT_NONETWORK))) { - free(proxy); /* Don't bother with an empty proxy string or if the - protocol doesn't work with network */ + free(proxy); /* Do not bother with an empty proxy string or if the + protocol does not work with network */ proxy = NULL; } if(socksproxy && (!*socksproxy || (conn->handler->flags & PROTOPT_NONETWORK))) { - free(socksproxy); /* Don't bother with an empty socks proxy string or if - the protocol doesn't work with network */ + free(socksproxy); /* Do not bother with an empty socks proxy string or if + the protocol does not work with network */ socksproxy = NULL; } @@ -2539,7 +2495,7 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data, conn->bits.proxy = conn->bits.httpproxy || conn->bits.socksproxy; if(!conn->bits.proxy) { - /* we aren't using the proxy after all... */ + /* we are not using the proxy after all... */ conn->bits.proxy = FALSE; conn->bits.httpproxy = FALSE; conn->bits.socksproxy = FALSE; @@ -2561,7 +2517,7 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data, /* * Curl_parse_login_details() * - * This is used to parse a login string for user name, password and options in + * This is used to parse a login string for username, password and options in * the following formats: * * user @@ -2576,14 +2532,15 @@ static CURLcode create_conn_helper_init_proxy(struct Curl_easy *data, * * Parameters: * - * login [in] - The login string. - * len [in] - The length of the login string. - * userp [in/out] - The address where a pointer to newly allocated memory + * login [in] - login string. + * len [in] - length of the login string. + * userp [in/out] - address where a pointer to newly allocated memory * holding the user will be stored upon completion. - * passwdp [in/out] - The address where a pointer to newly allocated memory + * passwdp [in/out] - address where a pointer to newly allocated memory * holding the password will be stored upon completion. - * optionsp [in/out] - The address where a pointer to newly allocated memory - * holding the options will be stored upon completion. + * optionsp [in/out] - OPTIONAL address where a pointer to newly allocated + * memory holding the options will be stored upon + * completion. * * Returns CURLE_OK on success. */ @@ -2591,19 +2548,19 @@ CURLcode Curl_parse_login_details(const char *login, const size_t len, char **userp, char **passwdp, char **optionsp) { - CURLcode result = CURLE_OK; char *ubuf = NULL; char *pbuf = NULL; - char *obuf = NULL; const char *psep = NULL; const char *osep = NULL; size_t ulen; size_t plen; size_t olen; + DEBUGASSERT(userp); + DEBUGASSERT(passwdp); + /* Attempt to find the password separator */ - if(passwdp) - psep = memchr(login, ':', len); + psep = memchr(login, ':', len); /* Attempt to find the options separator */ if(optionsp) @@ -2615,64 +2572,40 @@ CURLcode Curl_parse_login_details(const char *login, const size_t len, (osep ? (size_t)(osep - login) : len)); plen = (psep ? (osep && osep > psep ? (size_t)(osep - psep) : - (size_t)(login + len - psep)) - 1 : 0); + (size_t)(login + len - psep)) - 1 : 0); olen = (osep ? (psep && psep > osep ? (size_t)(psep - osep) : - (size_t)(login + len - osep)) - 1 : 0); + (size_t)(login + len - osep)) - 1 : 0); - /* Allocate the user portion buffer, which can be zero length */ - if(userp) { - ubuf = malloc(ulen + 1); - if(!ubuf) - result = CURLE_OUT_OF_MEMORY; - } + /* Clone the user portion buffer, which can be zero length */ + ubuf = Curl_memdup0(login, ulen); + if(!ubuf) + goto error; - /* Allocate the password portion buffer */ - if(!result && passwdp && psep) { - pbuf = malloc(plen + 1); - if(!pbuf) { - free(ubuf); - result = CURLE_OUT_OF_MEMORY; - } + /* Clone the password portion buffer */ + if(psep) { + pbuf = Curl_memdup0(&psep[1], plen); + if(!pbuf) + goto error; } /* Allocate the options portion buffer */ - if(!result && optionsp && olen) { - obuf = malloc(olen + 1); - if(!obuf) { - free(pbuf); - free(ubuf); - result = CURLE_OUT_OF_MEMORY; - } - } - - if(!result) { - /* Store the user portion if necessary */ - if(ubuf) { - memcpy(ubuf, login, ulen); - ubuf[ulen] = '\0'; - Curl_safefree(*userp); - *userp = ubuf; - } - - /* Store the password portion if necessary */ - if(pbuf) { - memcpy(pbuf, psep + 1, plen); - pbuf[plen] = '\0'; - Curl_safefree(*passwdp); - *passwdp = pbuf; - } - - /* Store the options portion if necessary */ - if(obuf) { - memcpy(obuf, osep + 1, olen); - obuf[olen] = '\0'; - Curl_safefree(*optionsp); - *optionsp = obuf; + if(optionsp) { + char *obuf = NULL; + if(olen) { + obuf = Curl_memdup0(&osep[1], olen); + if(!obuf) + goto error; } + *optionsp = obuf; } - - return result; + *userp = ubuf; + *passwdp = pbuf; + return CURLE_OK; +error: + free(ubuf); + free(pbuf); + return CURLE_OUT_OF_MEMORY; } /************************************************************* @@ -2731,7 +2664,7 @@ static CURLcode override_login(struct Curl_easy *data, bool url_provided = FALSE; if(data->state.aptr.user) { - /* there was a user name in the URL. Use the URL decoded version */ + /* there was a username in the URL. Use the URL decoded version */ userp = &data->state.aptr.user; url_provided = TRUE; } @@ -2812,7 +2745,7 @@ static CURLcode override_login(struct Curl_easy *data, } /* - * Set the login details so they're available in the connection + * Set the login details so they are available in the connection */ static CURLcode set_login(struct Curl_easy *data, struct connectdata *conn) @@ -2883,7 +2816,7 @@ static CURLcode parse_connect_to_host_port(struct Curl_easy *data, /* detect and extract RFC6874-style IPv6-addresses */ if(*hostptr == '[') { -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 char *ptr = ++hostptr; /* advance beyond the initial bracket */ while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':') || (*ptr == '.'))) ptr++; @@ -2903,8 +2836,8 @@ static CURLcode parse_connect_to_host_port(struct Curl_easy *data, else infof(data, "Invalid IPv6 address format"); portptr = ptr; - /* Note that if this didn't end with a bracket, we still advanced the - * hostptr first, but I can't see anything wrong with that as no host + /* Note that if this did not end with a bracket, we still advanced the + * hostptr first, but I cannot see anything wrong with that as no host * name nor a numeric can legally start with a bracket. */ #else @@ -2918,7 +2851,7 @@ static CURLcode parse_connect_to_host_port(struct Curl_easy *data, host_portno = strchr(portptr, ':'); if(host_portno) { char *endp = NULL; - *host_portno = '\0'; /* cut off number from host name */ + *host_portno = '\0'; /* cut off number from hostname */ host_portno++; if(*host_portno) { long portparse = strtol(host_portno, &endp, 10); @@ -2933,7 +2866,7 @@ static CURLcode parse_connect_to_host_port(struct Curl_easy *data, } } - /* now, clone the cleaned host name */ + /* now, clone the cleaned hostname */ DEBUGASSERT(hostptr); *hostname_result = strdup(hostptr); if(!*hostname_result) { @@ -3066,7 +2999,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data, #ifndef CURL_DISABLE_ALTSVC if(data->asi && !host && (port == -1) && ((conn->handler->protocol == CURLPROTO_HTTPS) || -#ifdef CURLDEBUG +#ifdef DEBUGBUILD /* allow debug builds to circumvent the HTTPS restriction */ getenv("CURL_ALTSVC_HTTP") #else @@ -3081,7 +3014,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data, #ifdef USE_HTTP2 | ALPN_h2 #endif -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 | ALPN_h3 #endif ) & data->asi->flags; @@ -3129,7 +3062,7 @@ static CURLcode parse_connect_to_slist(struct Curl_easy *data, conn->transport = TRNSPRT_QUIC; conn->httpversion = 30; break; - default: /* shouldn't be possible */ + default: /* should not be possible */ break; } } @@ -3292,7 +3225,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 + /* We are reusing the connection - no need to resolve anything, and idnconvert_hostname() was called already in create_conn() for the reuse case. */ *async = FALSE; @@ -3304,7 +3237,7 @@ static CURLcode resolve_server(struct Curl_easy *data, /* * Cleanup the connection `temp`, just allocated for `data`, before using the - * previously `existing` one for `data`. All relevant info is copied over + * previously `existing` one for `data`. All relevant info is copied over * and `temp` is freed. */ static void reuse_conn(struct Curl_easy *data, @@ -3314,7 +3247,7 @@ static void reuse_conn(struct Curl_easy *data, /* 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 */ + /* use the new username and password though */ Curl_safefree(existing->user); Curl_safefree(existing->passwd); existing->user = temp->user; @@ -3326,7 +3259,7 @@ static void reuse_conn(struct Curl_easy *data, #ifndef CURL_DISABLE_PROXY 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 */ + /* use the new proxy username and proxy password though */ Curl_safefree(existing->http_proxy.user); Curl_safefree(existing->socks_proxy.user); Curl_safefree(existing->http_proxy.passwd); @@ -3373,14 +3306,14 @@ static void reuse_conn(struct Curl_easy *data, temp->hostname_resolve = NULL; /* reuse init */ - existing->bits.reuse = TRUE; /* yes, we're reusing here */ + existing->bits.reuse = TRUE; /* yes, we are reusing here */ - conn_free(data, temp); + Curl_conn_free(data, temp); } /** * create_conn() sets up a new connectdata struct, or reuses an already - * existing one, and resolves host name. + * existing one, and resolves hostname. * * if this function returns CURLE_OK and *async is set to TRUE, the resolve * response will be coming asynchronously. If *async is FALSE, the name is @@ -3562,7 +3495,7 @@ static CURLcode create_conn(struct Curl_easy *data, goto out; /*********************************************************************** - * file: is a special case in that it doesn't need a network connection + * file: is a special case in that it does not need a network connection ***********************************************************************/ #ifndef CURL_DISABLE_FILE if(conn->handler->flags & PROTOPT_NONETWORK) { @@ -3573,7 +3506,7 @@ static CURLcode create_conn(struct Curl_easy *data, Curl_persistconninfo(data, conn, NULL); result = conn->handler->connect_it(data, &done); - /* Setup a "faked" transfer that'll do nothing */ + /* Setup a "faked" transfer that will do nothing */ if(!result) { Curl_attach_connection(data, conn); result = Curl_conncache_add_conn(data); @@ -3590,7 +3523,7 @@ static CURLcode create_conn(struct Curl_easy *data, (void)conn->handler->done(data, result, FALSE); goto out; } - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); } /* since we skip do_init() */ @@ -3705,16 +3638,22 @@ static CURLcode create_conn(struct Curl_easy *data, conn_candidate = Curl_conncache_extract_oldest(data); if(conn_candidate) Curl_disconnect(data, conn_candidate, FALSE); - else { - infof(data, "No connections available in cache"); - connections_available = FALSE; - } + else +#ifndef CURL_DISABLE_DOH + if(data->set.dohfor) + infof(data, "Allowing DoH to override max connection limit"); + else +#endif + { + infof(data, "No connections available in cache"); + connections_available = FALSE; + } } if(!connections_available) { infof(data, "No connections available."); - conn_free(data, conn); + Curl_conn_free(data, conn); *in_connect = NULL; result = CURLE_NO_CONNECTION_AVAILABLE; @@ -3738,17 +3677,17 @@ static CURLcode create_conn(struct Curl_easy *data, } #if defined(USE_NTLM) - /* If NTLM is requested in a part of this connection, make sure we don't + /* If NTLM is requested in a part of this connection, make sure we do not assume the state is fine as this is a fresh connection and NTLM is connection based. */ - if((data->state.authhost.picked & (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) && + if((data->state.authhost.picked & CURLAUTH_NTLM) && data->state.authhost.done) { infof(data, "NTLM picked AND auth done set, clear picked"); data->state.authhost.picked = CURLAUTH_NONE; data->state.authhost.done = FALSE; } - if((data->state.authproxy.picked & (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) && + if((data->state.authproxy.picked & CURLAUTH_NTLM) && data->state.authproxy.done) { infof(data, "NTLM-proxy picked AND auth done set, clear picked"); data->state.authproxy.picked = CURLAUTH_NONE; @@ -3807,7 +3746,7 @@ CURLcode Curl_setup_conn(struct Curl_easy *data, #ifndef CURL_DISABLE_PROXY /* set proxy_connect_closed to false unconditionally already here since it is used strictly to provide extra information to a parent function in the - case of proxy CONNECT failures and we must make sure we don't have it + case of proxy CONNECT failures and we must make sure we do not have it lingering set from a previous invoke */ conn->bits.proxy_connect_closed = FALSE; #endif @@ -3850,7 +3789,7 @@ CURLcode Curl_connect(struct Curl_easy *data, /* multiplexed */ *protocol_done = TRUE; else if(!*asyncp) { - /* DNS resolution is done: that's either because this is a reused + /* DNS resolution is done: that is either because this is a reused connection, in which case DNS was unnecessary, or because DNS really did finish already (synch resolver/fast async resolve) */ result = Curl_setup_conn(data, protocol_done); @@ -3861,7 +3800,7 @@ CURLcode Curl_connect(struct Curl_easy *data, return result; } else if(result && conn) { - /* We're not allowed to return failure with memory left allocated in the + /* We are not allowed to return failure with memory left allocated in the connectdata struct, free those here */ Curl_detach_connection(data); Curl_conncache_remove_conn(data, conn, TRUE); @@ -3884,14 +3823,12 @@ CURLcode Curl_connect(struct Curl_easy *data, CURLcode Curl_init_do(struct Curl_easy *data, struct connectdata *conn) { /* if this is a pushed stream, we need this: */ - CURLcode result = Curl_preconnect(data); - if(result) - return result; + CURLcode result; if(conn) { - conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to + conn->bits.do_more = FALSE; /* by default there is no curl_do_more() to use */ - /* if the protocol used doesn't support wildcards, switch it off */ + /* if the protocol used does not support wildcards, switch it off */ if(data->state.wildcardmatch && !(conn->handler->flags & PROTOPT_WILDCARD)) data->state.wildcardmatch = FALSE; @@ -3904,14 +3841,12 @@ CURLcode Curl_init_do(struct Curl_easy *data, struct connectdata *conn) data->state.httpreq = HTTPREQ_HEAD; result = Curl_req_start(&data->req, data); - if(result) - return result; - - Curl_speedinit(data); - Curl_pgrsSetUploadCounter(data, 0); - Curl_pgrsSetDownloadCounter(data, 0); - - return CURLE_OK; + if(!result) { + Curl_speedinit(data); + Curl_pgrsSetUploadCounter(data, 0); + Curl_pgrsSetDownloadCounter(data, 0); + } + return result; } #if defined(USE_HTTP2) || defined(USE_HTTP3) diff --git a/lib/url.h b/lib/url.h index 198a00ad1..55f9b1585 100644 --- a/lib/url.h +++ b/lib/url.h @@ -38,9 +38,10 @@ CURLcode Curl_uc_to_curlcode(CURLUcode uc); CURLcode Curl_close(struct Curl_easy **datap); /* opposite of curl_open() */ CURLcode Curl_connect(struct Curl_easy *, bool *async, bool *protocol_connect); void Curl_disconnect(struct Curl_easy *data, - struct connectdata *, bool dead_connection); + struct connectdata *, bool aborted); CURLcode Curl_setup_conn(struct Curl_easy *data, bool *protocol_done); +void Curl_conn_free(struct Curl_easy *data, struct connectdata *conn); CURLcode Curl_parse_login_details(const char *login, const size_t len, char **userptr, char **passwdptr, char **optionsptr); diff --git a/lib/urlapi-int.h b/lib/urlapi-int.h index d6e240aa3..fcffab2e9 100644 --- a/lib/urlapi-int.h +++ b/lib/urlapi-int.h @@ -28,12 +28,11 @@ 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); +CURLUcode Curl_url_set_authority(CURLU *u, const char *authority); -#ifdef DEBUGBUILD -CURLUcode Curl_parse_port(struct Curl_URL *u, struct dynbuf *host, - bool has_scheme); +#ifdef UNITTESTS +UNITTEST CURLUcode Curl_parse_port(struct Curl_URL *u, struct dynbuf *host, + bool has_scheme); #endif #endif /* HEADER_CURL_URLAPI_INT_H */ diff --git a/lib/urlapi.c b/lib/urlapi.c index dc4248972..b71be3847 100644 --- a/lib/urlapi.c +++ b/lib/urlapi.c @@ -59,11 +59,11 @@ #define MAX_SCHEME_LEN 40 /* - * If ENABLE_IPV6 is disabled, we still want to parse IPv6 addresses, so make + * If USE_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) +#if !defined(USE_IPV6) && !defined(AF_INET6) #define AF_INET6 (AF_INET + 1) #endif @@ -79,7 +79,10 @@ struct Curl_URL { char *path; char *query; char *fragment; - long portnum; /* the numerical version */ + unsigned short portnum; /* the numerical version (if 'port' is set) */ + BIT(query_present); /* to support blank */ + BIT(fragment_present); /* to support blank */ + BIT(guessed_scheme); /* when a URL without scheme is parsed */ }; #define DEFAULT_SCHEME "https" @@ -99,7 +102,7 @@ static void free_urlhandle(struct Curl_URL *u) } /* - * Find the separator at the end of the host name, or the '?' in cases like + * Find the separator at the end of the hostname, or the '?' in cases like * http://www.example.com?id=2380 */ static const char *find_host_sep(const char *url) @@ -138,7 +141,7 @@ static const char hexdigits[] = "0123456789abcdef"; /* urlencode_str() writes data into an output dynbuf and URL-encodes the * spaces in the source URL accordingly. * - * URL encoding should be skipped for host names, otherwise IDN resolution + * URL encoding should be skipped for hostnames, otherwise IDN resolution * will fail. */ static CURLUcode urlencode_str(struct dynbuf *o, const char *url, @@ -203,7 +206,7 @@ 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 = 0; + size_t i = 0; DEBUGASSERT(!buf || (buflen > MAX_SCHEME_LEN)); (void)buflen; /* only used in debug-builds */ if(buf) @@ -227,15 +230,13 @@ size_t Curl_is_absolute_url(const char *url, char *buf, size_t buflen, 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 - be the host name "data" with a specified port number. */ + be the hostname "data" with a specified port number. */ /* the length of the scheme is the name part only */ size_t len = i; if(buf) { + Curl_strntolower(buf, url, i); buf[i] = 0; - while(i--) { - buf[i] = Curl_raw_tolower(url[i]); - } } return len; } @@ -264,9 +265,10 @@ static CURLcode concat_url(char *base, const char *relurl, char **newurl) const char *useurl = relurl; CURLcode result = CURLE_OK; CURLUcode uc; + bool skip_slash = FALSE; *newurl = NULL; - /* protsep points to the start of the host name */ + /* protsep points to the start of the hostname */ protsep = strstr(base, "//"); if(!protsep) protsep = base; @@ -276,55 +278,57 @@ static CURLcode concat_url(char *base, const char *relurl, char **newurl) if('/' != relurl[0]) { int level = 0; - /* First we need to find out if there's a ?-letter in the URL, + /* First we need to find out if there is a ?-letter in the URL, and cut it and the right-side of that off */ pathsep = strchr(protsep, '?'); if(pathsep) *pathsep = 0; - /* we have a relative path to append to the last slash if there's one - available, or if the new URL is just a query string (starts with a - '?') we append the new one at the end of the entire currently worked - out URL */ - if(useurl[0] != '?') { + /* we have a relative path to append to the last slash if there is one + available, or the new URL is just a query string (starts with a '?') or + a fragment (starts with '#') we append the new one at the end of the + current URL */ + if((useurl[0] != '?') && (useurl[0] != '#')) { pathsep = strrchr(protsep, '/'); if(pathsep) *pathsep = 0; - } - /* Check if there's any slash after the host name, and if so, remember - that position instead */ - pathsep = strchr(protsep, '/'); - if(pathsep) - protsep = pathsep + 1; - else - protsep = NULL; + /* Check if there is any slash after the hostname, and if so, remember + that position instead */ + pathsep = strchr(protsep, '/'); + if(pathsep) + protsep = pathsep + 1; + else + protsep = NULL; - /* now deal with one "./" or any amount of "../" in the newurl - and act accordingly */ + /* now deal with one "./" or any amount of "../" in the newurl + and act accordingly */ - if((useurl[0] == '.') && (useurl[1] == '/')) - useurl += 2; /* just skip the "./" */ + if((useurl[0] == '.') && (useurl[1] == '/')) + useurl += 2; /* just skip the "./" */ - while((useurl[0] == '.') && - (useurl[1] == '.') && - (useurl[2] == '/')) { - level++; - useurl += 3; /* pass the "../" */ - } + while((useurl[0] == '.') && + (useurl[1] == '.') && + (useurl[2] == '/')) { + level++; + useurl += 3; /* pass the "../" */ + } - if(protsep) { - while(level--) { - /* cut off one more level from the right of the original URL */ - pathsep = strrchr(protsep, '/'); - if(pathsep) - *pathsep = 0; - else { - *protsep = 0; - break; + if(protsep) { + while(level--) { + /* cut off one more level from the right of the original URL */ + pathsep = strrchr(protsep, '/'); + if(pathsep) + *pathsep = 0; + else { + *protsep = 0; + break; + } } } } + else + skip_slash = TRUE; } else { /* We got a new absolute path for this server */ @@ -344,7 +348,7 @@ static CURLcode concat_url(char *base, const char *relurl, char **newurl) if(pathsep) { /* When people use badly formatted URLs, such as "http://www.example.com?dir=/home/daniel" we must not use the first - slash, if there's a ?-letter before it! */ + slash, if there is a ?-letter before it! */ char *sep = strchr(protsep, '?'); if(sep && (sep < pathsep)) pathsep = sep; @@ -352,8 +356,8 @@ static CURLcode concat_url(char *base, const char *relurl, char **newurl) } else { /* There was no slash. Now, since we might be operating on a badly - 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 + formatted URL, such as "http://www.example.com?id=2380" which does + not use a slash separator as it is supposed to, we need to check for a ?-letter as well! */ pathsep = strchr(protsep, '?'); if(pathsep) @@ -364,13 +368,13 @@ static CURLcode concat_url(char *base, const char *relurl, char **newurl) Curl_dyn_init(&newest, CURL_MAX_INPUT_LENGTH); - /* copy over the root url part */ + /* copy over the root URL part */ result = Curl_dyn_add(&newest, base); if(result) return result; /* check if we need to append a slash */ - if(('/' == useurl[0]) || (protsep && !*protsep) || ('?' == useurl[0])) + if(('/' == useurl[0]) || (protsep && !*protsep) || skip_slash) ; else { result = Curl_dyn_addn(&newest, "/", 1); @@ -417,15 +421,15 @@ static CURLUcode junkscan(const char *url, size_t *urllen, unsigned int flags) /* * parse_hostname_login() * - * Parse the login details (user name, password and options) from the URL and - * strip them out of the host name + * Parse the login details (username, password and options) from the URL and + * strip them out of the hostname * */ static CURLUcode parse_hostname_login(struct Curl_URL *u, const char *login, size_t len, unsigned int flags, - size_t *offset) /* to the host name */ + size_t *offset) /* to the hostname */ { CURLUcode result = CURLUE_OK; CURLcode ccode; @@ -472,7 +476,7 @@ static CURLUcode parse_hostname_login(struct Curl_URL *u, if(userp) { if(flags & CURLU_DISALLOW_USER) { - /* Option DISALLOW_USER is set and url contains username. */ + /* Option DISALLOW_USER is set and URL contains username. */ result = CURLUE_USER_NOT_ALLOWED; goto out; } @@ -490,7 +494,7 @@ static CURLUcode parse_hostname_login(struct Curl_URL *u, u->options = optionsp; } - /* the host name starts at this offset */ + /* the hostname starts at this offset */ *offset = ptr - login; return CURLUE_OK; @@ -532,14 +536,14 @@ UNITTEST CURLUcode Curl_parse_port(struct Curl_URL *u, struct dynbuf *host, if(portptr) { char *rest = NULL; - long port; + unsigned long port; size_t keep = portptr - hostname; - /* Browser behavior adaptation. If there's a colon with no digits after, + /* Browser behavior adaptation. If there is a colon with no digits after, just cut off the name there which makes us ignore the colon and just use the default port. Firefox, Chrome and Safari all do that. - Don't do it if the URL has no scheme, to make something that looks like + Do not do it if the URL has no scheme, to make something that looks like a scheme not work! */ Curl_dyn_setlen(host, keep); @@ -550,15 +554,13 @@ UNITTEST CURLUcode Curl_parse_port(struct Curl_URL *u, struct dynbuf *host, if(!ISDIGIT(*portptr)) return CURLUE_BAD_PORT_NUMBER; - port = strtol(portptr, &rest, 10); /* Port number must be decimal */ - - if(port > 0xffff) - return CURLUE_BAD_PORT_NUMBER; + errno = 0; + port = strtoul(portptr, &rest, 10); /* Port number must be decimal */ - if(rest[0]) + if(errno || (port > 0xffff) || *rest) return CURLUE_BAD_PORT_NUMBER; - u->portnum = port; + u->portnum = (unsigned short) port; /* generate a new port number string to get rid of leading zeroes etc */ free(u->port); u->port = aprintf("%ld", port); @@ -590,7 +592,7 @@ static CURLUcode ipv6_parse(struct Curl_URL *u, char *hostname, char zoneid[16]; int i = 0; char *h = &hostname[len + 1]; - /* pass '25' if present and is a url encoded percent sign */ + /* 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)) @@ -663,7 +665,6 @@ static CURLUcode hostname_check(struct Curl_URL *u, char *hostname, */ #define HOST_ERROR -1 /* out of memory */ -#define HOST_BAD -2 /* bad IPv4 address */ #define HOST_NAME 1 #define HOST_IPV4 2 @@ -680,13 +681,21 @@ static int ipv4_normalize(struct dynbuf *host) if(*c == '[') return HOST_IPV6; + errno = 0; /* for strtoul */ while(!done) { char *endp = NULL; unsigned long l; if(!ISDIGIT(*c)) - /* most importantly this doesn't allow a leading plus or minus */ + /* most importantly this does not allow a leading plus or minus */ return HOST_NAME; l = strtoul(c, &endp, 0); + if(errno) + return HOST_NAME; +#if SIZEOF_LONG > 4 + /* a value larger than 32 bits */ + if(l > UINT_MAX) + return HOST_NAME; +#endif parts[n] = l; c = endp; @@ -706,16 +715,6 @@ static int ipv4_normalize(struct dynbuf *host) default: return HOST_NAME; } - - /* 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) { @@ -803,7 +802,7 @@ static CURLUcode parse_authority(struct Curl_URL *u, CURLcode result; /* - * Parse the login details and strip them out of the host name. + * Parse the login details and strip them out of the hostname. */ uc = parse_hostname_login(u, auth, authlen, flags, &offset); if(uc) @@ -836,7 +835,6 @@ static CURLUcode parse_authority(struct Curl_URL *u, case HOST_ERROR: uc = CURLUE_OUT_OF_MEMORY; break; - case HOST_BAD: default: uc = CURLUE_BAD_HOSTNAME; /* Bad IPv4 address even */ break; @@ -846,8 +844,8 @@ static CURLUcode parse_authority(struct Curl_URL *u, return uc; } -CURLUcode Curl_url_set_authority(CURLU *u, const char *authority, - unsigned int flags) +/* used for HTTP/2 server push */ +CURLUcode Curl_url_set_authority(CURLU *u, const char *authority) { CURLUcode result; struct dynbuf host; @@ -855,8 +853,8 @@ CURLUcode Curl_url_set_authority(CURLU *u, const char *authority, DEBUGASSERT(authority); Curl_dyn_init(&host, CURL_MAX_INPUT_LENGTH); - result = parse_authority(u, authority, strlen(authority), flags, - &host, !!u->scheme); + result = parse_authority(u, authority, strlen(authority), + CURLU_DISALLOW_USER, &host, !!u->scheme); if(result) Curl_dyn_free(&host); else { @@ -908,7 +906,7 @@ UNITTEST int dedotdotify(const char *input, size_t clen, char **outp) do { bool dotdot = TRUE; if(*input == '.') { - /* A. If the input buffer begins with a prefix of "../" or "./", then + /* A. If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise, */ if(!strncmp("./", input, 2)) { @@ -919,7 +917,7 @@ UNITTEST int dedotdotify(const char *input, size_t clen, char **outp) input += 3; clen -= 3; } - /* D. if the input buffer consists only of "." or "..", then remove + /* D. if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise, */ else if(!strcmp(".", input) || !strcmp("..", input) || @@ -931,7 +929,7 @@ UNITTEST int dedotdotify(const char *input, size_t clen, char **outp) dotdot = FALSE; } else if(*input == '/') { - /* B. if the input buffer begins with a prefix of "/./" or "/.", where + /* B. if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise, */ if(!strncmp("/./", input, 3)) { @@ -944,7 +942,7 @@ UNITTEST int dedotdotify(const char *input, size_t clen, char **outp) break; } - /* C. if the input buffer begins with a prefix of "/../" or "/..", + /* C. if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise, */ @@ -978,7 +976,7 @@ UNITTEST int dedotdotify(const char *input, size_t clen, char **outp) dotdot = FALSE; if(!dotdot) { - /* E. move the first path segment in the input buffer to the end of + /* E. move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer. */ @@ -1071,7 +1069,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags) * Appendix E, but believe me, it was meant to be there. --MK) */ if(ptr[0] != '/' && !STARTS_WITH_URL_DRIVE_PREFIX(ptr)) { - /* the URL includes a host name, it must match "localhost" or + /* the URL includes a hostname, it must match "localhost" or "127.0.0.1" to be valid */ if(checkprefix("localhost/", ptr) || checkprefix("127.0.0.1/", ptr)) { @@ -1081,9 +1079,9 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags) #if defined(_WIN32) size_t len; - /* the host name, NetBIOS computer name, can not contain disallowed + /* the hostname, NetBIOS computer name, can not contain disallowed chars, and the delimiting slash character must be appended to the - host name */ + hostname */ path = strpbrk(ptr, "/\\:*?\"<>|"); if(!path || *path != '/') { result = CURLUE_BAD_FILE_URL; @@ -1119,7 +1117,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags) Curl_dyn_reset(&host); #if !defined(_WIN32) && !defined(MSDOS) && !defined(__CYGWIN__) - /* Don't allow Windows drive letters when not in Windows. + /* Do not 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])) || STARTS_WITH_URL_DRIVE_PREFIX(path)) { @@ -1163,7 +1161,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags) result = CURLUE_BAD_SLASHES; goto fail; } - hostp = p; /* host name starts here */ + hostp = p; /* hostname starts here */ } else { /* no scheme! */ @@ -1189,7 +1187,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags) } } - /* find the end of the host name + port number */ + /* find the end of the hostname + port number */ hostlen = strcspn(hostp, "/?#"); path = &hostp[hostlen]; @@ -1203,7 +1201,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags) if((flags & CURLU_GUESS_SCHEME) && !schemep) { const char *hostname = Curl_dyn_ptr(&host); - /* legacy curl-style guess based on host name */ + /* legacy curl-style guess based on hostname */ if(checkprefix("ftp.", hostname)) schemep = "ftp"; else if(checkprefix("dict.", hostname)) @@ -1224,6 +1222,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags) result = CURLUE_OUT_OF_MEMORY; goto fail; } + u->guessed_scheme = TRUE; } } else if(flags & CURLU_NO_AUTHORITY) { @@ -1242,6 +1241,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags) fragment = strchr(path, '#'); if(fragment) { fraglen = pathlen - (fragment - path); + u->fragment_present = TRUE; if(fraglen > 1) { /* skip the leading '#' in the copy but include the terminating null */ if(flags & CURLU_URLENCODE) { @@ -1269,6 +1269,7 @@ static CURLUcode parseurl(const char *url, CURLU *u, unsigned int flags) size_t qlen = fragment ? (size_t)(fragment - query) : pathlen - (query - path); pathlen -= qlen; + u->query_present = TRUE; if(qlen > 1) { if(flags & CURLU_URLENCODE) { struct dynbuf enc; @@ -1404,6 +1405,8 @@ CURLU *curl_url_dup(const CURLU *in) DUP(u, in, fragment); DUP(u, in, zoneid); u->portnum = in->portnum; + u->fragment_present = in->fragment_present; + u->query_present = in->query_present; } return u; fail: @@ -1434,6 +1437,8 @@ CURLUcode curl_url_get(const CURLU *u, CURLUPart what, ptr = u->scheme; ifmissing = CURLUE_NO_SCHEME; urldecode = FALSE; /* never for schemes */ + if((flags & CURLU_NO_GUESS_SCHEME) && u->guessed_scheme) + return CURLUE_NO_SCHEME; break; case CURLUPART_USER: ptr = u->user; @@ -1462,7 +1467,7 @@ CURLUcode curl_url_get(const CURLU *u, CURLUPart what, ifmissing = CURLUE_NO_PORT; urldecode = FALSE; /* never for port */ if(!ptr && (flags & CURLU_DEFAULT_PORT) && u->scheme) { - /* there's no stored port number, but asked to deliver + /* there is no stored port number, but asked to deliver a default one for the scheme */ const struct Curl_handler *h = Curl_get_scheme_handler(u->scheme); if(h) { @@ -1488,10 +1493,16 @@ CURLUcode curl_url_get(const CURLU *u, CURLUPart what, ptr = u->query; ifmissing = CURLUE_NO_QUERY; plusdecode = urldecode; + if(ptr && !ptr[0] && !(flags & CURLU_GET_EMPTY)) + /* there was a blank query and the user do not ask for it */ + ptr = NULL; break; case CURLUPART_FRAGMENT: ptr = u->fragment; ifmissing = CURLUE_NO_FRAGMENT; + if(!ptr && u->fragment_present && flags & CURLU_GET_EMPTY) + /* there was a blank fragment and the user asks for it */ + ptr = ""; break; case CURLUPART_URL: { char *url; @@ -1499,18 +1510,24 @@ CURLUcode curl_url_get(const CURLU *u, CURLUPart what, char *options = u->options; char *port = u->port; char *allochost = NULL; + bool show_fragment = + u->fragment || (u->fragment_present && flags & CURLU_GET_EMPTY); + bool show_query = + (u->query && u->query[0]) || + (u->query_present && flags & CURLU_GET_EMPTY); 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, - u->fragment? "#": "", - u->fragment? u->fragment : ""); + show_fragment ? "#": "", + u->fragment ? u->fragment : ""); } else if(!u->host) return CURLUE_NO_HOST; else { const struct Curl_handler *h = NULL; + char schemebuf[MAX_SCHEME_LEN + 5]; if(u->scheme) scheme = u->scheme; else if(flags & CURLU_DEFAULT_SCHEME) @@ -1520,7 +1537,7 @@ CURLUcode curl_url_get(const CURLU *u, CURLUPart what, h = Curl_get_scheme_handler(scheme); if(!port && (flags & CURLU_DEFAULT_PORT)) { - /* there's no stored port number, but asked to deliver + /* there is no stored port number, but asked to deliver a default one for the scheme */ if(h) { msnprintf(portbuf, sizeof(portbuf), "%u", h->defport); @@ -1581,8 +1598,13 @@ CURLUcode curl_url_get(const CURLU *u, CURLUPart what, } } - url = aprintf("%s://%s%s%s%s%s%s%s%s%s%s%s%s%s%s", - scheme, + if(!(flags & CURLU_NO_GUESS_SCHEME) || !u->guessed_scheme) + msnprintf(schemebuf, sizeof(schemebuf), "%s://", scheme); + else + schemebuf[0] = 0; + + url = aprintf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", + schemebuf, u->user ? u->user : "", u->password ? ":": "", u->password ? u->password : "", @@ -1593,9 +1615,9 @@ CURLUcode curl_url_get(const CURLU *u, CURLUPart what, port ? ":": "", port ? port : "", u->path ? u->path : "/", - (u->query && u->query[0]) ? "?": "", - (u->query && u->query[0]) ? u->query : "", - u->fragment? "#": "", + show_query ? "?": "", + u->query ? u->query : "", + show_fragment ? "#": "", u->fragment? u->fragment : ""); free(allochost); } @@ -1687,7 +1709,6 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what, const char *part, unsigned int flags) { char **storep = NULL; - long port = 0; bool urlencode = (flags & CURLU_URLENCODE)? 1 : 0; bool plusencode = FALSE; bool urlskipslash = FALSE; @@ -1705,6 +1726,7 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what, break; case CURLUPART_SCHEME: storep = &u->scheme; + u->guessed_scheme = FALSE; break; case CURLUPART_USER: storep = &u->user; @@ -1730,9 +1752,11 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what, break; case CURLUPART_QUERY: storep = &u->query; + u->query_present = FALSE; break; case CURLUPART_FRAGMENT: storep = &u->fragment; + u->fragment_present = FALSE; break; default: return CURLUE_UNKNOWN_PART; @@ -1775,6 +1799,7 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what, } else return CURLUE_BAD_SCHEME; + u->guessed_scheme = FALSE; break; } case CURLUPART_USER: @@ -1794,18 +1819,26 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what, storep = &u->zoneid; break; case CURLUPART_PORT: - { - char *endp; - urlencode = FALSE; /* never */ - port = strtol(part, &endp, 10); /* Port number must be decimal */ - if((port <= 0) || (port > 0xffff)) - return CURLUE_BAD_PORT_NUMBER; - if(*endp) - /* weirdly provided number, not good! */ + if(!ISDIGIT(part[0])) + /* not a number */ return CURLUE_BAD_PORT_NUMBER; - storep = &u->port; - } - break; + else { + char *tmp; + char *endp; + unsigned long port; + errno = 0; + port = strtoul(part, &endp, 10); /* must be decimal */ + if(errno || (port > 0xffff) || *endp) + /* weirdly provided number, not good! */ + return CURLUE_BAD_PORT_NUMBER; + tmp = strdup(part); + if(!tmp) + return CURLUE_OUT_OF_MEMORY; + free(u->port); + u->port = tmp; + u->portnum = (unsigned short)port; + return CURLUE_OK; + } case CURLUPART_PATH: urlskipslash = TRUE; leadingslash = TRUE; /* enforce */ @@ -1816,9 +1849,11 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what, appendquery = (flags & CURLU_APPENDQUERY)?1:0; equalsencode = appendquery; storep = &u->query; + u->query_present = TRUE; break; case CURLUPART_FRAGMENT: storep = &u->fragment; + u->fragment_present = TRUE; break; case CURLUPART_URL: { /* @@ -1837,7 +1872,7 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what, 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'), + * (we could not get an absolute URL in 'oldurl'), * then replace the existing with the new. */ if(Curl_is_absolute_url(part, NULL, 0, flags & (CURLU_GUESS_SCHEME| @@ -1953,7 +1988,7 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what, 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. */ + /* Skip hostname check, it is allowed to be empty. */ } else { if(!n || hostname_check(u, (char *)newp, n)) { @@ -1966,9 +2001,5 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what, free(*storep); *storep = (char *)newp; } - /* set after the string, to make it not assigned if the allocation above - fails */ - if(port) - u->portnum = port; return CURLUE_OK; } diff --git a/lib/urldata.h b/lib/urldata.h index ce28f25bb..f34aa591c 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -55,10 +55,19 @@ struct curl_trc_featt; +#ifdef USE_ECH +/* CURLECH_ bits for the tls_ech option */ +# define CURLECH_DISABLE (1<<0) +# define CURLECH_GREASE (1<<1) +# define CURLECH_ENABLE (1<<2) +# define CURLECH_HARD (1<<3) +# define CURLECH_CLA_CFG (1<<4) +#endif + #ifdef USE_WEBSOCKETS /* CURLPROTO_GOPHERS (29) is the highest publicly used protocol bit number, * the rest are internal information. If we use higher bits we only do this on - * platforms that have a >= 64 bit type and then we use such a type for the + * platforms that have a >= 64-bit type and then we use such a type for the * protocol fields in the protocol handler. */ #define CURLPROTO_WS (1<<30) @@ -104,7 +113,7 @@ typedef unsigned int curl_prot_t; #define PROTO_FAMILY_SSH (CURLPROTO_SCP|CURLPROTO_SFTP) #if !defined(CURL_DISABLE_FTP) || defined(USE_SSH) || \ - !defined(CURL_DISABLE_POP3) + !defined(CURL_DISABLE_POP3) || !defined(CURL_DISABLE_FILE) /* these protocols support CURLOPT_DIRLISTONLY */ #define CURL_LIST_ONLY_PROTOCOL 1 #endif @@ -232,8 +241,7 @@ typedef CURLcode (*Curl_datastream)(struct Curl_easy *data, #ifdef HAVE_GSSAPI /* Types needed for krb5-ftp connections */ struct krb5buffer { - void *data; - size_t size; + struct dynbuf buf; size_t index; BIT(eof_flag); }; @@ -249,22 +257,6 @@ enum protection_level { }; #endif -/* enum for the nonblocking SSL connection state machine */ -typedef enum { - ssl_connect_1, - ssl_connect_2, - ssl_connect_2_reading, - ssl_connect_2_writing, - ssl_connect_3, - ssl_connect_done -} ssl_connect_state; - -typedef enum { - ssl_connection_none, - ssl_connection_negotiating, - ssl_connection_complete -} ssl_connection_state; - /* SSL backend-specific data; declared differently by each SSL backend */ struct ssl_backend_data; @@ -279,10 +271,12 @@ struct ssl_peer { char *dispname; /* display version of hostname */ char *sni; /* SNI version of hostname or NULL if not usable */ ssl_peer_type type; /* type of the peer information */ + int port; /* port we are talking to */ + int transport; /* TCP or QUIC */ }; struct ssl_primary_config { - char *CApath; /* certificate dir (doesn't work on windows) */ + char *CApath; /* certificate dir (does not work on windows) */ char *CAfile; /* certificate to verify peer against */ char *issuercert; /* optional issuer certificate filename */ char *clientcert; @@ -304,7 +298,7 @@ struct ssl_primary_config { 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 */ - BIT(sessionid); /* cache session IDs or not */ + BIT(cache_session); /* cache session or not */ }; struct ssl_config_data { @@ -313,7 +307,7 @@ struct ssl_config_data { curl_ssl_ctx_callback fsslctx; /* function to initialize ssl ctx */ void *fsslctxp; /* parameter for call back */ char *cert_type; /* format for certificate (default: PEM)*/ - char *key; /* private key file name */ + char *key; /* private key filename */ struct curl_blob *key_blob; char *key_type; /* format for private key (default: PEM) */ char *key_passwd; /* plain text private key password */ @@ -321,7 +315,7 @@ struct ssl_config_data { BIT(falsestart); 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(no_partialchain); /* do not accept partial certificate chains */ BIT(revoke_best_effort); /* ignore SSL revocation offline/missing revocation list errors */ BIT(native_ca_store); /* use the native ca store of operating system */ @@ -334,16 +328,20 @@ struct ssl_general_config { int ca_cache_timeout; /* Certificate store cache timeout (seconds) */ }; +typedef void Curl_ssl_sessionid_dtor(void *sessionid, size_t idsize); + /* information stored about one single SSL session */ struct Curl_ssl_session { - char *name; /* host name for which this ID was used */ - char *conn_to_host; /* host name for the connection (may be NULL) */ + char *name; /* hostname for which this ID was used */ + char *conn_to_host; /* hostname for the connection (may be NULL) */ const char *scheme; /* protocol scheme used */ void *sessionid; /* as returned from the SSL layer */ size_t idsize; /* if known, otherwise 0 */ + Curl_ssl_sessionid_dtor *sessionid_free; /* free `sessionid` callback */ long age; /* just a number, the higher the more recent */ int remote_port; /* remote port */ int conn_to_port; /* remote port for the connection (may be -1) */ + int transport; /* TCP or QUIC */ struct ssl_primary_config ssl_config; /* setup for this session */ }; @@ -444,14 +442,6 @@ struct ntlmdata { unsigned char nonce[8]; unsigned int target_info_len; void *target_info; /* TargetInfo received in the ntlm type-2 message */ - -#if defined(NTLM_WB_ENABLED) - /* used for communication with Samba's winbind daemon helper ntlm_auth */ - curl_socket_t ntlm_auth_hlpr_socket; - pid_t ntlm_auth_hlpr_pid; - char *challenge; /* The received base64 encoded ntlm type-2 message */ - char *response; /* The generated base64 ntlm type-1/type-3 message */ -#endif #endif }; #endif @@ -529,10 +519,10 @@ struct ConnectBits { re-attempted at another connection. */ #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 + EPSV does not work we disable it for the forthcoming requests */ BIT(ftp_use_eprt); /* As set with CURLOPT_FTP_USE_EPRT, but if we find out - EPRT doesn't work we disable it for the forthcoming + EPRT does not work we disable it for the forthcoming requests */ BIT(ftp_use_data_ssl); /* Enabled SSL for the data connection */ BIT(ftp_use_control_ssl); /* Enabled SSL for the control connection */ @@ -556,6 +546,9 @@ struct ConnectBits { accept() */ BIT(parallel_connect); /* set TRUE when a parallel connect attempt has started (happy eyeballs) */ + BIT(aborted); /* connection was aborted, e.g. in unclean state */ + BIT(shutdown_handler); /* connection shutdown: handler shut down */ + BIT(shutdown_filters); /* connection shutdown: filters shut down */ }; struct hostname { @@ -632,6 +625,9 @@ enum doh_slots { DOH_PROBE_SLOT_IPADDR_V6 = 1, /* 'V6' likewise */ /* Space here for (possibly build-specific) additional slot definitions */ +#ifdef USE_HTTPSRR + DOH_PROBE_SLOT_HTTPS = 2, /* for HTTPS RR */ +#endif /* for example */ /* #ifdef WANT_DOH_FOOBAR_TXT */ @@ -647,7 +643,7 @@ enum doh_slots { */ struct Curl_handler { - const char *scheme; /* URL scheme name. */ + const char *scheme; /* URL scheme name in lowercase */ /* Complement to setup_connection_internals(). This is done before the transfer "owns" the connection. */ @@ -667,7 +663,7 @@ struct Curl_handler { /* This function *MAY* be set to a protocol-dependent function that is run * 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 + * function completes before return. If it does not complete, the caller * should call the ->connecting() function until it is. */ CURLcode (*connect_it)(struct Curl_easy *data, bool *done); @@ -698,7 +694,7 @@ struct Curl_handler { struct connectdata *conn, curl_socket_t *socks); /* 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 + * 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 (again) associated with * the transfer here. @@ -706,12 +702,18 @@ struct Curl_handler { CURLcode (*disconnect)(struct Curl_easy *, struct connectdata *, bool dead_connection); - /* If used, this function gets called from transfer.c:readwrite_data() to + /* If used, this function gets called from transfer.c to allow the protocol to do extra handling in writing response to the client. */ CURLcode (*write_resp)(struct Curl_easy *data, const char *buf, size_t blen, bool is_eos); + /* If used, this function gets called from transfer.c to + allow the protocol to do extra handling in writing a single response + header line to the client. */ + CURLcode (*write_resp_hd)(struct Curl_easy *data, + const char *hd, size_t hdlen, bool is_eos); + /* This function can perform various checks on the connection. See CONNCHECK_* for more information about the checks that can be performed, and CONNRESULT_* for the results that can be returned. */ @@ -740,11 +742,11 @@ struct Curl_handler { the send function might need to be called while uploading, or vice versa. */ #define PROTOPT_DIRLOCK (1<<3) -#define PROTOPT_NONETWORK (1<<4) /* protocol doesn't use the network! */ +#define PROTOPT_NONETWORK (1<<4) /* protocol does not use the network! */ #define PROTOPT_NEEDSPWD (1<<5) /* needs a password, and if none is set it gets a default */ -#define PROTOPT_NOURLQUERY (1<<6) /* protocol can't handle - url query strings (?foo=bar) ! */ +#define PROTOPT_NOURLQUERY (1<<6) /* protocol cannot handle + URL query strings (?foo=bar) ! */ #define PROTOPT_CREDSPERREQUEST (1<<7) /* requires login credentials per request instead of per connection */ #define PROTOPT_ALPN (1<<8) /* set ALPN for this */ @@ -756,8 +758,8 @@ struct Curl_handler { this protocol and act as a gateway */ #define PROTOPT_WILDCARD (1<<12) /* protocol supports wildcard matching */ #define PROTOPT_USERPWDCTRL (1<<13) /* Allow "control bytes" (< 32 ascii) in - user name and password */ -#define PROTOPT_NOTCPPROXY (1<<14) /* this protocol can't proxy over TCP */ + username and password */ +#define PROTOPT_NOTCPPROXY (1<<14) /* this protocol cannot proxy over TCP */ #define CONNCHECK_NONE 0 /* No checks */ #define CONNCHECK_ISDEAD (1<<0) /* Check if the connection is dead. */ @@ -778,7 +780,7 @@ struct proxy_info { int port; unsigned char proxytype; /* curl_proxytype: what kind of proxy that is in use */ - char *user; /* proxy user name string, allocated */ + char *user; /* proxy username string, allocated */ char *passwd; /* proxy password string, allocated */ }; @@ -820,8 +822,8 @@ struct connectdata { 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) */ + char *hostname_resolve; /* hostname to resolve to address, allocated */ + char *secondaryhostname; /* secondary socket hostname (ftp) */ struct hostname conn_to_host; /* the host to connect to. valid only if bits.conn_to_host is set */ #ifndef CURL_DISABLE_PROXY @@ -835,7 +837,7 @@ struct connectdata { these are updated with data which comes directly from the socket. */ struct ip_quadruple primary; struct ip_quadruple secondary; - char *user; /* user name string, allocated */ + char *user; /* username string, allocated */ char *passwd; /* password string, allocated */ char *options; /* options string, allocated */ char *sasl_authzid; /* authorization identity string, allocated */ @@ -848,6 +850,13 @@ struct connectdata { Curl_recv *recv[2]; Curl_send *send[2]; struct Curl_cfilter *cfilter[2]; /* connection filters */ + struct { + struct curltime start[2]; /* when filter shutdown started */ + unsigned int timeout_ms; /* 0 means no timeout */ + } shutdown; + /* Last pollset used in connection shutdown. Used to detect changes + * for multi_socket API. */ + struct easy_pollset shutdown_poll; struct ssl_primary_config ssl_config; #ifndef CURL_DISABLE_PROXY @@ -893,11 +902,6 @@ struct connectdata { CtxtHandle *sslContext; #endif -#if defined(_WIN32) && defined(USE_WINSOCK) - struct curltime last_sndbuf_update; /* last time readwrite_upload called - win_update_buffer_size */ -#endif - #ifdef USE_GSASL struct gsasldata gsasl; #endif @@ -971,7 +975,7 @@ 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 reusing + that subsequent bound-requested connections are not accidentally reusing wrong connections. */ char *localdev; unsigned short localportrange; @@ -983,7 +987,7 @@ struct connectdata { int remote_port; /* the remote port, not the proxy port! */ int conn_to_port; /* the remote port to connect to. valid only if bits.conn_to_port is set */ -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 unsigned int scope_id; /* Scope id for IPv6 */ #endif unsigned short localport; @@ -1030,7 +1034,7 @@ struct PureInfo { unsigned long httpauthavail; /* what host auth types were announced */ long numconnects; /* how many new connection did libcurl created */ char *contenttype; /* the content type of the object */ - char *wouldredirect; /* URL this would've been redirected to if asked to */ + char *wouldredirect; /* URL this would have 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 */ @@ -1049,7 +1053,7 @@ struct PureInfo { 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 + BIT(timecond); /* set to TRUE if the time condition did not match, which thus made the document NOT get fetched */ BIT(used_proxy); /* the transfer used a proxy */ }; @@ -1222,8 +1226,8 @@ struct UrlState { curl_off_t current_speed; /* the ProgressShow() function sets this, bytes / second */ - /* host name, port number and protocol of the first (not followed) request. - if set, this should be the host name that we will sent authorization to, + /* hostname, port number and protocol of the first (not followed) request. + if set, this should be the hostname that we will sent authorization to, no else. Used to make Location: following not keep sending user+password. This is strdup()ed data. */ char *first_host; @@ -1327,22 +1331,28 @@ struct UrlState { /* Dynamically allocated strings, MUST be freed before this struct is killed. */ struct dynamically_allocated_data { - char *proxyuserpwd; char *uagent; char *accept_encoding; char *userpwd; char *rangeline; char *ref; char *host; +#ifndef CURL_DISABLE_COOKIES char *cookiehost; +#endif +#ifndef CURL_DISABLE_RTSP char *rtsp_transport; +#endif char *te; /* TE: request header */ /* transfer credentials */ char *user; char *passwd; +#ifndef CURL_DISABLE_PROXY + char *proxyuserpwd; char *proxyuser; char *proxypasswd; +#endif } aptr; unsigned char httpwant; /* when non-zero, a specific HTTP version requested @@ -1354,7 +1364,7 @@ struct UrlState { unsigned char select_bits; /* != 0 -> bitmask of socket events for this transfer overriding anything the socket may report */ -#ifdef CURLDEBUG +#ifdef DEBUGBUILD BIT(conncache_lock); #endif /* when curl_easy_perform() is called, the multi handle is "owned" by @@ -1369,7 +1379,7 @@ struct UrlState { called. */ BIT(allow_port); /* Is set.use_port allowed to take effect or not. This is always set TRUE when curl_easy_perform() is called. */ - BIT(authproblem); /* TRUE if there's some problem authenticating */ + BIT(authproblem); /* TRUE if there is some problem authenticating */ /* set after initial USER failure, to prevent an authentication loop */ BIT(wildcardmatch); /* enable wildcard matching */ BIT(disableexpect); /* TRUE if Expect: is disabled due to a previous @@ -1379,7 +1389,6 @@ 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(previouslypending); /* this transfer WAS in the multi->pending queue */ #ifndef CURL_DISABLE_COOKIES BIT(cookie_engine); #endif @@ -1407,95 +1416,129 @@ struct UrlState { struct Curl_multi; /* declared in multihandle.c */ -/* - * This enumeration MUST not use conditional directives (#ifdefs), new - * null terminated strings MUST be added to the enumeration immediately - * before STRING_LASTZEROTERMINATED, binary fields immediately before - * STRING_LAST. When doing so, ensure that the packages/OS400/chkstring.c - * test is updated and applicable changes for EBCDIC to ASCII conversion - * are catered for in curl_easy_setopt_ccsid() - */ enum dupstring { - STRING_CERT, /* client certificate file name */ - STRING_CERT_PROXY, /* client certificate file name */ + STRING_CERT, /* client certificate filename */ STRING_CERT_TYPE, /* format for certificate (default: PEM)*/ + STRING_KEY, /* private key filename */ + STRING_KEY_PASSWD, /* plain text private key password */ + STRING_KEY_TYPE, /* format for private key (default: PEM) */ + STRING_SSL_CAPATH, /* CA directory name (does not work on windows) */ + STRING_SSL_CAFILE, /* certificate file to verify peer against */ + STRING_SSL_PINNEDPUBLICKEY, /* public key file to verify peer against */ + STRING_SSL_CIPHER_LIST, /* list of ciphers to use */ + STRING_SSL_CIPHER13_LIST, /* list of TLS 1.3 ciphers to use */ + STRING_SSL_CRLFILE, /* crl file to check certificate */ + STRING_SSL_ISSUERCERT, /* issuer cert file to check certificate */ + STRING_SERVICE_NAME, /* Service name */ +#ifndef CURL_DISABLE_PROXY + STRING_CERT_PROXY, /* client certificate filename */ STRING_CERT_TYPE_PROXY, /* format for certificate (default: PEM)*/ + STRING_KEY_PROXY, /* private key filename */ + STRING_KEY_PASSWD_PROXY, /* plain text private key password */ + STRING_KEY_TYPE_PROXY, /* format for private key (default: PEM) */ + STRING_SSL_CAPATH_PROXY, /* CA directory name (does not work on windows) */ + STRING_SSL_CAFILE_PROXY, /* certificate file to verify peer against */ + STRING_SSL_PINNEDPUBLICKEY_PROXY, /* public key file to verify proxy */ + STRING_SSL_CIPHER_LIST_PROXY, /* list of ciphers to use */ + STRING_SSL_CIPHER13_LIST_PROXY, /* list of TLS 1.3 ciphers to use */ + STRING_SSL_CRLFILE_PROXY, /* crl file to check certificate */ + STRING_SSL_ISSUERCERT_PROXY, /* issuer cert file to check certificate */ + STRING_PROXY_SERVICE_NAME, /* Proxy service name */ +#endif +#ifndef CURL_DISABLE_COOKIES STRING_COOKIE, /* HTTP cookie string to send */ STRING_COOKIEJAR, /* dump all cookies to this file */ +#endif STRING_CUSTOMREQUEST, /* HTTP/FTP/RTSP request/method to use */ - STRING_DEFAULT_PROTOCOL, /* Protocol to use when the URL doesn't specify */ + STRING_DEFAULT_PROTOCOL, /* Protocol to use when the URL does not specify */ STRING_DEVICE, /* local network interface/address to use */ + STRING_INTERFACE, /* local network interface to use */ + STRING_BINDHOST, /* local address to use */ STRING_ENCODING, /* Accept-Encoding string */ +#ifndef CURL_DISABLE_FTP STRING_FTP_ACCOUNT, /* ftp account data */ STRING_FTP_ALTERNATIVE_TO_USER, /* command to send if USER/PASS fails */ STRING_FTPPORT, /* port to send with the FTP PORT command */ - STRING_KEY, /* private key file name */ - STRING_KEY_PROXY, /* private key file name */ - STRING_KEY_PASSWD, /* plain text private key password */ - STRING_KEY_PASSWD_PROXY, /* plain text private key password */ - STRING_KEY_TYPE, /* format for private key (default: PEM) */ - STRING_KEY_TYPE_PROXY, /* format for private key (default: PEM) */ +#endif +#if defined(HAVE_GSSAPI) STRING_KRB_LEVEL, /* krb security level */ +#endif +#ifndef CURL_DISABLE_NETRC STRING_NETRC_FILE, /* if not NULL, use this instead of trying to find $HOME/.netrc */ +#endif +#ifndef CURL_DISABLE_PROXY STRING_PROXY, /* proxy to use */ STRING_PRE_PROXY, /* pre socks proxy to use */ +#endif STRING_SET_RANGE, /* range, if used */ STRING_SET_REFERER, /* custom string for the HTTP referer field */ STRING_SET_URL, /* what original URL to work on */ - STRING_SSL_CAPATH, /* CA directory name (doesn't work on windows) */ - STRING_SSL_CAPATH_PROXY, /* CA directory name (doesn't work on windows) */ - STRING_SSL_CAFILE, /* certificate file to verify peer against */ - STRING_SSL_CAFILE_PROXY, /* certificate file to verify peer against */ - STRING_SSL_PINNEDPUBLICKEY, /* public key file to verify peer against */ - STRING_SSL_PINNEDPUBLICKEY_PROXY, /* public key file to verify proxy */ - STRING_SSL_CIPHER_LIST, /* list of ciphers to use */ - STRING_SSL_CIPHER_LIST_PROXY, /* list of ciphers to use */ - STRING_SSL_CIPHER13_LIST, /* list of TLS 1.3 ciphers to use */ - STRING_SSL_CIPHER13_LIST_PROXY, /* list of TLS 1.3 ciphers to use */ STRING_USERAGENT, /* User-Agent string */ - STRING_SSL_CRLFILE, /* crl file to check certificate */ - STRING_SSL_CRLFILE_PROXY, /* crl file to check certificate */ - STRING_SSL_ISSUERCERT, /* issuer cert file to check certificate */ - STRING_SSL_ISSUERCERT_PROXY, /* issuer cert file to check certificate */ STRING_SSL_ENGINE, /* name of ssl engine */ STRING_USERNAME, /* , if used */ STRING_PASSWORD, /* , if used */ STRING_OPTIONS, /* , if used */ +#ifndef CURL_DISABLE_PROXY STRING_PROXYUSERNAME, /* Proxy , if used */ STRING_PROXYPASSWORD, /* Proxy , if used */ STRING_NOPROXY, /* List of hosts which should not use the proxy, if used */ +#endif +#ifndef CURL_DISABLE_RTSP STRING_RTSP_SESSION_ID, /* Session ID to use */ STRING_RTSP_STREAM_URI, /* Stream URI for this request */ STRING_RTSP_TRANSPORT, /* Transport for this session */ +#endif +#ifdef USE_SSH STRING_SSH_PRIVATE_KEY, /* path to the private key file for auth */ STRING_SSH_PUBLIC_KEY, /* path to the public key file for auth */ STRING_SSH_HOST_PUBLIC_KEY_MD5, /* md5 of host public key in ascii hex */ STRING_SSH_HOST_PUBLIC_KEY_SHA256, /* sha256 of host public key in base64 */ - STRING_SSH_KNOWNHOSTS, /* file name of knownhosts file */ - STRING_PROXY_SERVICE_NAME, /* Proxy service name */ - STRING_SERVICE_NAME, /* Service name */ + STRING_SSH_KNOWNHOSTS, /* filename of knownhosts file */ +#endif +#ifndef CURL_DISABLE_SMTP STRING_MAIL_FROM, STRING_MAIL_AUTH, +#endif +#ifdef USE_TLS_SRP STRING_TLSAUTH_USERNAME, /* TLS auth */ - STRING_TLSAUTH_USERNAME_PROXY, /* TLS auth */ STRING_TLSAUTH_PASSWORD, /* TLS auth */ +#ifndef CURL_DISABLE_PROXY + STRING_TLSAUTH_USERNAME_PROXY, /* TLS auth */ STRING_TLSAUTH_PASSWORD_PROXY, /* TLS auth */ +#endif +#endif STRING_BEARER, /* , if used */ +#ifdef USE_UNIX_SOCKETS STRING_UNIX_SOCKET_PATH, /* path to Unix socket, if used */ +#endif STRING_TARGET, /* CURLOPT_REQUEST_TARGET */ +#ifndef CURL_DISABLE_DOH STRING_DOH, /* CURLOPT_DOH_URL */ +#endif +#ifndef CURL_DISABLE_ALTSVC STRING_ALTSVC, /* CURLOPT_ALTSVC */ +#endif +#ifndef CURL_DISABLE_HSTS STRING_HSTS, /* CURLOPT_HSTS */ +#endif STRING_SASL_AUTHZID, /* CURLOPT_SASL_AUTHZID */ +#ifdef USE_ARES STRING_DNS_SERVERS, STRING_DNS_INTERFACE, STRING_DNS_LOCAL_IP4, STRING_DNS_LOCAL_IP6, +#endif STRING_SSL_EC_CURVES, +#ifndef CURL_DISABLE_AWS STRING_AWS_SIGV4, /* Parameters for V4 signature */ +#endif +#ifndef CURL_DISABLE_PROXY STRING_HAPROXY_CLIENT_IP, /* CURLOPT_HAPROXY_CLIENT_IP */ +#endif + STRING_ECH_CONFIG, /* CURLOPT_ECH_CONFIG */ + STRING_ECH_PUBLIC, /* CURLOPT_ECH_PUBLIC */ /* -- end of null-terminated strings -- */ @@ -1510,18 +1553,20 @@ enum dupstring { enum dupblob { BLOB_CERT, - BLOB_CERT_PROXY, BLOB_KEY, - BLOB_KEY_PROXY, BLOB_SSL_ISSUERCERT, - BLOB_SSL_ISSUERCERT_PROXY, BLOB_CAINFO, +#ifndef CURL_DISABLE_PROXY + BLOB_CERT_PROXY, + BLOB_KEY_PROXY, + BLOB_SSL_ISSUERCERT_PROXY, BLOB_CAINFO_PROXY, +#endif BLOB_LAST }; /* callback that gets called when this easy handle is completed within a multi - handle. Only used for internally created transfers, like for example + handle. Only used for internally created transfers, like for example DoH. */ typedef int (*multidone_func)(struct Curl_easy *easy, CURLcode result); @@ -1546,7 +1591,7 @@ struct UserDefined { #ifndef CURL_DISABLE_BINDLOCAL unsigned short localport; /* local port number to bind to */ unsigned short localportrange; /* number of additional port numbers to test - in case the 'localport' one can't be + in case the 'localport' one cannot be bind()ed */ #endif curl_write_callback fwrite_func; /* function that stores the output */ @@ -1579,9 +1624,10 @@ struct UserDefined { void *progress_client; /* pointer to pass to the progress callback */ void *ioctl_client; /* pointer to pass to the ioctl callback */ unsigned int timeout; /* ms, 0 means no timeout */ - unsigned int connecttimeout; /* ms, 0 means no timeout */ + unsigned int connecttimeout; /* ms, 0 means default timeout */ unsigned int happy_eyeballs_timeout; /* ms, 0 is a valid value */ unsigned int server_response_timeout; /* ms, 0 means no timeout */ + unsigned int shutdowntimeout; /* ms, 0 means default timeout */ long maxage_conn; /* in seconds, max idle time to allow a connection that is to be reused */ long maxlifetime_conn; /* in seconds, max time since creation to allow a @@ -1646,7 +1692,7 @@ struct UserDefined { 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 + 1 - create directories that do not exist 2 - the same but also allow MKD to fail once */ unsigned char ftp_create_missing_dirs; @@ -1667,7 +1713,7 @@ struct UserDefined { unsigned int new_file_perms; /* when creating remote files */ char *str[STRING_LAST]; /* array of strings, pointing to allocated memory */ struct curl_blob *blobs[BLOB_LAST]; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 unsigned int scope_id; /* Scope id for IPv6 */ #endif curl_prot_t allowed_protocols; @@ -1693,6 +1739,7 @@ struct UserDefined { int tcp_keepidle; /* seconds in idle before sending keepalive probe */ int tcp_keepintvl; /* seconds between TCP keepalive probes */ + int tcp_keepcnt; /* maximum number of keepalive probes */ long expect_100_timeout; /* in milliseconds */ #if defined(USE_HTTP2) || defined(USE_HTTP3) @@ -1735,17 +1782,21 @@ struct UserDefined { BIT(cookiesession); /* new cookie session? */ #endif BIT(crlf); /* convert crlf on ftp upload(?) */ +#ifdef USE_SSH BIT(ssh_compression); /* enable SSH compression */ +#endif /* 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. */ + and they do not 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, + threads), as we are about to exit() anyway and + do not want lengthy cleanups to delay termination, e.g. after a DNS timeout */ BIT(get_filetime); /* get the time and get of the remote file */ +#ifndef CURL_DISABLE_PROXY BIT(tunnel_thru_httpproxy); /* use CONNECT through an HTTP proxy */ +#endif BIT(prefer_ascii); /* ASCII rather than binary */ BIT(remote_append); /* append, not overwrite, on upload */ #ifdef CURL_LIST_ONLY_PROTOCOL @@ -1760,7 +1811,7 @@ struct UserDefined { us */ BIT(wildcard_enabled); /* enable wildcard matching */ #endif - BIT(hide_progress); /* don't use the progress meter */ + BIT(hide_progress); /* do not use the progress meter */ BIT(http_fail_on_error); /* fail on HTTP error codes >= 400 */ BIT(http_keep_sending_on_error); /* for HTTP status codes >= 300 */ BIT(http_follow_location); /* follow HTTP redirects */ @@ -1772,7 +1823,9 @@ struct UserDefined { location: */ BIT(opt_no_body); /* as set with CURLOPT_NOBODY */ BIT(verbose); /* output verbosity */ +#if defined(HAVE_GSSAPI) BIT(krb); /* Kerberos connection requested */ +#endif BIT(reuse_forbid); /* forbidden to be reused, close after use */ BIT(reuse_fresh); /* do not reuse an existing connection */ BIT(no_signal); /* do not use any signal/alarm handler */ @@ -1797,10 +1850,14 @@ struct UserDefined { BIT(suppress_connect_headers); /* suppress proxy CONNECT response headers from user callbacks */ BIT(dns_shuffle_addresses); /* whether to shuffle addresses before use */ +#ifndef CURL_DISABLE_PROXY BIT(haproxyprotocol); /* whether to send HAProxy PROXY protocol v1 header */ +#endif +#ifdef USE_UNIX_SOCKETS BIT(abstract_unix_socket); - BIT(disallow_username_in_url); /* disallow username in url */ +#endif + BIT(disallow_username_in_url); /* disallow username in URL */ #ifndef CURL_DISABLE_DOH BIT(doh); /* DNS-over-HTTPS enabled */ BIT(doh_verifypeer); /* DoH certificate peer verification */ @@ -1811,6 +1868,9 @@ struct UserDefined { #ifdef USE_WEBSOCKETS BIT(ws_raw_mode); #endif +#ifdef USE_ECH + int tls_ech; /* TLS ECH configuration */ +#endif }; #ifndef CURL_DISABLE_MIME diff --git a/lib/vauth/cleartext.c b/lib/vauth/cleartext.c index 972a87448..cf8108ac5 100644 --- a/lib/vauth/cleartext.c +++ b/lib/vauth/cleartext.c @@ -100,39 +100,38 @@ CURLcode Curl_auth_create_plain_message(const char *authzid, * Curl_auth_create_login_message() * * This is used to generate an already encoded LOGIN message containing the - * user name or password ready for sending to the recipient. + * username or password ready for sending to the recipient. * * Parameters: * - * valuep [in] - The user name or user's password. + * valuep [in] - The username or user's password. * out [out] - The result storage. * - * Returns CURLE_OK on success. + * Returns void. */ -CURLcode Curl_auth_create_login_message(const char *valuep, struct bufref *out) +void Curl_auth_create_login_message(const char *valuep, struct bufref *out) { Curl_bufref_set(out, valuep, strlen(valuep), NULL); - return CURLE_OK; } /* * Curl_auth_create_external_message() * * This is used to generate an already encoded EXTERNAL message containing - * the user name ready for sending to the recipient. + * the username ready for sending to the recipient. * * Parameters: * - * user [in] - The user name. + * user [in] - The username. * out [out] - The result storage. * - * Returns CURLE_OK on success. + * Returns void. */ -CURLcode Curl_auth_create_external_message(const char *user, +void Curl_auth_create_external_message(const char *user, struct bufref *out) { /* This is the same formatting as the login message */ - return Curl_auth_create_login_message(user, out); + Curl_auth_create_login_message(user, out); } #endif /* if no users */ diff --git a/lib/vauth/cram.c b/lib/vauth/cram.c index 91fb261c5..f8bdd5458 100644 --- a/lib/vauth/cram.c +++ b/lib/vauth/cram.c @@ -51,7 +51,7 @@ * Parameters: * * chlg [in] - The challenge. - * userp [in] - The user name. + * userp [in] - The username. * passwdp [in] - The user's password. * out [out] - The result storage. * diff --git a/lib/vauth/digest.c b/lib/vauth/digest.c index 358bfb60c..f00e6651f 100644 --- a/lib/vauth/digest.c +++ b/lib/vauth/digest.c @@ -103,7 +103,7 @@ bool Curl_auth_digest_get_pair(const char *str, char *value, char *content, case ',': if(!starts_with_quote) { - /* This signals the end of the content if we didn't get a starting + /* This signals the end of the content if we did not get a starting quote and then we do "sloppy" parsing */ c = 0; /* the end */ continue; @@ -288,7 +288,7 @@ static CURLcode auth_decode_digest_md5_message(const struct bufref *chlgref, /* Retrieve realm string from the challenge */ if(!auth_digest_get_key_value(chlg, "realm=\"", realm, rlen, '\"')) { /* Challenge does not have a realm, set empty string [RFC2831] page 6 */ - strcpy(realm, ""); + *realm = '\0'; } /* Retrieve algorithm string from the challenge */ @@ -326,7 +326,7 @@ bool Curl_auth_is_digest_supported(void) * * data [in] - The session handle. * chlg [in] - The challenge message. - * userp [in] - The user name. + * userp [in] - The username. * passwdp [in] - The user's password. * service [in] - The service type such as http, smtp, pop or imap. * out [out] - The result storage. @@ -629,7 +629,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg, } } else - break; /* We're done here */ + break; /* We are done here */ /* Pass all additional spaces here */ while(*chlg && ISBLANK(*chlg)) @@ -646,7 +646,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg, if(before && !digest->stale) return CURLE_BAD_CONTENT_ENCODING; - /* We got this header without a nonce, that's a bad Digest line! */ + /* We got this header without a nonce, that is a bad Digest line! */ if(!digest->nonce) return CURLE_BAD_CONTENT_ENCODING; @@ -666,7 +666,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg, * Parameters: * * data [in] - The session handle. - * userp [in] - The user name. + * userp [in] - The username. * passwdp [in] - The user's password. * request [in] - The HTTP request. * uripath [in] - The path of the HTTP uri. @@ -788,7 +788,7 @@ static CURLcode auth_create_digest_http_message( return CURLE_OUT_OF_MEMORY; if(digest->qop && strcasecompare(digest->qop, "auth-int")) { - /* We don't support auth-int for PUT or POST */ + /* We do not support auth-int for PUT or POST */ char hashed[65]; char *hashthis2; @@ -835,12 +835,12 @@ static CURLcode auth_create_digest_http_message( Authorization: Digest username="testuser", realm="testrealm", \ nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca" - Digest parameters are all quoted strings. Username which is provided by + Digest parameters are all quoted strings. Username which is provided by the user will need double quotes and backslashes within it escaped. realm, nonce, and opaque will need backslashes as well as they were - de-escaped when copied from request header. cnonce is generated with - web-safe characters. uri is already percent encoded. nc is 8 hex - characters. algorithm and qop with standard values only contain web-safe + de-escaped when copied from request header. cnonce is generated with + web-safe characters. uri is already percent encoded. nc is 8 hex + characters. algorithm and qop with standard values only contain web-safe characters. */ userp_quoted = auth_digest_string_quoted(digest->userhash ? userh : userp); @@ -957,7 +957,7 @@ static CURLcode auth_create_digest_http_message( * Parameters: * * data [in] - The session handle. - * userp [in] - The user name. + * userp [in] - The username. * passwdp [in] - The user's password. * request [in] - The HTTP request. * uripath [in] - The path of the HTTP uri. diff --git a/lib/vauth/digest_sspi.c b/lib/vauth/digest_sspi.c index 4696f29ad..181356671 100644 --- a/lib/vauth/digest_sspi.c +++ b/lib/vauth/digest_sspi.c @@ -81,7 +81,7 @@ bool Curl_auth_is_digest_supported(void) * * data [in] - The session handle. * chlg [in] - The challenge message. - * userp [in] - The user name in the format User or Domain\User. + * userp [in] - The username in the format User or Domain\User. * passwdp [in] - The user's password. * service [in] - The service type such as http, smtp, pop or imap. * out [out] - The result storage. @@ -122,7 +122,7 @@ CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data, status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_DIGEST), &SecurityPackage); if(status != SEC_E_OK) { - failf(data, "SSPI: couldn't get auth info"); + failf(data, "SSPI: could not get auth info"); return CURLE_AUTH_ERROR; } @@ -291,7 +291,7 @@ CURLcode Curl_override_sspi_http_realm(const char *chlg, } } else - break; /* We're done here */ + break; /* We are done here */ /* Pass all additional spaces here */ while(*chlg && ISBLANK(*chlg)) @@ -324,8 +324,8 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg, { size_t chlglen = strlen(chlg); - /* We had an input token before so if there's another one now that means we - provided bad credentials in the previous request or it's stale. */ + /* We had an input token before so if there is another one now that means we + provided bad credentials in the previous request or it is stale. */ if(digest->input_token) { bool stale = false; const char *p = chlg; @@ -379,7 +379,7 @@ CURLcode Curl_auth_decode_digest_http_message(const char *chlg, * Parameters: * * data [in] - The session handle. - * userp [in] - The user name in the format User or Domain\User. + * userp [in] - The username in the format User or Domain\User. * passwdp [in] - The user's password. * request [in] - The HTTP request. * uripath [in] - The path of the HTTP uri. @@ -413,7 +413,7 @@ CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data, status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_DIGEST), &SecurityPackage); if(status != SEC_E_OK) { - failf(data, "SSPI: couldn't get auth info"); + failf(data, "SSPI: could not get auth info"); return CURLE_AUTH_ERROR; } diff --git a/lib/vauth/krb5_gssapi.c b/lib/vauth/krb5_gssapi.c index 16b6e4037..748cdf93a 100644 --- a/lib/vauth/krb5_gssapi.c +++ b/lib/vauth/krb5_gssapi.c @@ -65,10 +65,10 @@ bool Curl_auth_is_gssapi_supported(void) * Parameters: * * data [in] - The session handle. - * userp [in] - The user name. + * userp [in] - The username. * passwdp [in] - The user's password. * service [in] - The service type such as http, smtp, pop or imap. - * host [in[ - The host name. + * host [in[ - The hostname. * mutual_auth [in] - Flag specifying whether or not mutual authentication * is enabled. * chlg [in] - Optional challenge message. @@ -243,7 +243,7 @@ CURLcode Curl_auth_create_gssapi_security_message(struct Curl_easy *data, /* Process the maximum message size the server can receive */ if(max_size > 0) { /* The server has told us it supports a maximum receive buffer, however, as - we don't require one unless we are encrypting data, we tell the server + we do not require one unless we are encrypting data, we tell the server our receive buffer is zero. */ max_size = 0; } diff --git a/lib/vauth/krb5_sspi.c b/lib/vauth/krb5_sspi.c index 17a517a97..430eb3ef0 100644 --- a/lib/vauth/krb5_sspi.c +++ b/lib/vauth/krb5_sspi.c @@ -76,10 +76,10 @@ bool Curl_auth_is_gssapi_supported(void) * Parameters: * * data [in] - The session handle. - * userp [in] - The user name in the format User or Domain\User. + * userp [in] - The username in the format User or Domain\User. * passwdp [in] - The user's password. * service [in] - The service type such as http, smtp, pop or imap. - * host [in] - The host name. + * host [in] - The hostname. * mutual_auth [in] - Flag specifying whether or not mutual authentication * is enabled. * chlg [in] - Optional challenge message. @@ -122,7 +122,7 @@ CURLcode Curl_auth_create_gssapi_user_message(struct Curl_easy *data, TEXT(SP_NAME_KERBEROS), &SecurityPackage); if(status != SEC_E_OK) { - failf(data, "SSPI: couldn't get auth info"); + failf(data, "SSPI: could not get auth info"); return CURLE_AUTH_ERROR; } @@ -335,7 +335,7 @@ CURLcode Curl_auth_create_gssapi_security_message(struct Curl_easy *data, /* Process the maximum message size the server can receive */ if(max_size > 0) { /* The server has told us it supports a maximum receive buffer, however, as - we don't require one unless we are encrypting data, we tell the server + we do not require one unless we are encrypting data, we tell the server our receive buffer is zero. */ max_size = 0; } diff --git a/lib/vauth/ntlm.c b/lib/vauth/ntlm.c index 018e6a67e..abebdeda7 100644 --- a/lib/vauth/ntlm.c +++ b/lib/vauth/ntlm.c @@ -59,7 +59,7 @@ /* "NTLMSSP" signature is always in ASCII regardless of the platform */ #define NTLMSSP_SIGNATURE "\x4e\x54\x4c\x4d\x53\x53\x50" -/* The fixed host name we provide, in order to not leak our real local host +/* The fixed hostname we provide, in order to not leak our real local host name. Copy the name used by Firefox. */ #define NTLM_HOSTNAME "WORKSTATION" @@ -325,10 +325,10 @@ static void unicodecpy(unsigned char *dest, const char *src, size_t length) * Parameters: * * data [in] - The session handle. - * userp [in] - The user name in the format User or Domain\User. + * userp [in] - The username in the format User or Domain\User. * passwdp [in] - The user's password. * service [in] - The service type such as http, smtp, pop or imap. - * host [in] - The host name. + * host [in] - The hostname. * ntlm [in/out] - The NTLM data struct being used and modified. * out [out] - The result storage. * @@ -384,9 +384,9 @@ CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data, "%c%c" /* 2 zeroes */ "%c%c" /* host length */ "%c%c" /* host allocated space */ - "%c%c" /* host name offset */ + "%c%c" /* hostname offset */ "%c%c" /* 2 zeroes */ - "%s" /* host name */ + "%s" /* hostname */ "%s", /* domain string */ 0, /* trailing zero */ 0, 0, 0, /* part of type-1 long */ @@ -448,7 +448,7 @@ CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data, * Parameters: * * data [in] - The session handle. - * userp [in] - The user name in the format User or Domain\User. + * userp [in] - The username in the format User or Domain\User. * passwdp [in] - The user's password. * ntlm [in/out] - The NTLM data struct being used and modified. * out [out] - The result storage. @@ -470,7 +470,7 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data, 12 LM/LMv2 Response security buffer 20 NTLM/NTLMv2 Response security buffer 28 Target Name security buffer - 36 User Name security buffer + 36 username security buffer 44 Workstation Name security buffer (52) Session Key security buffer (*) (60) Flags long (*) @@ -482,9 +482,9 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data, CURLcode result = CURLE_OK; size_t size; unsigned char ntlmbuf[NTLM_BUFSIZE]; - int lmrespoff; + unsigned int lmrespoff; unsigned char lmresp[24]; /* fixed-size */ - int ntrespoff; + unsigned int ntrespoff; unsigned int ntresplen = 24; unsigned char ntresp[24]; /* fixed-size */ unsigned char *ptr_ntresp = &ntresp[0]; @@ -517,7 +517,7 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data, userlen = strlen(user); #ifndef NTLM_HOSTNAME - /* Get the machine's un-qualified host name as NTLM doesn't like the fully + /* Get the machine's un-qualified hostname as NTLM does not like the fully qualified domain name */ if(Curl_gethostname(host, sizeof(host))) { infof(data, "gethostname() failed, continuing without"); @@ -585,7 +585,7 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data, return result; Curl_ntlm_core_lm_resp(lmbuffer, &ntlm->nonce[0], lmresp); - ntlm->flags &= ~NTLMFLAG_NEGOTIATE_NTLM2_KEY; + ntlm->flags &= ~(unsigned int)NTLMFLAG_NEGOTIATE_NTLM2_KEY; /* A safer but less compatible alternative is: * Curl_ntlm_core_lm_resp(ntbuffer, &ntlm->nonce[0], lmresp); @@ -722,7 +722,7 @@ CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data, /* Make sure that the domain, user and host strings fit in the buffer before we copy them there. */ if(size + userlen + domlen + hostlen >= NTLM_BUFSIZE) { - failf(data, "user + domain + host name too big"); + failf(data, "user + domain + hostname too big"); return CURLE_OUT_OF_MEMORY; } diff --git a/lib/vauth/ntlm_sspi.c b/lib/vauth/ntlm_sspi.c index 92054316d..7d1d04e00 100644 --- a/lib/vauth/ntlm_sspi.c +++ b/lib/vauth/ntlm_sspi.c @@ -75,10 +75,10 @@ bool Curl_auth_is_ntlm_supported(void) * Parameters: * * data [in] - The session handle. - * userp [in] - The user name in the format User or Domain\User. + * userp [in] - The username in the format User or Domain\User. * passwdp [in] - The user's password. * service [in] - The service type such as http, smtp, pop or imap. - * host [in] - The host name. + * host [in] - The hostname. * ntlm [in/out] - The NTLM data struct being used and modified. * out [out] - The result storage. * @@ -106,7 +106,7 @@ CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data, status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NTLM), &SecurityPackage); if(status != SEC_E_OK) { - failf(data, "SSPI: couldn't get auth info"); + failf(data, "SSPI: could not get auth info"); return CURLE_AUTH_ERROR; } @@ -233,7 +233,7 @@ CURLcode Curl_auth_decode_ntlm_type2_message(struct Curl_easy *data, * Parameters: * * data [in] - The session handle. - * userp [in] - The user name in the format User or Domain\User. + * userp [in] - The username in the format User or Domain\User. * passwdp [in] - The user's password. * ntlm [in/out] - The NTLM data struct being used and modified. * out [out] - The result storage. diff --git a/lib/vauth/oauth2.c b/lib/vauth/oauth2.c index a4adbdcf1..dc94afa36 100644 --- a/lib/vauth/oauth2.c +++ b/lib/vauth/oauth2.c @@ -49,8 +49,8 @@ * * Parameters: * - * user[in] - The user name. - * host[in] - The host name. + * user[in] - The username. + * host[in] - The hostname. * port[in] - The port(when not Port 80). * bearer[in] - The bearer token. * out[out] - The result storage. @@ -87,7 +87,7 @@ CURLcode Curl_auth_create_oauth_bearer_message(const char *user, * * Parameters: * - * user[in] - The user name. + * user[in] - The username. * bearer[in] - The bearer token. * out[out] - The result storage. * diff --git a/lib/vauth/spnego_gssapi.c b/lib/vauth/spnego_gssapi.c index e1d52b755..23822838b 100644 --- a/lib/vauth/spnego_gssapi.c +++ b/lib/vauth/spnego_gssapi.c @@ -65,10 +65,10 @@ bool Curl_auth_is_spnego_supported(void) * Parameters: * * data [in] - The session handle. - * userp [in] - The user name in the format User or Domain\User. + * userp [in] - The username in the format User or Domain\User. * passwdp [in] - The user's password. * service [in] - The service type such as http, smtp, pop or imap. - * host [in] - The host name. + * host [in] - The hostname. * chlg64 [in] - The optional base64 encoded challenge message. * nego [in/out] - The Negotiate data struct being used and modified. * @@ -97,8 +97,8 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, if(nego->context && nego->status == GSS_S_COMPLETE) { /* We finished successfully our part of authentication, but server - * rejected it (since we're again here). Exit with an error since we - * can't invent anything better */ + * rejected it (since we are again here). Exit with an error since we + * cannot invent anything better */ Curl_auth_cleanup_spnego(nego); return CURLE_LOGIN_DENIED; } diff --git a/lib/vauth/spnego_sspi.c b/lib/vauth/spnego_sspi.c index d3245d0b1..a2c7072c5 100644 --- a/lib/vauth/spnego_sspi.c +++ b/lib/vauth/spnego_sspi.c @@ -79,10 +79,10 @@ bool Curl_auth_is_spnego_supported(void) * Parameters: * * data [in] - The session handle. - * user [in] - The user name in the format User or Domain\User. + * user [in] - The username in the format User or Domain\User. * password [in] - The user's password. * service [in] - The service type such as http, smtp, pop or imap. - * host [in] - The host name. + * host [in] - The hostname. * chlg64 [in] - The optional base64 encoded challenge message. * nego [in/out] - The Negotiate data struct being used and modified. * @@ -113,8 +113,8 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, if(nego->context && nego->status == SEC_E_OK) { /* We finished successfully our part of authentication, but server - * rejected it (since we're again here). Exit with an error since we - * can't invent anything better */ + * rejected it (since we are again here). Exit with an error since we + * cannot invent anything better */ Curl_auth_cleanup_spnego(nego); return CURLE_LOGIN_DENIED; } @@ -128,11 +128,11 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, if(!nego->output_token) { /* Query the security package for Negotiate */ - nego->status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) - TEXT(SP_NAME_NEGOTIATE), - &SecurityPackage); + nego->status = (DWORD)s_pSecFn->QuerySecurityPackageInfo((TCHAR *) + TEXT(SP_NAME_NEGOTIATE), + &SecurityPackage); if(nego->status != SEC_E_OK) { - failf(data, "SSPI: couldn't get auth info"); + failf(data, "SSPI: could not get auth info"); return CURLE_AUTH_ERROR; } @@ -168,7 +168,7 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, return CURLE_OUT_OF_MEMORY; /* Acquire our credentials handle */ - nego->status = + nego->status = (DWORD) s_pSecFn->AcquireCredentialsHandle(NULL, (TCHAR *)TEXT(SP_NAME_NEGOTIATE), SECPKG_CRED_OUTBOUND, NULL, @@ -218,7 +218,7 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, SEC_CHANNEL_BINDINGS channelBindings; SecPkgContext_Bindings pkgBindings; pkgBindings.Bindings = &channelBindings; - nego->status = s_pSecFn->QueryContextAttributes( + nego->status = (DWORD)s_pSecFn->QueryContextAttributes( nego->sslContext, SECPKG_ATTR_ENDPOINT_BINDINGS, &pkgBindings @@ -242,7 +242,7 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, resp_buf.cbBuffer = curlx_uztoul(nego->token_max); /* Generate our challenge-response message */ - nego->status = s_pSecFn->InitializeSecurityContext(nego->credentials, + nego->status = (DWORD)s_pSecFn->InitializeSecurityContext(nego->credentials, chlg ? nego->context : NULL, nego->spn, @@ -259,7 +259,7 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, if(GSS_ERROR(nego->status)) { char buffer[STRERROR_LEN]; failf(data, "InitializeSecurityContext failed: %s", - Curl_sspi_strerror(nego->status, buffer, sizeof(buffer))); + Curl_sspi_strerror((int)nego->status, buffer, sizeof(buffer))); if(nego->status == (DWORD)SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; @@ -269,11 +269,12 @@ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, if(nego->status == SEC_I_COMPLETE_NEEDED || nego->status == SEC_I_COMPLETE_AND_CONTINUE) { - nego->status = s_pSecFn->CompleteAuthToken(nego->context, &resp_desc); + nego->status = (DWORD)s_pSecFn->CompleteAuthToken(nego->context, + &resp_desc); if(GSS_ERROR(nego->status)) { char buffer[STRERROR_LEN]; failf(data, "CompleteAuthToken failed: %s", - Curl_sspi_strerror(nego->status, buffer, sizeof(buffer))); + Curl_sspi_strerror((int)nego->status, buffer, sizeof(buffer))); if(nego->status == (DWORD)SEC_E_INSUFFICIENT_MEMORY) return CURLE_OUT_OF_MEMORY; diff --git a/lib/vauth/vauth.c b/lib/vauth/vauth.c index 62fc7c40f..ace43c47d 100644 --- a/lib/vauth/vauth.c +++ b/lib/vauth/vauth.c @@ -48,7 +48,7 @@ * Parameters: * * service [in] - The service type such as http, smtp, pop or imap. - * host [in] - The host name. + * host [in] - The hostname. * realm [in] - The realm. * * Returns a pointer to the newly allocated SPN. @@ -93,7 +93,7 @@ TCHAR *Curl_auth_build_spn(const char *service, const char *host, return NULL; /* Allocate and return a TCHAR based SPN. Since curlx_convert_UTF8_to_tchar - must be freed by curlx_unicodefree we'll dupe the result so that the + must be freed by curlx_unicodefree we will dupe the result so that the pointer this function returns can be normally free'd. */ tchar_spn = curlx_convert_UTF8_to_tchar(utf8_spn); free(utf8_spn); @@ -115,14 +115,14 @@ TCHAR *Curl_auth_build_spn(const char *service, const char *host, * Domain/User (curl Down-level format - for compatibility with existing code) * User@Domain (User Principal Name) * - * Note: The user name may be empty when using a GSS-API library or Windows + * Note: The username may be empty when using a GSS-API library or Windows * SSPI as the user and domain are either obtained from the credentials cache * when using GSS-API or via the currently logged in user's credentials when * using Windows SSPI. * * Parameters: * - * user [in] - The user name. + * user [in] - The username. * * Returns TRUE on success; otherwise FALSE. */ diff --git a/lib/vauth/vauth.h b/lib/vauth/vauth.h index 9da054089..7e823484f 100644 --- a/lib/vauth/vauth.h +++ b/lib/vauth/vauth.h @@ -79,12 +79,10 @@ CURLcode Curl_auth_create_plain_message(const char *authzid, struct bufref *out); /* This is used to generate a LOGIN cleartext message */ -CURLcode Curl_auth_create_login_message(const char *value, - struct bufref *out); +void Curl_auth_create_login_message(const char *value, struct bufref *out); /* This is used to generate an EXTERNAL cleartext message */ -CURLcode Curl_auth_create_external_message(const char *user, - struct bufref *out); +void Curl_auth_create_external_message(const char *user, struct bufref *out); #ifndef CURL_DISABLE_DIGEST_AUTH /* This is used to generate a CRAM-MD5 response message */ diff --git a/lib/version.c b/lib/version.c index 88f3696de..c0d822dc8 100644 --- a/lib/version.c +++ b/lib/version.c @@ -55,6 +55,7 @@ #ifdef USE_LIBRTMP #include +#include "curl_rtmp.h" #endif #ifdef HAVE_LIBZ @@ -152,7 +153,7 @@ char *curl_version(void) #ifdef USE_NGHTTP2 char h2_version[40]; #endif -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 char h3_version[40]; #endif #ifdef USE_LIBRTMP @@ -174,8 +175,7 @@ char *curl_version(void) /* Override version string when environment variable CURL_VERSION is set */ const char *debugversion = getenv("CURL_VERSION"); if(debugversion) { - strncpy(out, debugversion, sizeof(out)-1); - out[sizeof(out)-1] = '\0'; + msnprintf(out, sizeof(out), "%s", debugversion); return out; } #endif @@ -208,6 +208,8 @@ char *curl_version(void) src[i++] = idn_version; #elif defined(USE_WIN32_IDN) src[i++] = (char *)"WinIDN"; +#elif defined(USE_APPLE_IDN) + src[i++] = (char *)"AppleIDN"; #endif #ifdef USE_LIBPSL @@ -233,25 +235,13 @@ char *curl_version(void) Curl_http2_ver(h2_version, sizeof(h2_version)); src[i++] = h2_version; #endif -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 Curl_quic_ver(h3_version, sizeof(h3_version)); src[i++] = h3_version; #endif #ifdef USE_LIBRTMP - { - char suff[2]; - if(RTMP_LIB_VERSION & 0xff) { - suff[0] = (RTMP_LIB_VERSION & 0xff) + 'a' - 1; - suff[1] = '\0'; - } - else - suff[0] = '\0'; - - msnprintf(rtmp_version, sizeof(rtmp_version), "librtmp/%d.%d%s", - RTMP_LIB_VERSION >> 16, (RTMP_LIB_VERSION >> 8) & 0xff, - suff); - src[i++] = rtmp_version; - } + Curl_rtmp_version(rtmp_version, sizeof(rtmp_version)); + src[i++] = rtmp_version; #endif #ifdef USE_HYPER msnprintf(hyper_buf, sizeof(hyper_buf), "Hyper/%s", hyper_version()); @@ -268,10 +258,11 @@ char *curl_version(void) api.ldapai_info_version = LDAP_API_INFO_VERSION; if(ldap_get_option(NULL, LDAP_OPT_API_INFO, &api) == LDAP_OPT_SUCCESS) { - unsigned int patch = api.ldapai_vendor_version % 100; - unsigned int major = api.ldapai_vendor_version / 10000; + unsigned int patch = (unsigned int)(api.ldapai_vendor_version % 100); + unsigned int major = (unsigned int)(api.ldapai_vendor_version / 10000); unsigned int minor = - ((api.ldapai_vendor_version - major * 10000) - patch) / 100; + (((unsigned int)api.ldapai_vendor_version - major * 10000) + - patch) / 100; msnprintf(ldap_buf, sizeof(ldap_buf), "%s/%u.%u.%u", api.ldapai_vendor_name, major, minor, patch); src[i++] = ldap_buf; @@ -404,7 +395,7 @@ static const char * const supported_protocols[] = { }; /* - * Feature presence run-time check functions. + * Feature presence runtime check functions. * * Warning: the value returned by these should not change between * curl_global_init() and curl_global_cleanup() calls. @@ -428,6 +419,14 @@ static int https_proxy_present(curl_version_info_data *info) } #endif +#if defined(USE_SSL) && defined(USE_ECH) +static int ech_present(curl_version_info_data *info) +{ + (void) info; + return Curl_ssl_supports(NULL, SSLSUPP_ECH); +} +#endif + /* * Features table. * @@ -456,6 +455,9 @@ static const struct feat features_table[] = { #ifdef DEBUGBUILD FEATURE("Debug", NULL, CURL_VERSION_DEBUG), #endif +#if defined(USE_SSL) && defined(USE_ECH) + FEATURE("ECH", ech_present, 0), +#endif #ifdef USE_GSASL FEATURE("gsasl", NULL, CURL_VERSION_GSASL), #endif @@ -468,17 +470,17 @@ static const struct feat features_table[] = { #if defined(USE_NGHTTP2) FEATURE("HTTP2", NULL, CURL_VERSION_HTTP2), #endif -#if defined(ENABLE_QUIC) +#if defined(USE_HTTP3) FEATURE("HTTP3", NULL, CURL_VERSION_HTTP3), #endif #if defined(USE_SSL) && !defined(CURL_DISABLE_PROXY) && \ !defined(CURL_DISABLE_HTTP) FEATURE("HTTPS-proxy", https_proxy_present, CURL_VERSION_HTTPS_PROXY), #endif -#if defined(USE_LIBIDN2) || defined(USE_WIN32_IDN) +#if defined(USE_LIBIDN2) || defined(USE_WIN32_IDN) || defined(USE_APPLE_IDN) FEATURE("IDN", idn_present, CURL_VERSION_IDN), #endif -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 FEATURE("IPv6", NULL, CURL_VERSION_IPV6), #endif #ifdef USE_KERBEROS5 @@ -497,10 +499,6 @@ static const struct feat features_table[] = { #ifdef USE_NTLM FEATURE("NTLM", NULL, CURL_VERSION_NTLM), #endif -#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) FEATURE("PSL", NULL, CURL_VERSION_PSL), #endif @@ -543,7 +541,7 @@ static curl_version_info_data version_info = { 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 */ + 0, /* features bitmask is built at runtime */ NULL, /* ssl_version */ 0, /* ssl_version_num, this is kept at zero */ NULL, /* zlib_version */ @@ -572,7 +570,8 @@ static curl_version_info_data version_info = { NULL, /* zstd version */ NULL, /* Hyper version */ NULL, /* gsasl version */ - feature_names + feature_names, + NULL /* rtmp version */ }; curl_version_info_data *curl_version_info(CURLversion stamp) @@ -598,7 +597,7 @@ 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 */ + (void)stamp; /* avoid compiler warnings, we do not use this */ #ifdef USE_SSL Curl_ssl_version(ssl_buffer, sizeof(ssl_buffer)); @@ -642,12 +641,12 @@ curl_version_info_data *curl_version_info(CURLversion stamp) #ifdef USE_NGHTTP2 { nghttp2_info *h2 = nghttp2_version(0); - version_info.nghttp2_ver_num = h2->version_num; + version_info.nghttp2_ver_num = (unsigned int)h2->version_num; version_info.nghttp2_version = h2->version_str; } #endif -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 { static char quicbuffer[80]; Curl_quic_ver(quicbuffer, sizeof(quicbuffer)); @@ -680,5 +679,13 @@ curl_version_info_data *curl_version_info(CURLversion stamp) feature_names[n] = NULL; /* Terminate array. */ version_info.features = features; +#ifdef USE_LIBRTMP + { + static char rtmp_version[30]; + Curl_rtmp_version(rtmp_version, sizeof(rtmp_version)); + version_info.rtmp_version = rtmp_version; + } +#endif + return &version_info; } diff --git a/lib/version_win32.c b/lib/version_win32.c index e0f239e15..10fd0b1f1 100644 --- a/lib/version_win32.c +++ b/lib/version_win32.c @@ -30,8 +30,10 @@ #include "version_win32.h" #include "warnless.h" -/* The last #include files should be: */ +/* The last 2 #include files should be in this order */ +#ifdef BUILDING_LIBCURL #include "curl_memory.h" +#endif #include "memdebug.h" /* This Unicode version struct works for VerifyVersionInfoW (OSVERSIONINFOEXW) @@ -63,7 +65,7 @@ struct OUR_OSVERSIONINFOEXW { * ignored. * platform [in] - The optional platform identifier. * condition [in] - The test condition used to specifier whether we are - * checking a version less then, equal to or greater than + * checking a version less than, equal to or greater than * what is specified in the major and minor version * numbers. * @@ -78,13 +80,13 @@ bool curlx_verify_windows_version(const unsigned int majorVersion, bool matched = FALSE; #if defined(CURL_WINDOWS_APP) - (void)buildVersion; - /* We have no way to determine the Windows version from Windows apps, - so let's assume we're running on the target Windows version. */ + so let's assume we are running on the target Windows version. */ const WORD fullVersion = MAKEWORD(minorVersion, majorVersion); const WORD targetVersion = (WORD)_WIN32_WINNT; + (void)buildVersion; + switch(condition) { case VERSION_LESS_THAN: matched = targetVersion < fullVersion; @@ -108,7 +110,7 @@ bool curlx_verify_windows_version(const unsigned int majorVersion, } if(matched && (platform == PLATFORM_WINDOWS)) { - /* we're always running on PLATFORM_WINNT */ + /* we are always running on PLATFORM_WINNT */ matched = FALSE; } #elif !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \ diff --git a/lib/vquic/curl_msh3.c b/lib/vquic/curl_msh3.c index a52bbdd06..b707a6ebe 100644 --- a/lib/vquic/curl_msh3.c +++ b/lib/vquic/curl_msh3.c @@ -27,6 +27,7 @@ #ifdef USE_MSH3 #include "urldata.h" +#include "hash.h" #include "timeval.h" #include "multiif.h" #include "sendf.h" @@ -118,6 +119,7 @@ struct cf_msh3_ctx { struct cf_call_data call_data; struct curltime connect_started; /* time the current attempt started */ struct curltime handshake_at; /* time connect handshake finished */ + struct Curl_hash streams; /* hash `data->id` to `stream_ctx` */ /* Flags written by msh3/msquic thread */ bool handshake_complete; bool handshake_succeeded; @@ -127,6 +129,8 @@ struct cf_msh3_ctx { BIT(active); }; +static struct cf_msh3_ctx *h3_get_msh3_ctx(struct Curl_easy *data); + /* How to access `call_data` from a cf_msh3 filter */ #undef CF_CTX_CALL_DATA #define CF_CTX_CALL_DATA(cf) \ @@ -153,18 +157,26 @@ struct stream_ctx { 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) +#define H3_STREAM_CTX(ctx,data) ((struct stream_ctx *)((data && ctx)? \ + Curl_hash_offt_get(&(ctx)->streams, (data)->id) : NULL)) + +static void h3_stream_ctx_free(struct stream_ctx *stream) +{ + Curl_bufq_free(&stream->recvbuf); + free(stream); +} +static void h3_stream_hash_free(void *stream) +{ + DEBUGASSERT(stream); + h3_stream_ctx_free((struct stream_ctx *)stream); +} static CURLcode h3_data_setup(struct Curl_cfilter *cf, struct Curl_easy *data) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_msh3_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); if(stream) return CURLE_OK; @@ -173,25 +185,29 @@ static CURLcode h3_data_setup(struct Curl_cfilter *cf, 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"); + + if(!Curl_hash_offt_set(&ctx->streams, data->id, stream)) { + h3_stream_ctx_free(stream); + return CURLE_OUT_OF_MEMORY; + } + return CURLE_OK; } static void h3_data_done(struct Curl_cfilter *cf, struct Curl_easy *data) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_msh3_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(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; + Curl_hash_offt_remove(&ctx->streams, data->id); } } @@ -213,7 +229,8 @@ static void drain_stream_from_other_thread(struct Curl_easy *data, static void drain_stream(struct Curl_cfilter *cf, struct Curl_easy *data) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_msh3_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); unsigned char bits; (void)cf; @@ -276,7 +293,7 @@ static const MSH3_REQUEST_IF msh3_request_if = { msh3_data_sent }; -/* Decode HTTP status code. Returns -1 if no valid status code was +/* 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) { @@ -311,7 +328,8 @@ static int decode_status_code(const char *value, size_t len) static CURLcode write_resp_raw(struct Curl_easy *data, const void *mem, size_t memlen) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_msh3_ctx *ctx = h3_get_msh3_ctx(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result = CURLE_OK; ssize_t nwritten; @@ -337,10 +355,12 @@ static void MSH3_CALL msh3_header_received(MSH3_REQUEST *Request, const MSH3_HEADER *hd) { struct Curl_easy *data = userp; - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_msh3_ctx *ctx = h3_get_msh3_ctx(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result; (void)Request; + DEBUGF(infof(data, "[MSH3] header received, stream=%d", !!stream)); if(!stream || stream->recv_header_complete) { return; } @@ -386,7 +406,8 @@ static bool MSH3_CALL msh3_data_received(MSH3_REQUEST *Request, const uint8_t *buf) { struct Curl_easy *data = IfContext; - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_msh3_ctx *ctx = h3_get_msh3_ctx(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result; bool rv = FALSE; @@ -425,7 +446,8 @@ 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); + struct cf_msh3_ctx *ctx = h3_get_msh3_ctx(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)Request; if(!stream) @@ -444,7 +466,8 @@ 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); + struct cf_msh3_ctx *ctx = h3_get_msh3_ctx(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); if(!stream) return; @@ -456,7 +479,8 @@ 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); + struct cf_msh3_ctx *ctx = h3_get_msh3_ctx(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); if(!stream) return; (void)Request; @@ -468,7 +492,8 @@ static ssize_t recv_closed_stream(struct Curl_cfilter *cf, struct Curl_easy *data, CURLcode *err) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_msh3_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t nread = -1; if(!stream) { @@ -501,7 +526,8 @@ static ssize_t recv_closed_stream(struct Curl_cfilter *cf, static void set_quic_expire(struct Curl_cfilter *cf, struct Curl_easy *data) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_msh3_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(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 @@ -518,17 +544,17 @@ static void set_quic_expire(struct Curl_cfilter *cf, struct Curl_easy *data) 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); + struct cf_msh3_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t nread = -1; struct cf_call_data save; - (void)cf; + CURL_TRC_CF(data, cf, "cf_recv(len=%zu), stream=%d", len, !!stream); 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); @@ -570,7 +596,7 @@ 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 stream_ctx *stream = H3_STREAM_CTX(ctx, data); struct h1_req_parser h1; struct dynhds h2_headers; MSH3_HEADER *nva = NULL; @@ -663,7 +689,7 @@ static ssize_t cf_msh3_send(struct Curl_cfilter *cf, struct Curl_easy *data, } /* 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? */ + event. How do we make sure curl does not free it until then? */ *err = CURLE_OK; nwritten = len; } @@ -682,7 +708,7 @@ static void cf_msh3_adjust_pollset(struct Curl_cfilter *cf, struct easy_pollset *ps) { struct cf_msh3_ctx *ctx = cf->ctx; - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); struct cf_call_data save; CF_DATA_SAVE(save, cf, data); @@ -701,7 +727,8 @@ static void cf_msh3_adjust_pollset(struct Curl_cfilter *cf, 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_msh3_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); struct cf_call_data save; bool pending = FALSE; @@ -737,7 +764,8 @@ 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_msh3_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); struct cf_call_data save; CURLcode result = CURLE_OK; @@ -785,6 +813,7 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf, CURLcode result; bool verify; + Curl_hash_offt_init(&ctx->streams, 63, h3_stream_hash_free); conn_config = Curl_ssl_cf_get_primary_config(cf); if(!conn_config) return CURLE_FAILED_INIT; @@ -811,7 +840,7 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf, ctx->api = MsH3ApiOpen(); if(!ctx->api) { - failf(data, "can't create msh3 api"); + failf(data, "cannot create msh3 api"); return CURLE_FAILED_INIT; } @@ -822,7 +851,7 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf, &addr, !verify); if(!ctx->qconn) { - failf(data, "can't create msh3 connection"); + failf(data, "cannot create msh3 connection"); if(ctx->api) { MsH3ApiClose(ctx->api); ctx->api = NULL; @@ -854,7 +883,7 @@ static CURLcode cf_msh3_connect(struct Curl_cfilter *cf, 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) { + if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, &ctx->sock[0], FALSE) < 0) { ctx->sock[SP_LOCAL] = CURL_SOCKET_BAD; ctx->sock[SP_REMOTE] = CURL_SOCKET_BAD; return CURLE_COULDNT_CONNECT; @@ -911,6 +940,7 @@ static void cf_msh3_close(struct Curl_cfilter *cf, struct Curl_easy *data) MsH3ApiClose(ctx->api); ctx->api = NULL; } + Curl_hash_destroy(&ctx->streams); if(ctx->active) { /* We share our socket at cf->conn->sock[cf->sockindex] when active. @@ -1008,6 +1038,7 @@ struct Curl_cftype Curl_cft_http3 = { cf_msh3_destroy, cf_msh3_connect, cf_msh3_close, + Curl_cf_def_shutdown, Curl_cf_def_get_host, cf_msh3_adjust_pollset, cf_msh3_data_pending, @@ -1019,6 +1050,20 @@ struct Curl_cftype Curl_cft_http3 = { cf_msh3_query, }; +static struct cf_msh3_ctx *h3_get_msh3_ctx(struct Curl_easy *data) +{ + if(data && data->conn) { + struct Curl_cfilter *cf = data->conn->cfilter[FIRSTSOCKET]; + while(cf) { + if(cf->cft == &Curl_cft_http3) + return cf->ctx; + cf = cf->next; + } + } + DEBUGF(infof(data, "no filter context found")); + return NULL; +} + CURLcode Curl_cf_msh3_create(struct Curl_cfilter **pcf, struct Curl_easy *data, struct connectdata *conn, diff --git a/lib/vquic/curl_ngtcp2.c b/lib/vquic/curl_ngtcp2.c index 6b6b8874c..1f67f2362 100644 --- a/lib/vquic/curl_ngtcp2.c +++ b/lib/vquic/curl_ngtcp2.c @@ -44,6 +44,7 @@ #endif #include "urldata.h" +#include "hash.h" #include "sendf.h" #include "strdup.h" #include "rand.h" @@ -87,7 +88,7 @@ /* 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, + * spares. 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 @@ -113,7 +114,7 @@ void Curl_ngtcp2_ver(char *p, size_t len) struct cf_ngtcp2_ctx { struct cf_quic_ctx q; struct ssl_peer peer; - struct quic_tls_ctx tls; + struct curl_tls_ctx tls; ngtcp2_path connected_path; ngtcp2_conn *qconn; ngtcp2_cid dcid; @@ -130,9 +131,14 @@ struct cf_ngtcp2_ctx { struct curltime handshake_at; /* time connect handshake finished */ struct curltime reconnect_at; /* time the next attempt should start */ struct bufc_pool stream_bufcp; /* chunk pool for streams */ + struct dynbuf scratch; /* temp buffer for header construction */ + struct Curl_hash streams; /* hash `data->id` to `h3_stream_ctx` */ size_t max_stream_window; /* max flow window for one stream */ uint64_t max_idle_ms; /* max idle time for QUIC connection */ + uint64_t used_bidi_streams; /* bidi streams we have opened */ + uint64_t max_bidi_streams; /* max bidi streams we can open */ int qlogfd; + BIT(shutdown_started); /* queued shutdown packets */ }; /* How to access `call_data` from a cf_ngtcp2 filter */ @@ -140,18 +146,26 @@ struct cf_ngtcp2_ctx { #define CF_CTX_CALL_DATA(cf) \ ((struct cf_ngtcp2_ctx *)(cf)->ctx)->call_data +struct pkt_io_ctx; +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); + /** * All about the H3 internals of a stream */ struct h3_stream_ctx { - int64_t id; /* HTTP/3 protocol identifier */ + curl_int64_t id; /* HTTP/3 protocol identifier */ struct bufq sendbuf; /* h3 request 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 */ - uint64_t error3; /* HTTP/3 stream error code */ + curl_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 */ + CURLcode xfer_result; /* result from xfer_resp_write(_hd) */ bool resp_hds_complete; /* we have a complete, final response */ bool closed; /* TRUE on stream close */ bool reset; /* TRUE on stream reset */ @@ -159,20 +173,31 @@ struct h3_stream_ctx { 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) +#define H3_STREAM_CTX(ctx,data) ((struct h3_stream_ctx *)(\ + data? Curl_hash_offt_get(&(ctx)->streams, (data)->id) : NULL)) +#define H3_STREAM_CTX_ID(ctx,id) ((struct h3_stream_ctx *)(\ + Curl_hash_offt_get(&(ctx)->streams, (id)))) + +static void h3_stream_ctx_free(struct h3_stream_ctx *stream) +{ + Curl_bufq_free(&stream->sendbuf); + Curl_h1_req_parse_free(&stream->h1); + free(stream); +} + +static void h3_stream_hash_free(void *stream) +{ + DEBUGASSERT(stream); + h3_stream_ctx_free((struct h3_stream_ctx *)stream); +} 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); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); - if(!data || !data->req.p.http) { + if(!data) { failf(data, "initialization failure, transfer not http initialized"); return CURLE_FAILED_INIT; } @@ -191,59 +216,85 @@ static CURLcode h3_data_setup(struct Curl_cfilter *cf, stream->sendbuf_len_in_flight = 0; Curl_h1_req_parse_init(&stream->h1, H1_PARSE_DEFAULT_MAX_LINE_LEN); - H3_STREAM_LCTX(data) = stream; + if(!Curl_hash_offt_set(&ctx->streams, data->id, stream)) { + h3_stream_ctx_free(stream); + return CURLE_OUT_OF_MEMORY; + } + return CURLE_OK; } -static void h3_data_done(struct Curl_cfilter *cf, struct Curl_easy *data) +static void cf_ngtcp2_stream_close(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct h3_stream_ctx *stream) { struct cf_ngtcp2_ctx *ctx = cf->ctx; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + DEBUGASSERT(data); + DEBUGASSERT(stream); + if(!stream->closed && ctx->qconn && ctx->h3conn) { + CURLcode result; + + 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; + (void)ngtcp2_conn_shutdown_stream(ctx->qconn, 0, stream->id, + NGHTTP3_H3_REQUEST_CANCELLED); + result = cf_progress_egress(cf, data, NULL); + if(result) + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] cancel stream -> %d", + stream->id, result); + } +} +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(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_h1_req_parse_free(&stream->h1); - free(stream); - H3_STREAM_LCTX(data) = NULL; + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] easy handle is done", + stream->id); + cf_ngtcp2_stream_close(cf, data, stream); + Curl_hash_offt_remove(&ctx->streams, data->id); } } static struct Curl_easy *get_stream_easy(struct Curl_cfilter *cf, struct Curl_easy *data, - int64_t stream_id) + int64_t stream_id, + struct h3_stream_ctx **pstream) { + struct cf_ngtcp2_ctx *ctx = cf->ctx; struct Curl_easy *sdata; + struct h3_stream_ctx *stream; (void)cf; - if(H3_STREAM_ID(data) == stream_id) { + stream = H3_STREAM_CTX(ctx, data); + if(stream && stream->id == stream_id) { + *pstream = stream; 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) { + if(sdata->conn != data->conn) + continue; + stream = H3_STREAM_CTX(ctx, sdata); + if(stream && stream->id == stream_id) { + *pstream = stream; return sdata; } } } + *pstream = NULL; return NULL; } static void h3_drain_stream(struct Curl_cfilter *cf, struct Curl_easy *data) { - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_ngtcp2_ctx *ctx = cf->ctx; + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); unsigned char bits; (void)cf; @@ -274,8 +325,8 @@ static void pktx_update_time(struct pkt_io_ctx *pktx, 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; + pktx->ts = (ngtcp2_tstamp)ctx->q.last_op.tv_sec * NGTCP2_SECONDS + + (ngtcp2_tstamp)ctx->q.last_op.tv_usec * NGTCP2_MICROSECONDS; } static void pktx_init(struct pkt_io_ctx *pktx, @@ -289,12 +340,6 @@ static void pktx_init(struct pkt_io_ctx *pktx, 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); @@ -371,7 +416,7 @@ static void quic_settings(struct cf_ngtcp2_ctx *ctx, } } -static int init_ngh3_conn(struct Curl_cfilter *cf); +static CURLcode init_ngh3_conn(struct Curl_cfilter *cf); static int cb_handshake_completed(ngtcp2_conn *tconn, void *user_data) { @@ -380,13 +425,60 @@ static int cb_handshake_completed(ngtcp2_conn *tconn, void *user_data) return 0; } +static void cf_ngtcp2_conn_close(struct Curl_cfilter *cf, + struct Curl_easy *data); + +static bool cf_ngtcp2_err_is_fatal(int code) +{ + return (NGTCP2_ERR_FATAL >= code) || + (NGTCP2_ERR_DROP_CONN == code) || + (NGTCP2_ERR_IDLE_CLOSE == code); +} + +static void cf_ngtcp2_err_set(struct Curl_cfilter *cf, + struct Curl_easy *data, int code) +{ + struct cf_ngtcp2_ctx *ctx = cf->ctx; + if(!ctx->last_error.error_code) { + if(NGTCP2_ERR_CRYPTO == code) { + 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, code, NULL, 0); + } + } + if(cf_ngtcp2_err_is_fatal(code)) + cf_ngtcp2_conn_close(cf, data); +} + +static bool cf_ngtcp2_h3_err_is_fatal(int code) +{ + return (NGHTTP3_ERR_FATAL >= code) || + (NGHTTP3_ERR_H3_CLOSED_CRITICAL_STREAM == code); +} + +static void cf_ngtcp2_h3_err_set(struct Curl_cfilter *cf, + struct Curl_easy *data, int code) +{ + struct cf_ngtcp2_ctx *ctx = cf->ctx; + if(!ctx->last_error.error_code) { + ngtcp2_ccerr_set_application_error(&ctx->last_error, + nghttp3_err_infer_quic_app_error_code(code), NULL, 0); + } + if(cf_ngtcp2_h3_err_is_fatal(code)) + cf_ngtcp2_conn_close(cf, data); +} + static int cb_recv_stream_data(ngtcp2_conn *tconn, uint32_t flags, - int64_t stream_id, uint64_t offset, + int64_t sid, 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; + curl_int64_t stream_id = (curl_int64_t)sid; nghttp3_ssize nconsumed; int fin = (flags & NGTCP2_STREAM_DATA_FLAG_FIN) ? 1 : 0; struct Curl_easy *data = stream_user_data; @@ -395,26 +487,26 @@ static int cb_recv_stream_data(ngtcp2_conn *tconn, uint32_t flags, 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(!data) + data = CF_DATA_CURRENT(cf); + if(data) + CURL_TRC_CF(data, cf, "[%" CURL_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; + struct h3_stream_ctx *stream = H3_STREAM_CTX_ID(ctx, stream_id); + if(data && stream) { + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] error on known stream, " + "reset=%d, closed=%d", + stream_id, stream->reset, stream->closed); } - 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); + ngtcp2_conn_extend_max_stream_offset(tconn, stream_id, (uint64_t)nconsumed); + ngtcp2_conn_extend_max_offset(tconn, (uint64_t)nconsumed); return 0; } @@ -442,41 +534,45 @@ cb_acked_stream_data_offset(ngtcp2_conn *tconn, int64_t stream_id, } static int cb_stream_close(ngtcp2_conn *tconn, uint32_t flags, - int64_t stream3_id, uint64_t app_error_code, + int64_t sid, 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; + struct Curl_easy *data = stream_user_data; + curl_int64_t stream_id = (curl_int64_t)sid; int rv; (void)tconn; - (void)data; /* stream is closed... */ + if(!data) + data = CF_DATA_CURRENT(cf); + if(!data) + return NGTCP2_ERR_CALLBACK_FAILURE; 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); + rv = nghttp3_conn_close_stream(ctx->h3conn, stream_id, app_error_code); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] quic close(app_error=%" + CURL_PRIu64 ") -> %d", stream_id, (curl_uint64_t)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); + cf_ngtcp2_h3_err_set(cf, data, rv); return NGTCP2_ERR_CALLBACK_FAILURE; } return 0; } -static int cb_stream_reset(ngtcp2_conn *tconn, int64_t stream_id, +static int cb_stream_reset(ngtcp2_conn *tconn, int64_t sid, 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; + curl_int64_t stream_id = (curl_int64_t)sid; struct Curl_easy *data = stream_user_data; int rv; (void)tconn; @@ -485,7 +581,7 @@ static int cb_stream_reset(ngtcp2_conn *tconn, int64_t stream_id, (void)data; rv = nghttp3_conn_shutdown_stream_read(ctx->h3conn, stream_id); - CURL_TRC_CF(data, cf, "[%" PRId64 "] reset -> %d", stream_id, rv); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] reset -> %d", stream_id, rv); if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) { return NGTCP2_ERR_CALLBACK_FAILURE; } @@ -516,19 +612,26 @@ 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; + struct Curl_cfilter *cf = user_data; + struct cf_ngtcp2_ctx *ctx = cf->ctx; + struct Curl_easy *data = CF_DATA_CURRENT(cf); + (void)tconn; + ctx->max_bidi_streams = max_streams; + if(data) + CURL_TRC_CF(data, cf, "max bidi streams now %" CURL_PRIu64 + ", used %" CURL_PRIu64, (curl_uint64_t)ctx->max_bidi_streams, + (curl_uint64_t)ctx->used_bidi_streams); return 0; } -static int cb_extend_max_stream_data(ngtcp2_conn *tconn, int64_t stream_id, +static int cb_extend_max_stream_data(ngtcp2_conn *tconn, int64_t sid, uint64_t max_data, void *user_data, void *stream_user_data) { struct Curl_cfilter *cf = user_data; struct cf_ngtcp2_ctx *ctx = cf->ctx; + curl_int64_t stream_id = (curl_int64_t)sid; struct Curl_easy *data = CF_DATA_CURRENT(cf); struct Curl_easy *s_data; struct h3_stream_ctx *stream; @@ -541,12 +644,12 @@ static int cb_extend_max_stream_data(ngtcp2_conn *tconn, int64_t 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); + s_data = get_stream_easy(cf, data, stream_id, &stream); + if(s_data && stream && stream->quic_flow_blocked) { + CURL_TRC_CF(s_data, cf, "[%" CURL_PRId64 "] unblock quic flow", + stream_id); stream->quic_flow_blocked = FALSE; - h3_drain_stream(cf, data); + h3_drain_stream(cf, s_data); } return 0; } @@ -559,7 +662,7 @@ static void cb_rand(uint8_t *dest, size_t destlen, result = Curl_rand(NULL, dest, destlen); if(result) { - /* cb_rand is only used for non-cryptographic context. If Curl_rand + /* cb_rand is only used for non-cryptographic context. If Curl_rand failed, just fill 0 and call it *random*. */ memset(dest, 0, destlen); } @@ -676,7 +779,7 @@ static CURLcode check_and_set_expiry(struct Curl_cfilter *cf, if(rv) { failf(data, "ngtcp2_conn_handle_expiry returned error: %s", ngtcp2_strerror(rv)); - ngtcp2_ccerr_set_liberr(&ctx->last_error, rv, NULL, 0); + cf_ngtcp2_err_set(cf, data, rv); return CURLE_SEND_ERROR; } result = cf_progress_ingress(cf, data, pktx); @@ -694,7 +797,8 @@ static CURLcode check_and_set_expiry(struct Curl_cfilter *cf, if(timeout % NGTCP2_MILLISECONDS) { timeout += NGTCP2_MILLISECONDS; } - Curl_expire(data, timeout / NGTCP2_MILLISECONDS, EXPIRE_QUIC); + Curl_expire(data, (timediff_t)(timeout / NGTCP2_MILLISECONDS), + EXPIRE_QUIC); } } return CURLE_OK; @@ -711,8 +815,11 @@ static void cf_ngtcp2_adjust_pollset(struct Curl_cfilter *cf, return; Curl_pollset_check(data, ps, ctx->q.sockfd, &want_recv, &want_send); + if(!want_send && !Curl_bufq_is_empty(&ctx->q.sendbuf)) + want_send = TRUE; + if(want_recv || want_send) { - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); struct cf_call_data save; bool c_exhaust, s_exhaust; @@ -730,13 +837,15 @@ static void cf_ngtcp2_adjust_pollset(struct Curl_cfilter *cf, } } -static int cb_h3_stream_close(nghttp3_conn *conn, int64_t stream_id, +static int cb_h3_stream_close(nghttp3_conn *conn, int64_t sid, 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; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + curl_int64_t stream_id = (curl_int64_t)sid; + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)conn; (void)stream_id; @@ -745,24 +854,50 @@ static int cb_h3_stream_close(nghttp3_conn *conn, int64_t stream_id, return 0; stream->closed = TRUE; - stream->error3 = app_error_code; + stream->error3 = (curl_uint64_t)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, + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] RESET: error %" CURL_PRIu64, stream->id, stream->error3); } else { - CURL_TRC_CF(data, cf, "[%" PRId64 "] CLOSED", stream->id); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] CLOSED", stream->id); } h3_drain_stream(cf, data); return 0; } -static CURLcode write_resp_hds(struct Curl_easy *data, - const char *buf, size_t blen) +static void h3_xfer_write_resp_hd(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct h3_stream_ctx *stream, + const char *buf, size_t blen, bool eos) { - return Curl_xfer_write_resp(data, (char *)buf, blen, FALSE); + + /* If we already encountered an error, skip further writes */ + if(!stream->xfer_result) { + stream->xfer_result = Curl_xfer_write_resp_hd(data, buf, blen, eos); + if(stream->xfer_result) + CURL_TRC_CF(data, cf, "[%"CURL_PRId64"] error %d writing %zu " + "bytes of headers", stream->id, stream->xfer_result, blen); + } +} + +static void h3_xfer_write_resp(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct h3_stream_ctx *stream, + const char *buf, size_t blen, bool eos) +{ + + /* If we already encountered an error, skip further writes */ + if(!stream->xfer_result) { + stream->xfer_result = Curl_xfer_write_resp(data, buf, blen, eos); + /* If the transfer write is errored, we do not want any more data */ + if(stream->xfer_result) { + CURL_TRC_CF(data, cf, "[%"CURL_PRId64"] error %d writing %zu bytes " + "of data", stream->id, stream->xfer_result, blen); + } + } } static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream3_id, @@ -772,8 +907,7 @@ static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream3_id, struct Curl_cfilter *cf = user_data; struct cf_ngtcp2_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); - CURLcode result; + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)conn; (void)stream3_id; @@ -781,19 +915,14 @@ static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream3_id, if(!stream) return NGHTTP3_ERR_CALLBACK_FAILURE; - result = Curl_xfer_write_resp(data, (char *)buf, blen, FALSE); - if(result) { - CURL_TRC_CF(data, cf, "[%" PRId64 "] DATA len=%zu, ERROR receiving %d", - stream->id, blen, result); - return NGHTTP3_ERR_CALLBACK_FAILURE; - } + h3_xfer_write_resp(cf, data, stream, (char *)buf, blen, FALSE); if(blen) { - CURL_TRC_CF(data, cf, "[%" PRId64 "] ACK %zu bytes of DATA", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] ACK %zu bytes of DATA", stream->id, blen); ngtcp2_conn_extend_max_stream_offset(ctx->qconn, stream->id, blen); ngtcp2_conn_extend_max_offset(ctx->qconn, blen); } - CURL_TRC_CF(data, cf, "[%" PRId64 "] DATA len=%zu", stream->id, blen); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] DATA len=%zu", stream->id, blen); return 0; } @@ -813,13 +942,14 @@ static int cb_h3_deferred_consume(nghttp3_conn *conn, int64_t stream3_id, return 0; } -static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id, +static int cb_h3_end_headers(nghttp3_conn *conn, int64_t sid, int fin, 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; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); - CURLcode result = CURLE_OK; + curl_int64_t stream_id = (curl_int64_t)sid; + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)conn; (void)stream_id; (void)fin; @@ -827,13 +957,10 @@ static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id, if(!stream) return 0; - /* add a CRLF only if we've received some headers */ - result = write_resp_hds(data, "\r\n", 2); - if(result) { - return -1; - } + /* add a CRLF only if we have received some headers */ + h3_xfer_write_resp_hd(cf, data, stream, STRCONST("\r\n"), stream->closed); - CURL_TRC_CF(data, cf, "[%" PRId64 "] end_headers, status=%d", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] end_headers, status=%d", stream_id, stream->status_code); if(stream->status_code / 100 != 1) { stream->resp_hds_complete = TRUE; @@ -842,16 +969,18 @@ static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id, return 0; } -static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id, +static int cb_h3_recv_header(nghttp3_conn *conn, int64_t sid, 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; + struct cf_ngtcp2_ctx *ctx = cf->ctx; + curl_int64_t stream_id = (curl_int64_t)sid; 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); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result = CURLE_OK; (void)conn; (void)stream_id; @@ -864,42 +993,45 @@ static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id, 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_hds(data, line, ncopy); + Curl_dyn_reset(&ctx->scratch); + result = Curl_dyn_addn(&ctx->scratch, STRCONST("HTTP/3 ")); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, + (const char *)h3val.base, h3val.len); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, STRCONST(" \r\n")); + if(!result) + h3_xfer_write_resp_hd(cf, data, stream, Curl_dyn_ptr(&ctx->scratch), + Curl_dyn_len(&ctx->scratch), FALSE); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] status: %s", + stream_id, Curl_dyn_ptr(&ctx->scratch)); if(result) { return -1; } } else { /* store as an HTTP1-style header */ - CURL_TRC_CF(data, cf, "[%" PRId64 "] header: %.*s: %.*s", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] header: %.*s: %.*s", stream_id, (int)h3name.len, h3name.base, (int)h3val.len, h3val.base); - result = write_resp_hds(data, (const char *)h3name.base, h3name.len); - if(result) { - return -1; - } - result = write_resp_hds(data, ": ", 2); - if(result) { - return -1; - } - result = write_resp_hds(data, (const char *)h3val.base, h3val.len); - if(result) { - return -1; - } - result = write_resp_hds(data, "\r\n", 2); - if(result) { - return -1; - } + Curl_dyn_reset(&ctx->scratch); + result = Curl_dyn_addn(&ctx->scratch, + (const char *)h3name.base, h3name.len); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, STRCONST(": ")); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, + (const char *)h3val.base, h3val.len); + if(!result) + result = Curl_dyn_addn(&ctx->scratch, STRCONST("\r\n")); + if(!result) + h3_xfer_write_resp_hd(cf, data, stream, Curl_dyn_ptr(&ctx->scratch), + Curl_dyn_len(&ctx->scratch), FALSE); } return 0; } @@ -923,11 +1055,12 @@ static int cb_h3_stop_sending(nghttp3_conn *conn, int64_t stream_id, return 0; } -static int cb_h3_reset_stream(nghttp3_conn *conn, int64_t stream_id, +static int cb_h3_reset_stream(nghttp3_conn *conn, int64_t sid, 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; + curl_int64_t stream_id = (curl_int64_t)sid; struct Curl_easy *data = stream_user_data; int rv; (void)conn; @@ -935,7 +1068,7 @@ static int cb_h3_reset_stream(nghttp3_conn *conn, int64_t stream_id, 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); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] reset -> %d", stream_id, rv); if(rv && rv != NGTCP2_ERR_STREAM_NOT_FOUND) { return NGTCP2_ERR_CALLBACK_FAILURE; } @@ -961,7 +1094,7 @@ static nghttp3_callbacks ngh3_callbacks = { NULL /* recv_settings */ }; -static int init_ngh3_conn(struct Curl_cfilter *cf) +static CURLcode init_ngh3_conn(struct Curl_cfilter *cf) { struct cf_ngtcp2_ctx *ctx = cf->ctx; CURLcode result; @@ -1031,14 +1164,14 @@ static ssize_t recv_closed_stream(struct Curl_cfilter *cf, (void)cf; if(stream->reset) { failf(data, - "HTTP/3 stream %" PRId64 " reset by server", stream->id); + "HTTP/3 stream %" CURL_PRId64 " reset by server", stream->id); *err = data->req.bytecount? 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", + "HTTP/3 stream %" CURL_PRId64 " was closed cleanly, but before " + "getting all response header fields, treated as error", stream->id); *err = CURLE_HTTP3; goto out; @@ -1055,7 +1188,7 @@ static ssize_t cf_ngtcp2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, char *buf, size_t blen, CURLcode *err) { struct cf_ngtcp2_ctx *ctx = cf->ctx; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t nread = -1; struct cf_call_data save; struct pkt_io_ctx pktx; @@ -1072,7 +1205,7 @@ static ssize_t cf_ngtcp2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, pktx_init(&pktx, cf, data); - if(!stream) { + if(!stream || ctx->shutdown_started) { *err = CURLE_RECV_ERROR; goto out; } @@ -1083,7 +1216,14 @@ static ssize_t cf_ngtcp2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, goto out; } - if(stream->closed) { + if(stream->xfer_result) { + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] xfer write failed", stream->id); + cf_ngtcp2_stream_close(cf, data, stream); + *err = stream->xfer_result; + nread = -1; + goto out; + } + else if(stream->closed) { nread = recv_closed_stream(cf, data, stream, err); goto out; } @@ -1102,7 +1242,7 @@ static ssize_t cf_ngtcp2_recv(struct Curl_cfilter *cf, struct Curl_easy *data, nread = -1; } } - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_recv(blen=%zu) -> %zd, %d", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] cf_recv(blen=%zu) -> %zd, %d", stream? stream->id : -1, blen, nread, *err); CF_DATA_RESTORE(cf, save); return nread; @@ -1113,8 +1253,9 @@ static int cb_h3_acked_req_body(nghttp3_conn *conn, int64_t stream_id, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_ngtcp2_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); size_t skiplen; (void)cf; @@ -1130,8 +1271,8 @@ static int cb_h3_acked_req_body(nghttp3_conn *conn, int64_t stream_id, Curl_bufq_skip(&stream->sendbuf, skiplen); stream->sendbuf_len_in_flight -= skiplen; - /* Everything ACKed, we resume upload processing */ - if(!stream->sendbuf_len_in_flight) { + /* Resume upload processing if we have more data to send */ + if(stream->sendbuf_len_in_flight < Curl_bufq_len(&stream->sendbuf)) { int rv = nghttp3_conn_resume_stream(conn, stream_id); if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) { return NGTCP2_ERR_CALLBACK_FAILURE; @@ -1147,8 +1288,9 @@ cb_h3_read_req_body(nghttp3_conn *conn, int64_t stream_id, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_ngtcp2_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t nwritten = 0; size_t nvecs = 0; (void)cf; @@ -1191,12 +1333,12 @@ cb_h3_read_req_body(nghttp3_conn *conn, int64_t stream_id, } else if(!nwritten) { /* Not EOF, and nothing to give, we signal WOULDBLOCK. */ - CURL_TRC_CF(data, cf, "[%" PRId64 "] read req body -> AGAIN", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] read req body -> AGAIN", stream->id); return NGHTTP3_ERR_WOULDBLOCK; } - CURL_TRC_CF(data, cf, "[%" PRId64 "] read req body -> " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] read req body -> " "%d vecs%s with %zu (buffered=%zu, left=%" CURL_FORMAT_CURL_OFF_T ")", stream->id, (int)nvecs, @@ -1217,6 +1359,7 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf, { struct cf_ngtcp2_ctx *ctx = cf->ctx; struct h3_stream_ctx *stream = NULL; + int64_t sid; struct dynhds h2_headers; size_t nheader; nghttp3_nv *nva = NULL; @@ -1231,7 +1374,7 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf, *err = h3_data_setup(cf, data); if(*err) goto out; - stream = H3_STREAM_CTX(data); + stream = H3_STREAM_CTX(ctx, data); DEBUGASSERT(stream); if(!stream) { *err = CURLE_FAILED_INIT; @@ -1272,12 +1415,15 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf, nva[i].flags = NGHTTP3_NV_FLAG_NONE; } - rc = ngtcp2_conn_open_bidi_stream(ctx->qconn, &stream->id, data); + rc = ngtcp2_conn_open_bidi_stream(ctx->qconn, &sid, data); if(rc) { failf(data, "can get bidi streams"); *err = CURLE_SEND_ERROR; + nwritten = -1; goto out; } + stream->id = (curl_int64_t)sid; + ++ctx->used_bidi_streams; switch(data->state.httpreq) { case HTTPREQ_POST: @@ -1308,12 +1454,12 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf, if(rc) { switch(rc) { case NGHTTP3_ERR_CONN_CLOSING: - CURL_TRC_CF(data, cf, "h3sid[%"PRId64"] failed to send, " + CURL_TRC_CF(data, cf, "h3sid[%" CURL_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)); + CURL_TRC_CF(data, cf, "h3sid[%" CURL_PRId64 "] failed to send -> " + "%d (%s)", stream->id, rc, ngtcp2_strerror(rc)); break; } *err = CURLE_SEND_ERROR; @@ -1322,10 +1468,10 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf, } if(Curl_trc_is_verbose(data)) { - infof(data, "[HTTP/3] [%" PRId64 "] OPENED stream for %s", + infof(data, "[HTTP/3] [%" CURL_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, + infof(data, "[HTTP/3] [%" CURL_PRId64 "] [%.*s: %.*s]", stream->id, (int)nva[i].namelen, nva[i].name, (int)nva[i].valuelen, nva[i].value); } @@ -1341,7 +1487,7 @@ 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); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t sent = 0; struct cf_call_data save; struct pkt_io_ctx pktx; @@ -1361,27 +1507,25 @@ static ssize_t cf_ngtcp2_send(struct Curl_cfilter *cf, struct Curl_easy *data, } if(!stream || stream->id < 0) { + if(ctx->shutdown_started) { + CURL_TRC_CF(data, cf, "cannot open stream on closed connection"); + *err = CURLE_SEND_ERROR; + sent = -1; + goto out; + } 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; + stream = H3_STREAM_CTX(ctx, data); + } + else if(stream->xfer_result) { + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] xfer write failed", stream->id); + cf_ngtcp2_stream_close(cf, data, stream); + *err = stream->xfer_result; + sent = -1; + goto out; } else if(stream->closed) { if(stream->resp_hds_complete) { @@ -1390,21 +1534,27 @@ static ssize_t cf_ngtcp2_send(struct Curl_cfilter *cf, struct Curl_easy *data, * 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" + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] discarding data" "on closed stream with response", stream->id); *err = CURLE_OK; sent = (ssize_t)len; goto out; } - CURL_TRC_CF(data, cf, "[%" PRId64 "] send_body(len=%zu) " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] send_body(len=%zu) " "-> stream closed", stream->id, len); *err = CURLE_HTTP3; sent = -1; goto out; } + else if(ctx->shutdown_started) { + CURL_TRC_CF(data, cf, "cannot send on closed connection"); + *err = CURLE_SEND_ERROR; + sent = -1; + goto out; + } else { sent = Curl_bufq_write(&stream->sendbuf, buf, len, err); - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_send, add to " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] cf_send, add to " "sendbuf(len=%zu) -> %zd, %d", stream->id, len, sent, *err); if(sent < 0) { @@ -1420,25 +1570,13 @@ static ssize_t cf_ngtcp2_send(struct Curl_cfilter *cf, struct Curl_easy *data, 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", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] cf_send(len=%zu) -> %zd, %d", stream? stream->id : -1, len, sent, *err); CF_DATA_RESTORE(cf, save); return sent; @@ -1469,7 +1607,7 @@ static CURLcode recv_pkt(const unsigned char *pkt, size_t pktlen, ++pktx->pkt_count; ngtcp2_addr_init(&path.local, (struct sockaddr *)&ctx->q.local_addr, - ctx->q.local_addrlen); + (socklen_t)ctx->q.local_addrlen); ngtcp2_addr_init(&path.remote, (struct sockaddr *)remote_addr, remote_addrlen); pi.ecn = (uint8_t)ecn; @@ -1478,16 +1616,7 @@ static CURLcode recv_pkt(const unsigned char *pkt, size_t pktlen, 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); - } - } + cf_ngtcp2_err_set(pktx->cf, pktx->data, rv); if(rv == NGTCP2_ERR_CRYPTO) /* this is a "TLS problem", but a failed certificate verification @@ -1570,9 +1699,7 @@ static ssize_t read_pkt_to_send(void *userp, 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); + cf_ngtcp2_h3_err_set(x->cf, x->data, (int)veccnt); *err = CURLE_SEND_ERROR; return -1; } @@ -1593,11 +1720,11 @@ static ssize_t read_pkt_to_send(void *userp, else if(n < 0) { switch(n) { case NGTCP2_ERR_STREAM_DATA_BLOCKED: { - struct h3_stream_ctx *stream = H3_STREAM_CTX(x->data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(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); + CURL_TRC_CF(x->data, x->cf, "[%" CURL_PRId64 "] block quic flow", + (curl_int64_t)stream_id); DEBUGASSERT(stream); if(stream) stream->quic_flow_blocked = TRUE; @@ -1619,7 +1746,7 @@ static ssize_t read_pkt_to_send(void *userp, 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); + cf_ngtcp2_err_set(x->cf, x->data, (int)n); *err = CURLE_SEND_ERROR; nwritten = -1; goto out; @@ -1716,7 +1843,7 @@ static CURLcode cf_progress_egress(struct Curl_cfilter *cf, 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. */ + * payload size or it is a PMTUD. We will see. */ gsolen = (size_t)nread; } else if((size_t)nread > gsolen || @@ -1807,16 +1934,17 @@ static CURLcode cf_ngtcp2_data_event(struct Curl_cfilter *cf, h3_data_done(cf, data); break; case CF_CTRL_DATA_DONE_SEND: { - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); if(stream && !stream->send_closed) { stream->send_closed = TRUE; - stream->upload_left = Curl_bufq_len(&stream->sendbuf); + stream->upload_left = Curl_bufq_len(&stream->sendbuf) - + stream->sendbuf_len_in_flight; (void)nghttp3_conn_resume_stream(ctx->h3conn, stream->id); } break; } case CF_CTRL_DATA_IDLE: { - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURL_TRC_CF(data, cf, "data idle"); if(stream && !stream->closed) { result = check_and_set_expiry(cf, data, NULL); @@ -1846,6 +1974,9 @@ static void cf_ngtcp2_ctx_clear(struct cf_ngtcp2_ctx *ctx) if(ctx->qconn) ngtcp2_conn_del(ctx->qconn); Curl_bufcp_free(&ctx->stream_bufcp); + Curl_dyn_free(&ctx->scratch); + Curl_hash_clean(&ctx->streams); + Curl_hash_destroy(&ctx->streams); Curl_ssl_peer_cleanup(&ctx->peer); memset(ctx, 0, sizeof(*ctx)); @@ -1853,31 +1984,110 @@ static void cf_ngtcp2_ctx_clear(struct cf_ngtcp2_ctx *ctx) ctx->call_data = save; } -static void cf_ngtcp2_close(struct Curl_cfilter *cf, struct Curl_easy *data) +static CURLcode cf_ngtcp2_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, bool *done) { struct cf_ngtcp2_ctx *ctx = cf->ctx; struct cf_call_data save; + struct pkt_io_ctx pktx; + CURLcode result = CURLE_OK; + + if(cf->shutdown || !ctx->qconn) { + *done = TRUE; + return CURLE_OK; + } CF_DATA_SAVE(save, cf, data); - if(ctx && ctx->qconn) { + *done = FALSE; + pktx_init(&pktx, cf, data); + + if(!ctx->shutdown_started) { char buffer[NGTCP2_MAX_UDP_PAYLOAD_SIZE]; - struct pkt_io_ctx pktx; - ngtcp2_ssize rc; + ngtcp2_ssize nwritten; + + if(!Curl_bufq_is_empty(&ctx->q.sendbuf)) { + CURL_TRC_CF(data, cf, "shutdown, flushing sendbuf"); + result = cf_progress_egress(cf, data, &pktx); + if(!Curl_bufq_is_empty(&ctx->q.sendbuf)) { + CURL_TRC_CF(data, cf, "sending shutdown packets blocked"); + result = CURLE_OK; + goto out; + } + else if(result) { + CURL_TRC_CF(data, cf, "shutdown, error %d flushing sendbuf", result); + *done = TRUE; + goto out; + } + } - 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); + ctx->shutdown_started = TRUE; + nwritten = ngtcp2_conn_write_connection_close( + ctx->qconn, NULL, /* path */ + NULL, /* pkt_info */ + (uint8_t *)buffer, sizeof(buffer), + &ctx->last_error, pktx.ts); + CURL_TRC_CF(data, cf, "start shutdown(err_type=%d, err_code=%" + CURL_PRIu64 ") -> %d", ctx->last_error.type, + (curl_uint64_t)ctx->last_error.error_code, (int)nwritten); + if(nwritten > 0) { + Curl_bufq_write(&ctx->q.sendbuf, (const unsigned char *)buffer, + (size_t)nwritten, &result); + if(result) { + CURL_TRC_CF(data, cf, "error %d adding shutdown packets to sendbuf, " + "aborting shutdown", result); + goto out; + } + ctx->q.no_gso = TRUE; + ctx->q.gsolen = (size_t)nwritten; + ctx->q.split_len = 0; + } + } + + if(!Curl_bufq_is_empty(&ctx->q.sendbuf)) { + CURL_TRC_CF(data, cf, "shutdown, flushing egress"); + result = vquic_flush(cf, data, &ctx->q); + if(result == CURLE_AGAIN) { + CURL_TRC_CF(data, cf, "sending shutdown packets blocked"); + result = CURLE_OK; + goto out; } + else if(result) { + CURL_TRC_CF(data, cf, "shutdown, error %d flushing sendbuf", result); + *done = TRUE; + goto out; + } + } - cf_ngtcp2_ctx_clear(ctx); + if(Curl_bufq_is_empty(&ctx->q.sendbuf)) { + /* Sent everything off. ngtcp2 seems to have no support for graceful + * shutdowns. So, we are done. */ + CURL_TRC_CF(data, cf, "shutdown completely sent off, done"); + *done = TRUE; + result = CURLE_OK; } +out: + CF_DATA_RESTORE(cf, save); + return result; +} +static void cf_ngtcp2_conn_close(struct Curl_cfilter *cf, + struct Curl_easy *data) +{ + bool done; + cf_ngtcp2_shutdown(cf, data, &done); +} + +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) { + cf_ngtcp2_conn_close(cf, data); + cf_ngtcp2_ctx_clear(ctx); + CURL_TRC_CF(data, cf, "close"); + } cf->connected = FALSE; CF_DATA_RESTORE(cf, save); } @@ -1898,30 +2108,64 @@ static void cf_ngtcp2_destroy(struct Curl_cfilter *cf, struct Curl_easy *data) (void)save; } -static CURLcode tls_ctx_setup(struct quic_tls_ctx *ctx, - struct Curl_cfilter *cf, - struct Curl_easy *data) +#ifdef USE_OPENSSL +/* The "new session" callback must return zero if the session can be removed + * or non-zero if the session has been put into the session cache. + */ +static int quic_ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid) { + struct Curl_cfilter *cf; + struct cf_ngtcp2_ctx *ctx; + struct Curl_easy *data; + ngtcp2_crypto_conn_ref *cref; + + cref = (ngtcp2_crypto_conn_ref *)SSL_get_app_data(ssl); + cf = cref? cref->user_data : NULL; + ctx = cf? cf->ctx : NULL; + data = cf? CF_DATA_CURRENT(cf) : NULL; + if(cf && data && ctx) { + Curl_ossl_add_session(cf, data, &ctx->peer, ssl_sessionid); + return 1; + } + return 0; +} +#endif /* USE_OPENSSL */ + +static CURLcode tls_ctx_setup(struct Curl_cfilter *cf, + struct Curl_easy *data, + void *user_data) +{ + struct curl_tls_ctx *ctx = user_data; (void)cf; #ifdef USE_OPENSSL #if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC) - if(ngtcp2_crypto_boringssl_configure_client_context(ctx->ssl_ctx) != 0) { + if(ngtcp2_crypto_boringssl_configure_client_context(ctx->ossl.ssl_ctx) + != 0) { failf(data, "ngtcp2_crypto_boringssl_configure_client_context failed"); return CURLE_FAILED_INIT; } #else - if(ngtcp2_crypto_quictls_configure_client_context(ctx->ssl_ctx) != 0) { + if(ngtcp2_crypto_quictls_configure_client_context(ctx->ossl.ssl_ctx) != 0) { failf(data, "ngtcp2_crypto_quictls_configure_client_context failed"); return CURLE_FAILED_INIT; } #endif /* !OPENSSL_IS_BORINGSSL && !OPENSSL_IS_AWSLC */ + /* Enable the session cache because it is a prerequisite for the + * "new session" callback. Use the "external storage" mode to prevent + * OpenSSL from creating an internal session cache. + */ + SSL_CTX_set_session_cache_mode(ctx->ossl.ssl_ctx, + SSL_SESS_CACHE_CLIENT | + SSL_SESS_CACHE_NO_INTERNAL); + SSL_CTX_sess_set_new_cb(ctx->ossl.ssl_ctx, quic_ossl_new_session_cb); + #elif defined(USE_GNUTLS) - if(ngtcp2_crypto_gnutls_configure_client_session(ctx->gtls->session) != 0) { + if(ngtcp2_crypto_gnutls_configure_client_session(ctx->gtls.session) != 0) { failf(data, "ngtcp2_crypto_gnutls_configure_client_session failed"); return CURLE_FAILED_INIT; } #elif defined(USE_WOLFSSL) - if(ngtcp2_crypto_wolfssl_configure_client_context(ctx->ssl_ctx) != 0) { + if(ngtcp2_crypto_wolfssl_configure_client_context(ctx->wssl.ctx) != 0) { failf(data, "ngtcp2_crypto_wolfssl_configure_client_context failed"); return CURLE_FAILED_INIT; } @@ -1948,18 +2192,24 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf, ctx->max_idle_ms = CURL_QUIC_MAX_IDLE_MS; Curl_bufcp_init(&ctx->stream_bufcp, H3_STREAM_CHUNK_SIZE, H3_STREAM_POOL_SPARES); + Curl_dyn_init(&ctx->scratch, CURL_MAX_HTTP_HEADER); + Curl_hash_offt_init(&ctx->streams, 63, h3_stream_hash_free); - result = Curl_ssl_peer_init(&ctx->peer, cf); + result = Curl_ssl_peer_init(&ctx->peer, cf, TRNSPRT_QUIC); if(result) return result; #define H3_ALPN "\x2h3\x5h3-29" result = Curl_vquic_tls_init(&ctx->tls, cf, data, &ctx->peer, H3_ALPN, sizeof(H3_ALPN) - 1, - tls_ctx_setup, &ctx->conn_ref); + tls_ctx_setup, &ctx->tls, &ctx->conn_ref); if(result) return result; +#ifdef USE_OPENSSL + SSL_set_quic_use_legacy_codepoint(ctx->tls.ossl.ssl, 0); +#endif + ctx->dcid.datalen = NGTCP2_MAX_CIDLEN; result = Curl_rand(data, ctx->dcid.data, NGTCP2_MAX_CIDLEN); if(result) @@ -1991,7 +2241,7 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf, (struct sockaddr *)&ctx->q.local_addr, ctx->q.local_addrlen); ngtcp2_addr_init(&ctx->connected_path.remote, - &sockaddr->sa_addr, sockaddr->addrlen); + &sockaddr->sa_addr, (socklen_t)sockaddr->addrlen); rc = ngtcp2_conn_client_new(&ctx->qconn, &ctx->dcid, &ctx->scid, &ctx->connected_path, @@ -2001,10 +2251,12 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf, if(rc) return CURLE_QUIC_CONNECT_ERROR; -#ifdef USE_GNUTLS - ngtcp2_conn_set_tls_native_handle(ctx->qconn, ctx->tls.gtls->session); +#ifdef USE_OPENSSL + ngtcp2_conn_set_tls_native_handle(ctx->qconn, ctx->tls.ossl.ssl); +#elif defined(USE_GNUTLS) + ngtcp2_conn_set_tls_native_handle(ctx->qconn, ctx->tls.gtls.session); #else - ngtcp2_conn_set_tls_native_handle(ctx->qconn, ctx->tls.ssl); + ngtcp2_conn_set_tls_native_handle(ctx->qconn, ctx->tls.wssl.handle); #endif ngtcp2_ccerr_default(&ctx->last_error); @@ -2118,17 +2370,28 @@ static CURLcode cf_ngtcp2_query(struct Curl_cfilter *cf, 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); + /* Set after transport params arrived and continually updated + * by callback. QUIC counts the number over the lifetime of the + * connection, ever increasing. + * We count the *open* transfers plus the budget for new ones. */ + if(!ctx->qconn || ctx->shutdown_started) { + *pres1 = 0; + } + else if(ctx->max_bidi_streams) { + uint64_t avail_bidi_streams = 0; + uint64_t max_streams = CONN_INUSE(cf->conn); + if(ctx->max_bidi_streams > ctx->used_bidi_streams) + avail_bidi_streams = ctx->max_bidi_streams - ctx->used_bidi_streams; + max_streams += avail_bidi_streams; + *pres1 = (max_streams > INT_MAX)? INT_MAX : (int)max_streams; + } + else /* transport params not arrived yet? take our default. */ + *pres1 = (int)Curl_multi_max_concurrent_streams(data->multi); + CURL_TRC_CF(data, cf, "query conn[%" CURL_FORMAT_CURL_OFF_T "]: " + "MAX_CONCURRENT -> %d (%zu in use)", + cf->conn->connection_id, *pres1, CONN_INUSE(cf->conn)); CF_DATA_RESTORE(cf, save); return CURLE_OK; } @@ -2169,9 +2432,9 @@ static bool cf_ngtcp2_conn_is_alive(struct Curl_cfilter *cf, const ngtcp2_transport_params *rp; struct cf_call_data save; - CF_DATA_SAVE(save, cf, data); + CF_DATA_SAVE(save, cf, data); *input_pending = FALSE; - if(!ctx->qconn) + if(!ctx->qconn || ctx->shutdown_started) goto out; /* Both sides of the QUIC connection announce they max idle times in @@ -2198,8 +2461,8 @@ static bool cf_ngtcp2_conn_is_alive(struct Curl_cfilter *cf, 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, + /* This happens before we have sent off a request and the connection is + not in use by any other transfer, there should not be any data here, only "protocol frames" */ *input_pending = FALSE; result = cf_progress_ingress(cf, data, NULL); @@ -2219,6 +2482,7 @@ struct Curl_cftype Curl_cft_http3 = { cf_ngtcp2_destroy, cf_ngtcp2_connect, cf_ngtcp2_close, + cf_ngtcp2_shutdown, Curl_cf_def_get_host, cf_ngtcp2_adjust_pollset, cf_ngtcp2_data_pending, diff --git a/lib/vquic/curl_osslq.c b/lib/vquic/curl_osslq.c index 1d53e2c11..dafde44f2 100644 --- a/lib/vquic/curl_osslq.c +++ b/lib/vquic/curl_osslq.c @@ -32,6 +32,7 @@ #include #include "urldata.h" +#include "hash.h" #include "sendf.h" #include "strdup.h" #include "rand.h" @@ -70,7 +71,7 @@ /* The pool keeps spares around and half of a full stream window * 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, + * spares. 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 @@ -182,7 +183,7 @@ static CURLcode make_bio_addr(BIO_ADDR **pbio_addr, result = CURLE_OK; break; } -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case AF_INET6: { struct sockaddr_in6 * const sin = (struct sockaddr_in6 * const)(void *)&addr->sa_addr; @@ -192,7 +193,7 @@ static CURLcode make_bio_addr(BIO_ADDR **pbio_addr, result = CURLE_OK; break; } -#endif /* ENABLE_IPV6 */ +#endif /* USE_IPV6 */ default: /* sunsupported */ DEBUGASSERT(0); @@ -210,7 +211,7 @@ static CURLcode make_bio_addr(BIO_ADDR **pbio_addr, /* QUIC stream (not necessarily H3) */ struct cf_osslq_stream { - int64_t id; + curl_int64_t id; SSL *ssl; struct bufq recvbuf; /* QUIC war data recv buffer */ BIT(recvd_eos); @@ -231,7 +232,7 @@ static CURLcode cf_osslq_stream_open(struct cf_osslq_stream *s, if(!s->ssl) { return CURLE_FAILED_INIT; } - s->id = SSL_get_stream_id(s->ssl); + s->id = (curl_int64_t)SSL_get_stream_id(s->ssl); SSL_set_app_data(s->ssl, user_data); return CURLE_OK; } @@ -281,7 +282,7 @@ static void cf_osslq_h3conn_cleanup(struct cf_osslq_h3conn *h3) struct cf_osslq_ctx { struct cf_quic_ctx q; struct ssl_peer peer; - struct quic_tls_ctx tls; + struct curl_tls_ctx tls; struct cf_call_data call_data; struct cf_osslq_h3conn h3; struct curltime started_at; /* time the current attempt started */ @@ -289,13 +290,14 @@ struct cf_osslq_ctx { 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 */ + struct Curl_hash streams; /* hash `data->id` to `h3_stream_ctx` */ size_t max_stream_window; /* max flow window for one stream */ uint64_t max_idle_ms; /* max idle time for QUIC connection */ BIT(got_first_byte); /* if first byte was received */ -#ifdef USE_OPENSSL BIT(x509_store_setup); /* if x509 store has been set up */ BIT(protocol_shutdown); /* QUIC connection is shut down */ -#endif + BIT(need_recv); /* QUIC connection needs to receive */ + BIT(need_send); /* QUIC connection needs to send */ }; static void cf_osslq_ctx_clear(struct cf_osslq_ctx *ctx) @@ -306,21 +308,99 @@ static void cf_osslq_ctx_clear(struct cf_osslq_ctx *ctx) Curl_vquic_tls_cleanup(&ctx->tls); vquic_ctx_free(&ctx->q); Curl_bufcp_free(&ctx->stream_bufcp); + Curl_hash_clean(&ctx->streams); + Curl_hash_destroy(&ctx->streams); Curl_ssl_peer_cleanup(&ctx->peer); memset(ctx, 0, sizeof(*ctx)); ctx->call_data = save; } +static CURLcode cf_osslq_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, bool *done) +{ + struct cf_osslq_ctx *ctx = cf->ctx; + struct cf_call_data save; + CURLcode result = CURLE_OK; + int rc; + + CF_DATA_SAVE(save, cf, data); + + if(cf->shutdown || ctx->protocol_shutdown) { + *done = TRUE; + return CURLE_OK; + } + + CF_DATA_SAVE(save, cf, data); + *done = FALSE; + ctx->need_send = FALSE; + ctx->need_recv = FALSE; + + rc = SSL_shutdown_ex(ctx->tls.ossl.ssl, + SSL_SHUTDOWN_FLAG_NO_BLOCK, NULL, 0); + if(rc == 0) { /* ongoing */ + CURL_TRC_CF(data, cf, "shutdown ongoing"); + ctx->need_recv = TRUE; + goto out; + } + else if(rc == 1) { /* done */ + CURL_TRC_CF(data, cf, "shutdown finished"); + *done = TRUE; + goto out; + } + else { + long sslerr; + char err_buffer[256]; + int err = SSL_get_error(ctx->tls.ossl.ssl, rc); + + switch(err) { + case SSL_ERROR_NONE: + case SSL_ERROR_ZERO_RETURN: + CURL_TRC_CF(data, cf, "shutdown not received, but closed"); + *done = TRUE; + goto out; + 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, "shutdown sent, want receive"); + ctx->need_recv = TRUE; + goto out; + case SSL_ERROR_WANT_WRITE: + CURL_TRC_CF(data, cf, "shutdown send blocked"); + ctx->need_send = TRUE; + goto out; + default: + /* We give up on this. */ + sslerr = ERR_get_error(); + CURL_TRC_CF(data, cf, "shutdown, ignore recv error: '%s', errno %d", + (sslerr ? + osslq_strerror(sslerr, err_buffer, sizeof(err_buffer)) : + osslq_SSL_ERROR_to_str(err)), + SOCKERRNO); + *done = TRUE; + result = CURLE_OK; + goto out; + } + } +out: + CF_DATA_RESTORE(cf, save); + return result; +} + static void cf_osslq_close(struct Curl_cfilter *cf, struct Curl_easy *data) { struct cf_osslq_ctx *ctx = cf->ctx; struct cf_call_data save; CF_DATA_SAVE(save, cf, data); - if(ctx && ctx->tls.ssl) { - /* TODO: send connection close */ + if(ctx && ctx->tls.ossl.ssl) { CURL_TRC_CF(data, cf, "cf_osslq_close()"); + if(!cf->shutdown && !ctx->protocol_shutdown) { + /* last best effort, which OpenSSL calls a "rapid" shutdown. */ + SSL_shutdown_ex(ctx->tls.ossl.ssl, + (SSL_SHUTDOWN_FLAG_NO_BLOCK | SSL_SHUTDOWN_FLAG_RAPID), + NULL, 0); + } cf_osslq_ctx_clear(ctx); } @@ -351,11 +431,11 @@ static CURLcode cf_osslq_h3conn_add_stream(struct cf_osslq_h3conn *h3, struct Curl_easy *data) { struct cf_osslq_ctx *ctx = cf->ctx; - int64_t stream_id = SSL_get_stream_id(stream_ssl); + curl_int64_t stream_id = (curl_int64_t)SSL_get_stream_id(stream_ssl); if(h3->remote_ctrl_n >= ARRAYSIZE(h3->remote_ctrl)) { /* rejected, we are full */ - CURL_TRC_CF(data, cf, "[%" PRId64 "] rejecting additional remote stream", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] rejecting remote stream", stream_id); SSL_free(stream_ssl); return CURLE_FAILED_INIT; @@ -366,12 +446,12 @@ static CURLcode cf_osslq_h3conn_add_stream(struct cf_osslq_h3conn *h3, nstream->id = stream_id; nstream->ssl = stream_ssl; Curl_bufq_initp(&nstream->recvbuf, &ctx->stream_bufcp, 1, BUFQ_OPT_NONE); - CURL_TRC_CF(data, cf, "[%" PRId64 "] accepted new remote uni stream", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] accepted remote uni stream", stream_id); break; } default: - CURL_TRC_CF(data, cf, "[%" PRId64 "] rejecting remote non-uni-read" + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] reject remote non-uni-read" " stream", stream_id); SSL_free(stream_ssl); return CURLE_FAILED_INIT; @@ -403,7 +483,7 @@ static CURLcode cf_osslq_ssl_err(struct Curl_cfilter *cf, (reason == SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED))) { result = CURLE_PEER_FAILED_VERIFICATION; - lerr = SSL_get_verify_result(ctx->tls.ssl); + lerr = SSL_get_verify_result(ctx->tls.ossl.ssl); if(lerr != X509_V_OK) { ssl_config->certverifyresult = lerr; msnprintf(ebuf, sizeof(ebuf), @@ -436,7 +516,7 @@ static CURLcode cf_osslq_ssl_err(struct Curl_cfilter *cf, /* detail is already set to the SSL error above */ - /* If we e.g. use SSLv2 request-method and the server doesn't like us + /* If we e.g. use SSLv2 request-method and the server does not like us * (RST connection, etc.), OpenSSL gives no explanation whatsoever and * the SO_ERROR is also lost. */ @@ -480,9 +560,8 @@ struct h3_stream_ctx { 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_uint64_t error3; /* HTTP/3 stream error code */ curl_off_t upload_left; /* number of request bytes left to upload */ curl_off_t download_recvd; /* number of response DATA bytes received */ int status_code; /* HTTP status code */ @@ -493,20 +572,31 @@ struct h3_stream_ctx { 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)->s.id : -2) +#define H3_STREAM_CTX(ctx,data) ((struct h3_stream_ctx *)(\ + data? Curl_hash_offt_get(&(ctx)->streams, (data)->id) : NULL)) + +static void h3_stream_ctx_free(struct h3_stream_ctx *stream) +{ + cf_osslq_stream_cleanup(&stream->s); + Curl_bufq_free(&stream->sendbuf); + Curl_bufq_free(&stream->recvbuf); + Curl_h1_req_parse_free(&stream->h1); + free(stream); +} + +static void h3_stream_hash_free(void *stream) +{ + DEBUGASSERT(stream); + h3_stream_ctx_free((struct h3_stream_ctx *)stream); +} static CURLcode h3_data_setup(struct Curl_cfilter *cf, struct Curl_easy *data) { struct cf_osslq_ctx *ctx = cf->ctx; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); - if(!data || !data->req.p.http) { + if(!data) { failf(data, "initialization failure, transfer not http initialized"); return CURLE_FAILED_INIT; } @@ -530,18 +620,23 @@ static CURLcode h3_data_setup(struct Curl_cfilter *cf, stream->recv_buf_nonflow = 0; Curl_h1_req_parse_init(&stream->h1, H1_PARSE_DEFAULT_MAX_LINE_LEN); - H3_STREAM_LCTX(data) = stream; + if(!Curl_hash_offt_set(&ctx->streams, data->id, stream)) { + h3_stream_ctx_free(stream); + return CURLE_OUT_OF_MEMORY; + } + return CURLE_OK; } static void h3_data_done(struct Curl_cfilter *cf, struct Curl_easy *data) { struct cf_osslq_ctx *ctx = cf->ctx; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)cf; if(stream) { - CURL_TRC_CF(data, cf, "[%"PRId64"] easy handle is done", stream->s.id); + CURL_TRC_CF(data, cf, "[%"CURL_PRId64"] easy handle is done", + stream->s.id); if(ctx->h3.conn && !stream->closed) { nghttp3_conn_shutdown_stream_read(ctx->h3.conn, stream->s.id); nghttp3_conn_close_stream(ctx->h3.conn, stream->s.id, @@ -550,12 +645,7 @@ static void h3_data_done(struct Curl_cfilter *cf, struct Curl_easy *data) stream->closed = TRUE; } - cf_osslq_stream_cleanup(&stream->s); - Curl_bufq_free(&stream->sendbuf); - Curl_bufq_free(&stream->recvbuf); - Curl_h1_req_parse_free(&stream->h1); - free(stream); - H3_STREAM_LCTX(data) = NULL; + Curl_hash_offt_remove(&ctx->streams, data->id); } } @@ -564,7 +654,7 @@ static struct cf_osslq_stream *cf_osslq_get_qstream(struct Curl_cfilter *cf, int64_t stream_id) { struct cf_osslq_ctx *ctx = cf->ctx; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); struct Curl_easy *sdata; if(stream && stream->s.id == stream_id) { @@ -582,9 +672,11 @@ static struct cf_osslq_stream *cf_osslq_get_qstream(struct Curl_cfilter *cf, else { DEBUGASSERT(data->multi); for(sdata = data->multi->easyp; sdata; sdata = sdata->next) { - if((sdata->conn == data->conn) && H3_STREAM_ID(sdata) == stream_id) { - stream = H3_STREAM_CTX(sdata); - return stream? &stream->s : NULL; + if(sdata->conn != data->conn) + continue; + stream = H3_STREAM_CTX(ctx, sdata); + if(stream && stream->s.id == stream_id) { + return &stream->s; } } } @@ -594,7 +686,8 @@ static struct cf_osslq_stream *cf_osslq_get_qstream(struct Curl_cfilter *cf, static void h3_drain_stream(struct Curl_cfilter *cf, struct Curl_easy *data) { - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_osslq_ctx *ctx = cf->ctx; + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); unsigned char bits; (void)cf; @@ -624,8 +717,9 @@ static int cb_h3_stream_close(nghttp3_conn *conn, int64_t stream_id, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_osslq_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)conn; (void)stream_id; @@ -638,11 +732,11 @@ static int cb_h3_stream_close(nghttp3_conn *conn, int64_t stream_id, if(stream->error3 != NGHTTP3_H3_NO_ERROR) { stream->reset = TRUE; stream->send_closed = TRUE; - CURL_TRC_CF(data, cf, "[%" PRId64 "] RESET: error %" PRId64, + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] RESET: error %" CURL_PRIu64, stream->s.id, stream->error3); } else { - CURL_TRC_CF(data, cf, "[%" PRId64 "] CLOSED", stream->s.id); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] CLOSED", stream->s.id); } h3_drain_stream(cf, data); return 0; @@ -658,7 +752,8 @@ static CURLcode write_resp_raw(struct Curl_cfilter *cf, const void *mem, size_t memlen, bool flow) { - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_osslq_ctx *ctx = cf->ctx; + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result = CURLE_OK; ssize_t nwritten; @@ -688,8 +783,9 @@ static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream3_id, void *user_data, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_osslq_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result; (void)conn; @@ -700,12 +796,12 @@ static int cb_h3_recv_data(nghttp3_conn *conn, int64_t stream3_id, result = write_resp_raw(cf, data, buf, buflen, TRUE); if(result) { - CURL_TRC_CF(data, cf, "[%" PRId64 "] DATA len=%zu, ERROR receiving %d", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] DATA len=%zu, ERROR %d", stream->s.id, buflen, result); return NGHTTP3_ERR_CALLBACK_FAILURE; } stream->download_recvd += (curl_off_t)buflen; - CURL_TRC_CF(data, cf, "[%" PRId64 "] DATA len=%zu, total=%zd", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] DATA len=%zu, total=%zd", stream->s.id, buflen, stream->download_recvd); h3_drain_stream(cf, data); return 0; @@ -716,27 +812,30 @@ static int cb_h3_deferred_consume(nghttp3_conn *conn, int64_t stream_id, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_osslq_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)conn; (void)stream_id; if(stream) - CURL_TRC_CF(data, cf, "[%" PRId64 "] deferred consume %zu bytes", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] deferred consume %zu bytes", stream->s.id, consumed); return 0; } -static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id, +static int cb_h3_recv_header(nghttp3_conn *conn, int64_t sid, 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; + curl_int64_t stream_id = sid; + struct cf_osslq_ctx *ctx = cf->ctx; 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); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result = CURLE_OK; (void)conn; (void)stream_id; @@ -758,7 +857,7 @@ static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id, 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); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] status: %s", stream_id, line); result = write_resp_raw(cf, data, line, ncopy, FALSE); if(result) { return -1; @@ -766,7 +865,7 @@ static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id, } else { /* store as an HTTP1-style header */ - CURL_TRC_CF(data, cf, "[%" PRId64 "] header: %.*s: %.*s", + CURL_TRC_CF(data, cf, "[%" CURL_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); @@ -789,12 +888,14 @@ static int cb_h3_recv_header(nghttp3_conn *conn, int64_t stream_id, return 0; } -static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id, +static int cb_h3_end_headers(nghttp3_conn *conn, int64_t sid, int fin, void *user_data, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_osslq_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + curl_int64_t stream_id = sid; + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result = CURLE_OK; (void)conn; (void)stream_id; @@ -803,13 +904,13 @@ static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id, if(!stream) return 0; - /* add a CRLF only if we've received some headers */ + /* add a CRLF only if we have 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", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] end_headers, status=%d", stream_id, stream->status_code); if(stream->status_code / 100 != 1) { stream->resp_hds_complete = TRUE; @@ -818,30 +919,34 @@ static int cb_h3_end_headers(nghttp3_conn *conn, int64_t stream_id, return 0; } -static int cb_h3_stop_sending(nghttp3_conn *conn, int64_t stream_id, +static int cb_h3_stop_sending(nghttp3_conn *conn, int64_t sid, uint64_t app_error_code, void *user_data, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_osslq_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + curl_int64_t stream_id = sid; + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)conn; (void)app_error_code; if(!stream || !stream->s.ssl) return 0; - CURL_TRC_CF(data, cf, "[%" PRId64 "] stop_sending", stream_id); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] stop_sending", stream_id); cf_osslq_stream_close(&stream->s); return 0; } -static int cb_h3_reset_stream(nghttp3_conn *conn, int64_t stream_id, +static int cb_h3_reset_stream(nghttp3_conn *conn, int64_t sid, uint64_t app_error_code, void *user_data, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_osslq_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + curl_int64_t stream_id = sid; + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); int rv; (void)conn; @@ -849,7 +954,7 @@ static int cb_h3_reset_stream(nghttp3_conn *conn, int64_t stream_id, SSL_STREAM_RESET_ARGS args = {0}; args.quic_error_code = app_error_code; rv = !SSL_stream_reset(stream->s.ssl, &args, sizeof(args)); - CURL_TRC_CF(data, cf, "[%" PRId64 "] reset -> %d", stream_id, rv); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] reset -> %d", stream_id, rv); if(!rv) { return NGHTTP3_ERR_CALLBACK_FAILURE; } @@ -864,8 +969,9 @@ cb_h3_read_req_body(nghttp3_conn *conn, int64_t stream_id, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_osslq_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t nwritten = 0; size_t nvecs = 0; (void)cf; @@ -908,12 +1014,12 @@ cb_h3_read_req_body(nghttp3_conn *conn, int64_t stream_id, } else if(!nwritten) { /* Not EOF, and nothing to give, we signal WOULDBLOCK. */ - CURL_TRC_CF(data, cf, "[%" PRId64 "] read req body -> AGAIN", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] read req body -> AGAIN", stream->s.id); return NGHTTP3_ERR_WOULDBLOCK; } - CURL_TRC_CF(data, cf, "[%" PRId64 "] read req body -> " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] read req body -> " "%d vecs%s with %zu (buffered=%zu, left=%" CURL_FORMAT_CURL_OFF_T ")", stream->s.id, (int)nvecs, @@ -928,8 +1034,9 @@ static int cb_h3_acked_stream_data(nghttp3_conn *conn, int64_t stream_id, void *stream_user_data) { struct Curl_cfilter *cf = user_data; + struct cf_osslq_ctx *ctx = cf->ctx; struct Curl_easy *data = stream_user_data; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); size_t skiplen; (void)cf; @@ -945,8 +1052,8 @@ static int cb_h3_acked_stream_data(nghttp3_conn *conn, int64_t stream_id, Curl_bufq_skip(&stream->sendbuf, skiplen); stream->sendbuf_len_in_flight -= skiplen; - /* Everything ACKed, we resume upload processing */ - if(!stream->sendbuf_len_in_flight) { + /* Resume upload processing if we have more data to send */ + if(stream->sendbuf_len_in_flight < Curl_bufq_len(&stream->sendbuf)) { int rv = nghttp3_conn_resume_stream(conn, stream_id); if(rv && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) { return NGHTTP3_ERR_CALLBACK_FAILURE; @@ -1042,14 +1149,15 @@ static CURLcode cf_osslq_ctx_start(struct Curl_cfilter *cf, Curl_bufcp_init(&ctx->stream_bufcp, H3_STREAM_CHUNK_SIZE, H3_STREAM_POOL_SPARES); - result = Curl_ssl_peer_init(&ctx->peer, cf); + Curl_hash_offt_init(&ctx->streams, 63, h3_stream_hash_free); + result = Curl_ssl_peer_init(&ctx->peer, cf, TRNSPRT_QUIC); if(result) goto out; #define H3_ALPN "\x2h3" result = Curl_vquic_tls_init(&ctx->tls, cf, data, &ctx->peer, H3_ALPN, sizeof(H3_ALPN) - 1, - NULL, NULL); + NULL, NULL, NULL); if(result) goto out; @@ -1093,12 +1201,12 @@ static CURLcode cf_osslq_ctx_start(struct Curl_cfilter *cf, goto out; } - if(!SSL_set1_initial_peer_addr(ctx->tls.ssl, baddr)) { + if(!SSL_set1_initial_peer_addr(ctx->tls.ossl.ssl, baddr)) { failf(data, "failed to set the initial peer address"); result = CURLE_FAILED_INIT; goto out; } - if(!SSL_set_blocking_mode(ctx->tls.ssl, 0)) { + if(!SSL_set_blocking_mode(ctx->tls.ossl.ssl, 0)) { failf(data, "failed to turn off blocking mode"); result = CURLE_FAILED_INIT; goto out; @@ -1106,7 +1214,8 @@ static CURLcode cf_osslq_ctx_start(struct Curl_cfilter *cf, #ifdef SSL_VALUE_QUIC_IDLE_TIMEOUT /* Added in OpenSSL v3.3.x */ - if(!SSL_set_feature_request_uint(ctx->tls.ssl, SSL_VALUE_QUIC_IDLE_TIMEOUT, + if(!SSL_set_feature_request_uint(ctx->tls.ossl.ssl, + SSL_VALUE_QUIC_IDLE_TIMEOUT, CURL_QUIC_MAX_IDLE_MS)) { CURL_TRC_CF(data, cf, "error setting idle timeout, "); result = CURLE_FAILED_INIT; @@ -1114,13 +1223,13 @@ static CURLcode cf_osslq_ctx_start(struct Curl_cfilter *cf, } #endif - SSL_set_bio(ctx->tls.ssl, bio, bio); + SSL_set_bio(ctx->tls.ossl.ssl, bio, bio); bio = NULL; - SSL_set_connect_state(ctx->tls.ssl); - SSL_set_incoming_stream_policy(ctx->tls.ssl, + SSL_set_connect_state(ctx->tls.ossl.ssl); + SSL_set_incoming_stream_policy(ctx->tls.ossl.ssl, SSL_INCOMING_STREAM_POLICY_ACCEPT, 0); /* setup the H3 things on top of the QUIC connection */ - result = cf_osslq_h3conn_init(ctx, ctx->tls.ssl, cf); + result = cf_osslq_h3conn_init(ctx, ctx->tls.ossl.ssl, cf); out: if(bio) @@ -1154,7 +1263,7 @@ static ssize_t h3_quic_recv(void *reader_ctx, return -1; } else if(detail == SSL_ERROR_ZERO_RETURN) { - CURL_TRC_CF(x->data, x->cf, "[%" PRId64 "] h3_quic_recv -> EOS", + CURL_TRC_CF(x->data, x->cf, "[%" CURL_PRId64 "] h3_quic_recv -> EOS", x->s->id); x->s->recvd_eos = TRUE; return 0; @@ -1163,9 +1272,9 @@ static ssize_t h3_quic_recv(void *reader_ctx, SSL_STREAM_STATE_RESET_REMOTE) { uint64_t app_error_code = NGHTTP3_H3_NO_ERROR; SSL_get_stream_read_error_code(x->s->ssl, &app_error_code); - CURL_TRC_CF(x->data, x->cf, "[%" PRId64 "] h3_quic_recv -> RESET, " - "rv=%d, app_err=%" PRIu64, - x->s->id, rv, app_error_code); + CURL_TRC_CF(x->data, x->cf, "[%" CURL_PRId64 "] h3_quic_recv -> RESET, " + "rv=%d, app_err=%" CURL_PRIu64, + x->s->id, rv, (curl_uint64_t)app_error_code); if(app_error_code != NGHTTP3_H3_NO_ERROR) { x->s->reset = TRUE; } @@ -1177,10 +1286,6 @@ static ssize_t h3_quic_recv(void *reader_ctx, return -1; } } - else { - /* CURL_TRC_CF(x->data, x->cf, "[%" PRId64 "] h3_quic_recv -> %zu bytes", - x->s->id, nread); */ - } return (ssize_t)nread; } @@ -1224,7 +1329,7 @@ static CURLcode cf_osslq_stream_recv(struct cf_osslq_stream *s, while(Curl_bufq_peek(&s->recvbuf, &buf, &blen)) { nread = nghttp3_conn_read_stream(ctx->h3.conn, s->id, buf, blen, 0); - CURL_TRC_CF(data, cf, "[%" PRId64 "] forward %zu bytes " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] forward %zu bytes " "to nghttp3 -> %zd", s->id, blen, nread); if(nread < 0) { failf(data, "nghttp3_conn_read_stream(len=%zu) error: %s", @@ -1263,7 +1368,7 @@ static CURLcode cf_osslq_stream_recv(struct cf_osslq_stream *s, rv = nghttp3_conn_close_stream(ctx->h3.conn, s->id, NGHTTP3_H3_NO_ERROR); s->closed = TRUE; - CURL_TRC_CF(data, cf, "[%" PRId64 "] close nghttp3 stream -> %d", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] close nghttp3 stream -> %d", s->id, rv); if(rv < 0 && rv != NGHTTP3_ERR_STREAM_NOT_FOUND) { failf(data, "nghttp3_conn_close_stream returned error: %s", @@ -1276,7 +1381,7 @@ static CURLcode cf_osslq_stream_recv(struct cf_osslq_stream *s, } out: if(result) - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_osslq_stream_recv -> %d", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] cf_osslq_stream_recv -> %d", s->id, result); return result; } @@ -1287,22 +1392,23 @@ static CURLcode cf_progress_ingress(struct Curl_cfilter *cf, struct cf_osslq_ctx *ctx = cf->ctx; CURLcode result = CURLE_OK; - if(!ctx->tls.ssl) + if(!ctx->tls.ossl.ssl) goto out; ERR_clear_error(); /* 1. Check for new incoming streams */ while(1) { - SSL *snew = SSL_accept_stream(ctx->tls.ssl, SSL_ACCEPT_STREAM_NO_BLOCK); + SSL *snew = SSL_accept_stream(ctx->tls.ossl.ssl, + SSL_ACCEPT_STREAM_NO_BLOCK); if(!snew) break; (void)cf_osslq_h3conn_add_stream(&ctx->h3, snew, cf, data); } - if(!SSL_handle_events(ctx->tls.ssl)) { - int detail = SSL_get_error(ctx->tls.ssl, 0); + if(!SSL_handle_events(ctx->tls.ossl.ssl)) { + int detail = SSL_get_error(ctx->tls.ossl.ssl, 0); result = cf_osslq_ssl_err(cf, data, detail, CURLE_RECV_ERROR); } @@ -1322,7 +1428,7 @@ static CURLcode cf_progress_ingress(struct Curl_cfilter *cf, DEBUGASSERT(data->multi); for(sdata = data->multi->easyp; sdata; sdata = sdata->next) { if(sdata->conn == data->conn && CURL_WANT_RECV(sdata)) { - stream = H3_STREAM_CTX(sdata); + stream = H3_STREAM_CTX(ctx, sdata); if(stream && !stream->closed && !Curl_bufq_is_full(&stream->recvbuf)) { result = cf_osslq_stream_recv(&stream->s, cf, sdata); @@ -1349,7 +1455,7 @@ static CURLcode cf_osslq_check_and_unblock(struct Curl_cfilter *cf, if(ctx->h3.conn) { for(sdata = data->multi->easyp; sdata; sdata = sdata->next) { if(sdata->conn == data->conn) { - stream = H3_STREAM_CTX(sdata); + stream = H3_STREAM_CTX(ctx, sdata); if(stream && stream->s.ssl && stream->s.send_blocked && !SSL_want_write(stream->s.ssl)) { nghttp3_conn_unblock_stream(ctx->h3.conn, stream->s.id); @@ -1369,7 +1475,7 @@ static CURLcode h3_send_streams(struct Curl_cfilter *cf, struct cf_osslq_ctx *ctx = cf->ctx; CURLcode result = CURLE_OK; - if(!ctx->tls.ssl || !ctx->h3.conn) + if(!ctx->tls.ossl.ssl || !ctx->h3.conn) goto out; for(;;) { @@ -1398,8 +1504,8 @@ static CURLcode h3_send_streams(struct Curl_cfilter *cf, /* Get the stream for this data */ s = cf_osslq_get_qstream(cf, data, stream_id); if(!s) { - failf(data, "nghttp3_conn_writev_stream gave unknown stream %" PRId64, - stream_id); + failf(data, "nghttp3_conn_writev_stream gave unknown stream %" + CURL_PRId64, (curl_int64_t)stream_id); result = CURLE_SEND_ERROR; goto out; } @@ -1411,24 +1517,17 @@ static CURLcode h3_send_streams(struct Curl_cfilter *cf, for(i = 0; (i < n) && !blocked; ++i) { /* Without stream->s.ssl, we closed that already, so * pretend the write did succeed. */ -#ifdef SSL_WRITE_FLAG_CONCLUDE - /* Since OpenSSL v3.3.x, on last chunk set EOS if needed */ uint64_t flags = (eos && ((i + 1) == n))? SSL_WRITE_FLAG_CONCLUDE : 0; written = vec[i].len; ok = !s->ssl || SSL_write_ex2(s->ssl, vec[i].base, vec[i].len, flags, &written); if(ok && flags & SSL_WRITE_FLAG_CONCLUDE) eos_written = TRUE; -#else - written = vec[i].len; - ok = !s->ssl || SSL_write_ex(s->ssl, vec[i].base, vec[i].len, - &written); -#endif if(ok) { /* As OpenSSL buffers the data, we count this as acknowledged * from nghttp3's point of view */ - CURL_TRC_CF(data, cf, "[%"PRId64"] send %zu bytes to QUIC ok", - s->id, vec[i].len); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] send %zu bytes to QUIC ok", + s->id, vec[i].len); acked_len += vec[i].len; } else { @@ -1437,16 +1536,16 @@ static CURLcode h3_send_streams(struct Curl_cfilter *cf, case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_READ: /* QUIC blocked us from writing more */ - CURL_TRC_CF(data, cf, "[%"PRId64"] send %zu bytes to QUIC blocked", - s->id, vec[i].len); + CURL_TRC_CF(data, cf, "[%"CURL_PRId64 "] send %zu bytes to " + "QUIC blocked", s->id, vec[i].len); written = 0; nghttp3_conn_block_stream(ctx->h3.conn, s->id); s->send_blocked = blocked = TRUE; break; default: - failf(data, "[%"PRId64"] send %zu bytes to QUIC, SSL error %d", + failf(data, "[%"CURL_PRId64 "] send %zu bytes to QUIC, SSL error %d", s->id, vec[i].len, detail); - result = cf_osslq_ssl_err(cf, data, detail, CURLE_SEND_ERROR); + result = cf_osslq_ssl_err(cf, data, detail, CURLE_HTTP3); goto out; } } @@ -1470,13 +1569,13 @@ static CURLcode h3_send_streams(struct Curl_cfilter *cf, result = CURLE_SEND_ERROR; goto out; } - CURL_TRC_CF(data, cf, "[%" PRId64 "] forwarded %zu/%zu h3 bytes " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] forwarded %zu/%zu h3 bytes " "to QUIC, eos=%d", s->id, acked_len, total_len, eos); } if(eos && !s->send_blocked && !eos_written) { /* wrote everything and H3 indicates end of stream */ - CURL_TRC_CF(data, cf, "[%" PRId64 "] closing QUIC stream", s->id); + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] closing QUIC stream", s->id); SSL_stream_conclude(s->ssl, 0); } } @@ -1492,7 +1591,7 @@ static CURLcode cf_progress_egress(struct Curl_cfilter *cf, struct cf_osslq_ctx *ctx = cf->ctx; CURLcode result = CURLE_OK; - if(!ctx->tls.ssl) + if(!ctx->tls.ossl.ssl) goto out; ERR_clear_error(); @@ -1500,8 +1599,8 @@ static CURLcode cf_progress_egress(struct Curl_cfilter *cf, if(result) goto out; - if(!SSL_handle_events(ctx->tls.ssl)) { - int detail = SSL_get_error(ctx->tls.ssl, 0); + if(!SSL_handle_events(ctx->tls.ossl.ssl)) { + int detail = SSL_get_error(ctx->tls.ossl.ssl, 0); result = cf_osslq_ssl_err(cf, data, detail, CURLE_SEND_ERROR); } @@ -1521,8 +1620,8 @@ static CURLcode check_and_set_expiry(struct Curl_cfilter *cf, timediff_t timeoutms; int is_infinite = TRUE; - if(ctx->tls.ssl && - SSL_get_event_timeout(ctx->tls.ssl, &tv, &is_infinite) && + if(ctx->tls.ossl.ssl && + SSL_get_event_timeout(ctx->tls.ossl.ssl, &tv, &is_infinite) && !is_infinite) { timeoutms = curlx_tvtoms(&tv); /* QUIC want to be called again latest at the returned timeout */ @@ -1533,7 +1632,7 @@ static CURLcode check_and_set_expiry(struct Curl_cfilter *cf, result = cf_progress_egress(cf, data); if(result) goto out; - if(SSL_get_event_timeout(ctx->tls.ssl, &tv, &is_infinite)) { + if(SSL_get_event_timeout(ctx->tls.ossl.ssl, &tv, &is_infinite)) { timeoutms = curlx_tvtoms(&tv); } } @@ -1578,7 +1677,7 @@ static CURLcode cf_osslq_connect(struct Curl_cfilter *cf, goto out; } - if(!ctx->tls.ssl) { + if(!ctx->tls.ossl.ssl) { ctx->started_at = now; result = cf_osslq_ctx_start(cf, data); if(result) @@ -1594,7 +1693,7 @@ static CURLcode cf_osslq_connect(struct Curl_cfilter *cf, } ERR_clear_error(); - err = SSL_do_handshake(ctx->tls.ssl); + err = SSL_do_handshake(ctx->tls.ossl.ssl); if(err == 1) { /* connected */ @@ -1612,7 +1711,7 @@ static CURLcode cf_osslq_connect(struct Curl_cfilter *cf, } } else { - int detail = SSL_get_error(ctx->tls.ssl, err); + int detail = SSL_get_error(ctx->tls.ossl.ssl, err); switch(detail) { case SSL_ERROR_WANT_READ: ctx->q.last_io = now; @@ -1643,7 +1742,8 @@ static CURLcode cf_osslq_connect(struct Curl_cfilter *cf, } out: - if(result == CURLE_RECV_ERROR && ctx->tls.ssl && ctx->protocol_shutdown) { + if(result == CURLE_RECV_ERROR && ctx->tls.ossl.ssl && + ctx->protocol_shutdown) { /* 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 @@ -1689,7 +1789,7 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf, *err = h3_data_setup(cf, data); if(*err) goto out; - stream = H3_STREAM_CTX(data); + stream = H3_STREAM_CTX(ctx, data); DEBUGASSERT(stream); if(!stream) { *err = CURLE_FAILED_INIT; @@ -1731,10 +1831,10 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf, } DEBUGASSERT(stream->s.id == -1); - *err = cf_osslq_stream_open(&stream->s, ctx->tls.ssl, 0, + *err = cf_osslq_stream_open(&stream->s, ctx->tls.ossl.ssl, 0, &ctx->stream_bufcp, data); if(*err) { - failf(data, "can't get bidi streams"); + failf(data, "cannot get bidi streams"); *err = CURLE_SEND_ERROR; goto out; } @@ -1768,11 +1868,11 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf, if(rc) { switch(rc) { case NGHTTP3_ERR_CONN_CLOSING: - CURL_TRC_CF(data, cf, "h3sid[%"PRId64"] failed to send, " + CURL_TRC_CF(data, cf, "h3sid[%"CURL_PRId64"] failed to send, " "connection is closing", stream->s.id); break; default: - CURL_TRC_CF(data, cf, "h3sid[%"PRId64"] failed to send -> %d (%s)", + CURL_TRC_CF(data, cf, "h3sid[%"CURL_PRId64 "] failed to send -> %d (%s)", stream->s.id, rc, nghttp3_strerror(rc)); break; } @@ -1782,10 +1882,11 @@ static ssize_t h3_stream_open(struct Curl_cfilter *cf, } if(Curl_trc_is_verbose(data)) { - infof(data, "[HTTP/3] [%" PRId64 "] OPENED stream for %s", + infof(data, "[HTTP/3] [%" CURL_PRId64 "] OPENED stream for %s", stream->s.id, data->state.url); for(i = 0; i < nheader; ++i) { - infof(data, "[HTTP/3] [%" PRId64 "] [%.*s: %.*s]", stream->s.id, + infof(data, "[HTTP/3] [%" CURL_PRId64 "] [%.*s: %.*s]", + stream->s.id, (int)nva[i].namelen, nva[i].name, (int)nva[i].valuelen, nva[i].value); } @@ -1801,14 +1902,14 @@ static ssize_t cf_osslq_send(struct Curl_cfilter *cf, struct Curl_easy *data, const void *buf, size_t len, CURLcode *err) { struct cf_osslq_ctx *ctx = cf->ctx; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); struct cf_call_data save; ssize_t nwritten; CURLcode result; CF_DATA_SAVE(save, cf, data); DEBUGASSERT(cf->connected); - DEBUGASSERT(ctx->tls.ssl); + DEBUGASSERT(ctx->tls.ossl.ssl); DEBUGASSERT(ctx->h3.conn); *err = CURLE_OK; @@ -1832,22 +1933,7 @@ static ssize_t cf_osslq_send(struct Curl_cfilter *cf, struct Curl_easy *data, 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; - nwritten = -1; - goto out; - } - nwritten = (ssize_t)stream->upload_blocked_len; - stream->upload_blocked_len = 0; + stream = H3_STREAM_CTX(ctx, data); } else if(stream->closed) { if(stream->resp_hds_complete) { @@ -1856,13 +1942,13 @@ static ssize_t cf_osslq_send(struct Curl_cfilter *cf, struct Curl_easy *data, * 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" + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] discarding data" "on closed stream with response", stream->s.id); *err = CURLE_OK; nwritten = (ssize_t)len; goto out; } - CURL_TRC_CF(data, cf, "[%" PRId64 "] send_body(len=%zu) " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] send_body(len=%zu) " "-> stream closed", stream->s.id, len); *err = CURLE_HTTP3; nwritten = -1; @@ -1870,7 +1956,7 @@ static ssize_t cf_osslq_send(struct Curl_cfilter *cf, struct Curl_easy *data, } else { nwritten = Curl_bufq_write(&stream->sendbuf, buf, len, err); - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_send, add to " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] cf_send, add to " "sendbuf(len=%zu) -> %zd, %d", stream->s.id, len, nwritten, *err); if(nwritten < 0) { @@ -1886,21 +1972,9 @@ static ssize_t cf_osslq_send(struct Curl_cfilter *cf, struct Curl_easy *data, nwritten = -1; } - if(stream && nwritten > 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 = nwritten; - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_send(len=%zu), " - "%zu bytes in flight -> EGAIN", stream->s.id, len, - stream->sendbuf_len_in_flight); - *err = CURLE_AGAIN; - nwritten = -1; - } - out: result = check_and_set_expiry(cf, data); - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_send(len=%zu) -> %zd, %d", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] cf_send(len=%zu) -> %zd, %d", stream? stream->s.id : -1, len, nwritten, *err); CF_DATA_RESTORE(cf, save); return nwritten; @@ -1916,13 +1990,15 @@ static ssize_t recv_closed_stream(struct Curl_cfilter *cf, (void)cf; if(stream->reset) { failf(data, - "HTTP/3 stream %" PRId64 " reset by server", stream->s.id); + "HTTP/3 stream %" CURL_PRId64 " reset by server", + stream->s.id); *err = data->req.bytecount? 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" + "HTTP/3 stream %" CURL_PRId64 + " was closed cleanly, but before getting" " all response header fields, treated as error", stream->s.id); *err = CURLE_HTTP3; @@ -1939,7 +2015,7 @@ static ssize_t cf_osslq_recv(struct Curl_cfilter *cf, struct Curl_easy *data, char *buf, size_t len, CURLcode *err) { struct cf_osslq_ctx *ctx = cf->ctx; - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t nread = -1; struct cf_call_data save; CURLcode result; @@ -1948,7 +2024,7 @@ static ssize_t cf_osslq_recv(struct Curl_cfilter *cf, struct Curl_easy *data, CF_DATA_SAVE(save, cf, data); DEBUGASSERT(cf->connected); DEBUGASSERT(ctx); - DEBUGASSERT(ctx->tls.ssl); + DEBUGASSERT(ctx->tls.ossl.ssl); DEBUGASSERT(ctx->h3.conn); *err = CURLE_OK; @@ -1961,7 +2037,7 @@ static ssize_t cf_osslq_recv(struct Curl_cfilter *cf, struct Curl_easy *data, nread = Curl_bufq_read(&stream->recvbuf, (unsigned char *)buf, len, err); if(nread < 0) { - CURL_TRC_CF(data, cf, "[%" PRId64 "] read recvbuf(len=%zu) " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] read recvbuf(len=%zu) " "-> %zd, %d", stream->s.id, len, nread, *err); goto out; } @@ -1979,7 +2055,7 @@ static ssize_t cf_osslq_recv(struct Curl_cfilter *cf, struct Curl_easy *data, nread = Curl_bufq_read(&stream->recvbuf, (unsigned char *)buf, len, err); if(nread < 0) { - CURL_TRC_CF(data, cf, "[%" PRId64 "] read recvbuf(len=%zu) " + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] read recvbuf(len=%zu) " "-> %zd, %d", stream->s.id, len, nread, *err); goto out; } @@ -2009,7 +2085,7 @@ static ssize_t cf_osslq_recv(struct Curl_cfilter *cf, struct Curl_easy *data, nread = -1; } } - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_recv(len=%zu) -> %zd, %d", + CURL_TRC_CF(data, cf, "[%" CURL_PRId64 "] cf_recv(len=%zu) -> %zd, %d", stream? stream->s.id : -1, len, nread, *err); CF_DATA_RESTORE(cf, save); return nread; @@ -2022,7 +2098,8 @@ static ssize_t cf_osslq_recv(struct Curl_cfilter *cf, struct Curl_easy *data, static bool cf_osslq_data_pending(struct Curl_cfilter *cf, const struct Curl_easy *data) { - const struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_osslq_ctx *ctx = cf->ctx; + const struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)cf; return stream && !Curl_bufq_is_empty(&stream->recvbuf); } @@ -2051,16 +2128,17 @@ static CURLcode cf_osslq_data_event(struct Curl_cfilter *cf, h3_data_done(cf, data); break; case CF_CTRL_DATA_DONE_SEND: { - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); if(stream && !stream->send_closed) { stream->send_closed = TRUE; - stream->upload_left = Curl_bufq_len(&stream->sendbuf); + stream->upload_left = Curl_bufq_len(&stream->sendbuf) - + stream->sendbuf_len_in_flight; (void)nghttp3_conn_resume_stream(ctx->h3.conn, stream->s.id); } break; } case CF_CTRL_DATA_IDLE: { - struct h3_stream_ctx *stream = H3_STREAM_CTX(data); + struct h3_stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURL_TRC_CF(data, cf, "data idle"); if(stream && !stream->closed) { result = check_and_set_expiry(cf, data); @@ -2084,7 +2162,7 @@ static bool cf_osslq_conn_is_alive(struct Curl_cfilter *cf, CF_DATA_SAVE(save, cf, data); *input_pending = FALSE; - if(!ctx->tls.ssl) + if(!ctx->tls.ossl.ssl) goto out; #ifdef SSL_VALUE_QUIC_IDLE_TIMEOUT @@ -2092,7 +2170,8 @@ static bool cf_osslq_conn_is_alive(struct Curl_cfilter *cf, { timediff_t idletime; uint64_t idle_ms = ctx->max_idle_ms; - if(!SSL_get_value_uint(ctx->tls.ssl, SSL_VALUE_CLASS_FEATURE_NEGOTIATED, + if(!SSL_get_value_uint(ctx->tls.ossl.ssl, + SSL_VALUE_CLASS_FEATURE_NEGOTIATED, SSL_VALUE_QUIC_IDLE_TIMEOUT, &idle_ms)) { CURL_TRC_CF(data, cf, "error getting negotiated idle timeout, " "assume connection is dead."); @@ -2112,8 +2191,8 @@ static bool cf_osslq_conn_is_alive(struct Curl_cfilter *cf, 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, + /* This happens before we have sent off a request and the connection is + not in use by any other transfer, there should not be any data here, only "protocol frames" */ *input_pending = FALSE; result = cf_progress_ingress(cf, data); @@ -2132,15 +2211,15 @@ static void cf_osslq_adjust_pollset(struct Curl_cfilter *cf, { struct cf_osslq_ctx *ctx = cf->ctx; - if(!ctx->tls.ssl) { + if(!ctx->tls.ossl.ssl) { /* NOP */ } else if(!cf->connected) { /* during handshake, transfer has not started yet. we always * add our socket for polling if SSL wants to send/recv */ Curl_pollset_set(data, ps, ctx->q.sockfd, - SSL_net_read_desired(ctx->tls.ssl), - SSL_net_write_desired(ctx->tls.ssl)); + SSL_net_read_desired(ctx->tls.ossl.ssl), + SSL_net_write_desired(ctx->tls.ossl.ssl)); } else { /* once connected, we only modify the socket if it is present. @@ -2149,8 +2228,12 @@ static void cf_osslq_adjust_pollset(struct Curl_cfilter *cf, Curl_pollset_check(data, ps, ctx->q.sockfd, &want_recv, &want_send); if(want_recv || want_send) { Curl_pollset_set(data, ps, ctx->q.sockfd, - SSL_net_read_desired(ctx->tls.ssl), - SSL_net_write_desired(ctx->tls.ssl)); + SSL_net_read_desired(ctx->tls.ossl.ssl), + SSL_net_write_desired(ctx->tls.ossl.ssl)); + } + else if(ctx->need_recv || ctx->need_send) { + Curl_pollset_set(data, ps, ctx->q.sockfd, + ctx->need_recv, ctx->need_send); } } } @@ -2166,7 +2249,7 @@ static CURLcode cf_osslq_query(struct Curl_cfilter *cf, #ifdef SSL_VALUE_QUIC_STREAM_BIDI_LOCAL_AVAIL /* Added in OpenSSL v3.3.x */ uint64_t v; - if(!SSL_get_value_uint(ctx->tls.ssl, SSL_VALUE_CLASS_GENERIC, + if(!SSL_get_value_uint(ctx->tls.ossl.ssl, SSL_VALUE_CLASS_GENERIC, SSL_VALUE_QUIC_STREAM_BIDI_LOCAL_AVAIL, &v)) { CURL_TRC_CF(data, cf, "error getting available local bidi streams"); return CURLE_HTTP3; @@ -2215,6 +2298,7 @@ struct Curl_cftype Curl_cft_http3 = { cf_osslq_destroy, cf_osslq_connect, cf_osslq_close, + cf_osslq_shutdown, Curl_cf_def_get_host, cf_osslq_adjust_pollset, cf_osslq_data_pending, diff --git a/lib/vquic/curl_quiche.c b/lib/vquic/curl_quiche.c index 2ebc50c67..6f01c19aa 100644 --- a/lib/vquic/curl_quiche.c +++ b/lib/vquic/curl_quiche.c @@ -29,6 +29,7 @@ #include #include #include "bufq.h" +#include "hash.h" #include "urldata.h" #include "cfilters.h" #include "cf-socket.h" @@ -63,11 +64,10 @@ #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. */ +/* 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. 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 @@ -88,7 +88,7 @@ void Curl_quiche_ver(char *p, size_t len) struct cf_quiche_ctx { struct cf_quic_ctx q; struct ssl_peer peer; - struct quic_tls_ctx tls; + struct curl_tls_ctx tls; quiche_conn *qconn; quiche_config *cfg; quiche_h3_conn *h3c; @@ -98,10 +98,11 @@ struct cf_quiche_ctx { struct curltime handshake_at; /* time connect handshake finished */ struct curltime reconnect_at; /* time the next attempt should start */ struct bufc_pool stream_bufcp; /* chunk pool for streams */ + struct Curl_hash streams; /* hash `data->id` to `stream_ctx` */ curl_off_t data_recvd; - uint64_t max_idle_ms; /* max idle time for QUIC conn */ BIT(goaway); /* got GOAWAY from server */ BIT(x509_store_setup); /* if x509 store has been set up */ + BIT(shutdown_started); /* queued shutdown packets */ }; #ifdef DEBUG_QUICHE @@ -123,55 +124,71 @@ static void cf_quiche_ctx_clear(struct cf_quiche_ctx *ctx) quiche_conn_free(ctx->qconn); if(ctx->cfg) quiche_config_free(ctx->cfg); - /* quiche just freed ctx->tls.ssl */ - ctx->tls.ssl = NULL; + /* quiche just freed it */ + ctx->tls.ossl.ssl = NULL; Curl_vquic_tls_cleanup(&ctx->tls); Curl_ssl_peer_cleanup(&ctx->peer); vquic_ctx_free(&ctx->q); Curl_bufcp_free(&ctx->stream_bufcp); + Curl_hash_clean(&ctx->streams); + Curl_hash_destroy(&ctx->streams); memset(ctx, 0, sizeof(*ctx)); } } +static CURLcode cf_flush_egress(struct Curl_cfilter *cf, + struct Curl_easy *data); + /** * All about the H3 internals of a stream */ struct stream_ctx { - int64_t id; /* HTTP/3 protocol stream identifier */ + curl_uint64_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_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(opened); /* TRUE after stream has been opened */ + BIT(closed); /* TRUE on stream close */ + BIT(reset); /* TRUE on stream reset */ + BIT(send_closed); /* stream is locally closed */ + BIT(resp_hds_complete); /* final response has been received */ + BIT(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) +#define H3_STREAM_CTX(ctx,data) ((struct stream_ctx *)(\ + data? Curl_hash_offt_get(&(ctx)->streams, (data)->id) : NULL)) + +static void h3_stream_ctx_free(struct stream_ctx *stream) +{ + Curl_bufq_free(&stream->recvbuf); + Curl_h1_req_parse_free(&stream->h1); + free(stream); +} + +static void h3_stream_hash_free(void *stream) +{ + DEBUGASSERT(stream); + h3_stream_ctx_free((struct stream_ctx *)stream); +} static void check_resumes(struct Curl_cfilter *cf, struct Curl_easy *data) { + struct cf_quiche_ctx *ctx = cf->ctx; 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); + stream = H3_STREAM_CTX(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); + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] unblock", stream->id); } } } @@ -181,7 +198,7 @@ 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); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); if(stream) return CURLE_OK; @@ -190,22 +207,28 @@ static CURLcode h3_data_setup(struct Curl_cfilter *cf, 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); + + if(!Curl_hash_offt_set(&ctx->streams, data->id, stream)) { + h3_stream_ctx_free(stream); + return CURLE_OUT_OF_MEMORY; + } + 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); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); + CURLcode result; (void)cf; if(stream) { - CURL_TRC_CF(data, cf, "[%"PRId64"] easy handle is done", stream->id); + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] 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); @@ -215,18 +238,19 @@ static void h3_data_done(struct Curl_cfilter *cf, struct Curl_easy *data) stream->send_closed = TRUE; } stream->closed = TRUE; + result = cf_flush_egress(cf, data); + if(result) + CURL_TRC_CF(data, cf, "data_done, flush egress -> %d", result); } - Curl_bufq_free(&stream->recvbuf); - Curl_h1_req_parse_free(&stream->h1); - free(stream); - H3_STREAM_LCTX(data) = NULL; + Curl_hash_offt_remove(&ctx->streams, data->id); } } static void drain_stream(struct Curl_cfilter *cf, struct Curl_easy *data) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_quiche_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); unsigned char bits; (void)cf; @@ -241,25 +265,50 @@ static void drain_stream(struct Curl_cfilter *cf, static struct Curl_easy *get_stream_easy(struct Curl_cfilter *cf, struct Curl_easy *data, - int64_t stream3_id) + curl_uint64_t stream_id, + struct stream_ctx **pstream) { + struct cf_quiche_ctx *ctx = cf->ctx; struct Curl_easy *sdata; + struct stream_ctx *stream; (void)cf; - if(H3_STREAM_ID(data) == stream3_id) { + stream = H3_STREAM_CTX(ctx, data); + if(stream && stream->id == stream_id) { + *pstream = stream; 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) { + if(sdata->conn != data->conn) + continue; + stream = H3_STREAM_CTX(ctx, sdata); + if(stream && stream->id == stream_id) { + *pstream = stream; return sdata; } } } + *pstream = NULL; return NULL; } +static void cf_quiche_expire_conn_closed(struct Curl_cfilter *cf, + struct Curl_easy *data) +{ + struct Curl_easy *sdata; + + DEBUGASSERT(data->multi); + CURL_TRC_CF(data, cf, "conn closed, expire all transfers"); + for(sdata = data->multi->easyp; sdata; sdata = sdata->next) { + if(sdata == data || sdata->conn != data->conn) + continue; + CURL_TRC_CF(sdata, cf, "conn closed, expire transfer"); + Curl_expire(sdata, 0, EXPIRE_RUN_NOW); + } +} + /* * 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 @@ -269,7 +318,8 @@ 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); + struct cf_quiche_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result = CURLE_OK; ssize_t nwritten; @@ -299,14 +349,15 @@ static int cb_each_header(uint8_t *name, size_t name_len, void *argp) { struct cb_ctx *x = argp; - struct stream_ctx *stream = H3_STREAM_CTX(x->data); + struct cf_quiche_ctx *ctx = x->cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(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", + CURL_TRC_CF(x->data, x->cf, "[%" CURL_PRIu64 "] status: %.*s", stream->id, (int)value_len, value); result = write_resp_raw(x->cf, x->data, "HTTP/3 ", sizeof("HTTP/3 ") - 1); if(!result) @@ -315,7 +366,7 @@ static int cb_each_header(uint8_t *name, size_t name_len, result = write_resp_raw(x->cf, x->data, " \r\n", 3); } else { - CURL_TRC_CF(x->data, x->cf, "[%" PRId64 "] header: %.*s: %.*s", + CURL_TRC_CF(x->data, x->cf, "[%" CURL_PRIu64 "] header: %.*s: %.*s", stream->id, (int)name_len, name, (int)value_len, value); result = write_resp_raw(x->cf, x->data, name, name_len); @@ -327,7 +378,7 @@ static int cb_each_header(uint8_t *name, size_t name_len, 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", + CURL_TRC_CF(x->data, x->cf, "[%"CURL_PRIu64"] on header error %d", stream->id, result); } return result; @@ -339,7 +390,7 @@ static ssize_t stream_resp_read(void *reader_ctx, { struct cb_ctx *x = reader_ctx; struct cf_quiche_ctx *ctx = x->cf->ctx; - struct stream_ctx *stream = H3_STREAM_CTX(x->data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, x->data); ssize_t nread; if(!stream) { @@ -362,7 +413,8 @@ static ssize_t stream_resp_read(void *reader_ctx, static CURLcode cf_recv_body(struct Curl_cfilter *cf, struct Curl_easy *data) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_quiche_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t nwritten; struct cb_ctx cb_ctx; CURLcode result = CURLE_OK; @@ -383,9 +435,9 @@ static CURLcode cf_recv_body(struct Curl_cfilter *cf, stream_resp_read, &cb_ctx, &result); if(nwritten < 0 && result != CURLE_AGAIN) { - CURL_TRC_CF(data, cf, "[%"PRId64"] recv_body error %zd", + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] recv_body error %zd", stream->id, nwritten); - failf(data, "Error %d in HTTP/3 response body for stream[%"PRId64"]", + failf(data, "Error %d in HTTP/3 response body for stream[%"CURL_PRIu64"]", result, stream->id); stream->closed = TRUE; stream->reset = TRUE; @@ -420,17 +472,15 @@ static const char *cf_ev_name(quiche_h3_event *ev) static CURLcode h3_process_event(struct Curl_cfilter *cf, struct Curl_easy *data, - int64_t stream3_id, + struct stream_ctx *stream, 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; @@ -438,11 +488,11 @@ static CURLcode h3_process_event(struct Curl_cfilter *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); + failf(data, "Error %d in HTTP/3 response header for stream[%" + CURL_PRIu64"]", rc, stream->id); return CURLE_RECV_ERROR; } - CURL_TRC_CF(data, cf, "[%"PRId64"] <- [HEADERS]", stream3_id); + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] <- [HEADERS]", stream->id); break; case QUICHE_H3_EVENT_DATA: @@ -452,7 +502,7 @@ static CURLcode h3_process_event(struct Curl_cfilter *cf, break; case QUICHE_H3_EVENT_RESET: - CURL_TRC_CF(data, cf, "[%"PRId64"] RESET", stream3_id); + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] RESET", stream->id); stream->closed = TRUE; stream->reset = TRUE; stream->send_closed = TRUE; @@ -460,7 +510,7 @@ static CURLcode h3_process_event(struct Curl_cfilter *cf, break; case QUICHE_H3_EVENT_FINISHED: - CURL_TRC_CF(data, cf, "[%"PRId64"] CLOSED", stream3_id); + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] CLOSED", stream->id); if(!stream->resp_hds_complete) { result = write_resp_raw(cf, data, "\r\n", 2); if(result) @@ -472,12 +522,12 @@ static CURLcode h3_process_event(struct Curl_cfilter *cf, break; case QUICHE_H3_EVENT_GOAWAY: - CURL_TRC_CF(data, cf, "[%"PRId64"] <- [GOAWAY]", stream3_id); + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] <- [GOAWAY]", stream->id); break; default: - CURL_TRC_CF(data, cf, "[%"PRId64"] recv, unhandled event %d", - stream3_id, quiche_h3_event_type(ev)); + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] recv, unhandled event %d", + stream->id, quiche_h3_event_type(ev)); break; } return result; @@ -487,36 +537,33 @@ 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 stream_ctx *stream = NULL; 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); + curl_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); + CURL_TRC_CF(data, cf, "error poll: %"CURL_PRId64, 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); + sdata = get_stream_easy(cf, data, stream3_id, &stream); + if(!sdata || !stream) { + CURL_TRC_CF(data, cf, "discard event %s for unknown [%"CURL_PRId64"]", + cf_ev_name(ev), stream3_id); } else { - result = h3_process_event(cf, sdata, stream3_id, ev); + result = h3_process_event(cf, sdata, stream, 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), + CURL_TRC_CF(data, cf, "error processing event %s " + "for [%"CURL_PRIu64"] -> %d", cf_ev_name(ev), stream3_id, result); if(data == sdata) { /* Only report this error to the caller if it is about the @@ -560,11 +607,19 @@ static CURLcode recv_pkt(const unsigned char *pkt, size_t pktlen, &recv_info); if(nread < 0) { if(QUICHE_ERR_DONE == nread) { + if(quiche_conn_is_draining(ctx->qconn)) { + CURL_TRC_CF(r->data, r->cf, "ingress, connection is draining"); + return CURLE_RECV_ERROR; + } + if(quiche_conn_is_closed(ctx->qconn)) { + CURL_TRC_CF(r->data, r->cf, "ingress, connection is closed"); + return CURLE_RECV_ERROR; + } 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->tls.ssl); + long verify_ok = SSL_get_verify_result(ctx->tls.ossl.ssl); if(verify_ok != X509_V_OK) { failf(r->data, "SSL certificate problem: %s", X509_verify_cert_error_string(verify_ok)); @@ -651,8 +706,8 @@ static CURLcode cf_flush_egress(struct Curl_cfilter *cf, struct cf_quiche_ctx *ctx = cf->ctx; ssize_t nread; CURLcode result; - int64_t expiry_ns; - int64_t timeout_ns; + curl_int64_t expiry_ns; + curl_int64_t timeout_ns; struct read_ctx readx; size_t pkt_count, gsolen; @@ -660,7 +715,13 @@ static CURLcode cf_flush_egress(struct Curl_cfilter *cf, 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"); + if(quiche_conn_is_timed_out(ctx->qconn)) + failf(data, "connection closed by idle timeout"); + else + failf(data, "connection closed by server"); + /* Connection timed out, expire all transfers belonging to it + * as will not get any more POLL events here. */ + cf_quiche_expire_conn_closed(cf, data); return CURLE_SEND_ERROR; } } @@ -725,25 +786,26 @@ static ssize_t recv_closed_stream(struct Curl_cfilter *cf, struct Curl_easy *data, CURLcode *err) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_quiche_ctx *ctx = cf->ctx; + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t nread = -1; DEBUGASSERT(stream); if(stream->reset) { failf(data, - "HTTP/3 stream %" PRId64 " reset by server", stream->id); + "HTTP/3 stream %" CURL_PRIu64 " reset by server", stream->id); *err = data->req.bytecount? CURLE_PARTIAL_FILE : CURLE_HTTP3; - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_recv, was reset -> %d", + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] 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", + "HTTP/3 stream %" CURL_PRIu64 " was closed cleanly, but before " + "getting all response header fields, treated as error", stream->id); /* *err = CURLE_PARTIAL_FILE; */ *err = CURLE_HTTP3; - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_recv, closed incomplete" + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] cf_recv, closed incomplete" " -> %d", stream->id, *err); } else { @@ -757,7 +819,7 @@ 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); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); ssize_t nread = -1; CURLcode result; @@ -771,7 +833,7 @@ static ssize_t cf_quiche_recv(struct Curl_cfilter *cf, struct Curl_easy *data, 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) " + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] read recvbuf(len=%zu) " "-> %zd, %d", stream->id, len, nread, *err); if(nread < 0) goto out; @@ -788,7 +850,7 @@ static ssize_t cf_quiche_recv(struct Curl_cfilter *cf, struct Curl_easy *data, 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) " + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] read recvbuf(len=%zu) " "-> %zd, %d", stream->id, len, nread, *err); if(nread < 0) goto out; @@ -822,7 +884,7 @@ static ssize_t cf_quiche_recv(struct Curl_cfilter *cf, struct Curl_easy *data, } if(nread > 0) ctx->data_recvd += nread; - CURL_TRC_CF(data, cf, "[%"PRId64"] cf_recv(total=%" + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] cf_recv(total=%" CURL_FORMAT_CURL_OFF_T ") -> %zd, %d", stream->id, ctx->data_recvd, nread, *err); return nread; @@ -838,9 +900,9 @@ static ssize_t h3_open_stream(struct Curl_cfilter *cf, CURLcode *err) { struct cf_quiche_ctx *ctx = cf->ctx; - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); size_t nheader, i; - int64_t stream3_id; + curl_int64_t stream3_id; struct dynhds h2_headers; quiche_h3_header *nva = NULL; ssize_t nwritten; @@ -850,7 +912,7 @@ static ssize_t h3_open_stream(struct Curl_cfilter *cf, if(*err) { return -1; } - stream = H3_STREAM_CTX(data); + stream = H3_STREAM_CTX(ctx, data); DEBUGASSERT(stream); } @@ -915,14 +977,14 @@ static ssize_t h3_open_stream(struct Curl_cfilter *cf, 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); + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] 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, + CURL_TRC_CF(data, cf, "send_request(%s) -> %" CURL_PRIu64, data->state.url, stream3_id); } *err = CURLE_SEND_ERROR; @@ -930,17 +992,18 @@ static ssize_t h3_open_stream(struct Curl_cfilter *cf, goto out; } - DEBUGASSERT(stream->id == -1); + DEBUGASSERT(!stream->opened); *err = CURLE_OK; stream->id = stream3_id; + stream->opened = TRUE; stream->closed = FALSE; stream->reset = FALSE; if(Curl_trc_is_verbose(data)) { - infof(data, "[HTTP/3] [%" PRId64 "] OPENED stream for %s", + infof(data, "[HTTP/3] [%" CURL_PRIu64 "] OPENED stream for %s", stream->id, data->state.url); for(i = 0; i < nheader; ++i) { - infof(data, "[HTTP/3] [%" PRId64 "] [%.*s: %.*s]", stream->id, + infof(data, "[HTTP/3] [%" CURL_PRIu64 "] [%.*s: %.*s]", stream->id, (int)nva[i].name_len, nva[i].name, (int)nva[i].value_len, nva[i].value); } @@ -956,7 +1019,7 @@ 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); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); CURLcode result; ssize_t nwritten; @@ -968,11 +1031,11 @@ static ssize_t cf_quiche_send(struct Curl_cfilter *cf, struct Curl_easy *data, goto out; } - if(!stream || stream->id < 0) { + if(!stream || !stream->opened) { nwritten = h3_open_stream(cf, data, buf, len, err); if(nwritten < 0) goto out; - stream = H3_STREAM_CTX(data); + stream = H3_STREAM_CTX(ctx, data); } else if(stream->closed) { if(stream->resp_hds_complete) { @@ -984,13 +1047,13 @@ static ssize_t cf_quiche_send(struct Curl_cfilter *cf, struct Curl_easy *data, * 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" + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] discarding data" "on closed stream with response", stream->id); *err = CURLE_OK; nwritten = (ssize_t)len; goto out; } - CURL_TRC_CF(data, cf, "[%" PRId64 "] send_body(len=%zu) " + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] send_body(len=%zu) " "-> stream closed", stream->id, len); *err = CURLE_HTTP3; nwritten = -1; @@ -1005,7 +1068,7 @@ static ssize_t cf_quiche_send(struct Curl_cfilter *cf, struct Curl_easy *data, /* 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) " + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] send_body(len=%zu) " "-> window exhausted", stream->id, len); stream->quic_flow_blocked = TRUE; } @@ -1014,21 +1077,21 @@ static ssize_t cf_quiche_send(struct Curl_cfilter *cf, struct Curl_easy *data, goto out; } else if(nwritten == QUICHE_H3_TRANSPORT_ERR_INVALID_STREAM_STATE) { - CURL_TRC_CF(data, cf, "[%" PRId64 "] send_body(len=%zu) " + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] send_body(len=%zu) " "-> invalid stream state", stream->id, len); *err = CURLE_HTTP3; nwritten = -1; goto out; } else if(nwritten == QUICHE_H3_TRANSPORT_ERR_FINAL_SIZE) { - CURL_TRC_CF(data, cf, "[%" PRId64 "] send_body(len=%zu) " + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] 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) " + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] send_body(len=%zu) " "-> quiche err %zd", stream->id, len, nwritten); *err = CURLE_SEND_ERROR; nwritten = -1; @@ -1043,7 +1106,7 @@ static ssize_t cf_quiche_send(struct Curl_cfilter *cf, struct Curl_easy *data, if(stream->upload_left == 0) stream->send_closed = TRUE; - CURL_TRC_CF(data, cf, "[%" PRId64 "] send body(len=%zu, " + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] send body(len=%zu, " "left=%" CURL_FORMAT_CURL_OFF_T ") -> %zd", stream->id, len, stream->upload_left, nwritten); *err = CURLE_OK; @@ -1056,8 +1119,8 @@ static ssize_t cf_quiche_send(struct Curl_cfilter *cf, struct Curl_easy *data, *err = result; nwritten = -1; } - CURL_TRC_CF(data, cf, "[%" PRId64 "] cf_send(len=%zu) -> %zd, %d", - stream? stream->id : -1, len, nwritten, *err); + CURL_TRC_CF(data, cf, "[%" CURL_PRIu64 "] cf_send(len=%zu) -> %zd, %d", + stream? stream->id : (uint64_t)~0, len, nwritten, *err); return nwritten; } @@ -1065,10 +1128,10 @@ 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); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); - return stream && (quiche_conn_stream_writable(ctx->qconn, - (uint64_t)stream->id, 1) > 0); + return stream && (quiche_conn_stream_writable( + ctx->qconn, (curl_uint64_t)stream->id, 1) > 0); } static void cf_quiche_adjust_pollset(struct Curl_cfilter *cf, @@ -1083,12 +1146,12 @@ static void cf_quiche_adjust_pollset(struct Curl_cfilter *cf, Curl_pollset_check(data, ps, ctx->q.sockfd, &want_recv, &want_send); if(want_recv || want_send) { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct stream_ctx *stream = H3_STREAM_CTX(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 = want_send && stream && stream->id >= 0 && + s_exhaust = want_send && stream && stream->opened && (stream->quic_flow_blocked || !stream_is_writeable(cf, data)); want_recv = (want_recv || c_exhaust || s_exhaust); want_send = (!s_exhaust && want_send) || @@ -1105,7 +1168,8 @@ static void cf_quiche_adjust_pollset(struct Curl_cfilter *cf, static bool cf_quiche_data_pending(struct Curl_cfilter *cf, const struct Curl_easy *data) { - const struct stream_ctx *stream = H3_STREAM_CTX(data); + struct cf_quiche_ctx *ctx = cf->ctx; + const struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); (void)cf; return stream && !Curl_bufq_is_empty(&stream->recvbuf); } @@ -1127,6 +1191,7 @@ static CURLcode cf_quiche_data_event(struct Curl_cfilter *cf, struct Curl_easy *data, int event, int arg1, void *arg2) { + struct cf_quiche_ctx *ctx = cf->ctx; CURLcode result = CURLE_OK; (void)arg1; @@ -1144,7 +1209,7 @@ static CURLcode cf_quiche_data_event(struct Curl_cfilter *cf, h3_data_done(cf, data); break; case CF_CTRL_DATA_DONE_SEND: { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); if(stream && !stream->send_closed) { unsigned char body[1]; ssize_t sent; @@ -1153,13 +1218,13 @@ static CURLcode cf_quiche_data_event(struct Curl_cfilter *cf, 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", + CURL_TRC_CF(data, cf, "[%"CURL_PRIu64"] DONE_SEND -> %zd, %d", stream->id, sent, result); } break; } case CF_CTRL_DATA_IDLE: { - struct stream_ctx *stream = H3_STREAM_CTX(data); + struct stream_ctx *stream = H3_STREAM_CTX(ctx, data); if(stream && !stream->closed) { result = cf_flush_egress(cf, data); if(result) @@ -1191,26 +1256,26 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf, 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); + Curl_hash_offt_init(&ctx->streams, 63, h3_stream_hash_free); ctx->data_recvd = 0; result = vquic_ctx_init(&ctx->q); if(result) return result; - result = Curl_ssl_peer_init(&ctx->peer, cf); + result = Curl_ssl_peer_init(&ctx->peer, cf, TRNSPRT_QUIC); if(result) return result; ctx->cfg = quiche_config_new(QUICHE_PROTOCOL_VERSION); if(!ctx->cfg) { - failf(data, "can't create quiche config"); + failf(data, "cannot 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_max_idle_timeout(ctx->cfg, CURL_QUIC_MAX_IDLE_MS); 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); @@ -1235,7 +1300,7 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf, result = Curl_vquic_tls_init(&ctx->tls, cf, data, &ctx->peer, QUICHE_H3_APPLICATION_PROTOCOL, sizeof(QUICHE_H3_APPLICATION_PROTOCOL) - 1, - NULL, cf); + NULL, NULL, cf); if(result) return result; @@ -1255,9 +1320,9 @@ static CURLcode cf_connect_start(struct Curl_cfilter *cf, (struct sockaddr *)&ctx->q.local_addr, ctx->q.local_addrlen, &sockaddr->sa_addr, sockaddr->addrlen, - ctx->cfg, ctx->tls.ssl, false); + ctx->cfg, ctx->tls.ossl.ssl, false); if(!ctx->qconn) { - failf(data, "can't create quiche connection"); + failf(data, "cannot create quiche connection"); return CURLE_OUT_OF_MEMORY; } @@ -1399,18 +1464,60 @@ static CURLcode cf_quiche_connect(struct Curl_cfilter *cf, return result; } +static CURLcode cf_quiche_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, bool *done) +{ + struct cf_quiche_ctx *ctx = cf->ctx; + CURLcode result = CURLE_OK; + + if(cf->shutdown || !ctx || !ctx->qconn) { + *done = TRUE; + return CURLE_OK; + } + + *done = FALSE; + if(!ctx->shutdown_started) { + int err; + + ctx->shutdown_started = TRUE; + vquic_ctx_update_time(&ctx->q); + err = quiche_conn_close(ctx->qconn, TRUE, 0, NULL, 0); + if(err) { + CURL_TRC_CF(data, cf, "error %d adding shutdown packet, " + "aborting shutdown", err); + result = CURLE_SEND_ERROR; + goto out; + } + } + + if(!Curl_bufq_is_empty(&ctx->q.sendbuf)) { + CURL_TRC_CF(data, cf, "shutdown, flushing sendbuf"); + result = cf_flush_egress(cf, data); + if(result) + goto out; + } + + if(Curl_bufq_is_empty(&ctx->q.sendbuf)) { + /* sent everything, quiche does not seem to support a graceful + * shutdown waiting for a reply, so ware done. */ + CURL_TRC_CF(data, cf, "shutdown completely sent off, done"); + *done = TRUE; + } + else { + CURL_TRC_CF(data, cf, "shutdown sending blocked"); + } + +out: + 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); - } + bool done; + (void)cf_quiche_shutdown(cf, data, &done); cf_quiche_ctx_clear(ctx); } } @@ -1433,12 +1540,14 @@ static CURLcode cf_quiche_query(struct Curl_cfilter *cf, switch(query) { case CF_QUERY_MAX_CONCURRENT: { - uint64_t max_streams = CONN_INUSE(cf->conn); + curl_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); + CURL_TRC_CF(data, cf, "query conn[%" CURL_FORMAT_CURL_OFF_T "]: " + "MAX_CONCURRENT -> %d (%zu in use)", + cf->conn->connection_id, *pres1, CONN_INUSE(cf->conn)); return CURLE_OK; } case CF_QUERY_CONNECT_REPLY_MS: @@ -1480,31 +1589,20 @@ static bool cf_quiche_conn_is_alive(struct Curl_cfilter *cf, 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(quiche_conn_is_closed(ctx->qconn)) { + if(quiche_conn_is_timed_out(ctx->qconn)) + CURL_TRC_CF(data, cf, "connection was closed due to idle timeout"); + else + CURL_TRC_CF(data, cf, "connection is closed"); + 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, + /* This happens before we have sent off a request and the connection is + not in use by any other transfer, there should not be any data here, only "protocol frames" */ *input_pending = FALSE; if(cf_process_ingress(cf, data)) @@ -1524,6 +1622,7 @@ struct Curl_cftype Curl_cft_http3 = { cf_quiche_destroy, cf_quiche_connect, cf_quiche_close, + cf_quiche_shutdown, Curl_cf_def_get_host, cf_quiche_adjust_pollset, cf_quiche_data_pending, diff --git a/lib/vquic/vquic-tls.c b/lib/vquic/vquic-tls.c index ecba607a9..6aa6613af 100644 --- a/lib/vquic/vquic-tls.c +++ b/lib/vquic/vquic-tls.c @@ -24,7 +24,7 @@ #include "curl_setup.h" -#if defined(ENABLE_QUIC) && \ +#if defined(USE_HTTP3) && \ (defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_WOLFSSL)) #ifdef USE_OPENSSL @@ -61,277 +61,12 @@ #define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0])) #endif -#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) +#if 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 - - -#ifdef USE_OPENSSL - -static void keylog_callback(const SSL *ssl, const char *line) -{ - (void)ssl; - Curl_tls_keylog_write_line(line); -} - -static CURLcode curl_ossl_init_ctx(struct quic_tls_ctx *ctx, - struct Curl_cfilter *cf, - struct Curl_easy *data, - Curl_vquic_tls_ctx_setup *ctx_setup) -{ - struct ssl_primary_config *conn_config; - CURLcode result = CURLE_FAILED_INIT; - - DEBUGASSERT(!ctx->ssl_ctx); -#ifdef USE_OPENSSL_QUIC - ctx->ssl_ctx = SSL_CTX_new(OSSL_QUIC_client_method()); -#else - ctx->ssl_ctx = SSL_CTX_new(TLS_method()); -#endif - if(!ctx->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(ctx_setup) { - result = ctx_setup(ctx, cf, data); - if(result) - goto out; - } - - SSL_CTX_set_default_verify_paths(ctx->ssl_ctx); - - { - const char *curves = conn_config->curves ? - conn_config->curves : QUIC_GROUPS; - if(!SSL_CTX_set1_curves_list(ctx->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(ctx->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(ctx->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(ctx->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, ctx->ssl_ctx); - if(result) - goto out; - ctx->x509_store_setup = TRUE; - } - Curl_set_in_callback(data, true); - result = (*data->set.ssl.fsslctx)(data, ctx->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: - if(result && ctx->ssl_ctx) { - SSL_CTX_free(ctx->ssl_ctx); - ctx->ssl_ctx = NULL; - } - return result; -} - -static CURLcode curl_ossl_set_client_cert(struct quic_tls_ctx *ctx, - struct Curl_cfilter *cf, - struct Curl_easy *data) -{ - SSL_CTX *ssl_ctx = ctx->ssl_ctx; - 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 curl_ossl_init_ssl(struct quic_tls_ctx *ctx, - struct Curl_easy *data, - struct ssl_peer *peer, - const char *alpn, size_t alpn_len, - void *user_data) -{ - DEBUGASSERT(!ctx->ssl); - ctx->ssl = SSL_new(ctx->ssl_ctx); - - SSL_set_app_data(ctx->ssl, user_data); - SSL_set_connect_state(ctx->ssl); -#ifndef USE_OPENSSL_QUIC - SSL_set_quic_use_legacy_codepoint(ctx->ssl, 0); -#endif - - if(alpn) - SSL_set_alpn_protos(ctx->ssl, (const uint8_t *)alpn, (int)alpn_len); - - if(peer->sni) { - if(!SSL_set_tlsext_host_name(ctx->ssl, 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 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; -} - -static CURLcode curl_gtls_init_ctx(struct quic_tls_ctx *ctx, - struct Curl_cfilter *cf, - struct Curl_easy *data, - struct ssl_peer *peer, - const char *alpn, size_t alpn_len, - Curl_vquic_tls_ctx_setup *ctx_setup, - void *user_data) -{ - struct ssl_primary_config *conn_config; - CURLcode result; - gnutls_datum_t alpns[5]; - /* 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, - peer, ctx->gtls, pverifyresult); - if(result) - return result; - - gnutls_session_set_ptr(ctx->gtls->session, user_data); - - if(ctx_setup) { - result = ctx_setup(ctx, cf, data); - if(result) - return result; - } - - 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); - } - - /* convert the ALPN string from our arguments to a list of strings - * that gnutls wants and will convert internally back to this very - * string for sending to the server. nice. */ - if(alpn) { - size_t i, alen = alpn_len; - unsigned char *s = (unsigned char *)alpn; - unsigned char slen; - for(i = 0; (i < ARRAYSIZE(alpns)) && alen; ++i) { - slen = s[0]; - if(slen >= alen) - return CURLE_FAILED_INIT; - alpns[i].data = s + 1; - alpns[i].size = slen; - s += slen + 1; - alen -= (size_t)slen + 1; - } - if(alen) /* not all alpn chars used, wrong format or too many */ - return CURLE_FAILED_INIT; - if(i) { - gnutls_alpn_set_protocols(ctx->gtls->session, - alpns, (unsigned int)i, - GNUTLS_ALPN_MANDATORY); - } - } - - return CURLE_OK; -} -#elif defined(USE_WOLFSSL) #if defined(HAVE_SECRET_CALLBACK) static void keylog_callback(const WOLFSSL *ssl, const char *line) @@ -341,10 +76,11 @@ static void keylog_callback(const WOLFSSL *ssl, const char *line) } #endif -static CURLcode curl_wssl_init_ctx(struct quic_tls_ctx *ctx, +static CURLcode Curl_wssl_init_ctx(struct curl_tls_ctx *ctx, struct Curl_cfilter *cf, struct Curl_easy *data, - Curl_vquic_tls_ctx_setup *ctx_setup) + Curl_vquic_tls_ctx_setup *cb_setup, + void *cb_user_data) { struct ssl_primary_config *conn_config; CURLcode result = CURLE_FAILED_INIT; @@ -355,21 +91,21 @@ static CURLcode curl_wssl_init_ctx(struct quic_tls_ctx *ctx, goto out; } - ctx->ssl_ctx = wolfSSL_CTX_new(wolfTLSv1_3_client_method()); - if(!ctx->ssl_ctx) { + ctx->wssl.ctx = wolfSSL_CTX_new(wolfTLSv1_3_client_method()); + if(!ctx->wssl.ctx) { result = CURLE_OUT_OF_MEMORY; goto out; } - if(ctx_setup) { - result = ctx_setup(ctx, cf, data); + if(cb_setup) { + result = cb_setup(cf, data, cb_user_data); if(result) goto out; } - wolfSSL_CTX_set_default_verify_paths(ctx->ssl_ctx); + wolfSSL_CTX_set_default_verify_paths(ctx->wssl.ctx); - if(wolfSSL_CTX_set_cipher_list(ctx->ssl_ctx, conn_config->cipher_list13 ? + if(wolfSSL_CTX_set_cipher_list(ctx->wssl.ctx, conn_config->cipher_list13 ? conn_config->cipher_list13 : QUIC_CIPHERS) != 1) { char error_buffer[256]; @@ -379,7 +115,7 @@ static CURLcode curl_wssl_init_ctx(struct quic_tls_ctx *ctx, goto out; } - if(wolfSSL_CTX_set1_groups_list(ctx->ssl_ctx, conn_config->curves ? + if(wolfSSL_CTX_set1_groups_list(ctx->wssl.ctx, conn_config->curves ? conn_config->curves : (char *)QUIC_GROUPS) != 1) { failf(data, "wolfSSL failed to set curves"); @@ -391,7 +127,7 @@ static CURLcode curl_wssl_init_ctx(struct quic_tls_ctx *ctx, Curl_tls_keylog_open(); if(Curl_tls_keylog_enabled()) { #if defined(HAVE_SECRET_CALLBACK) - wolfSSL_CTX_set_keylog_callback(ctx->ssl_ctx, keylog_callback); + wolfSSL_CTX_set_keylog_callback(ctx->wssl.ctx, keylog_callback); #else failf(data, "wolfSSL was built without keylog callback"); result = CURLE_NOT_BUILT_IN; @@ -403,12 +139,12 @@ static CURLcode curl_wssl_init_ctx(struct quic_tls_ctx *ctx, const char * const ssl_cafile = conn_config->CAfile; const char * const ssl_capath = conn_config->CApath; - wolfSSL_CTX_set_verify(ctx->ssl_ctx, SSL_VERIFY_PEER, NULL); + wolfSSL_CTX_set_verify(ctx->wssl.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(ctx->ssl_ctx, ssl_cafile, + wolfSSL_CTX_load_verify_locations_ex(ctx->wssl.ctx, ssl_cafile, ssl_capath, WOLFSSL_LOAD_FLAG_IGNORE_ERR); if(SSL_SUCCESS != rc) { @@ -425,20 +161,20 @@ static CURLcode curl_wssl_init_ctx(struct quic_tls_ctx *ctx, } #ifdef CURL_CA_FALLBACK else { - /* verifying the peer without any CA certificates won't work so + /* verifying the peer without any CA certificates will not work so use wolfssl's built-in default as fallback */ - wolfSSL_CTX_set_default_verify_paths(ctx->ssl_ctx); + wolfSSL_CTX_set_default_verify_paths(ctx->wssl.ctx); } #endif } else { - wolfSSL_CTX_set_verify(ctx->ssl_ctx, SSL_VERIFY_NONE, NULL); + wolfSSL_CTX_set_verify(ctx->wssl.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, ctx->ssl_ctx, + result = (*data->set.ssl.fsslctx)(data, ctx->wssl.ctx, data->set.ssl.fsslctxp); Curl_set_in_callback(data, false); if(result) { @@ -449,36 +185,36 @@ static CURLcode curl_wssl_init_ctx(struct quic_tls_ctx *ctx, result = CURLE_OK; out: - if(result && ctx->ssl_ctx) { - SSL_CTX_free(ctx->ssl_ctx); - ctx->ssl_ctx = NULL; + if(result && ctx->wssl.ctx) { + SSL_CTX_free(ctx->wssl.ctx); + ctx->wssl.ctx = NULL; } return result; } /** SSL callbacks ***/ -static CURLcode curl_wssl_init_ssl(struct quic_tls_ctx *ctx, +static CURLcode Curl_wssl_init_ssl(struct curl_tls_ctx *ctx, struct Curl_easy *data, struct ssl_peer *peer, const char *alpn, size_t alpn_len, void *user_data) { (void)data; - DEBUGASSERT(!ctx->ssl); - DEBUGASSERT(ctx->ssl_ctx); - ctx->ssl = wolfSSL_new(ctx->ssl_ctx); + DEBUGASSERT(!ctx->wssl.handle); + DEBUGASSERT(ctx->wssl.ctx); + ctx->wssl.handle = wolfSSL_new(ctx->wssl.ctx); - wolfSSL_set_app_data(ctx->ssl, user_data); - wolfSSL_set_connect_state(ctx->ssl); - wolfSSL_set_quic_use_legacy_codepoint(ctx->ssl, 0); + wolfSSL_set_app_data(ctx->wssl.handle, user_data); + wolfSSL_set_connect_state(ctx->wssl.handle); + wolfSSL_set_quic_use_legacy_codepoint(ctx->wssl.handle, 0); if(alpn) - wolfSSL_set_alpn_protos(ctx->ssl, (const unsigned char *)alpn, - (int)alpn_len); + wolfSSL_set_alpn_protos(ctx->wssl.handle, (const unsigned char *)alpn, + (unsigned int)alpn_len); if(peer->sni) { - wolfSSL_UseSNI(ctx->ssl, WOLFSSL_SNI_HOST_NAME, + wolfSSL_UseSNI(ctx->wssl.handle, WOLFSSL_SNI_HOST_NAME, peer->sni, (unsigned short)strlen(peer->sni)); } @@ -486,76 +222,80 @@ static CURLcode curl_wssl_init_ssl(struct quic_tls_ctx *ctx, } #endif /* defined(USE_WOLFSSL) */ -CURLcode Curl_vquic_tls_init(struct quic_tls_ctx *ctx, +CURLcode Curl_vquic_tls_init(struct curl_tls_ctx *ctx, struct Curl_cfilter *cf, struct Curl_easy *data, struct ssl_peer *peer, const char *alpn, size_t alpn_len, - Curl_vquic_tls_ctx_setup *ctx_setup, - void *user_data) + Curl_vquic_tls_ctx_setup *cb_setup, + void *cb_user_data, void *ssl_user_data) { CURLcode result; #ifdef USE_OPENSSL - result = curl_ossl_init_ctx(ctx, cf, data, ctx_setup); - if(result) - return result; - - result = curl_ossl_set_client_cert(ctx, cf, data); - if(result) - return result; - - return curl_ossl_init_ssl(ctx, data, peer, alpn, alpn_len, user_data); + (void)result; + return Curl_ossl_ctx_init(&ctx->ossl, cf, data, peer, TRNSPRT_QUIC, + (const unsigned char *)alpn, alpn_len, + cb_setup, cb_user_data, NULL, ssl_user_data); #elif defined(USE_GNUTLS) (void)result; - return curl_gtls_init_ctx(ctx, cf, data, peer, alpn, alpn_len, - ctx_setup, user_data); + return Curl_gtls_ctx_init(&ctx->gtls, cf, data, peer, + (const unsigned char *)alpn, alpn_len, + cb_setup, cb_user_data, ssl_user_data); #elif defined(USE_WOLFSSL) - result = curl_wssl_init_ctx(ctx, cf, data, ctx_setup); + result = Curl_wssl_init_ctx(ctx, cf, data, cb_setup, cb_user_data); if(result) return result; - return curl_wssl_init_ssl(ctx, data, peer, alpn, alpn_len, user_data); + return Curl_wssl_init_ssl(ctx, data, peer, alpn, alpn_len, ssl_user_data); #else #error "no TLS lib in used, should not happen" return CURLE_FAILED_INIT; #endif } -void Curl_vquic_tls_cleanup(struct quic_tls_ctx *ctx) +void Curl_vquic_tls_cleanup(struct curl_tls_ctx *ctx) { #ifdef USE_OPENSSL - if(ctx->ssl) - SSL_free(ctx->ssl); - if(ctx->ssl_ctx) - SSL_CTX_free(ctx->ssl_ctx); + if(ctx->ossl.ssl) + SSL_free(ctx->ossl.ssl); + if(ctx->ossl.ssl_ctx) + SSL_CTX_free(ctx->ossl.ssl_ctx); #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); - } + if(ctx->gtls.session) + gnutls_deinit(ctx->gtls.session); + Curl_gtls_shared_creds_free(&ctx->gtls.shared_creds); #elif defined(USE_WOLFSSL) - if(ctx->ssl) - wolfSSL_free(ctx->ssl); - if(ctx->ssl_ctx) - wolfSSL_CTX_free(ctx->ssl_ctx); + if(ctx->wssl.handle) + wolfSSL_free(ctx->wssl.handle); + if(ctx->wssl.ctx) + wolfSSL_CTX_free(ctx->wssl.ctx); #endif memset(ctx, 0, sizeof(*ctx)); } -CURLcode Curl_vquic_tls_before_recv(struct quic_tls_ctx *ctx, +CURLcode Curl_vquic_tls_before_recv(struct curl_tls_ctx *ctx, struct Curl_cfilter *cf, struct Curl_easy *data) { #ifdef USE_OPENSSL - if(!ctx->x509_store_setup) { - CURLcode result = Curl_ssl_setup_x509_store(cf, data, ctx->ssl_ctx); + if(!ctx->ossl.x509_store_setup) { + CURLcode result = Curl_ssl_setup_x509_store(cf, data, ctx->ossl.ssl_ctx); + if(result) + return result; + ctx->ossl.x509_store_setup = TRUE; + } +#elif defined(USE_WOLFSSL) + if(!ctx->wssl.x509_store_setup) { + CURLcode result = Curl_wssl_setup_x509_store(cf, data, &ctx->wssl); + if(result) + return result; + } +#elif defined(USE_GNUTLS) + if(!ctx->gtls.shared_creds->trust_setup) { + CURLcode result = Curl_gtls_client_trust_setup(cf, data, &ctx->gtls); if(result) return result; - ctx->x509_store_setup = TRUE; } #else (void)ctx; (void)cf; (void)data; @@ -563,7 +303,7 @@ CURLcode Curl_vquic_tls_before_recv(struct quic_tls_ctx *ctx, return CURLE_OK; } -CURLcode Curl_vquic_tls_verify_peer(struct quic_tls_ctx *ctx, +CURLcode Curl_vquic_tls_verify_peer(struct curl_tls_ctx *ctx, struct Curl_cfilter *cf, struct Curl_easy *data, struct ssl_peer *peer) @@ -575,39 +315,33 @@ CURLcode Curl_vquic_tls_verify_peer(struct quic_tls_ctx *ctx, if(!conn_config) return CURLE_FAILED_INIT; - 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, peer, server_cert); - X509_free(server_cert); - if(result) - return result; + (void)conn_config; + result = Curl_oss_check_peer_cert(cf, data, &ctx->ossl, peer); #elif defined(USE_GNUTLS) - result = Curl_gtls_verifyserver(data, ctx->gtls->session, + if(conn_config->verifyhost) { + result = Curl_gtls_verifyserver(data, ctx->gtls.session, conn_config, &data->set.ssl, peer, data->set.str[STRING_SSL_PINNEDPUBLICKEY]); if(result) return result; + } #elif defined(USE_WOLFSSL) - if(!peer->sni || - wolfSSL_check_domain_name(ctx->ssl, peer->sni) == SSL_FAILURE) - return CURLE_PEER_FAILED_VERIFICATION; -#endif - infof(data, "Verified certificate just fine"); + (void)data; + if(conn_config->verifyhost) { + if(peer->sni) { + WOLFSSL_X509* cert = wolfSSL_get_peer_certificate(ctx->wssl.handle); + if(wolfSSL_X509_check_host(cert, peer->sni, strlen(peer->sni), 0, NULL) + == WOLFSSL_FAILURE) { + result = CURLE_PEER_FAILED_VERIFICATION; + } + wolfSSL_X509_free(cert); + } + } - 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; } -#endif /* !ENABLE_QUIC && (USE_OPENSSL || USE_GNUTLS || USE_WOLFSSL) */ +#endif /* !USE_HTTP3 && (USE_OPENSSL || USE_GNUTLS || USE_WOLFSSL) */ diff --git a/lib/vquic/vquic-tls.h b/lib/vquic/vquic-tls.h index 9c0dfd8d5..0ec74bfba 100644 --- a/lib/vquic/vquic-tls.h +++ b/lib/vquic/vquic-tls.h @@ -26,21 +26,21 @@ #include "curl_setup.h" #include "bufq.h" +#include "vtls/openssl.h" -#if defined(ENABLE_QUIC) && \ +#if defined(USE_HTTP3) && \ (defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_WOLFSSL)) -struct quic_tls_ctx { +#include "vtls/wolfssl.h" + +struct curl_tls_ctx { #ifdef USE_OPENSSL - SSL_CTX *ssl_ctx; - SSL *ssl; + struct ossl_ctx ossl; #elif defined(USE_GNUTLS) - struct gtls_instance *gtls; + struct gtls_ctx gtls; #elif defined(USE_WOLFSSL) - WOLFSSL_CTX *ssl_ctx; - WOLFSSL *ssl; + struct wolfssl_ctx wssl; #endif - BIT(x509_store_setup); /* if x509 store has been set up */ }; /** @@ -50,9 +50,9 @@ struct quic_tls_ctx { * - openssl/wolfssl: SSL_CTX* has just been created * - gnutls: gtls_client_init() has run */ -typedef CURLcode Curl_vquic_tls_ctx_setup(struct quic_tls_ctx *ctx, - struct Curl_cfilter *cf, - struct Curl_easy *data); +typedef CURLcode Curl_vquic_tls_ctx_setup(struct Curl_cfilter *cf, + struct Curl_easy *data, + void *cb_user_data); /** * Initialize the QUIC TLS instances based of the SSL configurations @@ -64,23 +64,25 @@ typedef CURLcode Curl_vquic_tls_ctx_setup(struct quic_tls_ctx *ctx, * @param alpn the ALPN string in protocol format ((len+bytes+)+), * may be NULL * @param alpn_len the overall number of bytes in `alpn` - * @param ctx_setup optional callback for very early TLS config - * @param user_data optional pointer to set in TLS application context + * @param cb_setup optional callback for very early TLS config + ± @param cb_user_data user_data param for callback + * @param ssl_user_data optional pointer to set in TLS application context */ -CURLcode Curl_vquic_tls_init(struct quic_tls_ctx *ctx, +CURLcode Curl_vquic_tls_init(struct curl_tls_ctx *ctx, struct Curl_cfilter *cf, struct Curl_easy *data, struct ssl_peer *peer, const char *alpn, size_t alpn_len, - Curl_vquic_tls_ctx_setup *ctx_setup, - void *user_data); + Curl_vquic_tls_ctx_setup *cb_setup, + void *cb_user_data, + void *ssl_user_data); /** * Cleanup all data that has been initialized. */ -void Curl_vquic_tls_cleanup(struct quic_tls_ctx *ctx); +void Curl_vquic_tls_cleanup(struct curl_tls_ctx *ctx); -CURLcode Curl_vquic_tls_before_recv(struct quic_tls_ctx *ctx, +CURLcode Curl_vquic_tls_before_recv(struct curl_tls_ctx *ctx, struct Curl_cfilter *cf, struct Curl_easy *data); @@ -88,11 +90,11 @@ CURLcode Curl_vquic_tls_before_recv(struct quic_tls_ctx *ctx, * After the QUIC basic handshake has been, verify that the peer * (and its certificate) fulfill our requirements. */ -CURLcode Curl_vquic_tls_verify_peer(struct quic_tls_ctx *ctx, +CURLcode Curl_vquic_tls_verify_peer(struct curl_tls_ctx *ctx, struct Curl_cfilter *cf, struct Curl_easy *data, struct ssl_peer *peer); -#endif /* !ENABLE_QUIC && (USE_OPENSSL || USE_GNUTLS || USE_WOLFSSL) */ +#endif /* !USE_HTTP3 && (USE_OPENSSL || USE_GNUTLS || USE_WOLFSSL) */ #endif /* HEADER_CURL_VQUIC_TLS_H */ diff --git a/lib/vquic/vquic.c b/lib/vquic/vquic.c index 066caf986..2bb06d463 100644 --- a/lib/vquic/vquic.c +++ b/lib/vquic/vquic.c @@ -36,6 +36,9 @@ #include "curl_setup.h" +#ifdef HAVE_NETINET_UDP_H +#include +#endif #ifdef HAVE_FCNTL_H #include #endif @@ -59,7 +62,7 @@ #include "memdebug.h" -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 #ifdef O_BINARY #define QLOGMODE O_WRONLY|O_CREAT|O_BINARY @@ -329,6 +332,36 @@ CURLcode vquic_send_tail_split(struct Curl_cfilter *cf, struct Curl_easy *data, return vquic_flush(cf, data, qctx); } +#if defined(HAVE_SENDMMSG) || defined(HAVE_SENDMSG) +static size_t msghdr_get_udp_gro(struct msghdr *msg) +{ + int gso_size = 0; +#if defined(__linux__) && defined(UDP_GRO) + struct cmsghdr *cmsg; + + /* Workaround musl CMSG_NXTHDR issue */ +#ifndef __GLIBC__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-compare" +#pragma clang diagnostic ignored "-Wcast-align" +#endif + for(cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) { +#ifndef __GLIBC__ +#pragma clang diagnostic pop +#endif + if(cmsg->cmsg_level == SOL_UDP && cmsg->cmsg_type == UDP_GRO) { + memcpy(&gso_size, CMSG_DATA(cmsg), sizeof(gso_size)); + + break; + } + } +#endif + (void)msg; + + return (size_t)gso_size; +} +#endif + #ifdef HAVE_SENDMMSG static CURLcode recvmmsg_packets(struct Curl_cfilter *cf, struct Curl_easy *data, @@ -339,12 +372,16 @@ static CURLcode recvmmsg_packets(struct Curl_cfilter *cf, #define MMSG_NUM 64 struct iovec msg_iov[MMSG_NUM]; struct mmsghdr mmsg[MMSG_NUM]; + uint8_t msg_ctrl[MMSG_NUM * CMSG_SPACE(sizeof(uint16_t))]; 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; + size_t gso_size; + size_t pktlen; + size_t offset, to; DEBUGASSERT(max_pkts > 0); pkts = 0; @@ -359,6 +396,8 @@ static CURLcode recvmmsg_packets(struct Curl_cfilter *cf, 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]); + mmsg[i].msg_hdr.msg_control = &msg_ctrl[i]; + mmsg[i].msg_hdr.msg_controllen = CMSG_SPACE(sizeof(uint16_t)); } while((mcount = recvmmsg(qctx->sockfd, mmsg, n, 0, NULL)) == -1 && @@ -385,14 +424,30 @@ static CURLcode recvmmsg_packets(struct Curl_cfilter *cf, } 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; + + gso_size = msghdr_get_udp_gro(&mmsg[i].msg_hdr); + if(gso_size == 0) { + gso_size = mmsg[i].msg_len; + } + + for(offset = 0; offset < mmsg[i].msg_len; offset = to) { + ++pkts; + + to = offset + gso_size; + if(to > mmsg[i].msg_len) { + pktlen = mmsg[i].msg_len - offset; + } + else { + pktlen = gso_size; + } + + result = recv_cb(bufs[i] + offset, pktlen, mmsg[i].msg_hdr.msg_name, + mmsg[i].msg_hdr.msg_namelen, 0, userp); + if(result) + goto out; + } } } @@ -418,6 +473,10 @@ static CURLcode recvmsg_packets(struct Curl_cfilter *cf, ssize_t nread; char errstr[STRERROR_LEN]; CURLcode result = CURLE_OK; + uint8_t msg_ctrl[CMSG_SPACE(sizeof(uint16_t))]; + size_t gso_size; + size_t pktlen; + size_t offset, to; msg_iov.iov_base = buf; msg_iov.iov_len = (int)sizeof(buf); @@ -425,11 +484,13 @@ static CURLcode recvmsg_packets(struct Curl_cfilter *cf, memset(&msg, 0, sizeof(msg)); msg.msg_iov = &msg_iov; msg.msg_iovlen = 1; + msg.msg_control = msg_ctrl; DEBUGASSERT(max_pkts > 0); for(pkts = 0, total_nread = 0; pkts < max_pkts;) { msg.msg_name = &remote_addr; msg.msg_namelen = sizeof(remote_addr); + msg.msg_controllen = sizeof(msg_ctrl); while((nread = recvmsg(qctx->sockfd, &msg, 0)) == -1 && SOCKERRNO == EINTR) ; @@ -452,12 +513,29 @@ static CURLcode recvmsg_packets(struct Curl_cfilter *cf, 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; + + gso_size = msghdr_get_udp_gro(&msg); + if(gso_size == 0) { + gso_size = (size_t)nread; + } + + for(offset = 0; offset < (size_t)nread; offset = to) { + ++pkts; + + to = offset + gso_size; + if(to > (size_t)nread) { + pktlen = (size_t)nread - offset; + } + else { + pktlen = gso_size; + } + + result = + recv_cb(buf + offset, pktlen, msg.msg_name, msg.msg_namelen, 0, userp); + if(result) + goto out; + } } out: @@ -655,7 +733,7 @@ CURLcode Curl_conn_may_http3(struct Curl_easy *data, return CURLE_URL_MALFORMAT; } if(conn->bits.httpproxy && conn->bits.tunnel_proxy) { - failf(data, "HTTP/3 is not supported over a HTTP proxy"); + failf(data, "HTTP/3 is not supported over an HTTP proxy"); return CURLE_URL_MALFORMAT; } #endif @@ -663,7 +741,7 @@ CURLcode Curl_conn_may_http3(struct Curl_easy *data, return CURLE_OK; } -#else /* ENABLE_QUIC */ +#else /* USE_HTTP3 */ CURLcode Curl_conn_may_http3(struct Curl_easy *data, const struct connectdata *conn) @@ -674,4 +752,4 @@ CURLcode Curl_conn_may_http3(struct Curl_easy *data, return CURLE_NOT_BUILT_IN; } -#endif /* !ENABLE_QUIC */ +#endif /* !USE_HTTP3 */ diff --git a/lib/vquic/vquic.h b/lib/vquic/vquic.h index dc73957aa..c1ca1df6a 100644 --- a/lib/vquic/vquic.h +++ b/lib/vquic/vquic.h @@ -26,7 +26,7 @@ #include "curl_setup.h" -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 struct Curl_cfilter; struct Curl_easy; struct connectdata; @@ -52,11 +52,11 @@ bool Curl_conn_is_http3(const struct Curl_easy *data, extern struct Curl_cftype Curl_cft_http3; -#else /* ENABLE_QUIC */ +#else /* USE_HTTP3 */ #define Curl_conn_is_http3(a,b,c) FALSE -#endif /* !ENABLE_QUIC */ +#endif /* !USE_HTTP3 */ CURLcode Curl_conn_may_http3(struct Curl_easy *data, const struct connectdata *conn); diff --git a/lib/vquic/vquic_int.h b/lib/vquic/vquic_int.h index c218a949c..754e1f591 100644 --- a/lib/vquic/vquic_int.h +++ b/lib/vquic/vquic_int.h @@ -27,7 +27,7 @@ #include "curl_setup.h" #include "bufq.h" -#ifdef ENABLE_QUIC +#ifdef USE_HTTP3 #define MAX_PKT_BURST 10 #define MAX_UDP_PAYLOAD_SIZE 1452 @@ -88,6 +88,6 @@ CURLcode vquic_recv_packets(struct Curl_cfilter *cf, size_t max_pkts, vquic_recv_pkt_cb *recv_cb, void *userp); -#endif /* !ENABLE_QUIC */ +#endif /* !USE_HTTP3 */ #endif /* HEADER_CURL_VQUIC_QUIC_INT_H */ diff --git a/lib/vssh/libssh.c b/lib/vssh/libssh.c index da7ce6ad9..20a05636d 100644 --- a/lib/vssh/libssh.c +++ b/lib/vssh/libssh.c @@ -162,6 +162,7 @@ const struct Curl_handler Curl_handler_scp = { myssh_getsock, /* perform_getsock */ scp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_SSH, /* defport */ @@ -189,6 +190,7 @@ const struct Curl_handler Curl_handler_sftp = { myssh_getsock, /* perform_getsock */ sftp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_SSH, /* defport */ @@ -386,28 +388,25 @@ static int myssh_is_known(struct Curl_easy *data) goto cleanup; } - if(data->set.ssl.primary.verifyhost != TRUE) { - rc = SSH_OK; - goto cleanup; - } + if(data->set.str[STRING_SSH_KNOWNHOSTS]) { #if LIBSSH_VERSION_INT >= SSH_VERSION_INT(0,9,0) - /* Get the known_key from the known hosts file */ - vstate = ssh_session_get_known_hosts_entry(sshc->ssh_session, - &knownhostsentry); - - /* Case an entry was found in a known hosts file */ - if(knownhostsentry) { - if(knownhostsentry->publickey) { - rc = ssh_pki_export_pubkey_base64(knownhostsentry->publickey, - &known_base64); - if(rc != SSH_OK) { - goto cleanup; - } - knownkey.key = known_base64; - knownkey.len = strlen(known_base64); + /* Get the known_key from the known hosts file */ + vstate = ssh_session_get_known_hosts_entry(sshc->ssh_session, + &knownhostsentry); + + /* Case an entry was found in a known hosts file */ + if(knownhostsentry) { + if(knownhostsentry->publickey) { + rc = ssh_pki_export_pubkey_base64(knownhostsentry->publickey, + &known_base64); + if(rc != SSH_OK) { + goto cleanup; + } + knownkey.key = known_base64; + knownkey.len = strlen(known_base64); - switch(ssh_key_type(knownhostsentry->publickey)) { + switch(ssh_key_type(knownhostsentry->publickey)) { case SSH_KEYTYPE_RSA: knownkey.keytype = CURLKHTYPE_RSA; break; @@ -429,12 +428,12 @@ static int myssh_is_known(struct Curl_easy *data) default: rc = SSH_ERROR; goto cleanup; + } + knownkeyp = &knownkey; } - knownkeyp = &knownkey; } - } - switch(vstate) { + switch(vstate) { case SSH_KNOWN_HOSTS_OK: keymatch = CURLKHMATCH_OK; break; @@ -444,14 +443,14 @@ static int myssh_is_known(struct Curl_easy *data) case SSH_KNOWN_HOSTS_ERROR: keymatch = CURLKHMATCH_MISSING; break; - default: + default: keymatch = CURLKHMATCH_MISMATCH; break; - } + } #else - vstate = ssh_is_server_known(sshc->ssh_session); - switch(vstate) { + vstate = ssh_is_server_known(sshc->ssh_session); + switch(vstate) { case SSH_SERVER_KNOWN_OK: keymatch = CURLKHMATCH_OK; break; @@ -459,21 +458,21 @@ static int myssh_is_known(struct Curl_easy *data) case SSH_SERVER_NOT_KNOWN: keymatch = CURLKHMATCH_MISSING; break; - default: + default: keymatch = CURLKHMATCH_MISMATCH; break; - } + } #endif - if(func) { /* use callback to determine action */ - rc = ssh_pki_export_pubkey_base64(pubkey, &found_base64); - if(rc != SSH_OK) - goto cleanup; + if(func) { /* use callback to determine action */ + rc = ssh_pki_export_pubkey_base64(pubkey, &found_base64); + if(rc != SSH_OK) + goto cleanup; - foundkey.key = found_base64; - foundkey.len = strlen(found_base64); + foundkey.key = found_base64; + foundkey.len = strlen(found_base64); - switch(ssh_key_type(pubkey)) { + switch(ssh_key_type(pubkey)) { case SSH_KEYTYPE_RSA: foundkey.keytype = CURLKHTYPE_RSA; break; @@ -499,15 +498,15 @@ static int myssh_is_known(struct Curl_easy *data) default: rc = SSH_ERROR; goto cleanup; - } + } - Curl_set_in_callback(data, true); - rc = func(data, knownkeyp, /* from the knownhosts file */ - &foundkey, /* from the remote host */ - keymatch, data->set.ssh_keyfunc_userp); - Curl_set_in_callback(data, false); + Curl_set_in_callback(data, true); + rc = func(data, knownkeyp, /* from the knownhosts file */ + &foundkey, /* from the remote host */ + keymatch, data->set.ssh_keyfunc_userp); + Curl_set_in_callback(data, false); - switch(rc) { + switch(rc) { case CURLKHSTAT_FINE_ADD_TO_FILE: #if LIBSSH_VERSION_INT >= SSH_VERSION_INT(0,8,0) rc = ssh_session_update_known_hosts(sshc->ssh_session); @@ -523,12 +522,13 @@ static int myssh_is_known(struct Curl_easy *data) default: /* REJECT/DEFER */ rc = SSH_ERROR; goto cleanup; + } } - } - else { - if(keymatch != CURLKHMATCH_OK) { - rc = SSH_ERROR; - goto cleanup; + else { + if(keymatch != CURLKHMATCH_OK) { + rc = SSH_ERROR; + goto cleanup; + } } } rc = SSH_OK; @@ -661,7 +661,7 @@ int myssh_auth_interactive(struct connectdata *conn) /* * ssh_statemach_act() runs the SSH state machine as far as it can without - * blocking and without reaching the end. The data the pointer 'block' points + * blocking and without reaching the end. The data the pointer 'block' points * to will be set to TRUE if the libssh function returns SSH_AGAIN * meaning it wants to be called again when the socket is ready */ @@ -675,7 +675,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) int rc = SSH_NO_ERROR, err; int seekerr = CURL_SEEKFUNC_OK; const char *err_msg; - *block = 0; /* we're not blocking by default */ + *block = 0; /* we are not blocking by default */ do { @@ -740,7 +740,8 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) break; } - sshc->auth_methods = ssh_userauth_list(sshc->ssh_session, NULL); + sshc->auth_methods = + (unsigned int)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 ? @@ -1306,7 +1307,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) failf(data, "Could not seek stream"); return CURLE_FTP_COULDNT_USE_REST; } - /* seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */ + /* seekerr == CURL_SEEKFUNC_CANTSEEK (cannot seek to offset) */ do { char scratch[4*1024]; size_t readthisamountnow = @@ -1349,12 +1350,12 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) Curl_pgrsSetUploadSize(data, data->state.infilesize); } /* upload data */ - Curl_xfer_setup(data, -1, -1, FALSE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SEND, -1, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->sockfd = conn->writesockfd; - /* store this original bitmask setup to use later on if we can't + /* store this original bitmask setup to use later on if we cannot figure out a "real" bitmask */ sshc->orig_waitfor = data->req.keepon; @@ -1363,7 +1364,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) with both accordingly */ data->state.select_bits = CURL_CSELECT_OUT; - /* since we don't really wait for anything at this point, we want the + /* since we do not really wait for anything at this point, we want the state machine to move on as soon as possible so we set a very short timeout here */ Curl_expire(data, 0, EXPIRE_RUN_NOW); @@ -1402,7 +1403,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) ++sshc->slash_pos; if(rc < 0) { /* - * Abort if failure wasn't that the dir already exists or the + * Abort if failure was not that the dir already exists or the * permission was denied (creation might succeed further down the * path) - retry on unspecific FAILURE also */ @@ -1575,7 +1576,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) sshc->sftp_dir = NULL; /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); state(data, SSH_STOP); break; @@ -1609,9 +1610,9 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) !(attrs->flags & SSH_FILEXFER_ATTR_SIZE) || (attrs->size == 0)) { /* - * sftp_fstat didn't return an error, so maybe the server - * just doesn't support stat() - * OR the server doesn't return a file size with a stat() + * sftp_fstat did not return an error, so maybe the server + * just does not support stat() + * OR the server does not return a file size with a stat() * OR file size is 0 */ data->req.size = -1; @@ -1684,7 +1685,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) /* We can resume if we can seek to the resume position */ if(data->state.resume_from) { if(data->state.resume_from < 0) { - /* We're supposed to download the last abs(from) bytes */ + /* We are supposed to download the last abs(from) bytes */ if((curl_off_t)size < -data->state.resume_from) { failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T ") was beyond file size (%" @@ -1720,12 +1721,12 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) /* Setup the actual download */ if(data->req.size == 0) { /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); infof(data, "File already completely downloaded"); state(data, SSH_STOP); break; } - Curl_xfer_setup(data, FIRSTSOCKET, data->req.size, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, data->req.size, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->writesockfd = conn->sockfd; @@ -1849,12 +1850,12 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) } /* upload data */ - Curl_xfer_setup(data, -1, data->req.size, FALSE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SEND, -1, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->sockfd = conn->writesockfd; - /* store this original bitmask setup to use later on if we can't + /* store this original bitmask setup to use later on if we cannot figure out a "real" bitmask */ sshc->orig_waitfor = data->req.keepon; @@ -1893,7 +1894,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) /* download data */ bytecount = ssh_scp_request_get_size(sshc->scp_session); data->req.maxdownload = (curl_off_t) bytecount; - Curl_xfer_setup(data, FIRSTSOCKET, bytecount, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, bytecount, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->writesockfd = conn->sockfd; @@ -1944,7 +1945,7 @@ static CURLcode myssh_statemach_act(struct Curl_easy *data, bool *block) FALLTHROUGH(); case SSH_SESSION_DISCONNECT: - /* during weird times when we've been prematurely aborted, the channel + /* during weird times when we have been prematurely aborted, the channel is still alive when we reach this state and we MUST kill the channel properly first */ if(sshc->scp_session) { @@ -2061,7 +2062,7 @@ static void myssh_block2waitfor(struct connectdata *conn, bool block) { struct ssh_conn *sshc = &conn->proto.sshc; - /* If it didn't block, or nothing was returned by ssh_get_poll_flags + /* If it did not block, or nothing was returned by ssh_get_poll_flags * have the original set */ conn->waitfor = sshc->orig_waitfor; @@ -2356,7 +2357,7 @@ static CURLcode scp_disconnect(struct Curl_easy *data, (void) dead_connection; if(ssh->ssh_session) { - /* only if there's a session still around to use! */ + /* only if there is a session still around to use! */ state(data, SSH_SESSION_DISCONNECT); @@ -2521,7 +2522,7 @@ static CURLcode sftp_disconnect(struct Curl_easy *data, DEBUGF(infof(data, "SSH DISCONNECT starts now")); if(conn->proto.sshc.ssh_session) { - /* only if there's a session still around to use! */ + /* only if there is a session still around to use! */ state(data, SSH_SFTP_SHUTDOWN); result = myssh_block_statemach(data, TRUE); } @@ -2611,7 +2612,7 @@ static ssize_t sftp_recv(struct Curl_easy *data, int sockindex, nread = sftp_async_read(conn->proto.sshc.sftp_file, mem, (uint32_t)len, - conn->proto.sshc.sftp_file_index); + (uint32_t)conn->proto.sshc.sftp_file_index); myssh_block2waitfor(conn, (nread == SSH_AGAIN)?TRUE:FALSE); @@ -2715,7 +2716,7 @@ static void sftp_quote(struct Curl_easy *data) } /* - * SFTP is a binary protocol, so we don't send text commands + * SFTP is a binary protocol, so we do not send text commands * to the server. Instead, we scan for commands used by * OpenSSH's sftp program and call the appropriate libssh * functions. diff --git a/lib/vssh/libssh2.c b/lib/vssh/libssh2.c index 3cfbe126c..1b566d1ab 100644 --- a/lib/vssh/libssh2.c +++ b/lib/vssh/libssh2.c @@ -139,6 +139,7 @@ const struct Curl_handler Curl_handler_scp = { ssh_getsock, /* perform_getsock */ scp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ssh_attach, /* attach */ PORT_SSH, /* defport */ @@ -168,6 +169,7 @@ const struct Curl_handler Curl_handler_sftp = { ssh_getsock, /* perform_getsock */ sftp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ssh_attach, /* attach */ PORT_SSH, /* defport */ @@ -201,7 +203,8 @@ kbd_callback(const char *name, int name_len, const char *instruction, if(num_prompts == 1) { struct connectdata *conn = data->conn; responses[0].text = strdup(conn->passwd); - responses[0].length = curlx_uztoui(strlen(conn->passwd)); + responses[0].length = + responses[0].text == NULL ? 0 : curlx_uztoui(strlen(conn->passwd)); } (void)prompts; } /* kbd_callback */ @@ -402,8 +405,8 @@ static int sshkeycallback(struct Curl_easy *easy, #endif /* - * Earlier libssh2 versions didn't have the ability to seek to 64bit positions - * with 32bit size_t. + * Earlier libssh2 versions did not have the ability to seek to 64-bit + * positions with 32-bit size_t. */ #ifdef HAVE_LIBSSH2_SFTP_SEEK64 #define SFTP_SEEK(x,y) libssh2_sftp_seek64(x, (libssh2_uint64_t)y) @@ -412,27 +415,27 @@ static int sshkeycallback(struct Curl_easy *easy, #endif /* - * Earlier libssh2 versions didn't do SCP properly beyond 32bit sizes on 32bit - * architectures so we check of the necessary function is present. + * Earlier libssh2 versions did not do SCP properly beyond 32-bit sizes on + * 32-bit architectures so we check of the necessary function is present. */ #ifndef HAVE_LIBSSH2_SCP_SEND64 #define SCP_SEND(a,b,c,d) libssh2_scp_send_ex(a, b, (int)(c), (size_t)d, 0, 0) #else #define SCP_SEND(a,b,c,d) libssh2_scp_send64(a, b, (int)(c), \ - (libssh2_uint64_t)d, 0, 0) + (libssh2_int64_t)d, 0, 0) #endif /* - * libssh2 1.2.8 fixed the problem with 32bit ints used for sockets on win64. + * libssh2 1.2.8 fixed the problem with 32-bit ints used for sockets on win64. */ #ifdef HAVE_LIBSSH2_SESSION_HANDSHAKE #define session_startup(x,y) libssh2_session_handshake(x, y) #else #define session_startup(x,y) libssh2_session_startup(x, (int)y) #endif -static int convert_ssh2_keytype(int sshkeytype) +static enum curl_khtype convert_ssh2_keytype(int sshkeytype) { - int keytype = CURLKHTYPE_UNKNOWN; + enum curl_khtype keytype = CURLKHTYPE_UNKNOWN; switch(sshkeytype) { case LIBSSH2_HOSTKEY_TYPE_RSA: keytype = CURLKHTYPE_RSA; @@ -473,7 +476,7 @@ static CURLcode ssh_knownhost(struct Curl_easy *data) #ifdef HAVE_LIBSSH2_KNOWNHOST_API if(data->set.str[STRING_SSH_KNOWNHOSTS]) { - /* we're asked to verify the host against a file */ + /* we are asked to verify the host against a file */ struct connectdata *conn = data->conn; struct ssh_conn *sshc = &conn->proto.sshc; struct libssh2_knownhost *host = NULL; @@ -484,8 +487,8 @@ static CURLcode ssh_knownhost(struct Curl_easy *data) if(remotekey) { /* - * A subject to figure out is what host name we need to pass in here. - * What host name does OpenSSH store in its file if an IDN name is + * A subject to figure out is what hostname we need to pass in here. + * What hostname does OpenSSH store in its file if an IDN name is * used? */ enum curl_khmatch keymatch; @@ -523,7 +526,7 @@ static CURLcode ssh_knownhost(struct Curl_easy *data) break; #endif default: - infof(data, "unsupported key type, can't check knownhosts"); + infof(data, "unsupported key type, cannot check knownhosts"); keybit = 0; break; } @@ -597,7 +600,7 @@ static CURLcode ssh_knownhost(struct Curl_easy *data) result = sshc->actualcode = CURLE_PEER_FAILED_VERIFICATION; break; case CURLKHSTAT_FINE_REPLACE: - /* remove old host+key that doesn't match */ + /* remove old host+key that does not match */ if(host) libssh2_knownhost_del(sshc->kh, host); FALLTHROUGH(); @@ -605,7 +608,7 @@ static CURLcode ssh_knownhost(struct Curl_easy *data) case CURLKHSTAT_FINE_ADD_TO_FILE: /* proceed */ if(keycheck != LIBSSH2_KNOWNHOST_CHECK_MATCH) { - /* the found host+key didn't match but has been told to be fine + /* the found host+key did not match but has been told to be fine anyway so we add it in memory */ int addrc = libssh2_knownhost_add(sshc->kh, conn->host.name, NULL, @@ -659,7 +662,7 @@ static CURLcode ssh_check_fingerprint(struct Curl_easy *data) size_t b64_pos = 0; #ifdef LIBSSH2_HOSTKEY_HASH_SHA256 - /* The fingerprint points to static storage (!), don't free() it. */ + /* The fingerprint points to static storage (!), do not free() it. */ fingerprint = libssh2_hostkey_hash(sshc->ssh_session, LIBSSH2_HOSTKEY_HASH_SHA256); #else @@ -739,7 +742,7 @@ static CURLcode ssh_check_fingerprint(struct Curl_easy *data) LIBSSH2_HOSTKEY_HASH_MD5); if(fingerprint) { - /* The fingerprint points to static storage (!), don't free() it. */ + /* The fingerprint points to static storage (!), do not free() it. */ int i; for(i = 0; i < 16; i++) { msnprintf(&md5buffer[i*2], 3, "%02x", (unsigned char) fingerprint[i]); @@ -777,10 +780,10 @@ static CURLcode ssh_check_fingerprint(struct Curl_easy *data) const char *remotekey = libssh2_session_hostkey(sshc->ssh_session, &keylen, &sshkeytype); if(remotekey) { - int keytype = convert_ssh2_keytype(sshkeytype); + enum curl_khtype keytype = convert_ssh2_keytype(sshkeytype); Curl_set_in_callback(data, true); rc = data->set.ssh_hostkeyfunc(data->set.ssh_hostkeyfunc_userp, - keytype, remotekey, keylen); + (int)keytype, remotekey, keylen); Curl_set_in_callback(data, false); if(rc!= CURLKHMATCH_OK) { state(data, SSH_SESSION_FREE); @@ -957,7 +960,7 @@ static CURLcode ssh_force_knownhost_key_type(struct Curl_easy *data) /* * ssh_statemach_act() runs the SSH state machine as far as it can without - * blocking and without reaching the end. The data the pointer 'block' points + * blocking and without reaching the end. The data the pointer 'block' points * to will be set to TRUE if the libssh2 function returns LIBSSH2_ERROR_EAGAIN * meaning it wants to be called again when the socket is ready */ @@ -974,7 +977,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) unsigned long sftperr; int seekerr = CURL_SEEKFUNC_OK; size_t readdir_len; - *block = 0; /* we're not blocking by default */ + *block = 0; /* we are not blocking by default */ do { switch(sshc->state) { @@ -1034,7 +1037,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) * must never change it later. Thus, always specify the correct username * here, even though the libssh2 docs kind of indicate that it should be * possible to get a 'generic' list (not user-specific) of authentication - * methods, presumably with a blank username. That won't work in my + * methods, presumably with a blank username. That will not work in my * experience. * So always specify it here. */ @@ -1083,6 +1086,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) /* To ponder about: should really the lib be messing about with the HOME environment variable etc? */ char *home = curl_getenv("HOME"); + struct_stat sbuf; /* If no private key file is specified, try some common paths. */ if(home) { @@ -1090,12 +1094,12 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) sshc->rsa = aprintf("%s/.ssh/id_rsa", home); if(!sshc->rsa) out_of_memory = TRUE; - else if(access(sshc->rsa, R_OK) != 0) { + else if(stat(sshc->rsa, &sbuf)) { Curl_safefree(sshc->rsa); sshc->rsa = aprintf("%s/.ssh/id_dsa", home); if(!sshc->rsa) out_of_memory = TRUE; - else if(access(sshc->rsa, R_OK) != 0) { + else if(stat(sshc->rsa, &sbuf)) { Curl_safefree(sshc->rsa); } } @@ -1104,10 +1108,10 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) if(!out_of_memory && !sshc->rsa) { /* Nothing found; try the current dir. */ sshc->rsa = strdup("id_rsa"); - if(sshc->rsa && access(sshc->rsa, R_OK) != 0) { + if(sshc->rsa && stat(sshc->rsa, &sbuf)) { Curl_safefree(sshc->rsa); sshc->rsa = strdup("id_dsa"); - if(sshc->rsa && access(sshc->rsa, R_OK) != 0) { + if(sshc->rsa && stat(sshc->rsa, &sbuf)) { Curl_safefree(sshc->rsa); /* Out of guesses. Set to the empty string to avoid * surprising info messages. */ @@ -1436,7 +1440,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) if(sftperr) result = sftp_libssh2_error_to_CURLE(sftperr); else - /* in this case, the error wasn't in the SFTP level but for example + /* in this case, the error was not in the SFTP level but for example a time-out or similar */ result = CURLE_SSH; sshc->actualcode = result; @@ -1567,7 +1571,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) } /* - * SFTP is a binary protocol, so we don't send text commands + * SFTP is a binary protocol, so we do not send text commands * to the server. Instead, we scan for commands used by * OpenSSH's sftp program and call the appropriate libssh2 * functions. @@ -1705,7 +1709,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) if(!strncasecompare(cmd, "chmod", 5)) { /* Since chown and chgrp only set owner OR group but libssh2 wants to * set them both at once, we need to obtain the current ownership - * first. This takes an extra protocol round trip. + * first. This takes an extra protocol round trip. */ rc = libssh2_sftp_stat_ex(sshc->sftp_session, sshc->quote_path2, curlx_uztoui(strlen(sshc->quote_path2)), @@ -1782,7 +1786,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) } #if SIZEOF_TIME_T > SIZEOF_LONG if(date > 0xffffffff) { - /* if 'long' can't old >32bit, this date cannot be sent */ + /* if 'long' cannot old >32bit, this date cannot be sent */ failf(data, "date overflow"); fail = TRUE; } @@ -1856,7 +1860,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) case SSH_SFTP_QUOTE_MKDIR: rc = libssh2_sftp_mkdir_ex(sshc->sftp_session, sshc->quote_path1, curlx_uztoui(strlen(sshc->quote_path1)), - data->set.new_directory_perms); + (long)data->set.new_directory_perms); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } @@ -2022,7 +2026,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) break; } if(rc == 0) { - data->info.filetime = attrs.mtime; + data->info.filetime = (time_t)attrs.mtime; } state(data, SSH_SFTP_TRANS_INIT); @@ -2086,7 +2090,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) sshc->sftp_handle = libssh2_sftp_open_ex(sshc->sftp_session, sshp->path, curlx_uztoui(strlen(sshp->path)), - flags, data->set.new_file_perms, + flags, (long)data->set.new_file_perms, LIBSSH2_SFTP_OPENFILE); if(!sshc->sftp_handle) { @@ -2156,7 +2160,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) failf(data, "Could not seek stream"); return CURLE_FTP_COULDNT_USE_REST; } - /* seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */ + /* seekerr == CURL_SEEKFUNC_CANTSEEK (cannot seek to offset) */ do { char scratch[4*1024]; size_t readthisamountnow = @@ -2195,7 +2199,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) Curl_pgrsSetUploadSize(data, data->state.infilesize); } /* upload data */ - Curl_xfer_setup(data, -1, -1, FALSE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SEND, -1, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->sockfd = conn->writesockfd; @@ -2205,7 +2209,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) sshc->actualcode = result; } else { - /* store this original bitmask setup to use later on if we can't + /* store this original bitmask setup to use later on if we cannot figure out a "real" bitmask */ sshc->orig_waitfor = data->req.keepon; @@ -2214,7 +2218,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) with both accordingly */ data->state.select_bits = CURL_CSELECT_OUT; - /* since we don't really wait for anything at this point, we want the + /* since we do not really wait for anything at this point, we want the state machine to move on as soon as possible so we set a very short timeout here */ Curl_expire(data, 0, EXPIRE_RUN_NOW); @@ -2250,7 +2254,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) /* 'mode' - parameter is preliminary - default to 0644 */ rc = libssh2_sftp_mkdir_ex(sshc->sftp_session, sshp->path, curlx_uztoui(strlen(sshp->path)), - data->set.new_directory_perms); + (long)data->set.new_directory_perms); if(rc == LIBSSH2_ERROR_EAGAIN) { break; } @@ -2258,7 +2262,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) ++sshc->slash_pos; if(rc < 0) { /* - * Abort if failure wasn't that the dir already exists or the + * Abort if failure was not that the dir already exists or the * permission was denied (creation might succeed further down the * path) - retry on unspecific FAILURE also */ @@ -2398,7 +2402,8 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) rc = libssh2_sftp_symlink_ex(sshc->sftp_session, Curl_dyn_ptr(&sshp->readdir_link), - (int)Curl_dyn_len(&sshp->readdir_link), + (unsigned int) + Curl_dyn_len(&sshp->readdir_link), sshp->readdir_filename, PATH_MAX, LIBSSH2_SFTP_READLINK); if(rc == LIBSSH2_ERROR_EAGAIN) { @@ -2448,7 +2453,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) Curl_safefree(sshp->readdir_longentry); /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); state(data, SSH_STOP); break; @@ -2459,7 +2464,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) sshc->sftp_handle = libssh2_sftp_open_ex(sshc->sftp_session, sshp->path, curlx_uztoui(strlen(sshp->path)), - LIBSSH2_FXF_READ, data->set.new_file_perms, + LIBSSH2_FXF_READ, (long)data->set.new_file_perms, LIBSSH2_SFTP_OPENFILE); if(!sshc->sftp_handle) { if(libssh2_session_last_errno(sshc->ssh_session) == @@ -2492,9 +2497,9 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) !(attrs.flags & LIBSSH2_SFTP_ATTR_SIZE) || (attrs.filesize == 0)) { /* - * libssh2_sftp_open() didn't return an error, so maybe the server - * just doesn't support stat() - * OR the server doesn't return a file size with a stat() + * libssh2_sftp_open() did not return an error, so maybe the server + * just does not support stat() + * OR the server does not return a file size with a stat() * OR file size is 0 */ data->req.size = -1; @@ -2559,7 +2564,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) /* We can resume if we can seek to the resume position */ if(data->state.resume_from) { if(data->state.resume_from < 0) { - /* We're supposed to download the last abs(from) bytes */ + /* We are supposed to download the last abs(from) bytes */ if((curl_off_t)attrs.filesize < -data->state.resume_from) { failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T ") was beyond file size (%" @@ -2590,12 +2595,12 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) /* Setup the actual download */ if(data->req.size == 0) { /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); infof(data, "File already completely downloaded"); state(data, SSH_STOP); break; } - Curl_xfer_setup(data, FIRSTSOCKET, data->req.size, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, data->req.size, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->writesockfd = conn->sockfd; @@ -2709,7 +2714,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) case SSH_SCP_UPLOAD_INIT: /* * libssh2 requires that the destination path is a full path that - * includes the destination file and name OR ends in a "/" . If this is + * includes the destination file and name OR ends in a "/" . If this is * not done the destination file will be named the same name as the last * directory in the path. */ @@ -2741,7 +2746,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) /* upload data */ data->req.size = data->state.infilesize; Curl_pgrsSetUploadSize(data, data->state.infilesize); - Curl_xfer_setup(data, -1, -1, FALSE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SEND, -1, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->sockfd = conn->writesockfd; @@ -2751,7 +2756,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) sshc->actualcode = result; } else { - /* store this original bitmask setup to use later on if we can't + /* store this original bitmask setup to use later on if we cannot figure out a "real" bitmask */ sshc->orig_waitfor = data->req.keepon; @@ -2812,7 +2817,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) /* download data */ bytecount = (curl_off_t)sb.st_size; data->req.maxdownload = (curl_off_t)sb.st_size; - Curl_xfer_setup(data, FIRSTSOCKET, bytecount, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, bytecount, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->writesockfd = conn->sockfd; @@ -2911,7 +2916,7 @@ static CURLcode ssh_statemach_act(struct Curl_easy *data, bool *block) break; case SSH_SESSION_DISCONNECT: - /* during weird times when we've been prematurely aborted, the channel + /* during weird times when we have been prematurely aborted, the channel is still alive when we reach this state and we MUST kill the channel properly first */ if(sshc->ssh_channel) { @@ -3067,7 +3072,7 @@ static int ssh_getsock(struct Curl_easy *data, * When one of the libssh2 functions has returned LIBSSH2_ERROR_EAGAIN this * function is used to figure out in what direction and stores this info so * that the multi interface can take advantage of it. Make sure to call this - * function in all cases so that when it _doesn't_ return EAGAIN we can + * function in all cases so that when it _does not_ return EAGAIN we can * restore the default wait bits. */ static void ssh_block2waitfor(struct Curl_easy *data, bool block) @@ -3084,7 +3089,7 @@ static void ssh_block2waitfor(struct Curl_easy *data, bool block) } } if(!dir) - /* It didn't block or libssh2 didn't reveal in which direction, put back + /* It did not block or libssh2 did not reveal in which direction, put back the original set */ conn->waitfor = sshc->orig_waitfor; } @@ -3100,7 +3105,7 @@ static CURLcode ssh_multi_statemach(struct Curl_easy *data, bool *done) do { result = ssh_statemach_act(data, &block); *done = (sshc->state == SSH_STOP) ? TRUE : FALSE; - /* if there's no error, it isn't done and it didn't EWOULDBLOCK, then + /* if there is no error, it is not done and it did not EWOULDBLOCK, then try again */ } while(!result && !*done && !block); ssh_block2waitfor(data, block); @@ -3282,15 +3287,13 @@ static CURLcode ssh_connect(struct Curl_easy *data, bool *done) 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); + (long)(data->set.server_response_timeout / 1000)); } #endif -#endif #ifndef CURL_DISABLE_PROXY if(conn->http_proxy.proxytype == CURLPROXY_HTTPS) { @@ -3489,7 +3492,7 @@ static CURLcode scp_disconnect(struct Curl_easy *data, (void) dead_connection; if(sshc->ssh_session) { - /* only if there's a session still around to use! */ + /* only if there is a session still around to use! */ state(data, SSH_SESSION_DISCONNECT); result = ssh_block_statemach(data, conn, TRUE); } @@ -3645,7 +3648,7 @@ static CURLcode sftp_disconnect(struct Curl_easy *data, DEBUGF(infof(data, "SSH DISCONNECT starts now")); if(sshc->ssh_session) { - /* only if there's a session still around to use! */ + /* only if there is a session still around to use! */ state(data, SSH_SFTP_SHUTDOWN); result = ssh_block_statemach(data, conn, TRUE); } diff --git a/lib/vssh/ssh.h b/lib/vssh/ssh.h index ca0533aa5..64ef33298 100644 --- a/lib/vssh/ssh.h +++ b/lib/vssh/ssh.h @@ -163,7 +163,7 @@ struct ssh_conn { unsigned kbd_state; /* 0 or 1 */ ssh_key privkey; ssh_key pubkey; - int auth_methods; + unsigned int auth_methods; ssh_session ssh_session; ssh_scp scp_session; sftp_session sftp_session; @@ -243,10 +243,10 @@ struct ssh_conn { #endif #ifdef HAVE_LIBSSH2_VERSION -/* get it run-time if possible */ +/* get it runtime if possible */ #define CURL_LIBSSH2_VERSION libssh2_version(0) #else -/* use build-time if run-time not possible */ +/* use build-time if runtime not possible */ #define CURL_LIBSSH2_VERSION LIBSSH2_VERSION #endif diff --git a/lib/vssh/wolfssh.c b/lib/vssh/wolfssh.c index 11275910a..1ed24fe4e 100644 --- a/lib/vssh/wolfssh.c +++ b/lib/vssh/wolfssh.c @@ -94,6 +94,7 @@ const struct Curl_handler Curl_handler_scp = { wssh_getsock, /* perform_getsock */ wscp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_SSH, /* defport */ @@ -123,6 +124,7 @@ const struct Curl_handler Curl_handler_sftp = { wssh_getsock, /* perform_getsock */ wsftp_disconnect, /* disconnect */ ZERO_NULL, /* write_resp */ + ZERO_NULL, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_SSH, /* defport */ @@ -398,7 +400,7 @@ static CURLcode wssh_connect(struct Curl_easy *data, bool *done) rc = wolfSSH_SetUsername(sshc->ssh_session, conn->user); if(rc != WS_SUCCESS) { - failf(data, "wolfSSH failed to set user name"); + failf(data, "wolfSSH failed to set username"); goto error; } @@ -431,7 +433,7 @@ static CURLcode wssh_connect(struct Curl_easy *data, bool *done) /* * wssh_statemach_act() runs the SSH state machine as far as it can without - * blocking and without reaching the end. The data the pointer 'block' points + * blocking and without reaching the end. The data the pointer 'block' points * to will be set to TRUE if the wolfssh function returns EAGAIN meaning it * wants to be called again when the socket is ready */ @@ -444,7 +446,7 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block) struct SSHPROTO *sftp_scp = data->req.p.ssh; WS_SFTPNAME *name; int rc = 0; - *block = FALSE; /* we're not blocking by default */ + *block = FALSE; /* we are not blocking by default */ do { switch(sshc->state) { @@ -639,7 +641,7 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block) failf(data, "Could not seek stream"); return CURLE_FTP_COULDNT_USE_REST; } - /* seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */ + /* seekerr == CURL_SEEKFUNC_CANTSEEK (cannot seek to offset) */ do { char scratch[4*1024]; size_t readthisamountnow = @@ -678,7 +680,7 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block) Curl_pgrsSetUploadSize(data, data->state.infilesize); } /* upload data */ - Curl_xfer_setup(data, -1, -1, FALSE, FIRSTSOCKET); + Curl_xfer_setup1(data, CURL_XFER_SEND, -1, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->sockfd = conn->writesockfd; @@ -688,7 +690,7 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block) sshc->actualcode = result; } else { - /* store this original bitmask setup to use later on if we can't + /* store this original bitmask setup to use later on if we cannot figure out a "real" bitmask */ sshc->orig_waitfor = data->req.keepon; @@ -697,7 +699,7 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block) with both accordingly */ data->state.select_bits = CURL_CSELECT_OUT; - /* since we don't really wait for anything at this point, we want the + /* since we do not really wait for anything at this point, we want the state machine to move on as soon as possible so we set a very short timeout here */ Curl_expire(data, 0, EXPIRE_RUN_NOW); @@ -778,12 +780,12 @@ static CURLcode wssh_statemach_act(struct Curl_easy *data, bool *block) /* Setup the actual download */ if(data->req.size == 0) { /* no data to transfer */ - Curl_xfer_setup(data, -1, -1, FALSE, -1); + Curl_xfer_setup_nop(data); infof(data, "File already completely downloaded"); state(data, SSH_STOP); break; } - Curl_xfer_setup(data, FIRSTSOCKET, data->req.size, FALSE, -1); + Curl_xfer_setup1(data, CURL_XFER_RECV, data->req.size, FALSE); /* not set by Curl_xfer_setup to preserve keepon bits */ conn->writesockfd = conn->sockfd; @@ -906,7 +908,7 @@ static CURLcode wssh_multi_statemach(struct Curl_easy *data, bool *done) do { result = wssh_statemach_act(data, &block); *done = (sshc->state == SSH_STOP) ? TRUE : FALSE; - /* if there's no error, it isn't done and it didn't EWOULDBLOCK, then + /* if there is no error, it is not done and it did not EWOULDBLOCK, then try again */ if(*done) { DEBUGF(infof(data, "wssh_statemach_act says DONE")); @@ -1119,7 +1121,7 @@ static CURLcode wsftp_disconnect(struct Curl_easy *data, DEBUGF(infof(data, "SSH DISCONNECT starts now")); if(conn->proto.sshc.ssh_session) { - /* only if there's a session still around to use! */ + /* only if there is a session still around to use! */ state(data, SSH_SFTP_SHUTDOWN); result = wssh_block_statemach(data, TRUE); } diff --git a/lib/vtls/bearssl.c b/lib/vtls/bearssl.c index 16f9c4e92..47c5528c2 100644 --- a/lib/vtls/bearssl.c +++ b/lib/vtls/bearssl.c @@ -28,6 +28,7 @@ #include #include "bearssl.h" +#include "cipher_suite.h" #include "urldata.h" #include "sendf.h" #include "inet_pton.h" @@ -37,7 +38,6 @@ #include "select.h" #include "multiif.h" #include "curl_printf.h" -#include "strcase.h" /* The last #include files should be: */ #include "curl_memory.h" @@ -63,6 +63,7 @@ struct bearssl_ssl_backend_data { bool active; /* size of pending write, yet to be flushed */ size_t pending_write; + BIT(sent_shutdown); }; struct cafile_parser { @@ -120,9 +121,9 @@ static CURLcode load_cafile(struct cafile_source *source, br_x509_pkey *pkey; FILE *fp = 0; unsigned char buf[BUFSIZ]; - const unsigned char *p; + const unsigned char *p = NULL; const char *name; - size_t n, i, pushed; + size_t n = 0, i, pushed; DEBUGASSERT(source->type == CAFILE_SOURCE_PATH || source->type == CAFILE_SOURCE_BLOB); @@ -327,7 +328,7 @@ static unsigned x509_end_chain(const br_x509_class **ctx) struct x509_context *x509 = (struct x509_context *)ctx; if(!x509->verifypeer) { - return br_x509_decoder_last_error(&x509->decoder); + return (unsigned)br_x509_decoder_last_error(&x509->decoder); } return x509->minimal.vtable->end_chain(&x509->minimal.vtable); @@ -360,219 +361,121 @@ static const br_x509_class x509_vtable = { x509_get_pkey }; -struct st_cipher { - const char *name; /* Cipher suite IANA name. It starts with "TLS_" prefix */ - const char *alias_name; /* Alias name is the same as OpenSSL cipher name */ - uint16_t num; /* BearSSL cipher suite */ -}; - -/* Macro to initialize st_cipher data structure */ -#define CIPHER_DEF(num, alias) { #num, alias, BR_##num } - -static const struct st_cipher ciphertable[] = { +static const uint16_t ciphertable[] = { /* RFC 2246 TLS 1.0 */ - CIPHER_DEF(TLS_RSA_WITH_3DES_EDE_CBC_SHA, /* 0x000A */ - "DES-CBC3-SHA"), + BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA, /* 0x000A */ /* RFC 3268 TLS 1.0 AES */ - CIPHER_DEF(TLS_RSA_WITH_AES_128_CBC_SHA, /* 0x002F */ - "AES128-SHA"), - CIPHER_DEF(TLS_RSA_WITH_AES_256_CBC_SHA, /* 0x0035 */ - "AES256-SHA"), + BR_TLS_RSA_WITH_AES_128_CBC_SHA, /* 0x002F */ + BR_TLS_RSA_WITH_AES_256_CBC_SHA, /* 0x0035 */ /* RFC 5246 TLS 1.2 */ - CIPHER_DEF(TLS_RSA_WITH_AES_128_CBC_SHA256, /* 0x003C */ - "AES128-SHA256"), - CIPHER_DEF(TLS_RSA_WITH_AES_256_CBC_SHA256, /* 0x003D */ - "AES256-SHA256"), + BR_TLS_RSA_WITH_AES_128_CBC_SHA256, /* 0x003C */ + BR_TLS_RSA_WITH_AES_256_CBC_SHA256, /* 0x003D */ /* RFC 5288 TLS 1.2 AES GCM */ - CIPHER_DEF(TLS_RSA_WITH_AES_128_GCM_SHA256, /* 0x009C */ - "AES128-GCM-SHA256"), - CIPHER_DEF(TLS_RSA_WITH_AES_256_GCM_SHA384, /* 0x009D */ - "AES256-GCM-SHA384"), + BR_TLS_RSA_WITH_AES_128_GCM_SHA256, /* 0x009C */ + BR_TLS_RSA_WITH_AES_256_GCM_SHA384, /* 0x009D */ /* RFC 4492 TLS 1.0 ECC */ - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, /* 0xC003 */ - "ECDH-ECDSA-DES-CBC3-SHA"), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, /* 0xC004 */ - "ECDH-ECDSA-AES128-SHA"), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, /* 0xC005 */ - "ECDH-ECDSA-AES256-SHA"), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, /* 0xC008 */ - "ECDHE-ECDSA-DES-CBC3-SHA"), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, /* 0xC009 */ - "ECDHE-ECDSA-AES128-SHA"), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, /* 0xC00A */ - "ECDHE-ECDSA-AES256-SHA"), - CIPHER_DEF(TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, /* 0xC00D */ - "ECDH-RSA-DES-CBC3-SHA"), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, /* 0xC00E */ - "ECDH-RSA-AES128-SHA"), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, /* 0xC00F */ - "ECDH-RSA-AES256-SHA"), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, /* 0xC012 */ - "ECDHE-RSA-DES-CBC3-SHA"), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, /* 0xC013 */ - "ECDHE-RSA-AES128-SHA"), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, /* 0xC014 */ - "ECDHE-RSA-AES256-SHA"), + BR_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, /* 0xC003 */ + BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, /* 0xC004 */ + BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, /* 0xC005 */ + BR_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, /* 0xC008 */ + BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, /* 0xC009 */ + BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, /* 0xC00A */ + BR_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, /* 0xC00D */ + BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, /* 0xC00E */ + BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, /* 0xC00F */ + BR_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, /* 0xC012 */ + BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, /* 0xC013 */ + BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, /* 0xC014 */ /* RFC 5289 TLS 1.2 ECC HMAC SHA256/384 */ - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, /* 0xC023 */ - "ECDHE-ECDSA-AES128-SHA256"), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, /* 0xC024 */ - "ECDHE-ECDSA-AES256-SHA384"), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, /* 0xC025 */ - "ECDH-ECDSA-AES128-SHA256"), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, /* 0xC026 */ - "ECDH-ECDSA-AES256-SHA384"), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, /* 0xC027 */ - "ECDHE-RSA-AES128-SHA256"), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, /* 0xC028 */ - "ECDHE-RSA-AES256-SHA384"), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, /* 0xC029 */ - "ECDH-RSA-AES128-SHA256"), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, /* 0xC02A */ - "ECDH-RSA-AES256-SHA384"), + BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, /* 0xC023 */ + BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, /* 0xC024 */ + BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, /* 0xC025 */ + BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, /* 0xC026 */ + BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, /* 0xC027 */ + BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, /* 0xC028 */ + BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, /* 0xC029 */ + BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, /* 0xC02A */ /* RFC 5289 TLS 1.2 GCM */ - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, /* 0xC02B */ - "ECDHE-ECDSA-AES128-GCM-SHA256"), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, /* 0xC02C */ - "ECDHE-ECDSA-AES256-GCM-SHA384"), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, /* 0xC02D */ - "ECDH-ECDSA-AES128-GCM-SHA256"), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, /* 0xC02E */ - "ECDH-ECDSA-AES256-GCM-SHA384"), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, /* 0xC02F */ - "ECDHE-RSA-AES128-GCM-SHA256"), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, /* 0xC030 */ - "ECDHE-RSA-AES256-GCM-SHA384"), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, /* 0xC031 */ - "ECDH-RSA-AES128-GCM-SHA256"), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, /* 0xC032 */ - "ECDH-RSA-AES256-GCM-SHA384"), -#ifdef BR_TLS_RSA_WITH_AES_128_CCM + BR_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, /* 0xC02B */ + BR_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, /* 0xC02C */ + BR_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, /* 0xC02D */ + BR_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, /* 0xC02E */ + BR_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, /* 0xC02F */ + BR_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, /* 0xC030 */ + BR_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, /* 0xC031 */ + BR_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, /* 0xC032 */ +#ifdef BR_TLS_RSA_WITH_AES_128_CCM /* RFC 6655 TLS 1.2 CCM Supported since BearSSL 0.6 */ - CIPHER_DEF(TLS_RSA_WITH_AES_128_CCM, /* 0xC09C */ - "AES128-CCM"), - CIPHER_DEF(TLS_RSA_WITH_AES_256_CCM, /* 0xC09D */ - "AES256-CCM"), - CIPHER_DEF(TLS_RSA_WITH_AES_128_CCM_8, /* 0xC0A0 */ - "AES128-CCM8"), - CIPHER_DEF(TLS_RSA_WITH_AES_256_CCM_8, /* 0xC0A1 */ - "AES256-CCM8"), + BR_TLS_RSA_WITH_AES_128_CCM, /* 0xC09C */ + BR_TLS_RSA_WITH_AES_256_CCM, /* 0xC09D */ + BR_TLS_RSA_WITH_AES_128_CCM_8, /* 0xC0A0 */ + BR_TLS_RSA_WITH_AES_256_CCM_8, /* 0xC0A1 */ /* RFC 7251 TLS 1.2 ECC CCM Supported since BearSSL 0.6 */ - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_128_CCM, /* 0xC0AC */ - "ECDHE-ECDSA-AES128-CCM"), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_256_CCM, /* 0xC0AD */ - "ECDHE-ECDSA-AES256-CCM"), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, /* 0xC0AE */ - "ECDHE-ECDSA-AES128-CCM8"), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, /* 0xC0AF */ - "ECDHE-ECDSA-AES256-CCM8"), + BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM, /* 0xC0AC */ + BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM, /* 0xC0AD */ + BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, /* 0xC0AE */ + BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, /* 0xC0AF */ #endif /* RFC 7905 TLS 1.2 ChaCha20-Poly1305 Supported since BearSSL 0.2 */ - CIPHER_DEF(TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCA8 */ - "ECDHE-RSA-CHACHA20-POLY1305"), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCA9 */ - "ECDHE-ECDSA-CHACHA20-POLY1305"), + BR_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCA8 */ + BR_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCA9 */ }; #define NUM_OF_CIPHERS (sizeof(ciphertable) / sizeof(ciphertable[0])) -#define CIPHER_NAME_BUF_LEN 64 - -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 bearssl_set_selected_ciphers(struct Curl_easy *data, br_ssl_engine_context *ssl_eng, const char *ciphers) { - uint16_t selected_ciphers[NUM_OF_CIPHERS]; - size_t selected_count = 0; - const char *cipher_start = ciphers; - const char *cipher_end; - size_t i, j; - - if(!cipher_start) - return CURLE_SSL_CIPHER; - - while(true) { - const char *cipher; - size_t clen; - - /* Extract the next cipher name from the ciphers string */ - while(is_separator(*cipher_start)) - ++cipher_start; - if(!*cipher_start) - break; - cipher_end = cipher_start; - while(*cipher_end && !is_separator(*cipher_end)) - ++cipher_end; - - clen = cipher_end - cipher_start; - cipher = cipher_start; - - cipher_start = cipher_end; - - /* Lookup the cipher name in the table of available ciphers. If the cipher - name starts with "TLS_" we do the lookup by IANA name. Otherwise, we try - to match cipher name by an (OpenSSL) alias. */ - if(strncasecompare(cipher, "TLS_", 4)) { - for(i = 0; i < NUM_OF_CIPHERS && - (strlen(ciphertable[i].name) == clen) && - !strncasecompare(cipher, ciphertable[i].name, clen); ++i); - } - else { - for(i = 0; i < NUM_OF_CIPHERS && - (strlen(ciphertable[i].alias_name) == clen) && - !strncasecompare(cipher, ciphertable[i].alias_name, clen); ++i); + uint16_t selected[NUM_OF_CIPHERS]; + size_t count = 0, i; + const char *ptr, *end; + + for(ptr = ciphers; ptr[0] != '\0' && count < NUM_OF_CIPHERS; ptr = end) { + uint16_t id = Curl_cipher_suite_walk_str(&ptr, &end); + + /* Check if cipher is supported */ + if(id) { + for(i = 0; i < NUM_OF_CIPHERS && ciphertable[i] != id; i++); + if(i == NUM_OF_CIPHERS) + id = 0; } - if(i == NUM_OF_CIPHERS) { - infof(data, "BearSSL: unknown cipher in list: %.*s", - (int)clen, cipher); + if(!id) { + if(ptr[0] != '\0') + infof(data, "BearSSL: unknown cipher in list: \"%.*s\"", + (int) (end - ptr), ptr); continue; } /* No duplicates allowed */ - for(j = 0; j < selected_count && - selected_ciphers[j] != ciphertable[i].num; j++); - if(j < selected_count) { - infof(data, "BearSSL: duplicate cipher in list: %.*s", - (int)clen, cipher); + for(i = 0; i < count && selected[i] != id; i++); + if(i < count) { + infof(data, "BearSSL: duplicate cipher in list: \"%.*s\"", + (int) (end - ptr), ptr); continue; } - DEBUGASSERT(selected_count < NUM_OF_CIPHERS); - selected_ciphers[selected_count] = ciphertable[i].num; - ++selected_count; + selected[count++] = id; } - if(selected_count == 0) { + if(count == 0) { failf(data, "BearSSL: no supported cipher in list"); return CURLE_SSL_CIPHER; } - br_ssl_engine_set_suites(ssl_eng, selected_ciphers, selected_count); + br_ssl_engine_set_suites(ssl_eng, selected, count); return CURLE_OK; } @@ -681,12 +584,12 @@ static CURLcode bearssl_connect_step1(struct Curl_cfilter *cf, backend->x509.verifyhost = verifyhost; br_ssl_engine_set_x509(&backend->ctx.eng, &backend->x509.vtable); - if(ssl_config->primary.sessionid) { + if(ssl_config->primary.cache_session) { void *session; CURL_TRC_CF(data, cf, "connect_step1, check session cache"); Curl_ssl_sessionid_lock(data); - if(!Curl_ssl_getsessionid(cf, data, &session, NULL)) { + if(!Curl_ssl_getsessionid(cf, data, &connssl->peer, &session, NULL)) { br_ssl_engine_set_session_parameters(&backend->ctx.eng, session); session_set = 1; infof(data, "BearSSL: reusing session ID"); @@ -820,6 +723,8 @@ static CURLcode bearssl_run_until(struct Curl_cfilter *cf, 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) { + if(result == CURLE_AGAIN) + connssl->io_need |= CURL_SSL_IO_NEED_SEND; return result; } br_ssl_engine_sendrec_ack(&backend->ctx.eng, ret); @@ -830,9 +735,11 @@ static CURLcode bearssl_run_until(struct Curl_cfilter *cf, 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; + return CURLE_RECV_ERROR; } if(ret <= 0) { + if(result == CURLE_AGAIN) + connssl->io_need |= CURL_SSL_IO_NEED_RECV; return result; } br_ssl_engine_recvrec_ack(&backend->ctx.eng, ret); @@ -846,6 +753,9 @@ static CURLcode bearssl_connect_step2(struct Curl_cfilter *cf, struct ssl_connect_data *connssl = cf->ctx; struct bearssl_ssl_backend_data *backend = (struct bearssl_ssl_backend_data *)connssl->backend; + br_ssl_session_parameters session; + char cipher_str[64]; + char ver_str[16]; CURLcode ret; DEBUGASSERT(backend); @@ -856,6 +766,7 @@ static CURLcode bearssl_connect_step2(struct Curl_cfilter *cf, 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; @@ -863,16 +774,29 @@ static CURLcode bearssl_connect_step2(struct Curl_cfilter *cf, 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); + if(tver == BR_TLS12) + strcpy(ver_str, "TLSv1.2"); + else if(tver == BR_TLS11) + strcpy(ver_str, "TLSv1.1"); + else if(tver == BR_TLS10) + strcpy(ver_str, "TLSv1.0"); + else { + msnprintf(ver_str, sizeof(ver_str), "TLS 0x%04x", tver); + } + br_ssl_engine_get_session_parameters(&backend->ctx.eng, &session); + Curl_cipher_suite_get_str(session.cipher_suite, cipher_str, + sizeof(cipher_str), true); + infof(data, "BearSSL: %s connection using %s", ver_str, cipher_str); } return ret; } +static void bearssl_session_free(void *sessionid, size_t idsize) +{ + (void)idsize; + free(sessionid); +} + static CURLcode bearssl_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data) { @@ -894,10 +818,7 @@ static CURLcode bearssl_connect_step3(struct Curl_cfilter *cf, proto? strlen(proto) : 0); } - if(ssl_config->primary.sessionid) { - bool incache; - bool added = FALSE; - void *oldsession; + if(ssl_config->primary.cache_session) { br_ssl_session_parameters *session; session = malloc(sizeof(*session)); @@ -905,16 +826,11 @@ static CURLcode bearssl_connect_step3(struct Curl_cfilter *cf, return CURLE_OUT_OF_MEMORY; br_ssl_engine_get_session_parameters(&backend->ctx.eng, session); Curl_ssl_sessionid_lock(data); - incache = !(Curl_ssl_getsessionid(cf, data, &oldsession, NULL)); - if(incache) - Curl_ssl_delsessionid(data, oldsession); - ret = Curl_ssl_addsessionid(cf, data, session, 0, &added); + ret = Curl_ssl_set_sessionid(cf, data, &connssl->peer, session, 0, + bearssl_session_free); Curl_ssl_sessionid_unlock(data); - if(!added) - free(session); - if(ret) { - return CURLE_OUT_OF_MEMORY; - } + if(ret) + return ret; } connssl->connecting_state = ssl_connect_done; @@ -1007,9 +923,7 @@ static CURLcode bearssl_connect_common(struct Curl_cfilter *cf, return ret; } - while(ssl_connect_2 == connssl->connecting_state || - ssl_connect_2_reading == connssl->connecting_state || - ssl_connect_2_writing == connssl->connecting_state) { + while(ssl_connect_2 == connssl->connecting_state) { /* check allowed time left */ timeout_ms = Curl_timeleft(data, NULL, TRUE); @@ -1019,14 +933,13 @@ static CURLcode bearssl_connect_common(struct Curl_cfilter *cf, return CURLE_OPERATION_TIMEDOUT; } - /* if ssl is expecting something, check if it's available. */ - if(ssl_connect_2_reading == connssl->connecting_state || - ssl_connect_2_writing == connssl->connecting_state) { + /* if ssl is expecting something, check if it is available. */ + if(connssl->io_need) { - curl_socket_t writefd = ssl_connect_2_writing == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; - curl_socket_t readfd = ssl_connect_2_reading == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; + curl_socket_t writefd = (connssl->io_need & CURL_SSL_IO_NEED_SEND)? + sockfd:CURL_SOCKET_BAD; + curl_socket_t readfd = (connssl->io_need & CURL_SSL_IO_NEED_RECV)? + sockfd:CURL_SOCKET_BAD; CURL_TRC_CF(data, cf, "connect_common, check socket"); what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd, @@ -1057,11 +970,9 @@ static CURLcode bearssl_connect_common(struct Curl_cfilter *cf, * before step2 has completed while ensuring that a client using select() * or epoll() will always have a valid fdset to wait on. */ + connssl->io_need = CURL_SSL_IO_NEED_NONE; ret = bearssl_connect_step2(cf, data); - if(ret || (nonblocking && - (ssl_connect_2 == connssl->connecting_state || - ssl_connect_2_reading == connssl->connecting_state || - ssl_connect_2_writing == connssl->connecting_state))) + if(ret || (nonblocking && (ssl_connect_2 == connssl->connecting_state))) return ret; } @@ -1152,20 +1063,52 @@ static void *bearssl_get_internals(struct ssl_connect_data *connssl, return &backend->ctx; } -static void bearssl_close(struct Curl_cfilter *cf, struct Curl_easy *data) +static CURLcode bearssl_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool send_shutdown, bool *done) { struct ssl_connect_data *connssl = cf->ctx; struct bearssl_ssl_backend_data *backend = (struct bearssl_ssl_backend_data *)connssl->backend; - size_t i; + CURLcode result; DEBUGASSERT(backend); + if(!backend->active || cf->shutdown) { + *done = TRUE; + return CURLE_OK; + } - if(backend->active) { - backend->active = FALSE; + *done = FALSE; + if(!backend->sent_shutdown) { + (void)send_shutdown; /* unknown how to suppress our close notify */ br_ssl_engine_close(&backend->ctx.eng); - (void)bearssl_run_until(cf, data, BR_SSL_CLOSED); + backend->sent_shutdown = TRUE; } + + result = bearssl_run_until(cf, data, BR_SSL_CLOSED); + if(result == CURLE_OK) { + *done = TRUE; + } + else if(result == CURLE_AGAIN) + result = CURLE_OK; + else + CURL_TRC_CF(data, cf, "shutdown error: %d", result); + + cf->shutdown = (result || *done); + return result; +} + +static void bearssl_close(struct Curl_cfilter *cf, struct Curl_easy *data) +{ + struct ssl_connect_data *connssl = cf->ctx; + struct bearssl_ssl_backend_data *backend = + (struct bearssl_ssl_backend_data *)connssl->backend; + size_t i; + + (void)data; + DEBUGASSERT(backend); + + backend->active = FALSE; if(backend->anchors) { for(i = 0; i < backend->anchors_len; ++i) free(backend->anchors[i].dn.data); @@ -1173,11 +1116,6 @@ static void bearssl_close(struct Curl_cfilter *cf, struct Curl_easy *data) } } -static void bearssl_session_free(void *ptr) -{ - free(ptr); -} - static CURLcode bearssl_sha256sum(const unsigned char *input, size_t inputlen, unsigned char *sha256sum, @@ -1200,7 +1138,7 @@ const struct Curl_ssl Curl_ssl_bearssl = { Curl_none_cleanup, /* cleanup */ bearssl_version, /* version */ Curl_none_check_cxn, /* check_cxn */ - Curl_none_shutdown, /* shutdown */ + bearssl_shutdown, /* shutdown */ bearssl_data_pending, /* data_pending */ bearssl_random, /* random */ Curl_none_cert_status_request, /* cert_status_request */ @@ -1210,7 +1148,6 @@ const struct Curl_ssl Curl_ssl_bearssl = { bearssl_get_internals, /* get_internals */ bearssl_close, /* close_one */ Curl_none_close_all, /* close_all */ - bearssl_session_free, /* session_free */ Curl_none_set_engine, /* set_engine */ Curl_none_set_engine_default, /* set_engine_default */ Curl_none_engines_list, /* engines_list */ @@ -1218,7 +1155,6 @@ const struct Curl_ssl Curl_ssl_bearssl = { bearssl_sha256sum, /* sha256sum */ NULL, /* associate_connection */ NULL, /* disassociate_connection */ - NULL, /* free_multi_ssl_backend_data */ bearssl_recv, /* recv decrypted data */ bearssl_send, /* send data to encrypt */ }; diff --git a/lib/vtls/cipher_suite.c b/lib/vtls/cipher_suite.c new file mode 100644 index 000000000..83ac5ddfa --- /dev/null +++ b/lib/vtls/cipher_suite.c @@ -0,0 +1,884 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Jan Venekamp, + * + * This software is licensed 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_SECTRANSP) || defined(USE_MBEDTLS) || defined(USE_BEARSSL) +#include "cipher_suite.h" +#include "curl_printf.h" +#include "strcase.h" +#include + +/* + * To support the CURLOPT_SSL_CIPHER_LIST option on SSL backends + * that do not support it natively, but do support setting a list of + * IANA ids, we need a list of all supported cipher suite names + * (OpenSSL and IANA) to be able to look up the IANA ids. + * + * To keep the binary size of this list down we compress each entry + * down to 2 + 6 bytes using the C preprocessor. + */ + +/* + * mbedTLS NOTE: mbedTLS has mbedtls_ssl_get_ciphersuite_id() to + * convert a string representation to an IANA id, we do not use that + * because it does not support "standard" OpenSSL cipher suite + * names, nor IANA names. + */ + +/* NOTE: also see tests/unit/unit3205.c */ + +/* Text for cipher suite parts (max 64 entries), + keep indexes below in sync with this! */ +static const char *cs_txt = + "\0" + "TLS" "\0" + "WITH" "\0" + "128" "\0" + "256" "\0" + "3DES" "\0" + "8" "\0" + "AES" "\0" + "AES128" "\0" + "AES256" "\0" + "CBC" "\0" + "CBC3" "\0" + "CCM" "\0" + "CCM8" "\0" + "CHACHA20" "\0" + "DES" "\0" + "DHE" "\0" + "ECDH" "\0" + "ECDHE" "\0" + "ECDSA" "\0" + "EDE" "\0" + "GCM" "\0" + "MD5" "\0" + "NULL" "\0" + "POLY1305" "\0" + "PSK" "\0" + "RSA" "\0" + "SHA" "\0" + "SHA256" "\0" + "SHA384" "\0" +#if defined(USE_MBEDTLS) + "ARIA" "\0" + "ARIA128" "\0" + "ARIA256" "\0" + "CAMELLIA" "\0" + "CAMELLIA128" "\0" + "CAMELLIA256" "\0" +#endif +#if defined(USE_SECTRANSP) + "40" "\0" + "ADH" "\0" + "AECDH" "\0" + "anon" "\0" + "DES40" "\0" + "DH" "\0" + "DSS" "\0" + "EDH" "\0" + "EXP" "\0" + "EXPORT" "\0" + "IDEA" "\0" + "RC2" "\0" + "RC4" "\0" +#endif +; +/* Indexes of above cs_txt */ +enum { + CS_TXT_IDX_, + CS_TXT_IDX_TLS, + CS_TXT_IDX_WITH, + CS_TXT_IDX_128, + CS_TXT_IDX_256, + CS_TXT_IDX_3DES, + CS_TXT_IDX_8, + CS_TXT_IDX_AES, + CS_TXT_IDX_AES128, + CS_TXT_IDX_AES256, + CS_TXT_IDX_CBC, + CS_TXT_IDX_CBC3, + CS_TXT_IDX_CCM, + CS_TXT_IDX_CCM8, + CS_TXT_IDX_CHACHA20, + CS_TXT_IDX_DES, + CS_TXT_IDX_DHE, + CS_TXT_IDX_ECDH, + CS_TXT_IDX_ECDHE, + CS_TXT_IDX_ECDSA, + CS_TXT_IDX_EDE, + CS_TXT_IDX_GCM, + CS_TXT_IDX_MD5, + CS_TXT_IDX_NULL, + CS_TXT_IDX_POLY1305, + CS_TXT_IDX_PSK, + CS_TXT_IDX_RSA, + CS_TXT_IDX_SHA, + CS_TXT_IDX_SHA256, + CS_TXT_IDX_SHA384, +#if defined(USE_MBEDTLS) + CS_TXT_IDX_ARIA, + CS_TXT_IDX_ARIA128, + CS_TXT_IDX_ARIA256, + CS_TXT_IDX_CAMELLIA, + CS_TXT_IDX_CAMELLIA128, + CS_TXT_IDX_CAMELLIA256, +#endif +#if defined(USE_SECTRANSP) + CS_TXT_IDX_40, + CS_TXT_IDX_ADH, + CS_TXT_IDX_AECDH, + CS_TXT_IDX_anon, + CS_TXT_IDX_DES40, + CS_TXT_IDX_DH, + CS_TXT_IDX_DSS, + CS_TXT_IDX_EDH, + CS_TXT_IDX_EXP, + CS_TXT_IDX_EXPORT, + CS_TXT_IDX_IDEA, + CS_TXT_IDX_RC2, + CS_TXT_IDX_RC4, +#endif + CS_TXT_LEN, +}; + +#define CS_ZIP_IDX(a, b, c, d, e, f, g, h) \ +{ \ + (uint8_t) ((a) << 2 | ((b) & 0x3F) >> 4), \ + (uint8_t) ((b) << 4 | ((c) & 0x3F) >> 2), \ + (uint8_t) ((c) << 6 | ((d) & 0x3F)), \ + (uint8_t) ((e) << 2 | ((f) & 0x3F) >> 4), \ + (uint8_t) ((f) << 4 | ((g) & 0x3F) >> 2), \ + (uint8_t) ((g) << 6 | ((h) & 0x3F)) \ +} +#define CS_ENTRY(id, a, b, c, d, e, f, g, h) \ +{ \ + id, \ + CS_ZIP_IDX( \ + CS_TXT_IDX_ ## a, CS_TXT_IDX_ ## b, \ + CS_TXT_IDX_ ## c, CS_TXT_IDX_ ## d, \ + CS_TXT_IDX_ ## e, CS_TXT_IDX_ ## f, \ + CS_TXT_IDX_ ## g, CS_TXT_IDX_ ## h \ + ) \ +} + +struct cs_entry { + uint16_t id; + uint8_t zip[6]; +}; + +/* !checksrc! disable COMMANOSPACE all */ +static const struct cs_entry cs_list [] = { + CS_ENTRY(0x002F, TLS,RSA,WITH,AES,128,CBC,SHA,), + CS_ENTRY(0x002F, AES128,SHA,,,,,,), + CS_ENTRY(0x0035, TLS,RSA,WITH,AES,256,CBC,SHA,), + CS_ENTRY(0x0035, AES256,SHA,,,,,,), + CS_ENTRY(0x003C, TLS,RSA,WITH,AES,128,CBC,SHA256,), + CS_ENTRY(0x003C, AES128,SHA256,,,,,,), + CS_ENTRY(0x003D, TLS,RSA,WITH,AES,256,CBC,SHA256,), + CS_ENTRY(0x003D, AES256,SHA256,,,,,,), + CS_ENTRY(0x009C, TLS,RSA,WITH,AES,128,GCM,SHA256,), + CS_ENTRY(0x009C, AES128,GCM,SHA256,,,,,), + CS_ENTRY(0x009D, TLS,RSA,WITH,AES,256,GCM,SHA384,), + CS_ENTRY(0x009D, AES256,GCM,SHA384,,,,,), + CS_ENTRY(0xC004, TLS,ECDH,ECDSA,WITH,AES,128,CBC,SHA), + CS_ENTRY(0xC004, ECDH,ECDSA,AES128,SHA,,,,), + CS_ENTRY(0xC005, TLS,ECDH,ECDSA,WITH,AES,256,CBC,SHA), + CS_ENTRY(0xC005, ECDH,ECDSA,AES256,SHA,,,,), + CS_ENTRY(0xC009, TLS,ECDHE,ECDSA,WITH,AES,128,CBC,SHA), + CS_ENTRY(0xC009, ECDHE,ECDSA,AES128,SHA,,,,), + CS_ENTRY(0xC00A, TLS,ECDHE,ECDSA,WITH,AES,256,CBC,SHA), + CS_ENTRY(0xC00A, ECDHE,ECDSA,AES256,SHA,,,,), + CS_ENTRY(0xC00E, TLS,ECDH,RSA,WITH,AES,128,CBC,SHA), + CS_ENTRY(0xC00E, ECDH,RSA,AES128,SHA,,,,), + CS_ENTRY(0xC00F, TLS,ECDH,RSA,WITH,AES,256,CBC,SHA), + CS_ENTRY(0xC00F, ECDH,RSA,AES256,SHA,,,,), + CS_ENTRY(0xC013, TLS,ECDHE,RSA,WITH,AES,128,CBC,SHA), + CS_ENTRY(0xC013, ECDHE,RSA,AES128,SHA,,,,), + CS_ENTRY(0xC014, TLS,ECDHE,RSA,WITH,AES,256,CBC,SHA), + CS_ENTRY(0xC014, ECDHE,RSA,AES256,SHA,,,,), + CS_ENTRY(0xC023, TLS,ECDHE,ECDSA,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0xC023, ECDHE,ECDSA,AES128,SHA256,,,,), + CS_ENTRY(0xC024, TLS,ECDHE,ECDSA,WITH,AES,256,CBC,SHA384), + CS_ENTRY(0xC024, ECDHE,ECDSA,AES256,SHA384,,,,), + CS_ENTRY(0xC025, TLS,ECDH,ECDSA,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0xC025, ECDH,ECDSA,AES128,SHA256,,,,), + CS_ENTRY(0xC026, TLS,ECDH,ECDSA,WITH,AES,256,CBC,SHA384), + CS_ENTRY(0xC026, ECDH,ECDSA,AES256,SHA384,,,,), + CS_ENTRY(0xC027, TLS,ECDHE,RSA,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0xC027, ECDHE,RSA,AES128,SHA256,,,,), + CS_ENTRY(0xC028, TLS,ECDHE,RSA,WITH,AES,256,CBC,SHA384), + CS_ENTRY(0xC028, ECDHE,RSA,AES256,SHA384,,,,), + CS_ENTRY(0xC029, TLS,ECDH,RSA,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0xC029, ECDH,RSA,AES128,SHA256,,,,), + CS_ENTRY(0xC02A, TLS,ECDH,RSA,WITH,AES,256,CBC,SHA384), + CS_ENTRY(0xC02A, ECDH,RSA,AES256,SHA384,,,,), + CS_ENTRY(0xC02B, TLS,ECDHE,ECDSA,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0xC02B, ECDHE,ECDSA,AES128,GCM,SHA256,,,), + CS_ENTRY(0xC02C, TLS,ECDHE,ECDSA,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0xC02C, ECDHE,ECDSA,AES256,GCM,SHA384,,,), + CS_ENTRY(0xC02D, TLS,ECDH,ECDSA,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0xC02D, ECDH,ECDSA,AES128,GCM,SHA256,,,), + CS_ENTRY(0xC02E, TLS,ECDH,ECDSA,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0xC02E, ECDH,ECDSA,AES256,GCM,SHA384,,,), + CS_ENTRY(0xC02F, TLS,ECDHE,RSA,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0xC02F, ECDHE,RSA,AES128,GCM,SHA256,,,), + CS_ENTRY(0xC030, TLS,ECDHE,RSA,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0xC030, ECDHE,RSA,AES256,GCM,SHA384,,,), + CS_ENTRY(0xC031, TLS,ECDH,RSA,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0xC031, ECDH,RSA,AES128,GCM,SHA256,,,), + CS_ENTRY(0xC032, TLS,ECDH,RSA,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0xC032, ECDH,RSA,AES256,GCM,SHA384,,,), + CS_ENTRY(0xCCA8, TLS,ECDHE,RSA,WITH,CHACHA20,POLY1305,SHA256,), + CS_ENTRY(0xCCA8, ECDHE,RSA,CHACHA20,POLY1305,,,,), + CS_ENTRY(0xCCA9, TLS,ECDHE,ECDSA,WITH,CHACHA20,POLY1305,SHA256,), + CS_ENTRY(0xCCA9, ECDHE,ECDSA,CHACHA20,POLY1305,,,,), +#if defined(USE_SECTRANSP) || defined(USE_MBEDTLS) + CS_ENTRY(0x0001, TLS,RSA,WITH,NULL,MD5,,,), + CS_ENTRY(0x0001, NULL,MD5,,,,,,), + CS_ENTRY(0x0002, TLS,RSA,WITH,NULL,SHA,,,), + CS_ENTRY(0x0002, NULL,SHA,,,,,,), + CS_ENTRY(0x002C, TLS,PSK,WITH,NULL,SHA,,,), + CS_ENTRY(0x002C, PSK,NULL,SHA,,,,,), + CS_ENTRY(0x002D, TLS,DHE,PSK,WITH,NULL,SHA,,), + CS_ENTRY(0x002D, DHE,PSK,NULL,SHA,,,,), + CS_ENTRY(0x002E, TLS,RSA,PSK,WITH,NULL,SHA,,), + CS_ENTRY(0x002E, RSA,PSK,NULL,SHA,,,,), + CS_ENTRY(0x0033, TLS,DHE,RSA,WITH,AES,128,CBC,SHA), + CS_ENTRY(0x0033, DHE,RSA,AES128,SHA,,,,), + CS_ENTRY(0x0039, TLS,DHE,RSA,WITH,AES,256,CBC,SHA), + CS_ENTRY(0x0039, DHE,RSA,AES256,SHA,,,,), + CS_ENTRY(0x003B, TLS,RSA,WITH,NULL,SHA256,,,), + CS_ENTRY(0x003B, NULL,SHA256,,,,,,), + CS_ENTRY(0x0067, TLS,DHE,RSA,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0x0067, DHE,RSA,AES128,SHA256,,,,), + CS_ENTRY(0x006B, TLS,DHE,RSA,WITH,AES,256,CBC,SHA256), + CS_ENTRY(0x006B, DHE,RSA,AES256,SHA256,,,,), + CS_ENTRY(0x008C, TLS,PSK,WITH,AES,128,CBC,SHA,), + CS_ENTRY(0x008C, PSK,AES128,CBC,SHA,,,,), + CS_ENTRY(0x008D, TLS,PSK,WITH,AES,256,CBC,SHA,), + CS_ENTRY(0x008D, PSK,AES256,CBC,SHA,,,,), + CS_ENTRY(0x0090, TLS,DHE,PSK,WITH,AES,128,CBC,SHA), + CS_ENTRY(0x0090, DHE,PSK,AES128,CBC,SHA,,,), + CS_ENTRY(0x0091, TLS,DHE,PSK,WITH,AES,256,CBC,SHA), + CS_ENTRY(0x0091, DHE,PSK,AES256,CBC,SHA,,,), + CS_ENTRY(0x0094, TLS,RSA,PSK,WITH,AES,128,CBC,SHA), + CS_ENTRY(0x0094, RSA,PSK,AES128,CBC,SHA,,,), + CS_ENTRY(0x0095, TLS,RSA,PSK,WITH,AES,256,CBC,SHA), + CS_ENTRY(0x0095, RSA,PSK,AES256,CBC,SHA,,,), + CS_ENTRY(0x009E, TLS,DHE,RSA,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0x009E, DHE,RSA,AES128,GCM,SHA256,,,), + CS_ENTRY(0x009F, TLS,DHE,RSA,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0x009F, DHE,RSA,AES256,GCM,SHA384,,,), + CS_ENTRY(0x00A8, TLS,PSK,WITH,AES,128,GCM,SHA256,), + CS_ENTRY(0x00A8, PSK,AES128,GCM,SHA256,,,,), + CS_ENTRY(0x00A9, TLS,PSK,WITH,AES,256,GCM,SHA384,), + CS_ENTRY(0x00A9, PSK,AES256,GCM,SHA384,,,,), + CS_ENTRY(0x00AA, TLS,DHE,PSK,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0x00AA, DHE,PSK,AES128,GCM,SHA256,,,), + CS_ENTRY(0x00AB, TLS,DHE,PSK,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0x00AB, DHE,PSK,AES256,GCM,SHA384,,,), + CS_ENTRY(0x00AC, TLS,RSA,PSK,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0x00AC, RSA,PSK,AES128,GCM,SHA256,,,), + CS_ENTRY(0x00AD, TLS,RSA,PSK,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0x00AD, RSA,PSK,AES256,GCM,SHA384,,,), + CS_ENTRY(0x00AE, TLS,PSK,WITH,AES,128,CBC,SHA256,), + CS_ENTRY(0x00AE, PSK,AES128,CBC,SHA256,,,,), + CS_ENTRY(0x00AF, TLS,PSK,WITH,AES,256,CBC,SHA384,), + CS_ENTRY(0x00AF, PSK,AES256,CBC,SHA384,,,,), + CS_ENTRY(0x00B0, TLS,PSK,WITH,NULL,SHA256,,,), + CS_ENTRY(0x00B0, PSK,NULL,SHA256,,,,,), + CS_ENTRY(0x00B1, TLS,PSK,WITH,NULL,SHA384,,,), + CS_ENTRY(0x00B1, PSK,NULL,SHA384,,,,,), + CS_ENTRY(0x00B2, TLS,DHE,PSK,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0x00B2, DHE,PSK,AES128,CBC,SHA256,,,), + CS_ENTRY(0x00B3, TLS,DHE,PSK,WITH,AES,256,CBC,SHA384), + CS_ENTRY(0x00B3, DHE,PSK,AES256,CBC,SHA384,,,), + CS_ENTRY(0x00B4, TLS,DHE,PSK,WITH,NULL,SHA256,,), + CS_ENTRY(0x00B4, DHE,PSK,NULL,SHA256,,,,), + CS_ENTRY(0x00B5, TLS,DHE,PSK,WITH,NULL,SHA384,,), + CS_ENTRY(0x00B5, DHE,PSK,NULL,SHA384,,,,), + CS_ENTRY(0x00B6, TLS,RSA,PSK,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0x00B6, RSA,PSK,AES128,CBC,SHA256,,,), + CS_ENTRY(0x00B7, TLS,RSA,PSK,WITH,AES,256,CBC,SHA384), + CS_ENTRY(0x00B7, RSA,PSK,AES256,CBC,SHA384,,,), + CS_ENTRY(0x00B8, TLS,RSA,PSK,WITH,NULL,SHA256,,), + CS_ENTRY(0x00B8, RSA,PSK,NULL,SHA256,,,,), + CS_ENTRY(0x00B9, TLS,RSA,PSK,WITH,NULL,SHA384,,), + CS_ENTRY(0x00B9, RSA,PSK,NULL,SHA384,,,,), + CS_ENTRY(0x1301, TLS,AES,128,GCM,SHA256,,,), + CS_ENTRY(0x1302, TLS,AES,256,GCM,SHA384,,,), + CS_ENTRY(0x1303, TLS,CHACHA20,POLY1305,SHA256,,,,), + CS_ENTRY(0x1304, TLS,AES,128,CCM,SHA256,,,), + CS_ENTRY(0x1305, TLS,AES,128,CCM,8,SHA256,,), + CS_ENTRY(0xC001, TLS,ECDH,ECDSA,WITH,NULL,SHA,,), + CS_ENTRY(0xC001, ECDH,ECDSA,NULL,SHA,,,,), + CS_ENTRY(0xC006, TLS,ECDHE,ECDSA,WITH,NULL,SHA,,), + CS_ENTRY(0xC006, ECDHE,ECDSA,NULL,SHA,,,,), + CS_ENTRY(0xC00B, TLS,ECDH,RSA,WITH,NULL,SHA,,), + CS_ENTRY(0xC00B, ECDH,RSA,NULL,SHA,,,,), + CS_ENTRY(0xC010, TLS,ECDHE,RSA,WITH,NULL,SHA,,), + CS_ENTRY(0xC010, ECDHE,RSA,NULL,SHA,,,,), + CS_ENTRY(0xC035, TLS,ECDHE,PSK,WITH,AES,128,CBC,SHA), + CS_ENTRY(0xC035, ECDHE,PSK,AES128,CBC,SHA,,,), + CS_ENTRY(0xC036, TLS,ECDHE,PSK,WITH,AES,256,CBC,SHA), + CS_ENTRY(0xC036, ECDHE,PSK,AES256,CBC,SHA,,,), + CS_ENTRY(0xCCAB, TLS,PSK,WITH,CHACHA20,POLY1305,SHA256,,), + CS_ENTRY(0xCCAB, PSK,CHACHA20,POLY1305,,,,,), +#endif +#if defined(USE_SECTRANSP) || defined(USE_BEARSSL) + CS_ENTRY(0x000A, TLS,RSA,WITH,3DES,EDE,CBC,SHA,), + CS_ENTRY(0x000A, DES,CBC3,SHA,,,,,), + CS_ENTRY(0xC003, TLS,ECDH,ECDSA,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0xC003, ECDH,ECDSA,DES,CBC3,SHA,,,), + CS_ENTRY(0xC008, TLS,ECDHE,ECDSA,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0xC008, ECDHE,ECDSA,DES,CBC3,SHA,,,), + CS_ENTRY(0xC00D, TLS,ECDH,RSA,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0xC00D, ECDH,RSA,DES,CBC3,SHA,,,), + CS_ENTRY(0xC012, TLS,ECDHE,RSA,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0xC012, ECDHE,RSA,DES,CBC3,SHA,,,), +#endif +#if defined(USE_MBEDTLS) || defined(USE_BEARSSL) + CS_ENTRY(0xC09C, TLS,RSA,WITH,AES,128,CCM,,), + CS_ENTRY(0xC09C, AES128,CCM,,,,,,), + CS_ENTRY(0xC09D, TLS,RSA,WITH,AES,256,CCM,,), + CS_ENTRY(0xC09D, AES256,CCM,,,,,,), + CS_ENTRY(0xC0A0, TLS,RSA,WITH,AES,128,CCM,8,), + CS_ENTRY(0xC0A0, AES128,CCM8,,,,,,), + CS_ENTRY(0xC0A1, TLS,RSA,WITH,AES,256,CCM,8,), + CS_ENTRY(0xC0A1, AES256,CCM8,,,,,,), + CS_ENTRY(0xC0AC, TLS,ECDHE,ECDSA,WITH,AES,128,CCM,), + CS_ENTRY(0xC0AC, ECDHE,ECDSA,AES128,CCM,,,,), + CS_ENTRY(0xC0AD, TLS,ECDHE,ECDSA,WITH,AES,256,CCM,), + CS_ENTRY(0xC0AD, ECDHE,ECDSA,AES256,CCM,,,,), + CS_ENTRY(0xC0AE, TLS,ECDHE,ECDSA,WITH,AES,128,CCM,8), + CS_ENTRY(0xC0AE, ECDHE,ECDSA,AES128,CCM8,,,,), + CS_ENTRY(0xC0AF, TLS,ECDHE,ECDSA,WITH,AES,256,CCM,8), + CS_ENTRY(0xC0AF, ECDHE,ECDSA,AES256,CCM8,,,,), +#endif +#if defined(USE_SECTRANSP) + /* entries marked bc are backward compatible aliases for old OpenSSL names */ + CS_ENTRY(0x0003, TLS,RSA,EXPORT,WITH,RC4,40,MD5,), + CS_ENTRY(0x0003, EXP,RC4,MD5,,,,,), + CS_ENTRY(0x0004, TLS,RSA,WITH,RC4,128,MD5,,), + CS_ENTRY(0x0004, RC4,MD5,,,,,,), + CS_ENTRY(0x0005, TLS,RSA,WITH,RC4,128,SHA,,), + CS_ENTRY(0x0005, RC4,SHA,,,,,,), + CS_ENTRY(0x0006, TLS,RSA,EXPORT,WITH,RC2,CBC,40,MD5), + CS_ENTRY(0x0006, EXP,RC2,CBC,MD5,,,,), + CS_ENTRY(0x0007, TLS,RSA,WITH,IDEA,CBC,SHA,,), + CS_ENTRY(0x0007, IDEA,CBC,SHA,,,,,), + CS_ENTRY(0x0008, TLS,RSA,EXPORT,WITH,DES40,CBC,SHA,), + CS_ENTRY(0x0008, EXP,DES,CBC,SHA,,,,), + CS_ENTRY(0x0009, TLS,RSA,WITH,DES,CBC,SHA,,), + CS_ENTRY(0x0009, DES,CBC,SHA,,,,,), + CS_ENTRY(0x000B, TLS,DH,DSS,EXPORT,WITH,DES40,CBC,SHA), + CS_ENTRY(0x000B, EXP,DH,DSS,DES,CBC,SHA,,), + CS_ENTRY(0x000C, TLS,DH,DSS,WITH,DES,CBC,SHA,), + CS_ENTRY(0x000C, DH,DSS,DES,CBC,SHA,,,), + CS_ENTRY(0x000D, TLS,DH,DSS,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0x000D, DH,DSS,DES,CBC3,SHA,,,), + CS_ENTRY(0x000E, TLS,DH,RSA,EXPORT,WITH,DES40,CBC,SHA), + CS_ENTRY(0x000E, EXP,DH,RSA,DES,CBC,SHA,,), + CS_ENTRY(0x000F, TLS,DH,RSA,WITH,DES,CBC,SHA,), + CS_ENTRY(0x000F, DH,RSA,DES,CBC,SHA,,,), + CS_ENTRY(0x0010, TLS,DH,RSA,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0x0010, DH,RSA,DES,CBC3,SHA,,,), + CS_ENTRY(0x0011, TLS,DHE,DSS,EXPORT,WITH,DES40,CBC,SHA), + CS_ENTRY(0x0011, EXP,DHE,DSS,DES,CBC,SHA,,), + CS_ENTRY(0x0011, EXP,EDH,DSS,DES,CBC,SHA,,), /* bc */ + CS_ENTRY(0x0012, TLS,DHE,DSS,WITH,DES,CBC,SHA,), + CS_ENTRY(0x0012, DHE,DSS,DES,CBC,SHA,,,), + CS_ENTRY(0x0012, EDH,DSS,DES,CBC,SHA,,,), /* bc */ + CS_ENTRY(0x0013, TLS,DHE,DSS,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0x0013, DHE,DSS,DES,CBC3,SHA,,,), + CS_ENTRY(0x0013, EDH,DSS,DES,CBC3,SHA,,,), /* bc */ + CS_ENTRY(0x0014, TLS,DHE,RSA,EXPORT,WITH,DES40,CBC,SHA), + CS_ENTRY(0x0014, EXP,DHE,RSA,DES,CBC,SHA,,), + CS_ENTRY(0x0014, EXP,EDH,RSA,DES,CBC,SHA,,), /* bc */ + CS_ENTRY(0x0015, TLS,DHE,RSA,WITH,DES,CBC,SHA,), + CS_ENTRY(0x0015, DHE,RSA,DES,CBC,SHA,,,), + CS_ENTRY(0x0015, EDH,RSA,DES,CBC,SHA,,,), /* bc */ + CS_ENTRY(0x0016, TLS,DHE,RSA,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0x0016, DHE,RSA,DES,CBC3,SHA,,,), + CS_ENTRY(0x0016, EDH,RSA,DES,CBC3,SHA,,,), /* bc */ + CS_ENTRY(0x0017, TLS,DH,anon,EXPORT,WITH,RC4,40,MD5), + CS_ENTRY(0x0017, EXP,ADH,RC4,MD5,,,,), + CS_ENTRY(0x0018, TLS,DH,anon,WITH,RC4,128,MD5,), + CS_ENTRY(0x0018, ADH,RC4,MD5,,,,,), + CS_ENTRY(0x0019, TLS,DH,anon,EXPORT,WITH,DES40,CBC,SHA), + CS_ENTRY(0x0019, EXP,ADH,DES,CBC,SHA,,,), + CS_ENTRY(0x001A, TLS,DH,anon,WITH,DES,CBC,SHA,), + CS_ENTRY(0x001A, ADH,DES,CBC,SHA,,,,), + CS_ENTRY(0x001B, TLS,DH,anon,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0x001B, ADH,DES,CBC3,SHA,,,,), + CS_ENTRY(0x0030, TLS,DH,DSS,WITH,AES,128,CBC,SHA), + CS_ENTRY(0x0030, DH,DSS,AES128,SHA,,,,), + CS_ENTRY(0x0031, TLS,DH,RSA,WITH,AES,128,CBC,SHA), + CS_ENTRY(0x0031, DH,RSA,AES128,SHA,,,,), + CS_ENTRY(0x0032, TLS,DHE,DSS,WITH,AES,128,CBC,SHA), + CS_ENTRY(0x0032, DHE,DSS,AES128,SHA,,,,), + CS_ENTRY(0x0034, TLS,DH,anon,WITH,AES,128,CBC,SHA), + CS_ENTRY(0x0034, ADH,AES128,SHA,,,,,), + CS_ENTRY(0x0036, TLS,DH,DSS,WITH,AES,256,CBC,SHA), + CS_ENTRY(0x0036, DH,DSS,AES256,SHA,,,,), + CS_ENTRY(0x0037, TLS,DH,RSA,WITH,AES,256,CBC,SHA), + CS_ENTRY(0x0037, DH,RSA,AES256,SHA,,,,), + CS_ENTRY(0x0038, TLS,DHE,DSS,WITH,AES,256,CBC,SHA), + CS_ENTRY(0x0038, DHE,DSS,AES256,SHA,,,,), + CS_ENTRY(0x003A, TLS,DH,anon,WITH,AES,256,CBC,SHA), + CS_ENTRY(0x003A, ADH,AES256,SHA,,,,,), + CS_ENTRY(0x003E, TLS,DH,DSS,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0x003E, DH,DSS,AES128,SHA256,,,,), + CS_ENTRY(0x003F, TLS,DH,RSA,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0x003F, DH,RSA,AES128,SHA256,,,,), + CS_ENTRY(0x0040, TLS,DHE,DSS,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0x0040, DHE,DSS,AES128,SHA256,,,,), + CS_ENTRY(0x0068, TLS,DH,DSS,WITH,AES,256,CBC,SHA256), + CS_ENTRY(0x0068, DH,DSS,AES256,SHA256,,,,), + CS_ENTRY(0x0069, TLS,DH,RSA,WITH,AES,256,CBC,SHA256), + CS_ENTRY(0x0069, DH,RSA,AES256,SHA256,,,,), + CS_ENTRY(0x006A, TLS,DHE,DSS,WITH,AES,256,CBC,SHA256), + CS_ENTRY(0x006A, DHE,DSS,AES256,SHA256,,,,), + CS_ENTRY(0x006C, TLS,DH,anon,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0x006C, ADH,AES128,SHA256,,,,,), + CS_ENTRY(0x006D, TLS,DH,anon,WITH,AES,256,CBC,SHA256), + CS_ENTRY(0x006D, ADH,AES256,SHA256,,,,,), + CS_ENTRY(0x008A, TLS,PSK,WITH,RC4,128,SHA,,), + CS_ENTRY(0x008A, PSK,RC4,SHA,,,,,), + CS_ENTRY(0x008B, TLS,PSK,WITH,3DES,EDE,CBC,SHA,), + CS_ENTRY(0x008B, PSK,3DES,EDE,CBC,SHA,,,), + CS_ENTRY(0x008E, TLS,DHE,PSK,WITH,RC4,128,SHA,), + CS_ENTRY(0x008E, DHE,PSK,RC4,SHA,,,,), + CS_ENTRY(0x008F, TLS,DHE,PSK,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0x008F, DHE,PSK,3DES,EDE,CBC,SHA,,), + CS_ENTRY(0x0092, TLS,RSA,PSK,WITH,RC4,128,SHA,), + CS_ENTRY(0x0092, RSA,PSK,RC4,SHA,,,,), + CS_ENTRY(0x0093, TLS,RSA,PSK,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0x0093, RSA,PSK,3DES,EDE,CBC,SHA,,), + CS_ENTRY(0x00A0, TLS,DH,RSA,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0x00A0, DH,RSA,AES128,GCM,SHA256,,,), + CS_ENTRY(0x00A1, TLS,DH,RSA,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0x00A1, DH,RSA,AES256,GCM,SHA384,,,), + CS_ENTRY(0x00A2, TLS,DHE,DSS,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0x00A2, DHE,DSS,AES128,GCM,SHA256,,,), + CS_ENTRY(0x00A3, TLS,DHE,DSS,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0x00A3, DHE,DSS,AES256,GCM,SHA384,,,), + CS_ENTRY(0x00A4, TLS,DH,DSS,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0x00A4, DH,DSS,AES128,GCM,SHA256,,,), + CS_ENTRY(0x00A5, TLS,DH,DSS,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0x00A5, DH,DSS,AES256,GCM,SHA384,,,), + CS_ENTRY(0x00A6, TLS,DH,anon,WITH,AES,128,GCM,SHA256), + CS_ENTRY(0x00A6, ADH,AES128,GCM,SHA256,,,,), + CS_ENTRY(0x00A7, TLS,DH,anon,WITH,AES,256,GCM,SHA384), + CS_ENTRY(0x00A7, ADH,AES256,GCM,SHA384,,,,), + CS_ENTRY(0xC002, TLS,ECDH,ECDSA,WITH,RC4,128,SHA,), + CS_ENTRY(0xC002, ECDH,ECDSA,RC4,SHA,,,,), + CS_ENTRY(0xC007, TLS,ECDHE,ECDSA,WITH,RC4,128,SHA,), + CS_ENTRY(0xC007, ECDHE,ECDSA,RC4,SHA,,,,), + CS_ENTRY(0xC00C, TLS,ECDH,RSA,WITH,RC4,128,SHA,), + CS_ENTRY(0xC00C, ECDH,RSA,RC4,SHA,,,,), + CS_ENTRY(0xC011, TLS,ECDHE,RSA,WITH,RC4,128,SHA,), + CS_ENTRY(0xC011, ECDHE,RSA,RC4,SHA,,,,), + CS_ENTRY(0xC015, TLS,ECDH,anon,WITH,NULL,SHA,,), + CS_ENTRY(0xC015, AECDH,NULL,SHA,,,,,), + CS_ENTRY(0xC016, TLS,ECDH,anon,WITH,RC4,128,SHA,), + CS_ENTRY(0xC016, AECDH,RC4,SHA,,,,,), + CS_ENTRY(0xC017, TLS,ECDH,anon,WITH,3DES,EDE,CBC,SHA), + CS_ENTRY(0xC017, AECDH,DES,CBC3,SHA,,,,), + CS_ENTRY(0xC018, TLS,ECDH,anon,WITH,AES,128,CBC,SHA), + CS_ENTRY(0xC018, AECDH,AES128,SHA,,,,,), + CS_ENTRY(0xC019, TLS,ECDH,anon,WITH,AES,256,CBC,SHA), + CS_ENTRY(0xC019, AECDH,AES256,SHA,,,,,), +#endif +#if defined(USE_MBEDTLS) + /* entries marked ns are "non-standard", they are not in OpenSSL */ + CS_ENTRY(0x0041, TLS,RSA,WITH,CAMELLIA,128,CBC,SHA,), + CS_ENTRY(0x0041, CAMELLIA128,SHA,,,,,,), + CS_ENTRY(0x0045, TLS,DHE,RSA,WITH,CAMELLIA,128,CBC,SHA), + CS_ENTRY(0x0045, DHE,RSA,CAMELLIA128,SHA,,,,), + CS_ENTRY(0x0084, TLS,RSA,WITH,CAMELLIA,256,CBC,SHA,), + CS_ENTRY(0x0084, CAMELLIA256,SHA,,,,,,), + CS_ENTRY(0x0088, TLS,DHE,RSA,WITH,CAMELLIA,256,CBC,SHA), + CS_ENTRY(0x0088, DHE,RSA,CAMELLIA256,SHA,,,,), + CS_ENTRY(0x00BA, TLS,RSA,WITH,CAMELLIA,128,CBC,SHA256,), + CS_ENTRY(0x00BA, CAMELLIA128,SHA256,,,,,,), + CS_ENTRY(0x00BE, TLS,DHE,RSA,WITH,CAMELLIA,128,CBC,SHA256), + CS_ENTRY(0x00BE, DHE,RSA,CAMELLIA128,SHA256,,,,), + CS_ENTRY(0x00C0, TLS,RSA,WITH,CAMELLIA,256,CBC,SHA256,), + CS_ENTRY(0x00C0, CAMELLIA256,SHA256,,,,,,), + CS_ENTRY(0x00C4, TLS,DHE,RSA,WITH,CAMELLIA,256,CBC,SHA256), + CS_ENTRY(0x00C4, DHE,RSA,CAMELLIA256,SHA256,,,,), + CS_ENTRY(0xC037, TLS,ECDHE,PSK,WITH,AES,128,CBC,SHA256), + CS_ENTRY(0xC037, ECDHE,PSK,AES128,CBC,SHA256,,,), + CS_ENTRY(0xC038, TLS,ECDHE,PSK,WITH,AES,256,CBC,SHA384), + CS_ENTRY(0xC038, ECDHE,PSK,AES256,CBC,SHA384,,,), + CS_ENTRY(0xC039, TLS,ECDHE,PSK,WITH,NULL,SHA,,), + CS_ENTRY(0xC039, ECDHE,PSK,NULL,SHA,,,,), + CS_ENTRY(0xC03A, TLS,ECDHE,PSK,WITH,NULL,SHA256,,), + CS_ENTRY(0xC03A, ECDHE,PSK,NULL,SHA256,,,,), + CS_ENTRY(0xC03B, TLS,ECDHE,PSK,WITH,NULL,SHA384,,), + CS_ENTRY(0xC03B, ECDHE,PSK,NULL,SHA384,,,,), + CS_ENTRY(0xC03C, TLS,RSA,WITH,ARIA,128,CBC,SHA256,), + CS_ENTRY(0xC03C, ARIA128,SHA256,,,,,,), /* ns */ + CS_ENTRY(0xC03D, TLS,RSA,WITH,ARIA,256,CBC,SHA384,), + CS_ENTRY(0xC03D, ARIA256,SHA384,,,,,,), /* ns */ + CS_ENTRY(0xC044, TLS,DHE,RSA,WITH,ARIA,128,CBC,SHA256), + CS_ENTRY(0xC044, DHE,RSA,ARIA128,SHA256,,,,), /* ns */ + CS_ENTRY(0xC045, TLS,DHE,RSA,WITH,ARIA,256,CBC,SHA384), + CS_ENTRY(0xC045, DHE,RSA,ARIA256,SHA384,,,,), /* ns */ + CS_ENTRY(0xC048, TLS,ECDHE,ECDSA,WITH,ARIA,128,CBC,SHA256), + CS_ENTRY(0xC048, ECDHE,ECDSA,ARIA128,SHA256,,,,), /* ns */ + CS_ENTRY(0xC049, TLS,ECDHE,ECDSA,WITH,ARIA,256,CBC,SHA384), + CS_ENTRY(0xC049, ECDHE,ECDSA,ARIA256,SHA384,,,,), /* ns */ + CS_ENTRY(0xC04A, TLS,ECDH,ECDSA,WITH,ARIA,128,CBC,SHA256), + CS_ENTRY(0xC04A, ECDH,ECDSA,ARIA128,SHA256,,,,), /* ns */ + CS_ENTRY(0xC04B, TLS,ECDH,ECDSA,WITH,ARIA,256,CBC,SHA384), + CS_ENTRY(0xC04B, ECDH,ECDSA,ARIA256,SHA384,,,,), /* ns */ + CS_ENTRY(0xC04C, TLS,ECDHE,RSA,WITH,ARIA,128,CBC,SHA256), + CS_ENTRY(0xC04C, ECDHE,ARIA128,SHA256,,,,,), /* ns */ + CS_ENTRY(0xC04D, TLS,ECDHE,RSA,WITH,ARIA,256,CBC,SHA384), + CS_ENTRY(0xC04D, ECDHE,ARIA256,SHA384,,,,,), /* ns */ + CS_ENTRY(0xC04E, TLS,ECDH,RSA,WITH,ARIA,128,CBC,SHA256), + CS_ENTRY(0xC04E, ECDH,ARIA128,SHA256,,,,,), /* ns */ + CS_ENTRY(0xC04F, TLS,ECDH,RSA,WITH,ARIA,256,CBC,SHA384), + CS_ENTRY(0xC04F, ECDH,ARIA256,SHA384,,,,,), /* ns */ + CS_ENTRY(0xC050, TLS,RSA,WITH,ARIA,128,GCM,SHA256,), + CS_ENTRY(0xC050, ARIA128,GCM,SHA256,,,,,), + CS_ENTRY(0xC051, TLS,RSA,WITH,ARIA,256,GCM,SHA384,), + CS_ENTRY(0xC051, ARIA256,GCM,SHA384,,,,,), + CS_ENTRY(0xC052, TLS,DHE,RSA,WITH,ARIA,128,GCM,SHA256), + CS_ENTRY(0xC052, DHE,RSA,ARIA128,GCM,SHA256,,,), + CS_ENTRY(0xC053, TLS,DHE,RSA,WITH,ARIA,256,GCM,SHA384), + CS_ENTRY(0xC053, DHE,RSA,ARIA256,GCM,SHA384,,,), + CS_ENTRY(0xC05C, TLS,ECDHE,ECDSA,WITH,ARIA,128,GCM,SHA256), + CS_ENTRY(0xC05C, ECDHE,ECDSA,ARIA128,GCM,SHA256,,,), + CS_ENTRY(0xC05D, TLS,ECDHE,ECDSA,WITH,ARIA,256,GCM,SHA384), + CS_ENTRY(0xC05D, ECDHE,ECDSA,ARIA256,GCM,SHA384,,,), + CS_ENTRY(0xC05E, TLS,ECDH,ECDSA,WITH,ARIA,128,GCM,SHA256), + CS_ENTRY(0xC05E, ECDH,ECDSA,ARIA128,GCM,SHA256,,,), /* ns */ + CS_ENTRY(0xC05F, TLS,ECDH,ECDSA,WITH,ARIA,256,GCM,SHA384), + CS_ENTRY(0xC05F, ECDH,ECDSA,ARIA256,GCM,SHA384,,,), /* ns */ + CS_ENTRY(0xC060, TLS,ECDHE,RSA,WITH,ARIA,128,GCM,SHA256), + CS_ENTRY(0xC060, ECDHE,ARIA128,GCM,SHA256,,,,), + CS_ENTRY(0xC061, TLS,ECDHE,RSA,WITH,ARIA,256,GCM,SHA384), + CS_ENTRY(0xC061, ECDHE,ARIA256,GCM,SHA384,,,,), + CS_ENTRY(0xC062, TLS,ECDH,RSA,WITH,ARIA,128,GCM,SHA256), + CS_ENTRY(0xC062, ECDH,ARIA128,GCM,SHA256,,,,), /* ns */ + CS_ENTRY(0xC063, TLS,ECDH,RSA,WITH,ARIA,256,GCM,SHA384), + CS_ENTRY(0xC063, ECDH,ARIA256,GCM,SHA384,,,,), /* ns */ + CS_ENTRY(0xC064, TLS,PSK,WITH,ARIA,128,CBC,SHA256,), + CS_ENTRY(0xC064, PSK,ARIA128,SHA256,,,,,), /* ns */ + CS_ENTRY(0xC065, TLS,PSK,WITH,ARIA,256,CBC,SHA384,), + CS_ENTRY(0xC065, PSK,ARIA256,SHA384,,,,,), /* ns */ + CS_ENTRY(0xC066, TLS,DHE,PSK,WITH,ARIA,128,CBC,SHA256), + CS_ENTRY(0xC066, DHE,PSK,ARIA128,SHA256,,,,), /* ns */ + CS_ENTRY(0xC067, TLS,DHE,PSK,WITH,ARIA,256,CBC,SHA384), + CS_ENTRY(0xC067, DHE,PSK,ARIA256,SHA384,,,,), /* ns */ + CS_ENTRY(0xC068, TLS,RSA,PSK,WITH,ARIA,128,CBC,SHA256), + CS_ENTRY(0xC068, RSA,PSK,ARIA128,SHA256,,,,), /* ns */ + CS_ENTRY(0xC069, TLS,RSA,PSK,WITH,ARIA,256,CBC,SHA384), + CS_ENTRY(0xC069, RSA,PSK,ARIA256,SHA384,,,,), /* ns */ + CS_ENTRY(0xC06A, TLS,PSK,WITH,ARIA,128,GCM,SHA256,), + CS_ENTRY(0xC06A, PSK,ARIA128,GCM,SHA256,,,,), + CS_ENTRY(0xC06B, TLS,PSK,WITH,ARIA,256,GCM,SHA384,), + CS_ENTRY(0xC06B, PSK,ARIA256,GCM,SHA384,,,,), + CS_ENTRY(0xC06C, TLS,DHE,PSK,WITH,ARIA,128,GCM,SHA256), + CS_ENTRY(0xC06C, DHE,PSK,ARIA128,GCM,SHA256,,,), + CS_ENTRY(0xC06D, TLS,DHE,PSK,WITH,ARIA,256,GCM,SHA384), + CS_ENTRY(0xC06D, DHE,PSK,ARIA256,GCM,SHA384,,,), + CS_ENTRY(0xC06E, TLS,RSA,PSK,WITH,ARIA,128,GCM,SHA256), + CS_ENTRY(0xC06E, RSA,PSK,ARIA128,GCM,SHA256,,,), + CS_ENTRY(0xC06F, TLS,RSA,PSK,WITH,ARIA,256,GCM,SHA384), + CS_ENTRY(0xC06F, RSA,PSK,ARIA256,GCM,SHA384,,,), + CS_ENTRY(0xC070, TLS,ECDHE,PSK,WITH,ARIA,128,CBC,SHA256), + CS_ENTRY(0xC070, ECDHE,PSK,ARIA128,SHA256,,,,), /* ns */ + CS_ENTRY(0xC071, TLS,ECDHE,PSK,WITH,ARIA,256,CBC,SHA384), + CS_ENTRY(0xC071, ECDHE,PSK,ARIA256,SHA384,,,,), /* ns */ + CS_ENTRY(0xC072, TLS,ECDHE,ECDSA,WITH,CAMELLIA,128,CBC,SHA256), + CS_ENTRY(0xC072, ECDHE,ECDSA,CAMELLIA128,SHA256,,,,), + CS_ENTRY(0xC073, TLS,ECDHE,ECDSA,WITH,CAMELLIA,256,CBC,SHA384), + CS_ENTRY(0xC073, ECDHE,ECDSA,CAMELLIA256,SHA384,,,,), + CS_ENTRY(0xC074, TLS,ECDH,ECDSA,WITH,CAMELLIA,128,CBC,SHA256), + CS_ENTRY(0xC074, ECDH,ECDSA,CAMELLIA128,SHA256,,,,), /* ns */ + CS_ENTRY(0xC075, TLS,ECDH,ECDSA,WITH,CAMELLIA,256,CBC,SHA384), + CS_ENTRY(0xC075, ECDH,ECDSA,CAMELLIA256,SHA384,,,,), /* ns */ + CS_ENTRY(0xC076, TLS,ECDHE,RSA,WITH,CAMELLIA,128,CBC,SHA256), + CS_ENTRY(0xC076, ECDHE,RSA,CAMELLIA128,SHA256,,,,), + CS_ENTRY(0xC077, TLS,ECDHE,RSA,WITH,CAMELLIA,256,CBC,SHA384), + CS_ENTRY(0xC077, ECDHE,RSA,CAMELLIA256,SHA384,,,,), + CS_ENTRY(0xC078, TLS,ECDH,RSA,WITH,CAMELLIA,128,CBC,SHA256), + CS_ENTRY(0xC078, ECDH,CAMELLIA128,SHA256,,,,,), /* ns */ + CS_ENTRY(0xC079, TLS,ECDH,RSA,WITH,CAMELLIA,256,CBC,SHA384), + CS_ENTRY(0xC079, ECDH,CAMELLIA256,SHA384,,,,,), /* ns */ + CS_ENTRY(0xC07A, TLS,RSA,WITH,CAMELLIA,128,GCM,SHA256,), + CS_ENTRY(0xC07A, CAMELLIA128,GCM,SHA256,,,,,), /* ns */ + CS_ENTRY(0xC07B, TLS,RSA,WITH,CAMELLIA,256,GCM,SHA384,), + CS_ENTRY(0xC07B, CAMELLIA256,GCM,SHA384,,,,,), /* ns */ + CS_ENTRY(0xC07C, TLS,DHE,RSA,WITH,CAMELLIA,128,GCM,SHA256), + CS_ENTRY(0xC07C, DHE,RSA,CAMELLIA128,GCM,SHA256,,,), /* ns */ + CS_ENTRY(0xC07D, TLS,DHE,RSA,WITH,CAMELLIA,256,GCM,SHA384), + CS_ENTRY(0xC07D, DHE,RSA,CAMELLIA256,GCM,SHA384,,,), /* ns */ + CS_ENTRY(0xC086, TLS,ECDHE,ECDSA,WITH,CAMELLIA,128,GCM,SHA256), + CS_ENTRY(0xC086, ECDHE,ECDSA,CAMELLIA128,GCM,SHA256,,,), /* ns */ + CS_ENTRY(0xC087, TLS,ECDHE,ECDSA,WITH,CAMELLIA,256,GCM,SHA384), + CS_ENTRY(0xC087, ECDHE,ECDSA,CAMELLIA256,GCM,SHA384,,,), /* ns */ + CS_ENTRY(0xC088, TLS,ECDH,ECDSA,WITH,CAMELLIA,128,GCM,SHA256), + CS_ENTRY(0xC088, ECDH,ECDSA,CAMELLIA128,GCM,SHA256,,,), /* ns */ + CS_ENTRY(0xC089, TLS,ECDH,ECDSA,WITH,CAMELLIA,256,GCM,SHA384), + CS_ENTRY(0xC089, ECDH,ECDSA,CAMELLIA256,GCM,SHA384,,,), /* ns */ + CS_ENTRY(0xC08A, TLS,ECDHE,RSA,WITH,CAMELLIA,128,GCM,SHA256), + CS_ENTRY(0xC08A, ECDHE,CAMELLIA128,GCM,SHA256,,,,), /* ns */ + CS_ENTRY(0xC08B, TLS,ECDHE,RSA,WITH,CAMELLIA,256,GCM,SHA384), + CS_ENTRY(0xC08B, ECDHE,CAMELLIA256,GCM,SHA384,,,,), /* ns */ + CS_ENTRY(0xC08C, TLS,ECDH,RSA,WITH,CAMELLIA,128,GCM,SHA256), + CS_ENTRY(0xC08C, ECDH,CAMELLIA128,GCM,SHA256,,,,), /* ns */ + CS_ENTRY(0xC08D, TLS,ECDH,RSA,WITH,CAMELLIA,256,GCM,SHA384), + CS_ENTRY(0xC08D, ECDH,CAMELLIA256,GCM,SHA384,,,,), /* ns */ + CS_ENTRY(0xC08E, TLS,PSK,WITH,CAMELLIA,128,GCM,SHA256,), + CS_ENTRY(0xC08E, PSK,CAMELLIA128,GCM,SHA256,,,,), /* ns */ + CS_ENTRY(0xC08F, TLS,PSK,WITH,CAMELLIA,256,GCM,SHA384,), + CS_ENTRY(0xC08F, PSK,CAMELLIA256,GCM,SHA384,,,,), /* ns */ + CS_ENTRY(0xC090, TLS,DHE,PSK,WITH,CAMELLIA,128,GCM,SHA256), + CS_ENTRY(0xC090, DHE,PSK,CAMELLIA128,GCM,SHA256,,,), /* ns */ + CS_ENTRY(0xC091, TLS,DHE,PSK,WITH,CAMELLIA,256,GCM,SHA384), + CS_ENTRY(0xC091, DHE,PSK,CAMELLIA256,GCM,SHA384,,,), /* ns */ + CS_ENTRY(0xC092, TLS,RSA,PSK,WITH,CAMELLIA,128,GCM,SHA256), + CS_ENTRY(0xC092, RSA,PSK,CAMELLIA128,GCM,SHA256,,,), /* ns */ + CS_ENTRY(0xC093, TLS,RSA,PSK,WITH,CAMELLIA,256,GCM,SHA384), + CS_ENTRY(0xC093, RSA,PSK,CAMELLIA256,GCM,SHA384,,,), /* ns */ + CS_ENTRY(0xC094, TLS,PSK,WITH,CAMELLIA,128,CBC,SHA256,), + CS_ENTRY(0xC094, PSK,CAMELLIA128,SHA256,,,,,), + CS_ENTRY(0xC095, TLS,PSK,WITH,CAMELLIA,256,CBC,SHA384,), + CS_ENTRY(0xC095, PSK,CAMELLIA256,SHA384,,,,,), + CS_ENTRY(0xC096, TLS,DHE,PSK,WITH,CAMELLIA,128,CBC,SHA256), + CS_ENTRY(0xC096, DHE,PSK,CAMELLIA128,SHA256,,,,), + CS_ENTRY(0xC097, TLS,DHE,PSK,WITH,CAMELLIA,256,CBC,SHA384), + CS_ENTRY(0xC097, DHE,PSK,CAMELLIA256,SHA384,,,,), + CS_ENTRY(0xC098, TLS,RSA,PSK,WITH,CAMELLIA,128,CBC,SHA256), + CS_ENTRY(0xC098, RSA,PSK,CAMELLIA128,SHA256,,,,), + CS_ENTRY(0xC099, TLS,RSA,PSK,WITH,CAMELLIA,256,CBC,SHA384), + CS_ENTRY(0xC099, RSA,PSK,CAMELLIA256,SHA384,,,,), + CS_ENTRY(0xC09A, TLS,ECDHE,PSK,WITH,CAMELLIA,128,CBC,SHA256), + CS_ENTRY(0xC09A, ECDHE,PSK,CAMELLIA128,SHA256,,,,), + CS_ENTRY(0xC09B, TLS,ECDHE,PSK,WITH,CAMELLIA,256,CBC,SHA384), + CS_ENTRY(0xC09B, ECDHE,PSK,CAMELLIA256,SHA384,,,,), + CS_ENTRY(0xC09E, TLS,DHE,RSA,WITH,AES,128,CCM,), + CS_ENTRY(0xC09E, DHE,RSA,AES128,CCM,,,,), + CS_ENTRY(0xC09F, TLS,DHE,RSA,WITH,AES,256,CCM,), + CS_ENTRY(0xC09F, DHE,RSA,AES256,CCM,,,,), + CS_ENTRY(0xC0A2, TLS,DHE,RSA,WITH,AES,128,CCM,8), + CS_ENTRY(0xC0A2, DHE,RSA,AES128,CCM8,,,,), + CS_ENTRY(0xC0A3, TLS,DHE,RSA,WITH,AES,256,CCM,8), + CS_ENTRY(0xC0A3, DHE,RSA,AES256,CCM8,,,,), + CS_ENTRY(0xC0A4, TLS,PSK,WITH,AES,128,CCM,,), + CS_ENTRY(0xC0A4, PSK,AES128,CCM,,,,,), + CS_ENTRY(0xC0A5, TLS,PSK,WITH,AES,256,CCM,,), + CS_ENTRY(0xC0A5, PSK,AES256,CCM,,,,,), + CS_ENTRY(0xC0A6, TLS,DHE,PSK,WITH,AES,128,CCM,), + CS_ENTRY(0xC0A6, DHE,PSK,AES128,CCM,,,,), + CS_ENTRY(0xC0A7, TLS,DHE,PSK,WITH,AES,256,CCM,), + CS_ENTRY(0xC0A7, DHE,PSK,AES256,CCM,,,,), + CS_ENTRY(0xC0A8, TLS,PSK,WITH,AES,128,CCM,8,), + CS_ENTRY(0xC0A8, PSK,AES128,CCM8,,,,,), + CS_ENTRY(0xC0A9, TLS,PSK,WITH,AES,256,CCM,8,), + CS_ENTRY(0xC0A9, PSK,AES256,CCM8,,,,,), + CS_ENTRY(0xC0AA, TLS,PSK,DHE,WITH,AES,128,CCM,8), + CS_ENTRY(0xC0AA, DHE,PSK,AES128,CCM8,,,,), + CS_ENTRY(0xC0AB, TLS,PSK,DHE,WITH,AES,256,CCM,8), + CS_ENTRY(0xC0AB, DHE,PSK,AES256,CCM8,,,,), + CS_ENTRY(0xCCAA, TLS,DHE,RSA,WITH,CHACHA20,POLY1305,SHA256,), + CS_ENTRY(0xCCAA, DHE,RSA,CHACHA20,POLY1305,,,,), + CS_ENTRY(0xCCAC, TLS,ECDHE,PSK,WITH,CHACHA20,POLY1305,SHA256,), + CS_ENTRY(0xCCAC, ECDHE,PSK,CHACHA20,POLY1305,,,,), + CS_ENTRY(0xCCAD, TLS,DHE,PSK,WITH,CHACHA20,POLY1305,SHA256,), + CS_ENTRY(0xCCAD, DHE,PSK,CHACHA20,POLY1305,,,,), + CS_ENTRY(0xCCAE, TLS,RSA,PSK,WITH,CHACHA20,POLY1305,SHA256,), + CS_ENTRY(0xCCAE, RSA,PSK,CHACHA20,POLY1305,,,,), +#endif +}; +#define CS_LIST_LEN (sizeof(cs_list) / sizeof(cs_list[0])) + +static int cs_str_to_zip(const char *cs_str, size_t cs_len, + uint8_t zip[6]) +{ + uint8_t indexes[8] = {0}; + const char *entry, *cur; + const char *nxt = cs_str; + const char *end = cs_str + cs_len; + char separator = '-'; + int idx, i = 0; + size_t len; + + /* split the cipher string by '-' or '_' */ + if(strncasecompare(cs_str, "TLS", 3)) + separator = '_'; + + do { + if(i == 8) + return -1; + + /* determine the length of the part */ + cur = nxt; + for(; nxt < end && *nxt != '\0' && *nxt != separator; nxt++); + len = nxt - cur; + + /* lookup index for the part (skip empty string at 0) */ + for(idx = 1, entry = cs_txt + 1; idx < CS_TXT_LEN; idx++) { + size_t elen = strlen(entry); + if(elen == len && strncasecompare(entry, cur, len)) + break; + entry += elen + 1; + } + if(idx == CS_TXT_LEN) + return -1; + + indexes[i++] = (uint8_t) idx; + } while(nxt < end && *(nxt++) != '\0'); + + /* zip the 8 indexes into 48 bits */ + zip[0] = (uint8_t) (indexes[0] << 2 | (indexes[1] & 0x3F) >> 4); + zip[1] = (uint8_t) (indexes[1] << 4 | (indexes[2] & 0x3F) >> 2); + zip[2] = (uint8_t) (indexes[2] << 6 | (indexes[3] & 0x3F)); + zip[3] = (uint8_t) (indexes[4] << 2 | (indexes[5] & 0x3F) >> 4); + zip[4] = (uint8_t) (indexes[5] << 4 | (indexes[6] & 0x3F) >> 2); + zip[5] = (uint8_t) (indexes[6] << 6 | (indexes[7] & 0x3F)); + + return 0; +} + +static int cs_zip_to_str(const uint8_t zip[6], + char *buf, size_t buf_size) +{ + uint8_t indexes[8] = {0}; + const char *entry; + char separator = '-'; + int idx, i, r; + size_t len = 0; + + /* unzip the 8 indexes */ + indexes[0] = zip[0] >> 2; + indexes[1] = ((zip[0] << 4) & 0x3F) | zip[1] >> 4; + indexes[2] = ((zip[1] << 2) & 0x3F) | zip[2] >> 6; + indexes[3] = ((zip[2] << 0) & 0x3F); + indexes[4] = zip[3] >> 2; + indexes[5] = ((zip[3] << 4) & 0x3F) | zip[4] >> 4; + indexes[6] = ((zip[4] << 2) & 0x3F) | zip[5] >> 6; + indexes[7] = ((zip[5] << 0) & 0x3F); + + if(indexes[0] == CS_TXT_IDX_TLS) + separator = '_'; + + for(i = 0; i < 8 && indexes[i] != 0 && len < buf_size; i++) { + if(indexes[i] >= CS_TXT_LEN) + return -1; + + /* lookup the part string for the index (skip empty string at 0) */ + for(idx = 1, entry = cs_txt + 1; idx < indexes[i]; idx++) { + size_t elen = strlen(entry); + entry += elen + 1; + } + + /* append the part string to the buffer */ + if(i > 0) + r = msnprintf(&buf[len], buf_size - len, "%c%s", separator, entry); + else + r = msnprintf(&buf[len], buf_size - len, "%s", entry); + + if(r < 0) + return -1; + len += r; + } + + return 0; +} + +uint16_t Curl_cipher_suite_lookup_id(const char *cs_str, size_t cs_len) +{ + size_t i; + uint8_t zip[6]; + + if(cs_len > 0 && cs_str_to_zip(cs_str, cs_len, zip) == 0) { + for(i = 0; i < CS_LIST_LEN; i++) { + if(memcmp(cs_list[i].zip, zip, sizeof(zip)) == 0) + return cs_list[i].id; + } + } + + return 0; +} + +static bool cs_is_separator(char c) +{ + switch(c) { + case ' ': + case '\t': + case ':': + case ',': + case ';': + return true; + default:; + } + return false; +} + +uint16_t Curl_cipher_suite_walk_str(const char **str, const char **end) +{ + /* move string pointer to first non-separator or end of string */ + for(; cs_is_separator(*str[0]); (*str)++); + + /* move end pointer to next separator or end of string */ + for(*end = *str; *end[0] != '\0' && !cs_is_separator(*end[0]); (*end)++); + + return Curl_cipher_suite_lookup_id(*str, *end - *str); +} + +int Curl_cipher_suite_get_str(uint16_t id, char *buf, size_t buf_size, + bool prefer_rfc) +{ + size_t i, j = CS_LIST_LEN; + int r = -1; + + for(i = 0; i < CS_LIST_LEN; i++) { + if(cs_list[i].id != id) + continue; + if((cs_list[i].zip[0] >> 2 != CS_TXT_IDX_TLS) == !prefer_rfc) { + j = i; + break; + } + if(j == CS_LIST_LEN) + j = i; + } + + if(j < CS_LIST_LEN) + r = cs_zip_to_str(cs_list[j].zip, buf, buf_size); + + if(r < 0) + msnprintf(buf, buf_size, "TLS_UNKNOWN_0x%04x", id); + + return r; +} + +#endif /* defined(USE_SECTRANSP) || defined(USE_MBEDTLS) || \ + defined(USE_BEARSSL) */ diff --git a/lib/vtls/cipher_suite.h b/lib/vtls/cipher_suite.h new file mode 100644 index 000000000..1dd4d7b40 --- /dev/null +++ b/lib/vtls/cipher_suite.h @@ -0,0 +1,47 @@ +#ifndef HEADER_CURL_CIPHER_SUITE_H +#define HEADER_CURL_CIPHER_SUITE_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Jan Venekamp, + * + * This software is licensed 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_SECTRANSP) || defined(USE_MBEDTLS) || defined(USE_BEARSSL) +#include + +/* Lookup IANA id for cipher suite string, returns 0 if not recognized */ +uint16_t Curl_cipher_suite_lookup_id(const char *cs_str, size_t cs_len); + +/* Walk over cipher suite string, update str and end pointers to next + cipher suite in string, returns IANA id of that suite if recognized */ +uint16_t Curl_cipher_suite_walk_str(const char **str, const char **end); + +/* Copy openssl or RFC name for cipher suite in supplied buffer. + Caller is responsible to supply sufficiently large buffer (size + of 64 should suffice), excess bytes are silently truncated. */ +int Curl_cipher_suite_get_str(uint16_t id, char *buf, size_t buf_size, + bool prefer_rfc); + +#endif /* defined(USE_SECTRANSP) || defined(USE_MBEDTLS) || \ + defined(USE_BEARSSL) */ +#endif /* HEADER_CURL_CIPHER_SUITE_H */ diff --git a/lib/vtls/gtls.c b/lib/vtls/gtls.c index 6eaa6a8f7..39c22c200 100644 --- a/lib/vtls/gtls.c +++ b/lib/vtls/gtls.c @@ -26,7 +26,7 @@ * Source file for all GnuTLS-specific code for the TLS/SSL layer. No code * but vtls.c should ever call or use these functions. * - * Note: don't use the GnuTLS' *_t variable type names in this source code, + * Note: do not use the GnuTLS' *_t variable type names in this source code, * since they were not present in 1.0.X. */ @@ -43,6 +43,7 @@ #include "urldata.h" #include "sendf.h" #include "inet_pton.h" +#include "keylog.h" #include "gtls.h" #include "vtls.h" #include "vtls_int.h" @@ -59,6 +60,16 @@ /* The last #include file should be: */ #include "memdebug.h" +#ifndef ARRAYSIZE +#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0])) +#endif + +#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" + /* Enable GnuTLS debugging by defining GTLSDEBUG */ /*#define GTLSDEBUG */ @@ -77,22 +88,25 @@ static bool gtls_inited = FALSE; # include struct gtls_ssl_backend_data { - struct gtls_instance gtls; + struct gtls_ctx gtls; }; static ssize_t gtls_push(void *s, const void *buf, size_t blen) { struct Curl_cfilter *cf = s; struct ssl_connect_data *connssl = cf->ctx; + struct gtls_ssl_backend_data *backend = + (struct gtls_ssl_backend_data *)connssl->backend; struct Curl_easy *data = CF_DATA_CURRENT(cf); ssize_t nwritten; CURLcode result; DEBUGASSERT(data); nwritten = Curl_conn_cf_send(cf->next, data, buf, blen, &result); + CURL_TRC_CF(data, cf, "gtls_push(len=%zu) -> %zd, err=%d", + blen, nwritten, result); + backend->gtls.io_result = 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; @@ -104,15 +118,27 @@ static ssize_t gtls_pull(void *s, void *buf, size_t blen) { struct Curl_cfilter *cf = s; struct ssl_connect_data *connssl = cf->ctx; + struct gtls_ssl_backend_data *backend = + (struct gtls_ssl_backend_data *)connssl->backend; struct Curl_easy *data = CF_DATA_CURRENT(cf); ssize_t nread; CURLcode result; DEBUGASSERT(data); + if(!backend->gtls.shared_creds->trust_setup) { + result = Curl_gtls_client_trust_setup(cf, data, &backend->gtls); + if(result) { + gnutls_transport_set_errno(backend->gtls.session, EINVAL); + backend->gtls.io_result = result; + return -1; + } + } + nread = Curl_conn_cf_recv(cf->next, data, buf, blen, &result); + CURL_TRC_CF(data, cf, "glts_pull(len=%zu) -> %zd, err=%d", + blen, nread, result); + backend->gtls.io_result = 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; @@ -225,6 +251,7 @@ static CURLcode handshake(struct Curl_cfilter *cf, DEBUGASSERT(backend); session = backend->gtls.session; + connssl->connecting_state = ssl_connect_2; for(;;) { timediff_t timeout_ms; @@ -239,14 +266,13 @@ static CURLcode handshake(struct Curl_cfilter *cf, return CURLE_OPERATION_TIMEDOUT; } - /* 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 ssl is expecting something, check if it is available. */ + if(connssl->io_need) { int what; - curl_socket_t writefd = ssl_connect_2_writing == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; - curl_socket_t readfd = ssl_connect_2_reading == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; + curl_socket_t writefd = (connssl->io_need & CURL_SSL_IO_NEED_SEND)? + sockfd:CURL_SOCKET_BAD; + curl_socket_t readfd = (connssl->io_need & CURL_SSL_IO_NEED_RECV)? + sockfd:CURL_SOCKET_BAD; what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd, nonblocking?0: @@ -268,19 +294,29 @@ static CURLcode handshake(struct Curl_cfilter *cf, /* socket is readable or writable */ } + connssl->io_need = CURL_SSL_IO_NEED_NONE; + backend->gtls.io_result = CURLE_OK; rc = gnutls_handshake(session); + if(!backend->gtls.shared_creds->trust_setup) { + /* After having send off the ClientHello, we prepare the trust + * store to verify the coming certificate from the server */ + CURLcode result = Curl_gtls_client_trust_setup(cf, data, &backend->gtls); + if(result) + return result; + } + if((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED)) { - connssl->connecting_state = + connssl->io_need = gnutls_record_get_direction(session)? - ssl_connect_2_writing:ssl_connect_2_reading; + CURL_SSL_IO_NEED_SEND:CURL_SSL_IO_NEED_RECV; continue; } else if((rc < 0) && !gnutls_error_is_fatal(rc)) { const char *strerr = NULL; if(rc == GNUTLS_E_WARNING_ALERT_RECEIVED) { - int alert = gnutls_alert_get(session); + gnutls_alert_description_t alert = gnutls_alert_get(session); strerr = gnutls_alert_get_name(alert); } @@ -290,11 +326,14 @@ static CURLcode handshake(struct Curl_cfilter *cf, infof(data, "gnutls_handshake() warning: %s", strerr); continue; } + else if((rc < 0) && backend->gtls.io_result) { + return backend->gtls.io_result; + } else if(rc < 0) { const char *strerr = NULL; if(rc == GNUTLS_E_FATAL_ALERT_RECEIVED) { - int alert = gnutls_alert_get(session); + gnutls_alert_description_t alert = gnutls_alert_get(session); strerr = gnutls_alert_get_name(alert); } @@ -330,6 +369,7 @@ 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_peer *peer, struct ssl_primary_config *conn_config, const char **prioritylist, const char *tls13support) @@ -342,8 +382,19 @@ set_ssl_version_min_max(struct Curl_easy *data, ssl_version = CURL_SSLVERSION_TLSv1_0; if(ssl_version_max == CURL_SSLVERSION_MAX_NONE) ssl_version_max = CURL_SSLVERSION_MAX_DEFAULT; + + if(peer->transport == TRNSPRT_QUIC) { + if((ssl_version_max != CURL_SSLVERSION_MAX_DEFAULT) && + (ssl_version_max < CURL_SSLVERSION_MAX_TLSv1_3)) { + failf(data, "QUIC needs at least TLS version 1.3"); + return CURLE_SSL_CONNECT_ERROR; + } + *prioritylist = QUIC_PRIORITY; + return CURLE_OK; + } + if(!tls13support) { - /* If the running GnuTLS doesn't support TLS 1.3, we must not specify a + /* If the running GnuTLS does not support TLS 1.3, we must not specify a prioritylist involving that since it will make GnuTLS return an en error back at us */ if((ssl_version_max == CURL_SSLVERSION_MAX_TLSv1_3) || @@ -401,67 +452,67 @@ set_ssl_version_min_max(struct Curl_easy *data, return CURLE_SSL_CONNECT_ERROR; } -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) +CURLcode Curl_gtls_shared_creds_create(struct Curl_easy *data, + struct gtls_shared_creds **pcreds) { - unsigned int init_flags; + struct gtls_shared_creds *shared; int rc; - bool sni = TRUE; /* default is SNI enabled */ - const char *prioritylist; - const char *err = NULL; - const char *tls13support; - CURLcode result; - - if(!gtls_inited) - gtls_init(); - - *pverifyresult = 0; - if(config->version == CURL_SSLVERSION_SSLv2) { - failf(data, "GnuTLS does not support SSLv2"); - return CURLE_SSL_CONNECT_ERROR; - } - else if(config->version == CURL_SSLVERSION_SSLv3) - sni = FALSE; /* SSLv3 has no SNI */ + *pcreds = NULL; + shared = calloc(1, sizeof(*shared)); + if(!shared) + return CURLE_OUT_OF_MEMORY; - /* allocate a cred struct */ - rc = gnutls_certificate_allocate_credentials(>ls->cred); + rc = gnutls_certificate_allocate_credentials(&shared->creds); if(rc != GNUTLS_E_SUCCESS) { failf(data, "gnutls_cert_all_cred() failed: %s", gnutls_strerror(rc)); + free(shared); return CURLE_SSL_CONNECT_ERROR; } -#ifdef USE_GNUTLS_SRP - if(config->username && Curl_auth_allowed_to_host(data)) { - infof(data, "Using TLS-SRP username: %s", config->username); + shared->refcount = 1; + shared->time = Curl_now(); + *pcreds = shared; + return CURLE_OK; +} - rc = gnutls_srp_allocate_client_credentials(>ls->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; - } +CURLcode Curl_gtls_shared_creds_up_ref(struct gtls_shared_creds *creds) +{ + DEBUGASSERT(creds); + if(creds->refcount < SIZE_T_MAX) { + ++creds->refcount; + return CURLE_OK; + } + return CURLE_BAD_FUNCTION_ARGUMENT; +} - 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)); - return CURLE_BAD_FUNCTION_ARGUMENT; +void Curl_gtls_shared_creds_free(struct gtls_shared_creds **pcreds) +{ + struct gtls_shared_creds *shared = *pcreds; + *pcreds = NULL; + if(shared) { + --shared->refcount; + if(!shared->refcount) { + gnutls_certificate_free_credentials(shared->creds); + free(shared->CAfile); + free(shared); } } -#endif +} + +static CURLcode gtls_populate_creds(struct Curl_cfilter *cf, + struct Curl_easy *data, + gnutls_certificate_credentials_t creds) +{ + struct ssl_primary_config *config = Curl_ssl_cf_get_primary_config(cf); + struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data); + int rc; if(config->verifypeer) { bool imported_native_ca = false; if(ssl_config->native_ca_store) { - rc = gnutls_certificate_set_x509_system_trust(gtls->cred); + rc = gnutls_certificate_set_x509_system_trust(creds); if(rc < 0) infof(data, "error reading native ca store (%s), continuing anyway", gnutls_strerror(rc)); @@ -474,10 +525,10 @@ CURLcode gtls_client_init(struct Curl_easy *data, if(config->CAfile) { /* set the trusted CA cert bundle file */ - gnutls_certificate_set_verify_flags(gtls->cred, + gnutls_certificate_set_verify_flags(creds, GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT); - rc = gnutls_certificate_set_x509_trust_file(gtls->cred, + rc = gnutls_certificate_set_x509_trust_file(creds, config->CAfile, GNUTLS_X509_FMT_PEM); if(rc < 0) { @@ -485,7 +536,7 @@ CURLcode gtls_client_init(struct Curl_easy *data, config->CAfile, gnutls_strerror(rc), (imported_native_ca ? ", continuing anyway" : "")); if(!imported_native_ca) { - *pverifyresult = rc; + ssl_config->certverifyresult = rc; return CURLE_SSL_CACERT_BADFILE; } } @@ -495,15 +546,14 @@ CURLcode gtls_client_init(struct Curl_easy *data, if(config->CApath) { /* set the trusted CA cert directory */ - rc = gnutls_certificate_set_x509_trust_dir(gtls->cred, - config->CApath, + rc = gnutls_certificate_set_x509_trust_dir(creds, 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; + ssl_config->certverifyresult = rc; return CURLE_SSL_CACERT_BADFILE; } } @@ -514,8 +564,7 @@ CURLcode gtls_client_init(struct Curl_easy *data, if(config->CRLfile) { /* set the CRL list file */ - rc = gnutls_certificate_set_x509_crl_file(gtls->cred, - config->CRLfile, + rc = gnutls_certificate_set_x509_crl_file(creds, config->CRLfile, GNUTLS_X509_FMT_PEM); if(rc < 0) { failf(data, "error reading crl file %s (%s)", @@ -526,6 +575,269 @@ CURLcode gtls_client_init(struct Curl_easy *data, infof(data, "found %d CRL in %s", rc, config->CRLfile); } + return CURLE_OK; +} + +/* key to use at `multi->proto_hash` */ +#define MPROTO_GTLS_X509_KEY "tls:gtls:x509:share" + +static bool gtls_shared_creds_expired(const struct Curl_easy *data, + const struct gtls_shared_creds *sc) +{ + const struct ssl_general_config *cfg = &data->set.general_ssl; + struct curltime now = Curl_now(); + timediff_t elapsed_ms = Curl_timediff(now, sc->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 gtls_shared_creds_different(struct Curl_cfilter *cf, + const struct gtls_shared_creds *sc) +{ + struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf); + if(!sc->CAfile || !conn_config->CAfile) + return sc->CAfile != conn_config->CAfile; + + return strcmp(sc->CAfile, conn_config->CAfile); +} + +static struct gtls_shared_creds* +gtls_get_cached_creds(struct Curl_cfilter *cf, struct Curl_easy *data) +{ + struct gtls_shared_creds *shared_creds; + + if(data->multi) { + shared_creds = Curl_hash_pick(&data->multi->proto_hash, + (void *)MPROTO_GTLS_X509_KEY, + sizeof(MPROTO_GTLS_X509_KEY)-1); + if(shared_creds && shared_creds->creds && + !gtls_shared_creds_expired(data, shared_creds) && + !gtls_shared_creds_different(cf, shared_creds)) { + return shared_creds; + } + } + return NULL; +} + +static void gtls_shared_creds_hash_free(void *key, size_t key_len, void *p) +{ + struct gtls_shared_creds *sc = p; + DEBUGASSERT(key_len == (sizeof(MPROTO_GTLS_X509_KEY)-1)); + DEBUGASSERT(!memcmp(MPROTO_GTLS_X509_KEY, key, key_len)); + (void)key; + (void)key_len; + Curl_gtls_shared_creds_free(&sc); /* down reference */ +} + +static void gtls_set_cached_creds(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct gtls_shared_creds *sc) +{ + struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf); + + DEBUGASSERT(sc); + DEBUGASSERT(sc->creds); + DEBUGASSERT(!sc->CAfile); + DEBUGASSERT(sc->refcount == 1); + if(!data->multi) + return; + + if(conn_config->CAfile) { + sc->CAfile = strdup(conn_config->CAfile); + if(!sc->CAfile) + return; + } + + if(Curl_gtls_shared_creds_up_ref(sc)) + return; + + if(!Curl_hash_add2(&data->multi->proto_hash, + (void *)MPROTO_GTLS_X509_KEY, + sizeof(MPROTO_GTLS_X509_KEY)-1, + sc, gtls_shared_creds_hash_free)) { + Curl_gtls_shared_creds_free(&sc); /* down reference again */ + return; + } +} + +CURLcode Curl_gtls_client_trust_setup(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct gtls_ctx *gtls) +{ + 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 gtls_shared_creds *cached_creds = NULL; + bool cache_criteria_met; + CURLcode result; + int rc; + + + /* 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 && + !conn_config->clientcert; /* GnuTLS adds client cert to its credentials! */ + + if(cache_criteria_met) + cached_creds = gtls_get_cached_creds(cf, data); + + if(cached_creds && !Curl_gtls_shared_creds_up_ref(cached_creds)) { + CURL_TRC_CF(data, cf, "using shared trust anchors and CRLs"); + Curl_gtls_shared_creds_free(>ls->shared_creds); + gtls->shared_creds = cached_creds; + rc = gnutls_credentials_set(gtls->session, GNUTLS_CRD_CERTIFICATE, + gtls->shared_creds->creds); + if(rc != GNUTLS_E_SUCCESS) { + failf(data, "gnutls_credentials_set() failed: %s", gnutls_strerror(rc)); + return CURLE_SSL_CONNECT_ERROR; + } + } + else { + CURL_TRC_CF(data, cf, "loading trust anchors and CRLs"); + result = gtls_populate_creds(cf, data, gtls->shared_creds->creds); + if(result) + return result; + gtls->shared_creds->trust_setup = TRUE; + if(cache_criteria_met) + gtls_set_cached_creds(cf, data, gtls->shared_creds); + } + return CURLE_OK; +} + +static void gtls_sessionid_free(void *sessionid, size_t idsize) +{ + (void)idsize; + free(sessionid); +} + +static CURLcode gtls_update_session_id(struct Curl_cfilter *cf, + struct Curl_easy *data, + gnutls_session_t session) +{ + struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data); + struct ssl_connect_data *connssl = cf->ctx; + CURLcode result = CURLE_OK; + + if(ssl_config->primary.cache_session) { + /* 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 + detect that. */ + void *connect_sessionid; + size_t connect_idsize = 0; + + /* get the session ID data size */ + gnutls_session_get_data(session, NULL, &connect_idsize); + connect_sessionid = malloc(connect_idsize); /* get a buffer for it */ + if(!connect_sessionid) { + return CURLE_OUT_OF_MEMORY; + } + else { + /* extract session ID to the allocated buffer */ + gnutls_session_get_data(session, connect_sessionid, &connect_idsize); + + CURL_TRC_CF(data, cf, "get session id (len=%zu) and store in cache", + connect_idsize); + Curl_ssl_sessionid_lock(data); + /* store this session id, takes ownership */ + result = Curl_ssl_set_sessionid(cf, data, &connssl->peer, + connect_sessionid, connect_idsize, + gtls_sessionid_free); + Curl_ssl_sessionid_unlock(data); + } + } + return result; +} + +static int gtls_handshake_cb(gnutls_session_t session, unsigned int htype, + unsigned when, unsigned int incoming, + const gnutls_datum_t *msg) +{ + struct Curl_cfilter *cf = gnutls_session_get_ptr(session); + + (void)msg; + (void)incoming; + if(when) { /* after message has been processed */ + struct Curl_easy *data = CF_DATA_CURRENT(cf); + if(data) { + CURL_TRC_CF(data, cf, "handshake: %s message type %d", + incoming? "incoming" : "outgoing", htype); + switch(htype) { + case GNUTLS_HANDSHAKE_NEW_SESSION_TICKET: { + gtls_update_session_id(cf, data, session); + break; + } + default: + break; + } + } + } + return 0; +} + +static CURLcode gtls_client_init(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct ssl_peer *peer, + struct gtls_ctx *gtls) +{ + struct ssl_primary_config *config = Curl_ssl_cf_get_primary_config(cf); + struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data); + unsigned int init_flags; + int rc; + bool sni = TRUE; /* default is SNI enabled */ + const char *prioritylist; + const char *err = NULL; + const char *tls13support; + CURLcode result; + + if(!gtls_inited) + gtls_init(); + + if(config->version == CURL_SSLVERSION_SSLv2) { + failf(data, "GnuTLS does not support SSLv2"); + return CURLE_SSL_CONNECT_ERROR; + } + else if(config->version == CURL_SSLVERSION_SSLv3) + sni = FALSE; /* SSLv3 has no SNI */ + + /* allocate a shared creds struct */ + result = Curl_gtls_shared_creds_create(data, >ls->shared_creds); + if(result) + return result; + +#ifdef USE_GNUTLS_SRP + if(config->username && Curl_auth_allowed_to_host(data)) { + infof(data, "Using TLS-SRP username: %s", config->username); + + rc = gnutls_srp_allocate_client_credentials(>ls->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(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)); + return CURLE_BAD_FUNCTION_ARGUMENT; + } + } +#endif + + ssl_config->certverifyresult = 0; + /* Initialize TLS session as a client */ init_flags = GNUTLS_CLIENT; @@ -561,7 +873,7 @@ CURLcode gtls_client_init(struct Curl_easy *data, tls13support = gnutls_check_version("3.6.5"); /* Ensure +SRP comes at the *end* of all relevant strings so that it can be - * removed if a run-time error indicates that SRP is not supported by this + * removed if a runtime error indicates that SRP is not supported by this * GnuTLS version */ if(config->version == CURL_SSLVERSION_SSLv2 || @@ -578,7 +890,8 @@ CURLcode gtls_client_init(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, config, &prioritylist, tls13support); + result = set_ssl_version_min_max(data, peer, + config, &prioritylist, tls13support); if(result) return result; @@ -611,6 +924,11 @@ CURLcode gtls_client_init(struct Curl_easy *data, } if(config->clientcert) { + if(!gtls->shared_creds->trust_setup) { + result = Curl_gtls_client_trust_setup(cf, data, gtls); + if(result) + return result; + } if(ssl_config->key_passwd) { const unsigned int supported_key_encryption_algorithms = GNUTLS_PKCS_USE_PKCS12_3DES | GNUTLS_PKCS_USE_PKCS12_ARCFOUR | @@ -618,7 +936,7 @@ CURLcode gtls_client_init(struct Curl_easy *data, 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( - gtls->cred, + gtls->shared_creds->creds, config->clientcert, ssl_config->key ? ssl_config->key : config->clientcert, do_file_type(ssl_config->cert_type), @@ -633,7 +951,7 @@ CURLcode gtls_client_init(struct Curl_easy *data, } else { if(gnutls_certificate_set_x509_key_file( - gtls->cred, + gtls->shared_creds->creds, config->clientcert, ssl_config->key ? ssl_config->key : config->clientcert, do_file_type(ssl_config->cert_type) ) != @@ -658,7 +976,7 @@ CURLcode gtls_client_init(struct Curl_easy *data, #endif { rc = gnutls_credentials_set(gtls->session, GNUTLS_CRD_CERTIFICATE, - gtls->cred); + gtls->shared_creds->creds); if(rc != GNUTLS_E_SUCCESS) { failf(data, "gnutls_credentials_set() failed: %s", gnutls_strerror(rc)); return CURLE_SSL_CONNECT_ERROR; @@ -677,65 +995,136 @@ CURLcode gtls_client_init(struct Curl_easy *data, return CURLE_OK; } -static CURLcode -gtls_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) +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; +} + +CURLcode Curl_gtls_ctx_init(struct gtls_ctx *gctx, + struct Curl_cfilter *cf, + struct Curl_easy *data, + struct ssl_peer *peer, + const unsigned char *alpn, size_t alpn_len, + Curl_gtls_ctx_setup_cb *cb_setup, + void *cb_user_data, + void *ssl_user_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; - 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; + DEBUGASSERT(gctx); - result = gtls_client_init(data, conn_config, ssl_config, - &connssl->peer, - &backend->gtls, pverifyresult); + result = gtls_client_init(cf, data, peer, gctx); if(result) return result; - if(connssl->alpn) { - struct alpn_proto_buf proto; - gnutls_datum_t alpn[ALPN_ENTRIES_MAX]; - size_t i; + gnutls_session_set_ptr(gctx->session, ssl_user_data); - 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(cb_setup) { + result = cb_setup(cf, data, cb_user_data); + if(result) + return result; + } + + /* 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(gctx->session, keylog_callback); + } + + /* convert the ALPN string from our arguments to a list of strings + * that gnutls wants and will convert internally back to this very + * string for sending to the server. nice. */ + if(alpn && alpn_len) { + gnutls_datum_t alpns[5]; + size_t i, alen = alpn_len; + unsigned char *s = (unsigned char *)alpn; + unsigned char slen; + for(i = 0; (i < ARRAYSIZE(alpns)) && alen; ++i) { + slen = s[0]; + if(slen >= alen) + return CURLE_FAILED_INIT; + alpns[i].data = s + 1; + alpns[i].size = slen; + s += slen + 1; + alen -= (size_t)slen + 1; } - if(gnutls_alpn_set_protocols(backend->gtls.session, alpn, - (unsigned)connssl->alpn->count, 0)) { + if(alen) /* not all alpn chars used, wrong format or too many */ + return CURLE_FAILED_INIT; + if(i && gnutls_alpn_set_protocols(gctx->session, + alpns, (unsigned int)i, + GNUTLS_ALPN_MANDATORY)) { 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(conn_config->sessionid) { + if(conn_config->cache_session) { void *ssl_sessionid; size_t ssl_idsize; Curl_ssl_sessionid_lock(data); - if(!Curl_ssl_getsessionid(cf, data, &ssl_sessionid, &ssl_idsize)) { + if(!Curl_ssl_getsessionid(cf, data, peer, &ssl_sessionid, &ssl_idsize)) { /* we got a session id, use it! */ - gnutls_session_set_data(backend->gtls.session, - ssl_sessionid, ssl_idsize); + int rc; - /* Informational message */ - infof(data, "SSL reusing session ID"); + rc = gnutls_session_set_data(gctx->session, ssl_sessionid, ssl_idsize); + if(rc < 0) + infof(data, "SSL failed to set session ID"); + else + infof(data, "SSL reusing session ID (size=%zu)", ssl_idsize); } Curl_ssl_sessionid_unlock(data); } + 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 alpn_proto_buf proto; + CURLcode result; + + DEBUGASSERT(backend); + DEBUGASSERT(ssl_connect_1 == connssl->connecting_state); + + if(connssl->state == ssl_connection_complete) + /* to make us tolerant against being called more than once for the + same connection */ + return CURLE_OK; + + memset(&proto, 0, sizeof(proto)); + if(connssl->alpn) { + result = Curl_alpn_to_proto_buf(&proto, connssl->alpn); + if(result) { + failf(data, "Error determining ALPN"); + return CURLE_SSL_CONNECT_ERROR; + } + } + + result = Curl_gtls_ctx_init(&backend->gtls, cf, data, &connssl->peer, + proto.data, proto.len, NULL, NULL, cf); + if(result) + return result; + + gnutls_handshake_set_hook_function(backend->gtls.session, + GNUTLS_HANDSHAKE_ANY, GNUTLS_HOOK_POST, + gtls_handshake_cb); /* register callback functions and handle to send and receive data. */ gnutls_transport_set_ptr(backend->gtls.session, cf); @@ -758,7 +1147,7 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data, /* Result is returned to caller */ CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH; - /* if a path wasn't specified, don't pin */ + /* if a path was not specified, do not pin */ if(!pinnedpubkey) return CURLE_OK; @@ -824,7 +1213,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data, CURLcode result = CURLE_OK; #ifndef CURL_DISABLE_VERBOSE_STRINGS const char *ptr; - unsigned int algo; + int algo; unsigned int bits; gnutls_protocol_t version = gnutls_protocol_get_version(session); #endif @@ -866,13 +1255,13 @@ Curl_gtls_verifyserver(struct Curl_easy *data, } #endif } - infof(data, " common name: WARNING couldn't obtain"); + infof(data, " common name: WARNING could not obtain"); } if(data->set.ssl.certinfo && chainp) { unsigned int i; - result = Curl_ssl_init_certinfo(data, cert_list_size); + result = Curl_ssl_init_certinfo(data, (int)cert_list_size); if(result) return result; @@ -880,7 +1269,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data, const char *beg = (const char *) chainp[i].data; const char *end = beg + chainp[i].size; - result = Curl_extract_certinfo(data, i, beg, end); + result = Curl_extract_certinfo(data, (int)i, beg, end); if(result) return result; } @@ -1037,7 +1426,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data, gnutls_x509_crt_init(&x509_issuer); 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); + rc = (int)gnutls_x509_crt_check_issuer(x509_cert, x509_issuer); gnutls_x509_crt_deinit(x509_issuer); unload_file(issuerp); if(rc <= 0) { @@ -1066,12 +1455,18 @@ 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, peer->hostname); + + /* This function does not handle trailing dots, so if we have an SNI name + use that and fallback to the hostname only if there is no SNI (like for + IP addresses) */ + rc = (int)gnutls_x509_crt_check_hostname(x509_cert, + peer->sni ? peer->sni : + peer->hostname); #if GNUTLS_VERSION_NUMBER < 0x030306 - /* Before 3.3.6, gnutls_x509_crt_check_hostname() didn't check IP + /* Before 3.3.6, gnutls_x509_crt_check_hostname() did not check IP addresses. */ if(!rc) { -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 #define use_addr in6_addr #else #define use_addr in_addr @@ -1081,7 +1476,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data, if(Curl_inet_pton(AF_INET, peer->hostname, addrbuf) > 0) addrlen = 4; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else if(Curl_inet_pton(AF_INET6, peer->hostname, addrbuf) > 0) addrlen = 16; #endif @@ -1094,7 +1489,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data, size_t certaddrlen = sizeof(certaddr); int ret = gnutls_x509_crt_get_subject_alt_name(x509_cert, i, certaddr, &certaddrlen, NULL); - /* If this happens, it wasn't an IP address. */ + /* If this happens, it was not an IP address. */ if(ret == GNUTLS_E_SHORT_MEMORY_BUFFER) continue; if(ret < 0) @@ -1112,7 +1507,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data, if(!rc) { if(config->verifyhost) { failf(data, "SSL: certificate subject name (%s) does not match " - "target host name '%s'", certname, peer->dispname); + "target hostname '%s'", certname, peer->dispname); gnutls_x509_crt_deinit(x509_cert); return CURLE_PEER_FAILED_VERIFICATION; } @@ -1201,7 +1596,7 @@ Curl_gtls_verifyserver(struct Curl_easy *data, /* public key algorithm's parameters */ algo = gnutls_x509_crt_get_pk_algorithm(x509_cert, &bits); infof(data, " certificate public key: %s", - gnutls_pk_algorithm_get_name(algo)); + gnutls_pk_algorithm_get_name((gnutls_pk_algorithm_t)algo)); /* version of the X.509 certificate. */ infof(data, " certificate version: #%d", @@ -1245,9 +1640,13 @@ static CURLcode gtls_verifyserver(struct Curl_cfilter *cf, 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); +#ifndef CURL_DISABLE_PROXY const char *pinned_key = Curl_ssl_cf_is_proxy(cf)? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]: data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#else + const char *pinned_key = data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#endif CURLcode result; result = Curl_gtls_verifyserver(data, session, conn_config, ssl_config, @@ -1266,47 +1665,10 @@ static CURLcode gtls_verifyserver(struct Curl_cfilter *cf, Curl_alpn_set_negotiated(cf, data, NULL, 0); } - 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 - detect that. */ - void *connect_sessionid; - size_t connect_idsize = 0; - - /* get the session ID data size */ - gnutls_session_get_data(session, NULL, &connect_idsize); - connect_sessionid = malloc(connect_idsize); /* get a buffer for it */ - - if(connect_sessionid) { - bool incache; - bool added = FALSE; - void *ssl_sessionid; - - /* extract session ID to the allocated buffer */ - gnutls_session_get_data(session, connect_sessionid, &connect_idsize); - - Curl_ssl_sessionid_lock(data); - 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 */ - Curl_ssl_delsessionid(data, ssl_sessionid); - } - - /* store this session id */ - result = Curl_ssl_addsessionid(cf, data, connect_sessionid, - connect_idsize, &added); - Curl_ssl_sessionid_unlock(data); - if(!added) - free(connect_sessionid); - if(result) { - result = CURLE_OUT_OF_MEMORY; - } - } - else - result = CURLE_OUT_OF_MEMORY; - } + /* Only on TLSv1.2 or lower do we have the session id now. For + * TLSv1.3 we get it via a SESSION_TICKET message that arrives later. */ + if(gnutls_protocol_get_version(session) < GNUTLS_TLS1_3) + result = gtls_update_session_id(cf, data, session); out: return result; @@ -1318,8 +1680,8 @@ static CURLcode gtls_verifyserver(struct Curl_cfilter *cf, */ /* We use connssl->connecting_state to keep track of the connection status; there are three states: 'ssl_connect_1' (not started yet or complete), - 'ssl_connect_2_reading' (waiting for data from server), and - 'ssl_connect_2_writing' (waiting to be able to write). + 'ssl_connect_2' (doing handshake with the server), and + 'ssl_connect_3' (verifying and getting stats). */ static CURLcode gtls_connect_common(struct Curl_cfilter *cf, @@ -1328,7 +1690,7 @@ gtls_connect_common(struct Curl_cfilter *cf, bool *done) { struct ssl_connect_data *connssl = cf->ctx; - int rc; + CURLcode rc; CURLcode result = CURLE_OK; /* Initiate the connection, if not already done */ @@ -1418,12 +1780,13 @@ static ssize_t gtls_send(struct Curl_cfilter *cf, (void)data; DEBUGASSERT(backend); + backend->gtls.io_result = CURLE_OK; rc = gnutls_record_send(backend->gtls.session, mem, len); if(rc < 0) { - *curlcode = (rc == GNUTLS_E_AGAIN) - ? CURLE_AGAIN - : CURLE_SEND_ERROR; + *curlcode = (rc == GNUTLS_E_AGAIN)? + CURLE_AGAIN : + (backend->gtls.io_result? backend->gtls.io_result : CURLE_SEND_ERROR); rc = -1; } @@ -1431,118 +1794,104 @@ static ssize_t gtls_send(struct Curl_cfilter *cf, return rc; } -static void gtls_close(struct Curl_cfilter *cf, - struct Curl_easy *data) +/* + * This function is called to shut down the SSL layer but keep the + * socket open (CCC - Clear Command Channel) + */ +static CURLcode gtls_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool send_shutdown, bool *done) { struct ssl_connect_data *connssl = cf->ctx; struct gtls_ssl_backend_data *backend = (struct gtls_ssl_backend_data *)connssl->backend; + char buf[1024]; + CURLcode result = CURLE_OK; + ssize_t nread; + size_t i; - (void) data; DEBUGASSERT(backend); + if(!backend->gtls.session || cf->shutdown) { + *done = TRUE; + goto out; + } - 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->gtls.session, buf, sizeof(buf)); - gnutls_bye(backend->gtls.session, GNUTLS_SHUT_WR); - gnutls_deinit(backend->gtls.session); - backend->gtls.session = NULL; + connssl->io_need = CURL_SSL_IO_NEED_NONE; + *done = FALSE; + + if(!backend->gtls.sent_shutdown) { + /* do this only once */ + backend->gtls.sent_shutdown = TRUE; + if(send_shutdown) { + int ret = gnutls_bye(backend->gtls.session, GNUTLS_SHUT_RDWR); + if((ret == GNUTLS_E_AGAIN) || (ret == GNUTLS_E_INTERRUPTED)) { + CURL_TRC_CF(data, cf, "SSL shutdown, gnutls_bye EAGAIN"); + connssl->io_need = gnutls_record_get_direction(backend->gtls.session)? + CURL_SSL_IO_NEED_SEND : CURL_SSL_IO_NEED_RECV; + result = CURLE_OK; + goto out; + } + if(ret != GNUTLS_E_SUCCESS) { + CURL_TRC_CF(data, cf, "SSL shutdown, gnutls_bye error: '%s'(%d)", + gnutls_strerror((int)ret), (int)ret); + result = CURLE_RECV_ERROR; + goto out; + } + } } - if(backend->gtls.cred) { - gnutls_certificate_free_credentials(backend->gtls.cred); - backend->gtls.cred = NULL; + + /* SSL should now have started the shutdown from our side. Since it + * was not complete, we are lacking the close notify from the server. */ + for(i = 0; i < 10; ++i) { + nread = gnutls_record_recv(backend->gtls.session, buf, sizeof(buf)); + if(nread <= 0) + break; } -#ifdef USE_GNUTLS_SRP - if(backend->gtls.srp_client_cred) { - gnutls_srp_free_client_credentials(backend->gtls.srp_client_cred); - backend->gtls.srp_client_cred = NULL; + if(nread > 0) { + /* still data coming in? */ } -#endif + else if(nread == 0) { + /* We got the close notify alert and are done. */ + *done = TRUE; + } + else if((nread == GNUTLS_E_AGAIN) || (nread == GNUTLS_E_INTERRUPTED)) { + connssl->io_need = gnutls_record_get_direction(backend->gtls.session)? + CURL_SSL_IO_NEED_SEND : CURL_SSL_IO_NEED_RECV; + } + else { + CURL_TRC_CF(data, cf, "SSL shutdown, error: '%s'(%d)", + gnutls_strerror((int)nread), (int)nread); + result = CURLE_RECV_ERROR; + } + +out: + cf->shutdown = (result || *done); + return result; } -/* - * 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_cfilter *cf, - struct Curl_easy *data) +static void gtls_close(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; - int retval = 0; + (void) data; DEBUGASSERT(backend); - -#ifndef CURL_DISABLE_FTP - /* This has only been tested on the proftpd server, and the mod_tls code - sends a close notify alert without waiting for a close notify alert in - response. Thus we wait for a close notify alert from the server, but - we do not send one. Let's hope other servers do the same... */ - - if(data->set.ftp_ccc == CURLFTPSSL_CCC_ACTIVE) - gnutls_bye(backend->gtls.session, GNUTLS_SHUT_WR); -#endif - + CURL_TRC_CF(data, cf, "close"); if(backend->gtls.session) { - ssize_t result; - bool done = FALSE; - char buf[120]; - - while(!done && !connssl->peer_closed) { - 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->gtls.session, - buf, sizeof(buf)); - switch(result) { - case 0: - /* This is the expected response. There was no data but only - the close notify alert */ - done = TRUE; - break; - case GNUTLS_E_AGAIN: - case GNUTLS_E_INTERRUPTED: - infof(data, "GNUTLS_E_AGAIN || GNUTLS_E_INTERRUPTED"); - break; - default: - retval = -1; - done = TRUE; - break; - } - } - else if(0 == what) { - /* timeout */ - failf(data, "SSL shutdown timeout"); - done = TRUE; - } - else { - /* anything that gets here is fatally bad */ - failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO); - retval = -1; - done = TRUE; - } - } gnutls_deinit(backend->gtls.session); + backend->gtls.session = NULL; + } + if(backend->gtls.shared_creds) { + Curl_gtls_shared_creds_free(&backend->gtls.shared_creds); } - gnutls_certificate_free_credentials(backend->gtls.cred); - #ifdef USE_GNUTLS_SRP - { - 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); + if(backend->gtls.srp_client_cred) { + gnutls_srp_free_client_credentials(backend->gtls.srp_client_cred); + backend->gtls.srp_client_cred = NULL; } #endif - - backend->gtls.cred = NULL; - backend->gtls.session = NULL; - - return retval; } static ssize_t gtls_recv(struct Curl_cfilter *cf, @@ -1559,6 +1908,7 @@ static ssize_t gtls_recv(struct Curl_cfilter *cf, (void)data; DEBUGASSERT(backend); + backend->gtls.io_result = CURLE_OK; ret = gnutls_record_recv(backend->gtls.session, buf, buffersize); if((ret == GNUTLS_E_AGAIN) || (ret == GNUTLS_E_INTERRUPTED)) { *curlcode = CURLE_AGAIN; @@ -1583,7 +1933,8 @@ static ssize_t gtls_recv(struct Curl_cfilter *cf, failf(data, "GnuTLS recv error (%d): %s", (int)ret, gnutls_strerror((int)ret)); - *curlcode = CURLE_RECV_ERROR; + *curlcode = backend->gtls.io_result? + backend->gtls.io_result : CURLE_RECV_ERROR; ret = -1; goto out; } @@ -1592,11 +1943,6 @@ static ssize_t gtls_recv(struct Curl_cfilter *cf, return ret; } -static void gtls_session_free(void *ptr) -{ - free(ptr); -} - static size_t gtls_version(char *buffer, size_t size) { return msnprintf(buffer, size, "GnuTLS/%s", gnutls_check_version(NULL)); @@ -1645,7 +1991,8 @@ const struct Curl_ssl Curl_ssl_gnutls = { SSLSUPP_CA_PATH | SSLSUPP_CERTINFO | SSLSUPP_PINNEDPUBKEY | - SSLSUPP_HTTPS_PROXY, + SSLSUPP_HTTPS_PROXY | + SSLSUPP_CA_CACHE, sizeof(struct gtls_ssl_backend_data), @@ -1663,7 +2010,6 @@ const struct Curl_ssl Curl_ssl_gnutls = { gtls_get_internals, /* get_internals */ gtls_close, /* close_one */ Curl_none_close_all, /* close_all */ - gtls_session_free, /* session_free */ Curl_none_set_engine, /* set_engine */ Curl_none_set_engine_default, /* set_engine_default */ Curl_none_engines_list, /* engines_list */ @@ -1671,7 +2017,6 @@ const struct Curl_ssl Curl_ssl_gnutls = { gtls_sha256sum, /* sha256sum */ NULL, /* associate_connection */ NULL, /* disassociate_connection */ - NULL, /* free_multi_ssl_backend_data */ gtls_recv, /* recv decrypted data */ gtls_send, /* send data to encrypt */ }; diff --git a/lib/vtls/gtls.h b/lib/vtls/gtls.h index 1a81c01e9..b0ca55bfb 100644 --- a/lib/vtls/gtls.h +++ b/lib/vtls/gtls.h @@ -30,6 +30,7 @@ #ifdef USE_GNUTLS #include +#include "timeval.h" #ifdef HAVE_GNUTLS_SRP /* the function exists */ @@ -45,29 +46,52 @@ struct ssl_primary_config; struct ssl_config_data; struct ssl_peer; -struct gtls_instance { +struct gtls_shared_creds { + gnutls_certificate_credentials_t creds; + char *CAfile; /* CAfile path used to generate X509 store */ + struct curltime time; /* when the shared creds was created */ + size_t refcount; + BIT(trust_setup); /* x509 anchors + CRLs have been set up */ +}; + +CURLcode Curl_gtls_shared_creds_create(struct Curl_easy *data, + struct gtls_shared_creds **pcreds); +CURLcode Curl_gtls_shared_creds_up_ref(struct gtls_shared_creds *creds); +void Curl_gtls_shared_creds_free(struct gtls_shared_creds **pcreds); + +struct gtls_ctx { gnutls_session_t session; - gnutls_certificate_credentials_t cred; + struct gtls_shared_creds *shared_creds; #ifdef USE_GNUTLS_SRP gnutls_srp_client_credentials_t srp_client_cred; #endif + CURLcode io_result; /* result of last IO cfilter operation */ + BIT(sent_shutdown); }; -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); +typedef CURLcode Curl_gtls_ctx_setup_cb(struct Curl_cfilter *cf, + struct Curl_easy *data, + void *user_data); + +CURLcode Curl_gtls_ctx_init(struct gtls_ctx *gctx, + struct Curl_cfilter *cf, + struct Curl_easy *data, + struct ssl_peer *peer, + const unsigned char *alpn, size_t alpn_len, + Curl_gtls_ctx_setup_cb *cb_setup, + void *cb_user_data, + void *ssl_user_data); + +CURLcode Curl_gtls_client_trust_setup(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct gtls_ctx *gtls); -CURLcode -Curl_gtls_verifyserver(struct Curl_easy *data, - gnutls_session_t session, - struct ssl_primary_config *config, - struct ssl_config_data *ssl_config, - struct ssl_peer *peer, - const char *pinned_key); +CURLcode Curl_gtls_verifyserver(struct Curl_easy *data, + gnutls_session_t session, + 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; diff --git a/lib/vtls/hostcheck.c b/lib/vtls/hostcheck.c index 2726dca7f..e46439a5e 100644 --- a/lib/vtls/hostcheck.c +++ b/lib/vtls/hostcheck.c @@ -62,7 +62,7 @@ static bool pmatch(const char *hostname, size_t hostlen, * We use the matching rule described in RFC6125, section 6.4.3. * https://datatracker.ietf.org/doc/html/rfc6125#section-6.4.3 * - * In addition: ignore trailing dots in the host names and wildcards, so that + * In addition: ignore trailing dots in the hostnames and wildcards, so that * the names are used normalized. This is what the browsers do. * * Do not allow wildcard matching on IP numbers. There are apparently diff --git a/lib/vtls/hostcheck.h b/lib/vtls/hostcheck.h index 22a1ac2e5..6b4e37964 100644 --- a/lib/vtls/hostcheck.h +++ b/lib/vtls/hostcheck.h @@ -26,7 +26,7 @@ #include -/* returns TRUE if there's a match */ +/* returns TRUE if there is a match */ bool Curl_cert_hostcheck(const char *match_pattern, size_t matchlen, const char *hostname, size_t hostlen); diff --git a/lib/vtls/keylog.c b/lib/vtls/keylog.c index fbcb25cfb..ab7baaaec 100644 --- a/lib/vtls/keylog.c +++ b/lib/vtls/keylog.c @@ -24,6 +24,7 @@ #include "curl_setup.h" #if defined(USE_OPENSSL) || \ + defined(USE_GNUTLS) || \ defined(USE_WOLFSSL) || \ (defined(USE_NGTCP2) && defined(USE_NGHTTP3)) || \ defined(USE_QUICHE) diff --git a/lib/vtls/mbedtls.c b/lib/vtls/mbedtls.c index 5f07e78ef..2b6042df3 100644 --- a/lib/vtls/mbedtls.c +++ b/lib/vtls/mbedtls.c @@ -67,12 +67,15 @@ #pragma GCC diagnostic pop #endif +#include "cipher_suite.h" +#include "strcase.h" #include "urldata.h" #include "sendf.h" #include "inet_pton.h" #include "mbedtls.h" #include "vtls.h" #include "vtls_int.h" +#include "x509asn1.h" #include "parsedate.h" #include "connect.h" /* for the connect timeout */ #include "select.h" @@ -107,6 +110,9 @@ struct mbed_ssl_backend_data { #ifdef HAS_ALPN const char *protocols[3]; #endif + int *ciphersuites; + BIT(initialized); /* mbedtls_ssl_context is initialized */ + BIT(sent_shutdown); }; /* apply threading? */ @@ -119,6 +125,10 @@ struct mbed_ssl_backend_data { #define mbedtls_strerror(a,b,c) b[0] = 0 #endif +#if defined(MBEDTLS_SSL_PROTO_TLS1_3) && MBEDTLS_VERSION_NUMBER >= 0x03060000 +#define TLS13_SUPPORT +#endif + #if defined(THREADING_SUPPORT) static mbedtls_entropy_context ts_entropy; @@ -163,15 +173,18 @@ static int entropy_func_mutex(void *data, unsigned char *output, size_t len) static void mbed_debug(void *context, int level, const char *f_name, int line_nb, const char *line) { - struct Curl_easy *data = NULL; - - if(!context) - return; - - data = (struct Curl_easy *)context; - - infof(data, "%s", line); + struct Curl_easy *data = (struct Curl_easy *)context; (void) level; + (void) line_nb; + (void) f_name; + + if(data) { + size_t len = strlen(line); + if(len && (line[len - 1] == '\n')) + /* discount any trailing newline */ + len--; + infof(data, "%.*s", (int)len, line); + } } #endif @@ -236,8 +249,8 @@ static const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_fr = 1024, /* RSA min key len */ }; -/* See https://tls.mbed.org/discussions/generic/ - howto-determine-exact-buffer-len-for-mbedtls_pk_write_pubkey_der +/* See https://web.archive.org/web/20200921194007/tls.mbed.org/discussions/ + generic/howto-determine-exact-buffer-len-for-mbedtls_pk_write_pubkey_der */ #define RSA_PUB_DER_MAX_BYTES (38 + 2 * MBEDTLS_MPI_MAX_SIZE) #define ECP_PUB_DER_MAX_BYTES (30 + 2 * MBEDTLS_ECP_MAX_BYTES) @@ -256,7 +269,12 @@ static CURLcode mbedtls_version_from_curl( *mbedver = MBEDTLS_SSL_VERSION_TLS1_2; return CURLE_OK; case CURL_SSLVERSION_TLSv1_3: +#ifdef TLS13_SUPPORT + *mbedver = MBEDTLS_SSL_VERSION_TLS1_3; + return CURLE_OK; +#else break; +#endif } return CURLE_SSL_CONNECT_ERROR; @@ -303,7 +321,11 @@ set_ssl_version_min_max(struct Curl_cfilter *cf, struct Curl_easy *data) struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf); #if MBEDTLS_VERSION_NUMBER >= 0x03020000 mbedtls_ssl_protocol_version mbedtls_ver_min = MBEDTLS_SSL_VERSION_TLS1_2; +#ifdef TLS13_SUPPORT + mbedtls_ssl_protocol_version mbedtls_ver_max = MBEDTLS_SSL_VERSION_TLS1_3; +#else mbedtls_ssl_protocol_version mbedtls_ver_max = MBEDTLS_SSL_VERSION_TLS1_2; +#endif #elif MBEDTLS_VERSION_NUMBER >= 0x03000000 int mbedtls_ver_min = MBEDTLS_SSL_MINOR_VERSION_3; int mbedtls_ver_max = MBEDTLS_SSL_MINOR_VERSION_3; @@ -327,7 +349,11 @@ set_ssl_version_min_max(struct Curl_cfilter *cf, struct Curl_easy *data) switch(ssl_version_max) { case CURL_SSLVERSION_MAX_NONE: case CURL_SSLVERSION_MAX_DEFAULT: +#ifdef TLS13_SUPPORT + ssl_version_max = CURL_SSLVERSION_MAX_TLSv1_3; +#else ssl_version_max = CURL_SSLVERSION_MAX_TLSv1_2; +#endif break; } @@ -352,9 +378,127 @@ set_ssl_version_min_max(struct Curl_cfilter *cf, struct Curl_easy *data) mbedtls_ver_max); #endif +#ifdef TLS13_SUPPORT + if(mbedtls_ver_min == MBEDTLS_SSL_VERSION_TLS1_3) { + mbedtls_ssl_conf_authmode(&backend->config, MBEDTLS_SSL_VERIFY_REQUIRED); + } + else { + mbedtls_ssl_conf_authmode(&backend->config, MBEDTLS_SSL_VERIFY_OPTIONAL); + } +#else + mbedtls_ssl_conf_authmode(&backend->config, MBEDTLS_SSL_VERIFY_OPTIONAL); +#endif + return result; } +/* TLS_ECJPAKE_WITH_AES_128_CCM_8 (0xC0FF) is marked experimental + in mbedTLS. The number is not reserved by IANA nor is the + cipher suite present in other SSL implementations. Provide + provisional support for specifying the cipher suite here. */ +#ifdef MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8 +static int +mbed_cipher_suite_get_str(uint16_t id, char *buf, size_t buf_size, + bool prefer_rfc) +{ + if(id == MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8) + msnprintf(buf, buf_size, "%s", "TLS_ECJPAKE_WITH_AES_128_CCM_8"); + else + return Curl_cipher_suite_get_str(id, buf, buf_size, prefer_rfc); + return 0; +} + +static uint16_t +mbed_cipher_suite_walk_str(const char **str, const char **end) +{ + uint16_t id = Curl_cipher_suite_walk_str(str, end); + size_t len = *end - *str; + + if(!id) { + if(strncasecompare("TLS_ECJPAKE_WITH_AES_128_CCM_8", *str, len)) + id = MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8; + } + return id; +} +#else +#define mbed_cipher_suite_get_str Curl_cipher_suite_get_str +#define mbed_cipher_suite_walk_str Curl_cipher_suite_walk_str +#endif + +static CURLcode +mbed_set_selected_ciphers(struct Curl_easy *data, + struct mbed_ssl_backend_data *backend, + const char *ciphers) +{ + const int *supported; + int *selected; + size_t supported_len, count = 0, i; + const char *ptr, *end; + + supported = mbedtls_ssl_list_ciphersuites(); + for(i = 0; supported[i] != 0; i++); + supported_len = i; + + selected = malloc(sizeof(int) * (supported_len + 1)); + if(!selected) + return CURLE_OUT_OF_MEMORY; + + for(ptr = ciphers; ptr[0] != '\0' && count < supported_len; ptr = end) { + uint16_t id = mbed_cipher_suite_walk_str(&ptr, &end); + + /* Check if cipher is supported */ + if(id) { + for(i = 0; i < supported_len && supported[i] != id; i++); + if(i == supported_len) + id = 0; + } + if(!id) { + if(ptr[0] != '\0') + infof(data, "mbedTLS: unknown cipher in list: \"%.*s\"", + (int) (end - ptr), ptr); + continue; + } + + /* No duplicates allowed (so selected cannot overflow) */ + for(i = 0; i < count && selected[i] != id; i++); + if(i < count) { + infof(data, "mbedTLS: duplicate cipher in list: \"%.*s\"", + (int) (end - ptr), ptr); + continue; + } + + selected[count++] = id; + } + + selected[count] = 0; + + if(count == 0) { + free(selected); + failf(data, "mbedTLS: no supported cipher in list"); + return CURLE_SSL_CIPHER; + } + + /* mbedtls_ssl_conf_ciphersuites(): The ciphersuites array is not copied. + It must remain valid for the lifetime of the SSL configuration */ + backend->ciphersuites = selected; + mbedtls_ssl_conf_ciphersuites(&backend->config, backend->ciphersuites); + return CURLE_OK; +} + +#ifdef TLS13_SUPPORT +static int mbed_no_verify(void *udata, mbedtls_x509_crt *crt, + int depth, uint32_t *flags) +{ + (void)udata; + (void)crt; + (void)depth; + /* we clear any faults the mbedtls' own verification found. + * See */ + *flags = 0; + return 0; +} +#endif + static CURLcode mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) { @@ -377,6 +521,7 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) char errorbuf[128]; DEBUGASSERT(backend); + DEBUGASSERT(!backend->initialized); if((conn_config->version == CURL_SSLVERSION_SSLv2) || (conn_config->version == CURL_SSLVERSION_SSLv3)) { @@ -384,6 +529,16 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) return CURLE_NOT_BUILT_IN; } +#ifdef TLS13_SUPPORT + ret = psa_crypto_init(); + if(ret != PSA_SUCCESS) { + mbedtls_strerror(ret, errorbuf, sizeof(errorbuf)); + failf(data, "mbedTLS psa_crypto_init returned (-0x%04X) %s", + -ret, errorbuf); + return CURLE_SSL_CONNECT_ERROR; + } +#endif /* TLS13_SUPPORT */ + #ifdef THREADING_SUPPORT mbedtls_ctr_drbg_init(&backend->ctr_drbg); @@ -499,7 +654,7 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) if(ret) { mbedtls_strerror(ret, errorbuf, sizeof(errorbuf)); - failf(data, "Error reading private key %s - mbedTLS: (-0x%04X) %s", + failf(data, "Error reading client cert data %s - mbedTLS: (-0x%04X) %s", ssl_config->key, -ret, errorbuf); return CURLE_SSL_CERTPROBLEM; } @@ -589,7 +744,7 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) } #endif - infof(data, "mbedTLS: Connecting to %s:%d", hostname, connssl->port); + infof(data, "mbedTLS: Connecting to %s:%d", hostname, connssl->peer.port); mbedtls_ssl_config_init(&backend->config); ret = mbedtls_ssl_config_defaults(&backend->config, @@ -600,12 +755,19 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) failf(data, "mbedTLS: ssl_config failed"); return CURLE_SSL_CONNECT_ERROR; } +#ifdef TLS13_SUPPORT + if(!verifypeer) { + /* Default verify behaviour changed in mbedtls v3.6.0 with TLS v1.3. + * On 1.3 connections, the handshake fails by default without trust + * anchors. We override this questionable change by installing our + * own verify callback that clears all errors. */ + mbedtls_ssl_conf_verify(&backend->config, mbed_no_verify, cf); + } +#endif + mbedtls_ssl_init(&backend->ssl); - if(mbedtls_ssl_setup(&backend->ssl, &backend->config)) { - failf(data, "mbedTLS: ssl_init failed"); - return CURLE_SSL_CONNECT_ERROR; - } + backend->initialized = TRUE; /* new profile with RSA min key len = 1024 ... */ mbedtls_ssl_conf_cert_profile(&backend->config, @@ -635,17 +797,35 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) return CURLE_SSL_CONNECT_ERROR; } - mbedtls_ssl_conf_authmode(&backend->config, MBEDTLS_SSL_VERIFY_OPTIONAL); - mbedtls_ssl_conf_rng(&backend->config, mbedtls_ctr_drbg_random, &backend->ctr_drbg); + + ret = mbedtls_ssl_setup(&backend->ssl, &backend->config); + if(ret) { + mbedtls_strerror(ret, errorbuf, sizeof(errorbuf)); + failf(data, "ssl_setup failed - mbedTLS: (-0x%04X) %s", + -ret, errorbuf); + return CURLE_SSL_CONNECT_ERROR; + } + mbedtls_ssl_set_bio(&backend->ssl, cf, mbedtls_bio_cf_write, mbedtls_bio_cf_read, NULL /* rev_timeout() */); - mbedtls_ssl_conf_ciphersuites(&backend->config, - mbedtls_ssl_list_ciphersuites()); + if(conn_config->cipher_list) { + CURLcode result = mbed_set_selected_ciphers(data, backend, + conn_config->cipher_list); + if(result != CURLE_OK) { + failf(data, "mbedTLS: failed to set cipher suites"); + return result; + } + } + else { + mbedtls_ssl_conf_ciphersuites(&backend->config, + mbedtls_ssl_list_ciphersuites()); + } + #if defined(MBEDTLS_SSL_RENEGOTIATION) mbedtls_ssl_conf_renegotiation(&backend->config, @@ -657,12 +837,12 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) MBEDTLS_SSL_SESSION_TICKETS_DISABLED); #endif - /* Check if there's a cached ID we can/should use here! */ - if(ssl_config->primary.sessionid) { + /* Check if there is a cached ID we can/should use here! */ + if(ssl_config->primary.cache_session) { void *old_session = NULL; Curl_ssl_sessionid_lock(data); - if(!Curl_ssl_getsessionid(cf, data, &old_session, NULL)) { + if(!Curl_ssl_getsessionid(cf, data, &connssl->peer, &old_session, NULL)) { ret = mbedtls_ssl_set_session(&backend->ssl, old_session); if(ret) { Curl_ssl_sessionid_unlock(data); @@ -704,7 +884,7 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) 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 + /* this function does not clone the protocols array, which is why we need to keep it around */ if(mbedtls_ssl_conf_alpn_protocols(&backend->config, &backend->protocols[0])) { @@ -730,11 +910,11 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) /* give application a chance to interfere with mbedTLS set up. */ if(data->set.ssl.fsslctx) { - ret = (*data->set.ssl.fsslctx)(data, &backend->config, - data->set.ssl.fsslctxp); - if(ret) { + CURLcode result = (*data->set.ssl.fsslctx)(data, &backend->config, + data->set.ssl.fsslctxp); + if(result != CURLE_OK) { failf(data, "error signaled by ssl ctx callback"); - return ret; + return result; } } @@ -743,6 +923,60 @@ mbed_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) return CURLE_OK; } +static int count_server_cert(const mbedtls_x509_crt *peercert) +{ + int count = 1; + + DEBUGASSERT(peercert); + + while(peercert->next) { + ++count; + peercert = peercert->next; + } + return count; +} + +static CURLcode collect_server_cert_single(struct Curl_easy *data, + const mbedtls_x509_crt *server_cert, + int idx) +{ + const char *beg, *end; + + DEBUGASSERT(server_cert); + + beg = (const char *)server_cert->raw.p; + end = beg + server_cert->raw.len; + return Curl_extract_certinfo(data, idx, beg, end); +} + +static CURLcode collect_server_cert(struct Curl_cfilter *cf, + struct Curl_easy *data, + const struct mbedtls_x509_crt *peercert) +{ +#ifndef CURL_DISABLE_VERBOSE_STRINGS + const bool show_verbose_server_cert = data->set.verbose; +#else + const bool show_verbose_server_cert = false; +#endif + struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data); + CURLcode result = CURLE_PEER_FAILED_VERIFICATION; + int i, count; + + if(!show_verbose_server_cert && !ssl_config->certinfo) + return CURLE_OK; + + if(!peercert) + return result; + + count = count_server_cert(peercert); + result = Curl_ssl_init_certinfo(data, count); + for(i = 0 ; !result && peercert ; i++) { + result = collect_server_cert_single(data, peercert, i); + peercert = peercert->next; + } + return result; +} + static CURLcode mbed_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) { @@ -752,33 +986,54 @@ mbed_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) (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; +#ifndef CURL_DISABLE_PROXY const char * const pinnedpubkey = Curl_ssl_cf_is_proxy(cf)? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]: data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#else + const char * const pinnedpubkey = data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#endif DEBUGASSERT(backend); ret = mbedtls_ssl_handshake(&backend->ssl); if(ret == MBEDTLS_ERR_SSL_WANT_READ) { - connssl->connecting_state = ssl_connect_2_reading; + connssl->io_need = CURL_SSL_IO_NEED_RECV; return CURLE_OK; } else if(ret == MBEDTLS_ERR_SSL_WANT_WRITE) { - connssl->connecting_state = ssl_connect_2_writing; + connssl->io_need = CURL_SSL_IO_NEED_SEND; return CURLE_OK; } + else if(ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { + failf(data, "peer certificate could not be verified"); + return CURLE_PEER_FAILED_VERIFICATION; + } else if(ret) { char errorbuf[128]; +#if MBEDTLS_VERSION_NUMBER >= 0x03020000 + CURL_TRC_CF(data, cf, "TLS version %04X", + mbedtls_ssl_get_version_number(&backend->ssl)); +#endif mbedtls_strerror(ret, errorbuf, sizeof(errorbuf)); - failf(data, "ssl_handshake returned - mbedTLS: (-0x%04X) %s", + failf(data, "ssl_handshake returned: (-0x%04X) %s", -ret, errorbuf); return CURLE_SSL_CONNECT_ERROR; } - infof(data, "mbedTLS: Handshake complete, cipher is %s", - mbedtls_ssl_get_ciphersuite(&backend->ssl)); - +#if MBEDTLS_VERSION_NUMBER >= 0x03020000 + { + char cipher_str[64]; + uint16_t cipher_id; + cipher_id = (uint16_t) + mbedtls_ssl_get_ciphersuite_id_from_ssl(&backend->ssl); + mbed_cipher_suite_get_str(cipher_id, cipher_str, sizeof(cipher_str), true); + infof(data, "mbedTLS: Handshake complete, cipher is %s", cipher_str); + } +#else + infof(data, "mbedTLS: Handshake complete"); +#endif ret = mbedtls_ssl_get_verify_result(&backend->ssl); if(!conn_config->verifyhost) @@ -806,6 +1061,12 @@ mbed_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) peercert = mbedtls_ssl_get_peer_cert(&backend->ssl); + if(peercert) { + const CURLcode result = collect_server_cert(cf, data, peercert); + if(result) + return result; + } + if(peercert && data->set.verbose) { #ifndef MBEDTLS_X509_REMOVE_INFO const size_t bufsize = 16384; @@ -911,6 +1172,13 @@ mbed_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) return CURLE_OK; } +static void mbedtls_session_free(void *sessionid, size_t idsize) +{ + (void)idsize; + mbedtls_ssl_session_free(sessionid); + free(sessionid); +} + static CURLcode mbed_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data) { @@ -923,11 +1191,9 @@ mbed_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data) DEBUGASSERT(ssl_connect_3 == connssl->connecting_state); DEBUGASSERT(backend); - if(ssl_config->primary.sessionid) { + if(ssl_config->primary.cache_session) { int ret; mbedtls_ssl_session *our_ssl_sessionid; - void *old_ssl_sessionid = NULL; - bool added = FALSE; our_ssl_sessionid = malloc(sizeof(mbedtls_ssl_session)); if(!our_ssl_sessionid) @@ -944,22 +1210,14 @@ mbed_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data) return CURLE_SSL_CONNECT_ERROR; } - /* If there's already a matching session in the cache, delete it */ + /* If there is already a matching session in the cache, delete it */ Curl_ssl_sessionid_lock(data); - if(!Curl_ssl_getsessionid(cf, data, &old_ssl_sessionid, NULL)) - Curl_ssl_delsessionid(data, old_ssl_sessionid); - - retcode = Curl_ssl_addsessionid(cf, data, our_ssl_sessionid, - 0, &added); + retcode = Curl_ssl_set_sessionid(cf, data, &connssl->peer, + our_ssl_sessionid, 0, + mbedtls_session_free); Curl_ssl_sessionid_unlock(data); - if(!added) { - mbedtls_ssl_session_free(our_ssl_sessionid); - free(our_ssl_sessionid); - } - if(retcode) { - failf(data, "failed to store ssl session"); + if(retcode) return retcode; - } } connssl->connecting_state = ssl_connect_done; @@ -981,8 +1239,13 @@ static ssize_t mbed_send(struct Curl_cfilter *cf, struct Curl_easy *data, ret = mbedtls_ssl_write(&backend->ssl, (unsigned char *)mem, len); if(ret < 0) { - *curlcode = (ret == MBEDTLS_ERR_SSL_WANT_WRITE) ? - CURLE_AGAIN : CURLE_SEND_ERROR; + CURL_TRC_CF(data, cf, "mbedtls_ssl_write(len=%zu) -> -0x%04X", + len, -ret); + *curlcode = ((ret == MBEDTLS_ERR_SSL_WANT_WRITE) +#ifdef TLS13_SUPPORT + || (ret == MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET) +#endif + )? CURLE_AGAIN : CURLE_SEND_ERROR; ret = -1; } @@ -994,32 +1257,120 @@ static void mbedtls_close_all(struct Curl_easy *data) (void)data; } -static void mbedtls_close(struct Curl_cfilter *cf, struct Curl_easy *data) +static CURLcode mbedtls_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool send_shutdown, bool *done) { struct ssl_connect_data *connssl = cf->ctx; struct mbed_ssl_backend_data *backend = (struct mbed_ssl_backend_data *)connssl->backend; - char buf[32]; + unsigned char buf[1024]; + CURLcode result = CURLE_OK; + int ret; + size_t i; - (void)data; DEBUGASSERT(backend); - /* Maybe the server has already sent a close notify alert. - Read it to avoid an RST on the TCP connection. */ - (void)mbedtls_ssl_read(&backend->ssl, (unsigned char *)buf, sizeof(buf)); + if(!backend->initialized || cf->shutdown) { + *done = TRUE; + return CURLE_OK; + } + + connssl->io_need = CURL_SSL_IO_NEED_NONE; + *done = FALSE; + + if(!backend->sent_shutdown) { + /* do this only once */ + backend->sent_shutdown = TRUE; + if(send_shutdown) { + ret = mbedtls_ssl_close_notify(&backend->ssl); + switch(ret) { + case 0: /* we sent it, receive from the server */ + break; + case MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY: /* server also closed */ + *done = TRUE; + goto out; + case MBEDTLS_ERR_SSL_WANT_READ: + connssl->io_need = CURL_SSL_IO_NEED_RECV; + goto out; + case MBEDTLS_ERR_SSL_WANT_WRITE: + connssl->io_need = CURL_SSL_IO_NEED_SEND; + goto out; + default: + CURL_TRC_CF(data, cf, "mbedtls_shutdown error -0x%04X", -ret); + result = CURLE_RECV_ERROR; + goto out; + } + } + } + + /* SSL should now have started the shutdown from our side. Since it + * was not complete, we are lacking the close notify from the server. */ + for(i = 0; i < 10; ++i) { + ret = mbedtls_ssl_read(&backend->ssl, buf, sizeof(buf)); + /* This seems to be a bug in mbedTLS TLSv1.3 where it reports + * WANT_READ, but has not encountered an EAGAIN. */ + if(ret == MBEDTLS_ERR_SSL_WANT_READ) + ret = mbedtls_ssl_read(&backend->ssl, buf, sizeof(buf)); +#ifdef TLS13_SUPPORT + if(ret == MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET) + continue; +#endif + if(ret <= 0) + break; + } + + if(ret > 0) { + /* still data coming in? */ + CURL_TRC_CF(data, cf, "mbedtls_shutdown, still getting data"); + } + else if(ret == 0 || (ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY)) { + /* We got the close notify alert and are done. */ + CURL_TRC_CF(data, cf, "mbedtls_shutdown done"); + *done = TRUE; + } + else if(ret == MBEDTLS_ERR_SSL_WANT_READ) { + CURL_TRC_CF(data, cf, "mbedtls_shutdown, need RECV"); + connssl->io_need = CURL_SSL_IO_NEED_RECV; + } + else if(ret == MBEDTLS_ERR_SSL_WANT_WRITE) { + CURL_TRC_CF(data, cf, "mbedtls_shutdown, need SEND"); + connssl->io_need = CURL_SSL_IO_NEED_SEND; + } + else { + CURL_TRC_CF(data, cf, "mbedtls_shutdown error -0x%04X", -ret); + result = CURLE_RECV_ERROR; + } + +out: + cf->shutdown = (result || *done); + return result; +} - mbedtls_pk_free(&backend->pk); - mbedtls_x509_crt_free(&backend->clicert); - mbedtls_x509_crt_free(&backend->cacert); +static void mbedtls_close(struct Curl_cfilter *cf, struct Curl_easy *data) +{ + struct ssl_connect_data *connssl = cf->ctx; + struct mbed_ssl_backend_data *backend = + (struct mbed_ssl_backend_data *)connssl->backend; + + (void)data; + DEBUGASSERT(backend); + if(backend->initialized) { + mbedtls_pk_free(&backend->pk); + mbedtls_x509_crt_free(&backend->clicert); + mbedtls_x509_crt_free(&backend->cacert); #ifdef MBEDTLS_X509_CRL_PARSE_C - mbedtls_x509_crl_free(&backend->crl); + mbedtls_x509_crl_free(&backend->crl); #endif - mbedtls_ssl_config_free(&backend->config); - mbedtls_ssl_free(&backend->ssl); - mbedtls_ctr_drbg_free(&backend->ctr_drbg); + Curl_safefree(backend->ciphersuites); + mbedtls_ssl_config_free(&backend->config); + mbedtls_ssl_free(&backend->ssl); + mbedtls_ctr_drbg_free(&backend->ctr_drbg); #ifndef THREADING_SUPPORT - mbedtls_entropy_free(&backend->entropy); + mbedtls_entropy_free(&backend->entropy); #endif /* THREADING_SUPPORT */ + backend->initialized = FALSE; + } } static ssize_t mbed_recv(struct Curl_cfilter *cf, struct Curl_easy *data, @@ -1037,13 +1388,21 @@ static ssize_t mbed_recv(struct Curl_cfilter *cf, struct Curl_easy *data, ret = mbedtls_ssl_read(&backend->ssl, (unsigned char *)buf, buffersize); - if(ret <= 0) { + CURL_TRC_CF(data, cf, "mbedtls_ssl_read(len=%zu) -> -0x%04X", + buffersize, -ret); if(ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) return 0; - - *curlcode = (ret == MBEDTLS_ERR_SSL_WANT_READ) ? - CURLE_AGAIN : CURLE_RECV_ERROR; + *curlcode = ((ret == MBEDTLS_ERR_SSL_WANT_READ) +#ifdef TLS13_SUPPORT + || (ret == MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET) +#endif + ) ? CURLE_AGAIN : CURLE_RECV_ERROR; + if(*curlcode != CURLE_AGAIN) { + char errorbuf[128]; + mbedtls_strerror(ret, errorbuf, sizeof(errorbuf)); + failf(data, "ssl_read returned: (-0x%04X) %s", -ret, errorbuf); + } return -1; } @@ -1052,12 +1411,6 @@ static ssize_t mbed_recv(struct Curl_cfilter *cf, struct Curl_easy *data, return len; } -static void mbedtls_session_free(void *ptr) -{ - mbedtls_ssl_session_free(ptr); - free(ptr); -} - static size_t mbedtls_version(char *buffer, size_t size) { #ifdef MBEDTLS_VERSION_C @@ -1132,7 +1485,7 @@ mbed_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data, } if(ssl_connect_1 == connssl->connecting_state) { - /* Find out how much more time we're allowed */ + /* Find out how much more time we are allowed */ timeout_ms = Curl_timeleft(data, NULL, TRUE); if(timeout_ms < 0) { @@ -1145,9 +1498,7 @@ mbed_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data, return retcode; } - while(ssl_connect_2 == connssl->connecting_state || - ssl_connect_2_reading == connssl->connecting_state || - ssl_connect_2_writing == connssl->connecting_state) { + while(ssl_connect_2 == connssl->connecting_state) { /* check allowed time left */ timeout_ms = Curl_timeleft(data, NULL, TRUE); @@ -1158,14 +1509,13 @@ mbed_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data, return CURLE_OPERATION_TIMEDOUT; } - /* 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 ssl is expecting something, check if it is available. */ + if(connssl->io_need) { - curl_socket_t writefd = ssl_connect_2_writing == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; - curl_socket_t readfd = ssl_connect_2_reading == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; + curl_socket_t writefd = (connssl->io_need & CURL_SSL_IO_NEED_SEND)? + sockfd:CURL_SOCKET_BAD; + curl_socket_t readfd = (connssl->io_need & CURL_SSL_IO_NEED_RECV)? + sockfd:CURL_SOCKET_BAD; what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd, nonblocking ? 0 : timeout_ms); @@ -1195,11 +1545,10 @@ mbed_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data, * ensuring that a client using select() or epoll() will always * have a valid fdset to wait on. */ + connssl->io_need = CURL_SSL_IO_NEED_NONE; retcode = mbed_connect_step2(cf, data); - if(retcode || (nonblocking && - (ssl_connect_2 == connssl->connecting_state || - ssl_connect_2_reading == connssl->connecting_state || - ssl_connect_2_writing == connssl->connecting_state))) + if(retcode || + (nonblocking && (ssl_connect_2 == connssl->connecting_state))) return retcode; } /* repeat step2 until all transactions are done. */ @@ -1316,6 +1665,7 @@ const struct Curl_ssl Curl_ssl_mbedtls = { SSLSUPP_CA_PATH | SSLSUPP_CAINFO_BLOB | + SSLSUPP_CERTINFO | SSLSUPP_PINNEDPUBKEY | SSLSUPP_SSL_CTX | SSLSUPP_HTTPS_PROXY, @@ -1326,7 +1676,7 @@ const struct Curl_ssl Curl_ssl_mbedtls = { mbedtls_cleanup, /* cleanup */ mbedtls_version, /* version */ Curl_none_check_cxn, /* check_cxn */ - Curl_none_shutdown, /* shutdown */ + mbedtls_shutdown, /* shutdown */ mbedtls_data_pending, /* data_pending */ mbedtls_random, /* random */ Curl_none_cert_status_request, /* cert_status_request */ @@ -1336,7 +1686,6 @@ const struct Curl_ssl Curl_ssl_mbedtls = { mbedtls_get_internals, /* get_internals */ mbedtls_close, /* close_one */ mbedtls_close_all, /* close_all */ - mbedtls_session_free, /* session_free */ Curl_none_set_engine, /* set_engine */ Curl_none_set_engine_default, /* set_engine_default */ Curl_none_engines_list, /* engines_list */ @@ -1344,7 +1693,6 @@ const struct Curl_ssl Curl_ssl_mbedtls = { mbedtls_sha256sum, /* sha256sum */ NULL, /* associate_connection */ NULL, /* disassociate_connection */ - NULL, /* free_multi_ssl_backend_data */ mbed_recv, /* recv decrypted data */ mbed_send, /* send data to encrypt */ }; diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c index a3953f6c3..8a65491b2 100644 --- a/lib/vtls/openssl.c +++ b/lib/vtls/openssl.c @@ -82,6 +82,17 @@ #include #include +#ifdef USE_ECH +# ifndef OPENSSL_IS_BORINGSSL +# include +# endif +# include "curl_base64.h" +# define ECH_ENABLED(__data__) \ + (__data__->set.tls_ech && \ + !(__data__->set.tls_ech & CURLECH_DISABLE)\ + ) +#endif /* USE_ECH */ + #if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_OCSP) #include #endif @@ -193,12 +204,10 @@ * 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: supported since 3.5.0 (released 2022-02-24) + * LibreSSL: not supported. 3.5.0+ has a stub function that does nothing. */ #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 @@ -222,7 +231,7 @@ /* * Whether SSL_CTX_set1_curves_list is available. * OpenSSL: supported since 1.0.2, see - * https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set1_groups.html + * https://docs.openssl.org/master/man3/SSL_CTX_set1_curves/ * BoringSSL: supported since 5fd1807d95f7 (committed 2016-09-30) * LibreSSL: since 2.5.3 (April 12, 2017) */ @@ -245,13 +254,20 @@ #endif #endif +#if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC) +typedef size_t numcert_t; +#else +typedef int numcert_t; +#endif +#define ossl_valsize_t numcert_t + #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) /* up2date versions of OpenSSL maintain reasonably secure defaults without * breaking compatibility, so it is better not to override the defaults in curl */ #define DEFAULT_CIPHER_SELECTION NULL #else -/* ... but it is not the case with old versions of OpenSSL */ +/* not the case with old versions of OpenSSL */ #define DEFAULT_CIPHER_SELECTION \ "ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH" #endif @@ -298,28 +314,6 @@ typedef unsigned long sslerr_t; #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); \ @@ -386,7 +380,7 @@ static void X509V3_ext(struct Curl_easy *data, for(i = 0; i < (int)sk_X509_EXTENSION_num(exts); i++) { ASN1_OBJECT *obj; - X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i); + X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, (ossl_valsize_t)i); BUF_MEM *biomem; char namebuf[128]; BIO *bio_out = BIO_new(BIO_s_mem()); @@ -408,12 +402,6 @@ static void X509V3_ext(struct Curl_easy *data, } } -#if defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC) -typedef size_t numcert_t; -#else -typedef int numcert_t; -#endif - CURLcode Curl_ossl_certchain(struct Curl_easy *data, SSL *ssl) { CURLcode result; @@ -443,7 +431,7 @@ CURLcode Curl_ossl_certchain(struct Curl_easy *data, SSL *ssl) for(i = 0; i < (int)numcerts; i++) { ASN1_INTEGER *num; - X509 *x = sk_X509_value(sk, i); + X509 *x = sk_X509_value(sk, (ossl_valsize_t)i); EVP_PKEY *pubkey = NULL; int j; char *ptr; @@ -726,18 +714,20 @@ 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 ossl_ctx *octx = (struct ossl_ctx *)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); + if(blen < 0) + return 0; + + nwritten = Curl_conn_cf_send(cf->next, data, buf, (size_t)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; + octx->io_result = result; if(nwritten < 0) { if(CURLE_AGAIN == result) BIO_set_retry_write(bio); @@ -749,8 +739,7 @@ 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 ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; struct Curl_easy *data = CF_DATA_CURRENT(cf); ssize_t nread; CURLcode result = CURLE_RECV_ERROR; @@ -759,12 +748,14 @@ static int ossl_bio_cf_in_read(BIO *bio, char *buf, int blen) /* OpenSSL catches this case, so should we. */ if(!buf) return 0; + if(blen < 0) + return 0; - nread = Curl_conn_cf_recv(cf->next, data, buf, blen, &result); + nread = Curl_conn_cf_recv(cf->next, data, buf, (size_t)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; + octx->io_result = result; if(nread < 0) { if(CURLE_AGAIN == result) BIO_set_retry_read(bio); @@ -775,13 +766,13 @@ static int ossl_bio_cf_in_read(BIO *bio, char *buf, int blen) /* 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(!octx->x509_store_setup) { + result = Curl_ssl_setup_x509_store(cf, data, octx->ssl_ctx); if(result) { - backend->io_result = result; + octx->io_result = result; return -1; } - backend->x509_store_setup = TRUE; + octx->x509_store_setup = TRUE; } return (int)nread; @@ -851,7 +842,7 @@ static void ossl_keylog_callback(const SSL *ssl, const char *line) #else /* * ossl_log_tls12_secret is called by libcurl to make the CLIENT_RANDOMs if the - * OpenSSL being used doesn't have native support for doing that. + * OpenSSL being used does not have native support for doing that. */ static void ossl_log_tls12_secret(const SSL *ssl, bool *keylog_done) @@ -867,7 +858,7 @@ ossl_log_tls12_secret(const SSL *ssl, bool *keylog_done) #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 + /* 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); master_key_length = (int) @@ -970,7 +961,7 @@ static int passwd_callback(char *buf, int num, int encrypting, { DEBUGASSERT(0 == encrypting); - if(!encrypting) { + if(!encrypting && num >= 0) { int klen = curlx_uztosi(strlen((char *)global_passwd)); if(num > klen) { memcpy(buf, global_passwd, klen + 1); @@ -1021,13 +1012,12 @@ static CURLcode ossl_seed(struct Curl_easy *data) for(i = 0, i_max = len / sizeof(struct curltime); i < i_max; ++i) { struct curltime tv = Curl_now(); Curl_wait_ms(1); - tv.tv_sec *= i + 1; - tv.tv_usec *= (unsigned int)i + 2; - tv.tv_sec ^= ((Curl_now().tv_sec + Curl_now().tv_usec) * - (i + 3)) << 8; - tv.tv_usec ^= (unsigned int) ((Curl_now().tv_sec + - Curl_now().tv_usec) * - (i + 4)) << 16; + tv.tv_sec *= (time_t)i + 1; + tv.tv_usec *= (int)i + 2; + tv.tv_sec ^= ((Curl_now().tv_sec + (time_t)Curl_now().tv_usec) * + (time_t)(i + 3)) << 8; + tv.tv_usec ^= (int) ((Curl_now().tv_sec + (time_t)Curl_now().tv_usec) * + (time_t)(i + 4)) << 16; memcpy(&randb[i * sizeof(struct curltime)], &tv, sizeof(struct curltime)); } @@ -1040,7 +1030,7 @@ static CURLcode ossl_seed(struct Curl_easy *data) fname[0] = 0; /* blank it first */ RAND_file_name(fname, sizeof(fname)); if(fname[0]) { - /* we got a file name to try */ + /* we got a filename to try */ RAND_load_file(fname, RAND_LOAD_LENGTH); if(rand_enough()) return CURLE_OK; @@ -1376,7 +1366,7 @@ int cert_stuff(struct Curl_easy *data, } if(!params.cert) { - failf(data, "ssl engine didn't initialized the certificate " + failf(data, "ssl engine did not initialized the certificate " "properly."); return 0; } @@ -1387,10 +1377,10 @@ int cert_stuff(struct Curl_easy *data, sizeof(error_buffer))); return 0; } - X509_free(params.cert); /* we don't need the handle any more... */ + X509_free(params.cert); /* we do not need the handle any more... */ } else { - failf(data, "crypto engine not set, can't load certificate"); + failf(data, "crypto engine not set, cannot load certificate"); return 0; } } @@ -1486,7 +1476,7 @@ int cert_stuff(struct Curl_easy *data, * Note that sk_X509_pop() is used below to make sure the cert is * removed from the stack properly before getting passed to * SSL_CTX_add_extra_chain_cert(), which takes ownership. Previously - * we used sk_X509_value() instead, but then we'd clean it in the + * we used sk_X509_value() instead, but then we would clean it in the * subsequent sk_X509_pop_free() call. */ X509 *x = sk_X509_pop(ca); @@ -1579,10 +1569,10 @@ int cert_stuff(struct Curl_easy *data, EVP_PKEY_free(priv_key); return 0; } - EVP_PKEY_free(priv_key); /* we don't need the handle any more... */ + EVP_PKEY_free(priv_key); /* we do not need the handle any more... */ } else { - failf(data, "crypto engine not set, can't load private key"); + failf(data, "crypto engine not set, cannot load private key"); return 0; } } @@ -1621,8 +1611,8 @@ int cert_stuff(struct Curl_easy *data, #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. */ + /* If RSA is used, do not check the private key if its flags indicate + * it does not support it. */ EVP_PKEY *priv_key = SSL_get_privatekey(ssl); int pktype; #ifdef HAVE_OPAQUE_EVP_PKEY @@ -1688,7 +1678,7 @@ static int x509_name_oneline(X509_NAME *a, char *buf, size_t size) if((size_t)biomem->length < size) size = biomem->length; else - size--; /* don't overwrite the buffer end */ + size--; /* do not overwrite the buffer end */ memcpy(buf, biomem->data, size); buf[size] = 0; @@ -1880,211 +1870,140 @@ static struct curl_slist *ossl_engines_list(struct Curl_easy *data) return list; } -static void ossl_close(struct Curl_cfilter *cf, struct Curl_easy *data) +static CURLcode ossl_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool send_shutdown, bool *done) { struct ssl_connect_data *connssl = cf->ctx; - struct ossl_ssl_backend_data *backend = - (struct ossl_ssl_backend_data *)connssl->backend; + struct ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; + CURLcode result = CURLE_OK; + char buf[1024]; + int nread, err; + unsigned long sslerr; + size_t i; - (void)data; - DEBUGASSERT(backend); - - if(backend->handle) { - /* Send the TLS shutdown if we are still connected *and* if - * the peer did not already close the connection. */ - if(cf->next && cf->next->connected && !connssl->peer_closed) { - 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. */ - ERR_clear_error(); - nread = SSL_read(backend->handle, buf, (int)sizeof(buf)); - err = SSL_get_error(backend->handle, nread); - if(!nread && err == SSL_ERROR_ZERO_RETURN) { - CURLcode result; - ssize_t n; - size_t blen = sizeof(buf); - CURL_TRC_CF(data, cf, "peer has shutdown TLS"); - /* SSL_read() will not longer touch the socket, let's receive - * directly from the next filter to see if the underlying - * connection has also been closed. */ - n = Curl_conn_cf_recv(cf->next, data, buf, blen, &result); - if(!n) { - connssl->peer_closed = TRUE; - CURL_TRC_CF(data, cf, "peer closed connection"); - } - } - ERR_clear_error(); - if(connssl->peer_closed) { - /* As the peer closed, we do not expect it to read anything more we - * may send. It may be harmful, leading to TCP RST and delaying - * a lingering close. Just leave. */ - CURL_TRC_CF(data, cf, "not from sending TLS shutdown on " - "connection closed by peer"); - } - else if(SSL_shutdown(backend->handle) == 1) { - CURL_TRC_CF(data, cf, "SSL shutdown finished"); + DEBUGASSERT(octx); + if(!octx->ssl || cf->shutdown) { + *done = TRUE; + goto out; + } + + connssl->io_need = CURL_SSL_IO_NEED_NONE; + *done = FALSE; + if(!(SSL_get_shutdown(octx->ssl) & SSL_SENT_SHUTDOWN)) { + /* We have not started the shutdown from our side yet. Check + * if the server already sent us one. */ + ERR_clear_error(); + for(i = 0; i < 10; ++i) { + nread = SSL_read(octx->ssl, buf, (int)sizeof(buf)); + CURL_TRC_CF(data, cf, "SSL shutdown not sent, read -> %d", nread); + if(nread <= 0) + break; + } + err = SSL_get_error(octx->ssl, nread); + if(!nread && err == SSL_ERROR_ZERO_RETURN) { + bool input_pending; + /* Yes, it did. */ + if(!send_shutdown) { + CURL_TRC_CF(data, cf, "SSL shutdown received, not sending"); + *done = TRUE; + goto out; } - 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; - } + else if(!cf->next->cft->is_alive(cf->next, data, &input_pending)) { + /* Server closed the connection after its closy notify. It + * seems not interested to see our close notify, so do not + * send it. We are done. */ + connssl->peer_closed = TRUE; + CURL_TRC_CF(data, cf, "peer closed connection"); + *done = TRUE; + goto out; } - - ERR_clear_error(); - SSL_set_connect_state(backend->handle); } + if(send_shutdown && SSL_shutdown(octx->ssl) == 1) { + CURL_TRC_CF(data, cf, "SSL shutdown finished"); + *done = TRUE; + goto out; + } + } - SSL_free(backend->handle); - backend->handle = NULL; + /* SSL should now have started the shutdown from our side. Since it + * was not complete, we are lacking the close notify from the server. */ + for(i = 0; i < 10; ++i) { + ERR_clear_error(); + nread = SSL_read(octx->ssl, buf, (int)sizeof(buf)); + CURL_TRC_CF(data, cf, "SSL shutdown read -> %d", nread); + if(nread <= 0) + break; } - if(backend->ctx) { - SSL_CTX_free(backend->ctx); - backend->ctx = NULL; - backend->x509_store_setup = FALSE; + if(SSL_get_shutdown(octx->ssl) & SSL_RECEIVED_SHUTDOWN) { + CURL_TRC_CF(data, cf, "SSL shutdown received, finished"); + *done = TRUE; + goto out; } - if(backend->bio_method) { - ossl_bio_cf_method_free(backend->bio_method); - backend->bio_method = NULL; + err = SSL_get_error(octx->ssl, nread); + switch(err) { + case SSL_ERROR_ZERO_RETURN: /* no more data */ + CURL_TRC_CF(data, cf, "SSL shutdown not received, but closed"); + *done = TRUE; + break; + case SSL_ERROR_NONE: /* just did not get anything */ + 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, want receive"); + connssl->io_need = CURL_SSL_IO_NEED_RECV; + break; + case SSL_ERROR_WANT_WRITE: + CURL_TRC_CF(data, cf, "SSL shutdown send blocked"); + connssl->io_need = CURL_SSL_IO_NEED_SEND; + break; + default: + /* Server seems to have closed the connection without sending us + * a close notify. */ + sslerr = ERR_get_error(); + CURL_TRC_CF(data, cf, "SSL shutdown, ignore recv error: '%s', errno %d", + (sslerr ? + ossl_strerror(sslerr, buf, sizeof(buf)) : + SSL_ERROR_to_str(err)), + SOCKERRNO); + *done = TRUE; + result = CURLE_OK; + break; } + +out: + cf->shutdown = (result || *done); + return result; } -/* - * 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_cfilter *cf, - struct Curl_easy *data) +static void ossl_close(struct Curl_cfilter *cf, struct Curl_easy *data) { - int retval = 0; 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; - int nread; - int buffsize; - int err; - bool done = FALSE; - struct ossl_ssl_backend_data *backend = - (struct ossl_ssl_backend_data *)connssl->backend; - int loop = 10; - - DEBUGASSERT(backend); - -#ifndef CURL_DISABLE_FTP - /* This has only been tested on the proftpd server, and the mod_tls code - sends a close notify alert without waiting for a close notify alert in - response. Thus we wait for a close notify alert from the server, but - 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); -#endif - - if(backend->handle) { - buffsize = (int)sizeof(buf); - while(!done && loop--) { - 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 = SSL_read(backend->handle, buf, buffsize); - 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 */ - /* This is the expected response. There was no data but only - the close notify alert */ - done = TRUE; - break; - case SSL_ERROR_WANT_READ: - /* there's data pending, re-invoke SSL_read() */ - infof(data, "SSL_ERROR_WANT_READ"); - break; - case SSL_ERROR_WANT_WRITE: - /* SSL wants a write. Really odd. Let's bail out. */ - infof(data, "SSL_ERROR_WANT_WRITE"); - done = TRUE; - break; - default: - /* openssl/ssl.h says "look at error stack/return value/errno" */ - sslerror = ERR_get_error(); - failf(data, OSSL_PACKAGE " SSL_read on shutdown: %s, errno %d", - (sslerror ? - ossl_strerror(sslerror, buf, sizeof(buf)) : - SSL_ERROR_to_str(err)), - SOCKERRNO); - done = TRUE; - break; - } - } - else if(0 == what) { - /* timeout */ - failf(data, "SSL shutdown timeout"); - done = TRUE; - } - else { - /* anything that gets here is fatally bad */ - failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO); - retval = -1; - done = TRUE; - } - } /* while()-loop for the select() */ + struct ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; - if(data->set.verbose) { -#ifdef HAVE_SSL_GET_SHUTDOWN - switch(SSL_get_shutdown(backend->handle)) { - case SSL_SENT_SHUTDOWN: - infof(data, "SSL_get_shutdown() returned SSL_SENT_SHUTDOWN"); - break; - case SSL_RECEIVED_SHUTDOWN: - infof(data, "SSL_get_shutdown() returned SSL_RECEIVED_SHUTDOWN"); - break; - case SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN: - infof(data, "SSL_get_shutdown() returned SSL_SENT_SHUTDOWN|" - "SSL_RECEIVED__SHUTDOWN"); - break; - } -#endif - } + (void)data; + DEBUGASSERT(octx); - SSL_free(backend->handle); - backend->handle = NULL; + if(octx->ssl) { + SSL_free(octx->ssl); + octx->ssl = NULL; + } + if(octx->ssl_ctx) { + SSL_CTX_free(octx->ssl_ctx); + octx->ssl_ctx = NULL; + octx->x509_store_setup = FALSE; + } + if(octx->bio_method) { + ossl_bio_cf_method_free(octx->bio_method); + octx->bio_method = NULL; } - return retval; } -static void ossl_session_free(void *ptr) +static void ossl_session_free(void *sessionid, size_t idsize) { /* free the ID */ - SSL_SESSION_free(ptr); + (void)idsize; + SSL_SESSION_free(sessionid); } /* @@ -2115,7 +2034,7 @@ static void ossl_close_all(struct Curl_easy *data) /* ====================================================== */ /* - * Match subjectAltName against the host name. + * Match subjectAltName against the hostname. */ static bool subj_alt_hostcheck(struct Curl_easy *data, const char *match_pattern, @@ -2145,7 +2064,7 @@ static bool subj_alt_hostcheck(struct Curl_easy *data, Certification Authorities are encouraged to use the dNSName instead. Matching is performed using the matching rules specified by - [RFC2459]. If more than one identity of a given type is present in + [RFC2459]. If more than one identity of a given type is present in the certificate (e.g., more than one dNSName name, a match in any one of the set is considered acceptable.) Names may contain the wildcard character * which is considered to match any single domain name @@ -2165,14 +2084,14 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn, int target; /* target type, GEN_DNS or GEN_IPADD */ size_t addrlen = 0; STACK_OF(GENERAL_NAME) *altnames; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct in6_addr addr; #else struct in_addr addr; #endif 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 */ + bool iPAddress = FALSE; /* if an iPAddress field exists in the cert */ size_t hostlen; (void)conn; @@ -2184,7 +2103,7 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn, target = GEN_IPADD; addrlen = sizeof(struct in_addr); break; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 case CURL_SSL_PEER_IPV6: if(!Curl_inet_pton(AF_INET6, peer->hostname, &addr)) return CURLE_PEER_FAILED_VERIFICATION; @@ -2216,7 +2135,7 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn, bool ipmatched = FALSE; /* get amount of alternatives, RFC2459 claims there MUST be at least - one, but we don't depend on it... */ + one, but we do not depend on it... */ numalts = sk_GENERAL_NAME_num(altnames); /* loop through all alternatives - until a dnsmatch */ @@ -2237,7 +2156,7 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn, switch(target) { case GEN_DNS: /* name/pattern comparison */ - /* The OpenSSL man page explicitly says: "In general it cannot be + /* The OpenSSL manpage explicitly says: "In general it cannot be assumed that the data returned by ASN1_STRING_data() is null terminated or does not contain embedded nulls." But also that "The actual format of the data will depend on the actual string @@ -2247,7 +2166,7 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn, is always null-terminated. */ if((altlen == strlen(altptr)) && - /* if this isn't true, there was an embedded zero in the name + /* if this is not true, there was an embedded zero in the name string and we cannot match it. */ subj_alt_hostcheck(data, altptr, altlen, peer->hostname, hostlen, @@ -2279,7 +2198,7 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn, /* an alternative name matched */ ; else if(dNSName || iPAddress) { - const char *tname = (peer->type == CURL_SSL_PEER_DNS) ? "host name" : + const char *tname = (peer->type == CURL_SSL_PEER_DNS) ? "hostname" : (peer->type == CURL_SSL_PEER_IPV4) ? "ipv4 address" : "ipv6 address"; infof(data, " subjectAltName does not match %s %s", tname, peer->dispname); @@ -2350,7 +2269,7 @@ CURLcode Curl_ossl_verifyhost(struct Curl_easy *data, struct connectdata *conn, else if(!Curl_cert_hostcheck((const char *)peer_CN, peerlen, peer->hostname, hostlen)) { failf(data, "SSL: certificate subject name '%s' does not match " - "target host name '%s'", peer_CN, peer->dispname); + "target hostname '%s'", peer_CN, peer->dispname); result = CURLE_PEER_FAILED_VERIFICATION; } else { @@ -2366,9 +2285,9 @@ 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_cfilter *cf, - struct Curl_easy *data) + struct Curl_easy *data, + struct ossl_ctx *octx) { - struct ssl_connect_data *connssl = cf->ctx; int i, ocsp_status; #if defined(OPENSSL_IS_AWSLC) const uint8_t *status; @@ -2381,8 +2300,6 @@ static CURLcode verifystatus(struct Curl_cfilter *cf, OCSP_BASICRESP *br = NULL; X509_STORE *st = NULL; STACK_OF(X509) *ch = NULL; - struct ossl_ssl_backend_data *backend = - (struct ossl_ssl_backend_data *)connssl->backend; X509 *cert; OCSP_CERTID *id = NULL; int cert_status, crl_reason; @@ -2390,9 +2307,10 @@ static CURLcode verifystatus(struct Curl_cfilter *cf, int ret; long len; - DEBUGASSERT(backend); + (void)cf; + DEBUGASSERT(octx); - len = SSL_get_tlsext_status_ocsp_resp(backend->handle, &status); + len = (long)SSL_get_tlsext_status_ocsp_resp(octx->ssl, &status); if(!status) { failf(data, "No OCSP response received"); @@ -2422,20 +2340,20 @@ static CURLcode verifystatus(struct Curl_cfilter *cf, goto end; } - ch = SSL_get_peer_cert_chain(backend->handle); + ch = SSL_get_peer_cert_chain(octx->ssl); if(!ch) { failf(data, "Could not get peer certificate chain"); result = CURLE_SSL_INVALIDCERTSTATUS; goto end; } - st = SSL_CTX_get_cert_store(backend->ctx); + st = SSL_CTX_get_cert_store(octx->ssl_ctx); #if ((OPENSSL_VERSION_NUMBER <= 0x1000201fL) /* Fixed after 1.0.2a */ || \ (defined(LIBRESSL_VERSION_NUMBER) && \ LIBRESSL_VERSION_NUMBER <= 0x2040200fL)) /* The authorized responder cert in the OCSP response MUST be signed by the - peer cert's issuer (see RFC6960 section 4.2.2.2). If that's a root cert, - no problem, but if it's an intermediate cert OpenSSL has a bug where it + peer cert's issuer (see RFC6960 section 4.2.2.2). If that is a root cert, + no problem, but if it is an intermediate cert OpenSSL has a bug where it expects this issuer to be present in the chain embedded in the OCSP response. So we add it if necessary. */ @@ -2465,7 +2383,7 @@ static CURLcode verifystatus(struct Curl_cfilter *cf, } /* Compute the certificate's ID */ - cert = SSL_get1_peer_certificate(backend->handle); + cert = SSL_get1_peer_certificate(octx->ssl); if(!cert) { failf(data, "Error getting peer certificate"); result = CURLE_SSL_INVALIDCERTSTATUS; @@ -2473,7 +2391,7 @@ static CURLcode verifystatus(struct Curl_cfilter *cf, } for(i = 0; i < (int)sk_X509_num(ch); i++) { - X509 *issuer = sk_X509_value(ch, i); + X509 *issuer = sk_X509_value(ch, (ossl_valsize_t)i); if(X509_check_issued(issuer, cert) == X509_V_OK) { id = OCSP_cert_to_id(EVP_sha1(), cert, issuer); break; @@ -2534,7 +2452,7 @@ static CURLcode verifystatus(struct Curl_cfilter *cf, #endif /* USE_OPENSSL */ -/* The SSL_CTRL_SET_MSG_CALLBACK doesn't exist in ancient OpenSSL versions +/* The SSL_CTRL_SET_MSG_CALLBACK does not exist in ancient OpenSSL versions and thus this cannot be done there. */ #ifdef SSL_CTRL_SET_MSG_CALLBACK @@ -2719,7 +2637,7 @@ static void ossl_trace(int direction, int ssl_ver, int content_type, ssl_ver >>= 8; /* check the upper 8 bits only below */ - /* SSLv2 doesn't seem to have TLS record-type headers, so OpenSSL + /* SSLv2 does not seem to have TLS record-type headers, so OpenSSL * always pass-up content-type as 0. But the interesting message-type * is at 'buf[0]'. */ @@ -2806,7 +2724,7 @@ ossl_set_ssl_version_min_max(struct Curl_cfilter *cf, SSL_CTX *ctx) } /* CURL_SSLVERSION_DEFAULT means that no option was selected. - We don't want to pass 0 to SSL_CTX_set_min_proto_version as + We do not want to pass 0 to SSL_CTX_set_min_proto_version as it would enable all versions down to the lowest supported by the library. So we skip this, and stay with the library default @@ -2818,7 +2736,7 @@ ossl_set_ssl_version_min_max(struct Curl_cfilter *cf, SSL_CTX *ctx) } /* ... then, TLS max version */ - curl_ssl_version_max = conn_config->version_max; + curl_ssl_version_max = (long)conn_config->version_max; /* convert curl max SSL version option to OpenSSL constant */ switch(curl_ssl_version_max) { @@ -2859,6 +2777,9 @@ ossl_set_ssl_version_min_max(struct Curl_cfilter *cf, SSL_CTX *ctx) typedef uint32_t ctx_option_t; #elif OPENSSL_VERSION_NUMBER >= 0x30000000L typedef uint64_t ctx_option_t; +#elif OPENSSL_VERSION_NUMBER >= 0x10100000L && \ + !defined(LIBRESSL_VERSION_NUMBER) +typedef unsigned long ctx_option_t; #else typedef long ctx_option_t; #endif @@ -2866,24 +2787,23 @@ typedef long ctx_option_t; #if (OPENSSL_VERSION_NUMBER < 0x10100000L) /* 1.1.0 */ static CURLcode ossl_set_ssl_version_min_max_legacy(ctx_option_t *ctx_options, - struct Curl_cfilter *cf, - struct Curl_easy *data) + struct Curl_cfilter *cf, + struct Curl_easy *data) { 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. */ + (void) data; /* In case it is unused. */ switch(ssl_version) { case CURL_SSLVERSION_TLSv1_3: #ifdef TLS1_3_VERSION { 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); + struct ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; + DEBUGASSERT(octx); + SSL_CTX_set_max_proto_version(octx->ssl_ctx, TLS1_3_VERSION); *ctx_options |= SSL_OP_NO_TLSv1_2; } #else @@ -2941,61 +2861,47 @@ ossl_set_ssl_version_min_max_legacy(ctx_option_t *ctx_options, } #endif -/* The "new session" callback must return zero if the session can be removed - * or non-zero if the session has been put into the session cache. - */ -static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid) +CURLcode Curl_ossl_add_session(struct Curl_cfilter *cf, + struct Curl_easy *data, + const struct ssl_peer *peer, + SSL_SESSION *session) { - int res = 0; - struct Curl_easy *data; - struct Curl_cfilter *cf; const struct ssl_config_data *config; - struct ssl_connect_data *connssl; - bool isproxy; + CURLcode result = CURLE_OK; - 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 */ if(!cf || !data) - return 0; - - isproxy = Curl_ssl_cf_is_proxy(cf); + goto out; config = Curl_ssl_cf_get_config(cf, data); - if(config->primary.sessionid) { - bool incache; - bool added = FALSE; - void *old_ssl_sessionid = NULL; + if(config->primary.cache_session) { Curl_ssl_sessionid_lock(data); - if(isproxy) - incache = FALSE; - else - 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"); - Curl_ssl_delsessionid(data, old_ssl_sessionid); - incache = FALSE; - } - } - - if(!incache) { - 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; - } - } - else - failf(data, "failed to store ssl session"); - } + result = Curl_ssl_set_sessionid(cf, data, peer, session, 0, + ossl_session_free); + session = NULL; /* call has taken ownership */ Curl_ssl_sessionid_unlock(data); } - return res; +out: + if(session) + ossl_session_free(session, 0); + return result; +} + +/* The "new session" callback must return zero if the session can be removed + * or non-zero if the session has been put into the session cache. + */ +static int ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid) +{ + struct Curl_cfilter *cf; + struct Curl_easy *data; + struct ssl_connect_data *connssl; + + cf = (struct Curl_cfilter*) SSL_get_app_data(ssl); + connssl = cf? cf->ctx : NULL; + data = connssl? CF_DATA_CURRENT(cf) : NULL; + Curl_ossl_add_session(cf, data, &connssl->peer, ssl_sessionid); + return 1; } static CURLcode load_cacert_from_memory(X509_STORE *store, @@ -3024,7 +2930,7 @@ static CURLcode load_cacert_from_memory(X509_STORE *store, /* add each entry from PEM file to x509_store */ for(i = 0; i < (int)sk_X509_INFO_num(inf); ++i) { - itmp = sk_X509_INFO_value(inf, i); + itmp = sk_X509_INFO_value(inf, (ossl_valsize_t)i); if(itmp->x509) { if(X509_STORE_add_cert(store, itmp->x509)) { ++count; @@ -3050,7 +2956,7 @@ static CURLcode load_cacert_from_memory(X509_STORE *store, sk_X509_INFO_pop_free(inf, X509_INFO_free); BIO_free(cbio); - /* if we didn't end up importing anything, treat that as an error */ + /* if we did not end up importing anything, treat that as an error */ return (count > 0) ? CURLE_OK : CURLE_SSL_CACERT_BADFILE; } @@ -3171,7 +3077,7 @@ static CURLcode import_windows_cert_store(struct Curl_easy *data, else continue; - x509 = d2i_X509(NULL, &encoded_cert, pContext->cbCertEncoded); + x509 = d2i_X509(NULL, &encoded_cert, (long)pContext->cbCertEncoded); if(!x509) continue; @@ -3309,8 +3215,8 @@ static CURLcode populate_x509_store(struct Curl_cfilter *cf, #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 */ + /* verifying the peer without any CA certificates will not + work so use OpenSSL's built-in default as fallback */ X509_STORE_set_default_paths(store); } #endif @@ -3335,10 +3241,11 @@ static CURLcode populate_x509_store(struct Curl_cfilter *cf, if(verifypeer) { /* Try building a chain using issuers in the trusted store first to avoid - problems with server-sent legacy intermediates. Newer versions of + 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 + https://web.archive.org/web/20190422050538/ + rt.openssl.org/Ticket/Display.html?id=3621 */ #if defined(X509_V_FLAG_TRUSTED_FIRST) X509_STORE_set_flags(store, X509_V_FLAG_TRUSTED_FIRST); @@ -3362,23 +3269,49 @@ static CURLcode populate_x509_store(struct Curl_cfilter *cf, } #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) + +/* key to use at `multi->proto_hash` */ +#define MPROTO_OSSL_X509_KEY "tls:ossl:x509:share" + +struct ossl_x509_share { + 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 */ +}; + +static void oss_x509_share_free(void *key, size_t key_len, void *p) { - 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; + struct ossl_x509_share *share = p; + DEBUGASSERT(key_len == (sizeof(MPROTO_OSSL_X509_KEY)-1)); + DEBUGASSERT(!memcmp(MPROTO_OSSL_X509_KEY, key, key_len)); + (void)key; + (void)key_len; + if(share->store) { + X509_STORE_free(share->store); + } + free(share->CAfile); + free(share); +} - if(timeout_ms < 0) - return false; +static bool +cached_x509_store_expired(const struct Curl_easy *data, + const struct ossl_x509_share *mb) +{ + const struct ssl_general_config *cfg = &data->set.general_ssl; + if(cfg->ca_cache_timeout < 0) + return FALSE; + else { + 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; - return elapsed_ms >= timeout_ms; + return elapsed_ms >= timeout_ms; + } } -static bool cached_x509_store_different( - struct Curl_cfilter *cf, - const struct multi_ssl_backend_data *mb) +static bool +cached_x509_store_different(struct Curl_cfilter *cf, + const struct ossl_x509_share *mb) { struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf); if(!mb->CAfile || !conn_config->CAfile) @@ -3390,16 +3323,18 @@ static bool cached_x509_store_different( 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; + struct Curl_multi *multi = data->multi; + struct ossl_x509_share *share; 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; + share = multi? Curl_hash_pick(&multi->proto_hash, + (void *)MPROTO_OSSL_X509_KEY, + sizeof(MPROTO_OSSL_X509_KEY)-1) : NULL; + if(share && share->store && + !cached_x509_store_expired(data, share) && + !cached_x509_store_different(cf, share)) { + store = share->store; } return store; @@ -3410,21 +3345,29 @@ static void set_cached_x509_store(struct Curl_cfilter *cf, 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; + struct Curl_multi *multi = data->multi; + struct ossl_x509_share *share; DEBUGASSERT(multi); if(!multi) return; + share = Curl_hash_pick(&multi->proto_hash, + (void *)MPROTO_OSSL_X509_KEY, + sizeof(MPROTO_OSSL_X509_KEY)-1); - if(!multi->ssl_backend_data) { - multi->ssl_backend_data = calloc(1, sizeof(struct multi_ssl_backend_data)); - if(!multi->ssl_backend_data) + if(!share) { + share = calloc(1, sizeof(*share)); + if(!share) + return; + if(!Curl_hash_add2(&multi->proto_hash, + (void *)MPROTO_OSSL_X509_KEY, + sizeof(MPROTO_OSSL_X509_KEY)-1, + share, oss_x509_share_free)) { + free(share); return; + } } - mbackend = multi->ssl_backend_data; - if(X509_STORE_up_ref(store)) { char *CAfile = NULL; @@ -3436,14 +3379,14 @@ static void set_cached_x509_store(struct Curl_cfilter *cf, } } - if(mbackend->store) { - X509_STORE_free(mbackend->store); - free(mbackend->CAfile); + if(share->store) { + X509_STORE_free(share->store); + free(share->CAfile); } - mbackend->time = Curl_now(); - mbackend->store = store; - mbackend->CAfile = CAfile; + share->time = Curl_now(); + share->store = store; + share->CAfile = CAfile; } } @@ -3458,7 +3401,7 @@ CURLcode Curl_ssl_setup_x509_store(struct Curl_cfilter *cf, 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 + 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 && @@ -3493,29 +3436,30 @@ CURLcode Curl_ssl_setup_x509_store(struct Curl_cfilter *cf, } #endif /* HAVE_SSL_X509_STORE_SHARE */ -static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, - struct Curl_easy *data) +CURLcode Curl_ossl_ctx_init(struct ossl_ctx *octx, + struct Curl_cfilter *cf, + struct Curl_easy *data, + struct ssl_peer *peer, + int transport, /* TCP or QUIC */ + const unsigned char *alpn, size_t alpn_len, + Curl_ossl_ctx_setup_cb *cb_setup, + void *cb_user_data, + Curl_ossl_new_session_cb *cb_new_session, + void *ssl_user_data) { CURLcode result = CURLE_OK; - char *ciphers; + const 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; + const long int ssl_version_min = 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 ossl_ssl_backend_data *backend = - (struct ossl_ssl_backend_data *)connssl->backend; - - DEBUGASSERT(ssl_connect_1 == connssl->connecting_state); - DEBUGASSERT(backend); /* Make funny stuff to get random input */ result = ossl_seed(data); @@ -3524,67 +3468,86 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, ssl_config->certverifyresult = !X509_V_OK; - /* check to see if we've been told to use an explicit SSL/TLS version */ + switch(transport) { + case TRNSPRT_TCP: + /* check to see if we have been told to use an explicit SSL/TLS version */ + switch(ssl_version_min) { + case CURL_SSLVERSION_DEFAULT: + case CURL_SSLVERSION_TLSv1: + case CURL_SSLVERSION_TLSv1_0: + case CURL_SSLVERSION_TLSv1_1: + case CURL_SSLVERSION_TLSv1_2: + case CURL_SSLVERSION_TLSv1_3: + /* it will be handled later with the context options */ + #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) + req_method = TLS_client_method(); + #else + req_method = SSLv23_client_method(); + #endif + break; + case CURL_SSLVERSION_SSLv2: + failf(data, "No SSLv2 support"); + return CURLE_NOT_BUILT_IN; + case CURL_SSLVERSION_SSLv3: + failf(data, "No SSLv3 support"); + return CURLE_NOT_BUILT_IN; + default: + failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION"); + return CURLE_SSL_CONNECT_ERROR; + } + break; + case TRNSPRT_QUIC: + if(conn_config->version_max && + (conn_config->version_max != CURL_SSLVERSION_MAX_TLSv1_3)) { + failf(data, "QUIC needs at least TLS version 1.3"); + return CURLE_SSL_CONNECT_ERROR; + } - switch(ssl_version) { - case CURL_SSLVERSION_DEFAULT: - case CURL_SSLVERSION_TLSv1: - case CURL_SSLVERSION_TLSv1_0: - case CURL_SSLVERSION_TLSv1_1: - case CURL_SSLVERSION_TLSv1_2: - case CURL_SSLVERSION_TLSv1_3: - /* it will be handled later with the context options */ -#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) - req_method = TLS_client_method(); +#ifdef USE_OPENSSL_QUIC + req_method = OSSL_QUIC_client_method(); +#elif (OPENSSL_VERSION_NUMBER >= 0x10100000L) + req_method = TLS_method(); #else req_method = SSLv23_client_method(); #endif break; - case CURL_SSLVERSION_SSLv2: - failf(data, "No SSLv2 support"); - return CURLE_NOT_BUILT_IN; - case CURL_SSLVERSION_SSLv3: - failf(data, "No SSLv3 support"); - return CURLE_NOT_BUILT_IN; default: - failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION"); + failf(data, "unsupported transport %d in SSL init", transport); return CURLE_SSL_CONNECT_ERROR; } - 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) { - failf(data, "SSL: couldn't create a context: %s", + DEBUGASSERT(!octx->ssl_ctx); + octx->ssl_ctx = SSL_CTX_new(req_method); + + if(!octx->ssl_ctx) { + failf(data, "SSL: could not create a context: %s", ossl_strerror(ERR_peek_error(), error_buffer, sizeof(error_buffer))); return CURLE_OUT_OF_MEMORY; } -#ifdef SSL_MODE_RELEASE_BUFFERS - SSL_CTX_set_mode(backend->ctx, SSL_MODE_RELEASE_BUFFERS); -#endif + if(cb_setup) { + result = cb_setup(cf, data, cb_user_data); + if(result) + return result; + } #ifdef SSL_CTRL_SET_MSG_CALLBACK 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, cf); + SSL_CTX_set_msg_callback(octx->ssl_ctx, ossl_trace); + SSL_CTX_set_msg_callback_arg(octx->ssl_ctx, cf); } #endif /* OpenSSL contains code to work around lots of bugs and flaws in various SSL-implementations. SSL_CTX_set_options() is used to enabled those - work-arounds. The man page for this option states that SSL_OP_ALL enables + work-arounds. The manpage for this option states that SSL_OP_ALL enables all the work-arounds and that "It is usually safe to use SSL_OP_ALL to enable the bug workaround options if compatibility with somewhat broken implementations is desired." - The "-no_ticket" option was introduced in OpenSSL 0.9.8j. It's a flag to + The "-no_ticket" option was introduced in OpenSSL 0.9.8j. it is a flag to disable "rfc4507bis session ticket support". rfc4507bis was later turned into the proper RFC5077: https://datatracker.ietf.org/doc/html/rfc5077 @@ -3605,12 +3568,12 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, CVE-2010-4180 when using previous OpenSSL versions we no longer enable this option regardless of OpenSSL version and SSL_OP_ALL definition. - OpenSSL added a work-around for a SSL 3.0/TLS 1.0 CBC vulnerability - (https://www.openssl.org/~bodo/tls-cbc.txt). In 0.9.6e they added a bit to - SSL_OP_ALL that _disables_ that work-around despite the fact that - SSL_OP_ALL is documented to do "rather harmless" workarounds. In order to - keep the secure work-around, the SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS bit - must not be set. + OpenSSL added a work-around for a SSL 3.0/TLS 1.0 CBC vulnerability: + https://web.archive.org/web/20240114184648/openssl.org/~bodo/tls-cbc.txt. + In 0.9.6e they added a bit to SSL_OP_ALL that _disables_ that work-around + despite the fact that SSL_OP_ALL is documented to do "rather harmless" + workarounds. In order to keep the secure work-around, the + SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS bit must not be set. */ ctx_options = SSL_OP_ALL; @@ -3625,17 +3588,17 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, #ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG /* mitigate CVE-2010-4180 */ - ctx_options &= ~SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG; + ctx_options &= ~(ctx_option_t)SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG; #endif #ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS /* unless the user explicitly asks to allow the protocol vulnerability we use the work-around */ if(!ssl_config->enable_beast) - ctx_options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; + ctx_options &= ~(ctx_option_t)SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS; #endif - switch(ssl_version) { + switch(ssl_version_min) { case CURL_SSLVERSION_SSLv2: case CURL_SSLVERSION_SSLv3: return CURLE_NOT_BUILT_IN; @@ -3653,7 +3616,7 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, ctx_options |= SSL_OP_NO_SSLv3; #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) /* 1.1.0 */ - result = ossl_set_ssl_version_min_max(cf, backend->ctx); + result = ossl_set_ssl_version_min_max(cf, octx->ssl_ctx); #else result = ossl_set_ssl_version_min_max_legacy(&ctx_options, cf, data); #endif @@ -3666,26 +3629,20 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, return CURLE_SSL_CONNECT_ERROR; } - SSL_CTX_set_options(backend->ctx, ctx_options); + SSL_CTX_set_options(octx->ssl_ctx, ctx_options); #ifdef HAS_ALPN - if(connssl->alpn) { - struct alpn_proto_buf proto; - - result = Curl_alpn_to_proto_buf(&proto, connssl->alpn); - if(result || - SSL_CTX_set_alpn_protos(backend->ctx, proto.data, proto.len)) { + if(alpn && alpn_len) { + if(SSL_CTX_set_alpn_protos(octx->ssl_ctx, alpn, (int)alpn_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 if(ssl_cert || ssl_cert_blob || ssl_cert_type) { if(!result && - !cert_stuff(data, backend->ctx, + !cert_stuff(data, octx->ssl_ctx, ssl_cert, ssl_cert_blob, ssl_cert_type, ssl_config->key, ssl_config->key_blob, ssl_config->key_type, ssl_config->key_passwd)) @@ -3696,10 +3653,10 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, } ciphers = conn_config->cipher_list; - if(!ciphers) - ciphers = (char *)DEFAULT_CIPHER_SELECTION; + if(!ciphers && (peer->transport != TRNSPRT_QUIC)) + ciphers = DEFAULT_CIPHER_SELECTION; if(ciphers) { - if(!SSL_CTX_set_cipher_list(backend->ctx, ciphers)) { + if(!SSL_CTX_set_cipher_list(octx->ssl_ctx, ciphers)) { failf(data, "failed setting cipher list: %s", ciphers); return CURLE_SSL_CIPHER; } @@ -3708,9 +3665,9 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, #ifdef HAVE_SSL_CTX_SET_CIPHERSUITES { - char *ciphers13 = conn_config->cipher_list13; + const char *ciphers13 = conn_config->cipher_list13; if(ciphers13) { - if(!SSL_CTX_set_ciphersuites(backend->ctx, ciphers13)) { + if(!SSL_CTX_set_ciphersuites(octx->ssl_ctx, ciphers13)) { failf(data, "failed setting TLS 1.3 cipher suite: %s", ciphers13); return CURLE_SSL_CIPHER; } @@ -3721,14 +3678,14 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, #ifdef HAVE_SSL_CTX_SET_POST_HANDSHAKE_AUTH /* OpenSSL 1.1.1 requires clients to opt-in for PHA */ - SSL_CTX_set_post_handshake_auth(backend->ctx, 1); + SSL_CTX_set_post_handshake_auth(octx->ssl_ctx, 1); #endif #ifdef HAVE_SSL_CTX_SET_EC_CURVES { - char *curves = conn_config->curves; + const char *curves = conn_config->curves; if(curves) { - if(!SSL_CTX_set1_curves_list(backend->ctx, curves)) { + if(!SSL_CTX_set1_curves_list(octx->ssl_ctx, curves)) { failf(data, "failed setting curves list: '%s'", curves); return CURLE_SSL_CIPHER; } @@ -3742,18 +3699,18 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, 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)) { - failf(data, "Unable to set SRP user name"); + if(!SSL_CTX_set_srp_username(octx->ssl_ctx, ssl_username)) { + failf(data, "Unable to set SRP username"); return CURLE_BAD_FUNCTION_ARGUMENT; } - if(!SSL_CTX_set_srp_password(backend->ctx, ssl_password)) { + if(!SSL_CTX_set_srp_password(octx->ssl_ctx, ssl_password)) { failf(data, "failed setting SRP password"); return CURLE_BAD_FUNCTION_ARGUMENT; } if(!conn_config->cipher_list) { infof(data, "Setting cipher list SRP"); - if(!SSL_CTX_set_cipher_list(backend->ctx, "SRP")) { + if(!SSL_CTX_set_cipher_list(octx->ssl_ctx, "SRP")) { failf(data, "failed setting SRP cipher list"); return CURLE_SSL_CIPHER; } @@ -3765,38 +3722,40 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, * 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_CTX_set_verify(octx->ssl_ctx, verifypeer ? SSL_VERIFY_PEER : SSL_VERIFY_NONE, NULL); /* Enable logging of secrets to the file specified in env SSLKEYLOGFILE. */ #ifdef HAVE_KEYLOG_CALLBACK if(Curl_tls_keylog_enabled()) { - SSL_CTX_set_keylog_callback(backend->ctx, ossl_keylog_callback); + SSL_CTX_set_keylog_callback(octx->ssl_ctx, ossl_keylog_callback); } #endif - /* Enable the session cache because it's a prerequisite for the "new session" - * callback. Use the "external storage" mode to prevent OpenSSL from creating - * an internal session cache. - */ - SSL_CTX_set_session_cache_mode(backend->ctx, - SSL_SESS_CACHE_CLIENT | - SSL_SESS_CACHE_NO_INTERNAL); - SSL_CTX_sess_set_new_cb(backend->ctx, ossl_new_session_cb); + if(cb_new_session) { + /* Enable the session cache because it is a prerequisite for the + * "new session" callback. Use the "external storage" mode to prevent + * OpenSSL from creating an internal session cache. + */ + SSL_CTX_set_session_cache_mode(octx->ssl_ctx, + SSL_SESS_CACHE_CLIENT | + SSL_SESS_CACHE_NO_INTERNAL); + SSL_CTX_sess_set_new_cb(octx->ssl_ctx, cb_new_session); + } /* 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(!octx->x509_store_setup) { + result = Curl_ssl_setup_x509_store(cf, data, octx->ssl_ctx); if(result) return result; - backend->x509_store_setup = TRUE; + octx->x509_store_setup = TRUE; } Curl_set_in_callback(data, true); - result = (*data->set.ssl.fsslctx)(data, backend->ctx, + result = (*data->set.ssl.fsslctx)(data, octx->ssl_ctx, data->set.ssl.fsslctxp); Curl_set_in_callback(data, false); if(result) { @@ -3806,47 +3765,175 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, } /* Let's make an SSL structure */ - if(backend->handle) - SSL_free(backend->handle); - backend->handle = SSL_new(backend->ctx); - if(!backend->handle) { - failf(data, "SSL: couldn't create a context (handle)"); + if(octx->ssl) + SSL_free(octx->ssl); + octx->ssl = SSL_new(octx->ssl_ctx); + if(!octx->ssl) { + failf(data, "SSL: could not create a context (handle)"); return CURLE_OUT_OF_MEMORY; } - SSL_set_app_data(backend->handle, cf); + SSL_set_app_data(octx->ssl, ssl_user_data); #if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \ !defined(OPENSSL_NO_OCSP) if(conn_config->verifystatus) - SSL_set_tlsext_status_type(backend->handle, TLSEXT_STATUSTYPE_ocsp); + SSL_set_tlsext_status_type(octx->ssl, TLSEXT_STATUSTYPE_ocsp); #endif #if (defined(OPENSSL_IS_BORINGSSL) || defined(OPENSSL_IS_AWSLC)) && \ defined(ALLOW_RENEG) - SSL_set_renegotiate_mode(backend->handle, ssl_renegotiate_freely); + SSL_set_renegotiate_mode(octx->ssl, ssl_renegotiate_freely); #endif - SSL_set_connect_state(backend->handle); + SSL_set_connect_state(octx->ssl); - backend->server_cert = 0x0; + octx->server_cert = 0x0; #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME - if(connssl->peer.sni) { - if(!SSL_set_tlsext_host_name(backend->handle, connssl->peer.sni)) { + if(peer->sni) { + if(!SSL_set_tlsext_host_name(octx->ssl, peer->sni)) { failf(data, "Failed set SNI"); return CURLE_SSL_CONNECT_ERROR; } } -#endif - SSL_set_app_data(backend->handle, cf); +#ifdef USE_ECH + if(ECH_ENABLED(data)) { + unsigned char *ech_config = NULL; + size_t ech_config_len = 0; + char *outername = data->set.str[STRING_ECH_PUBLIC]; + int trying_ech_now = 0; + + if(data->set.tls_ech & CURLECH_GREASE) { + infof(data, "ECH: will GREASE ClientHello"); +# ifdef OPENSSL_IS_BORINGSSL + SSL_set_enable_ech_grease(octx->ssl, 1); +# else + SSL_set_options(octx->ssl, SSL_OP_ECH_GREASE); +# endif + } + else if(data->set.tls_ech & CURLECH_CLA_CFG) { +# ifdef OPENSSL_IS_BORINGSSL + /* have to do base64 decode here for boring */ + const char *b64 = data->set.str[STRING_ECH_CONFIG]; - connssl->reused_session = FALSE; - if(ssl_config->primary.sessionid) { + if(!b64) { + infof(data, "ECH: ECHConfig from command line empty"); + return CURLE_SSL_CONNECT_ERROR; + } + ech_config_len = 2 * strlen(b64); + result = Curl_base64_decode(b64, &ech_config, &ech_config_len); + if(result || !ech_config) { + infof(data, "ECH: cannot base64 decode ECHConfig from command line"); + if(data->set.tls_ech & CURLECH_HARD) + return result; + } + if(SSL_set1_ech_config_list(octx->ssl, ech_config, + ech_config_len) != 1) { + infof(data, "ECH: SSL_ECH_set1_echconfig failed"); + if(data->set.tls_ech & CURLECH_HARD) { + free(ech_config); + return CURLE_SSL_CONNECT_ERROR; + } + } + free(ech_config); + trying_ech_now = 1; +# else + ech_config = (unsigned char *) data->set.str[STRING_ECH_CONFIG]; + if(!ech_config) { + infof(data, "ECH: ECHConfig from command line empty"); + return CURLE_SSL_CONNECT_ERROR; + } + ech_config_len = strlen(data->set.str[STRING_ECH_CONFIG]); + if(SSL_ech_set1_echconfig(octx->ssl, ech_config, ech_config_len) != 1) { + infof(data, "ECH: SSL_ECH_set1_echconfig failed"); + if(data->set.tls_ech & CURLECH_HARD) + return CURLE_SSL_CONNECT_ERROR; + } + else + trying_ech_now = 1; +# endif + infof(data, "ECH: ECHConfig from command line"); + } + else { + struct Curl_dns_entry *dns = NULL; + + if(peer->hostname) + dns = Curl_fetch_addr(data, peer->hostname, peer->port); + if(!dns) { + infof(data, "ECH: requested but no DNS info available"); + if(data->set.tls_ech & CURLECH_HARD) + return CURLE_SSL_CONNECT_ERROR; + } + else { + struct Curl_https_rrinfo *rinfo = NULL; + + rinfo = dns->hinfo; + if(rinfo && rinfo->echconfiglist) { + unsigned char *ecl = rinfo->echconfiglist; + size_t elen = rinfo->echconfiglist_len; + + infof(data, "ECH: ECHConfig from DoH HTTPS RR"); +# ifndef OPENSSL_IS_BORINGSSL + if(SSL_ech_set1_echconfig(octx->ssl, ecl, elen) != 1) { + infof(data, "ECH: SSL_ECH_set1_echconfig failed"); + if(data->set.tls_ech & CURLECH_HARD) + return CURLE_SSL_CONNECT_ERROR; + } +# else + if(SSL_set1_ech_config_list(octx->ssl, ecl, elen) != 1) { + infof(data, "ECH: SSL_set1_ech_config_list failed (boring)"); + if(data->set.tls_ech & CURLECH_HARD) + return CURLE_SSL_CONNECT_ERROR; + } +# endif + else { + trying_ech_now = 1; + infof(data, "ECH: imported ECHConfigList of length %zu", elen); + } + } + else { + infof(data, "ECH: requested but no ECHConfig available"); + if(data->set.tls_ech & CURLECH_HARD) + return CURLE_SSL_CONNECT_ERROR; + } + Curl_resolv_unlock(data, dns); + } + } +# ifdef OPENSSL_IS_BORINGSSL + if(trying_ech_now && outername) { + infof(data, "ECH: setting public_name not supported with BoringSSL"); + return CURLE_SSL_CONNECT_ERROR; + } +# else + if(trying_ech_now && outername) { + infof(data, "ECH: inner: '%s', outer: '%s'", + peer->hostname ? peer->hostname : "NULL", outername); + result = SSL_ech_set_server_names(octx->ssl, + peer->hostname, outername, + 0 /* do send outer */); + if(result != 1) { + infof(data, "ECH: rv failed to set server name(s) %d [ERROR]", result); + return CURLE_SSL_CONNECT_ERROR; + } + } +# endif /* not BORING */ + if(trying_ech_now + && SSL_set_min_proto_version(octx->ssl, TLS1_3_VERSION) != 1) { + infof(data, "ECH: cannot force TLSv1.3 [ERROR]"); + return CURLE_SSL_CONNECT_ERROR; + } + } +#endif /* USE_ECH */ + +#endif + + octx->reused_session = FALSE; + if(ssl_config->primary.cache_session && transport == TRNSPRT_TCP) { Curl_ssl_sessionid_lock(data); - if(!Curl_ssl_getsessionid(cf, data, &ssl_sessionid, NULL)) { + if(!Curl_ssl_getsessionid(cf, data, peer, &ssl_sessionid, NULL)) { /* we got a session id, use it! */ - if(!SSL_set_session(backend->handle, ssl_sessionid)) { + if(!SSL_set_session(octx->ssl, ssl_sessionid)) { Curl_ssl_sessionid_unlock(data); failf(data, "SSL: SSL_set_session failed: %s", ossl_strerror(ERR_get_error(), error_buffer, @@ -3855,15 +3942,46 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, } /* Informational message */ infof(data, "SSL reusing session ID"); - connssl->reused_session = TRUE; + octx->reused_session = TRUE; } Curl_ssl_sessionid_unlock(data); } - backend->bio_method = ossl_bio_cf_method_create(); - if(!backend->bio_method) + return CURLE_OK; +} + +static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, + struct Curl_easy *data) +{ + struct ssl_connect_data *connssl = cf->ctx; + struct ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; + struct alpn_proto_buf proto; + BIO *bio; + CURLcode result; + + DEBUGASSERT(ssl_connect_1 == connssl->connecting_state); + DEBUGASSERT(octx); + memset(&proto, 0, sizeof(proto)); +#ifdef HAS_ALPN + if(connssl->alpn) { + result = Curl_alpn_to_proto_buf(&proto, connssl->alpn); + if(result) { + failf(data, "Error determining ALPN"); + return CURLE_SSL_CONNECT_ERROR; + } + } +#endif + + result = Curl_ossl_ctx_init(octx, cf, data, &connssl->peer, TRNSPRT_TCP, + proto.data, proto.len, NULL, NULL, + ossl_new_session_cb, cf); + if(result) + return result; + + octx->bio_method = ossl_bio_cf_method_create(); + if(!octx->bio_method) return CURLE_OUT_OF_MEMORY; - bio = BIO_new(backend->bio_method); + bio = BIO_new(octx->bio_method); if(!bio) return CURLE_OUT_OF_MEMORY; @@ -3872,66 +3990,133 @@ static CURLcode ossl_connect_step1(struct Curl_cfilter *cf, /* 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 + * 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); + SSL_set0_rbio(octx->ssl, bio); + SSL_set0_wbio(octx->ssl, bio); #else - SSL_set_bio(backend->handle, bio, bio); + SSL_set_bio(octx->ssl, bio, bio); #endif - connssl->connecting_state = ssl_connect_2; +#ifdef HAS_ALPN + if(connssl->alpn) { + Curl_alpn_to_proto_str(&proto, connssl->alpn); + infof(data, VTLS_INFOF_ALPN_OFFER_1STR, proto.data); + } +#endif + connssl->connecting_state = ssl_connect_2; return CURLE_OK; } +#ifdef USE_ECH +/* If we have retry configs, then trace those out */ +static void ossl_trace_ech_retry_configs(struct Curl_easy *data, SSL* ssl, + int reason) +{ + CURLcode result = CURLE_OK; + size_t rcl = 0; + int rv = 1; +# ifndef OPENSSL_IS_BORINGSSL + char *inner = NULL; + unsigned char *rcs = NULL; + char *outer = NULL; +# else + const char *inner = NULL; + const uint8_t *rcs = NULL; + const char *outer = NULL; + size_t out_name_len = 0; + int servername_type = 0; +# endif + + /* nothing to trace if not doing ECH */ + if(!ECH_ENABLED(data)) + return; +# ifndef OPENSSL_IS_BORINGSSL + rv = SSL_ech_get_retry_config(ssl, &rcs, &rcl); +# else + SSL_get0_ech_retry_configs(ssl, &rcs, &rcl); + rv = (int)rcl; +# endif + + if(rv && rcs) { +# define HEXSTR_MAX 800 + char *b64str = NULL; + size_t blen = 0; + + result = Curl_base64_encode((const char *)rcs, rcl, + &b64str, &blen); + if(!result && b64str) + infof(data, "ECH: retry_configs %s", b64str); + free(b64str); +# ifndef OPENSSL_IS_BORINGSSL + rv = SSL_ech_get_status(ssl, &inner, &outer); + infof(data, "ECH: retry_configs for %s from %s, %d %d", + inner ? inner : "NULL", outer ? outer : "NULL", reason, rv); +#else + rv = SSL_ech_accepted(ssl); + servername_type = SSL_get_servername_type(ssl); + inner = SSL_get_servername(ssl, servername_type); + SSL_get0_ech_name_override(ssl, &outer, &out_name_len); + /* TODO: get the inner from boring */ + infof(data, "ECH: retry_configs for %s from %s, %d %d", + inner ? inner : "NULL", outer ? outer : "NULL", reason, rv); +#endif + } + else + infof(data, "ECH: no retry_configs (rv = %d)", rv); +# ifndef OPENSSL_IS_BORINGSSL + OPENSSL_free((void *)rcs); +# endif + return; +} + +#endif + static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) { int err; struct ssl_connect_data *connssl = cf->ctx; - struct ossl_ssl_backend_data *backend = - (struct ossl_ssl_backend_data *)connssl->backend; + struct ossl_ctx *octx = (struct ossl_ctx *)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); - DEBUGASSERT(backend); + DEBUGASSERT(ssl_connect_2 == connssl->connecting_state); + DEBUGASSERT(octx); + connssl->io_need = CURL_SSL_IO_NEED_NONE; ERR_clear_error(); - err = SSL_connect(backend->handle); + err = SSL_connect(octx->ssl); - if(!backend->x509_store_setup) { + if(!octx->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); + CURLcode result = Curl_ssl_setup_x509_store(cf, data, octx->ssl_ctx); if(result) return result; - backend->x509_store_setup = TRUE; + octx->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 - * proceed with logging secrets (for TLS 1.2 or older). - */ - ossl_log_tls12_secret(backend->handle, &backend->keylog_done); - } + /* If key logging is enabled, wait for the handshake to complete and then + * proceed with logging secrets (for TLS 1.2 or older). + */ + if(Curl_tls_keylog_enabled() && !octx->keylog_done) + ossl_log_tls12_secret(octx->ssl, &octx->keylog_done); #endif /* 1 is fine 0 is "not successful but was shut down controlled" <0 is "handshake was not successful, because a fatal error occurred" */ if(1 != err) { - int detail = SSL_get_error(backend->handle, err); + int detail = SSL_get_error(octx->ssl, err); if(SSL_ERROR_WANT_READ == detail) { - connssl->connecting_state = ssl_connect_2_reading; + connssl->io_need = CURL_SSL_IO_NEED_RECV; return CURLE_OK; } if(SSL_ERROR_WANT_WRITE == detail) { - connssl->connecting_state = ssl_connect_2_writing; + connssl->io_need = CURL_SSL_IO_NEED_SEND; return CURLE_OK; } #ifdef SSL_ERROR_WANT_ASYNC @@ -3946,7 +4131,7 @@ static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, return CURLE_OK; } #endif - if(backend->io_result == CURLE_AGAIN) { + if(octx->io_result == CURLE_AGAIN) { return CURLE_OK; } else { @@ -3958,7 +4143,7 @@ static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, int lib; int reason; - /* the connection failed, we're not waiting for anything else. */ + /* the connection failed, we are not waiting for anything else. */ connssl->connecting_state = ssl_connect_2; /* Get the earliest error code from the thread's error queue and remove @@ -3974,7 +4159,7 @@ static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, (reason == SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED))) { result = CURLE_PEER_FAILED_VERIFICATION; - lerr = SSL_get_verify_result(backend->handle); + lerr = SSL_get_verify_result(octx->ssl); if(lerr != X509_V_OK) { ssl_config->certverifyresult = lerr; msnprintf(error_buffer, sizeof(error_buffer), @@ -3996,6 +4181,21 @@ static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, result = CURLE_SSL_CLIENTCERT; ossl_strerror(errdetail, error_buffer, sizeof(error_buffer)); } +#endif +#ifdef USE_ECH + else if((lib == ERR_LIB_SSL) && +# ifndef OPENSSL_IS_BORINGSSL + (reason == SSL_R_ECH_REQUIRED)) { +# else + (reason == SSL_R_ECH_REJECTED)) { +# endif + + /* trace retry_configs if we got some */ + ossl_trace_ech_retry_configs(data, octx->ssl, reason); + + result = CURLE_ECH_REQUIRED; + ossl_strerror(errdetail, error_buffer, sizeof(error_buffer)); + } #endif else { result = CURLE_SSL_CONNECT_ERROR; @@ -4004,7 +4204,7 @@ static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, /* detail is already set to the SSL error above */ - /* If we e.g. use SSLv2 request-method and the server doesn't like us + /* If we e.g. use SSLv2 request-method and the server does not like us * (RST connection, etc.), OpenSSL gives no explanation whatsoever and * the SO_ERROR is also lost. */ @@ -4016,7 +4216,7 @@ static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, Curl_strerror(sockerr, extramsg, sizeof(extramsg)); failf(data, OSSL_PACKAGE " SSL_connect: %s in connection to %s:%d ", extramsg[0] ? extramsg : SSL_ERROR_to_str(detail), - connssl->peer.hostname, connssl->port); + connssl->peer.hostname, connssl->peer.port); return result; } @@ -4030,26 +4230,88 @@ static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, int psigtype_nid = NID_undef; const char *negotiated_group_name = NULL; - /* we connected fine, we're not waiting for anything else. */ + /* we connected fine, we are 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); + SSL_get_peer_signature_type_nid(octx->ssl, &psigtype_nid); #if (OPENSSL_VERSION_NUMBER >= 0x30200000L) - negotiated_group_name = SSL_get0_group_name(backend->handle); + negotiated_group_name = SSL_get0_group_name(octx->ssl); #else negotiated_group_name = - OBJ_nid2sn(SSL_get_negotiated_group(backend->handle) & 0x0000FFFF); + OBJ_nid2sn(SSL_get_negotiated_group(octx->ssl) & 0x0000FFFF); #endif #endif /* Informational message */ infof(data, "SSL connection using %s / %s / %s / %s", - SSL_get_version(backend->handle), - SSL_get_cipher(backend->handle), + SSL_get_version(octx->ssl), + SSL_get_cipher(octx->ssl), negotiated_group_name? negotiated_group_name : "[blank]", OBJ_nid2sn(psigtype_nid)); +#ifdef USE_ECH +# ifndef OPENSSL_IS_BORINGSSL + if(ECH_ENABLED(data)) { + char *inner = NULL, *outer = NULL; + const char *status = NULL; + int rv; + + rv = SSL_ech_get_status(octx->ssl, &inner, &outer); + switch(rv) { + case SSL_ECH_STATUS_SUCCESS: + status = "succeeded"; + break; + case SSL_ECH_STATUS_GREASE_ECH: + status = "sent GREASE, got retry-configs"; + break; + case SSL_ECH_STATUS_GREASE: + status = "sent GREASE"; + break; + case SSL_ECH_STATUS_NOT_TRIED: + status = "not attempted"; + break; + case SSL_ECH_STATUS_NOT_CONFIGURED: + status = "not configured"; + break; + case SSL_ECH_STATUS_BACKEND: + status = "backend (unexpected)"; + break; + case SSL_ECH_STATUS_FAILED: + status = "failed"; + break; + case SSL_ECH_STATUS_BAD_CALL: + status = "bad call (unexpected)"; + break; + case SSL_ECH_STATUS_BAD_NAME: + status = "bad name (unexpected)"; + break; + default: + status = "unexpected status"; + infof(data, "ECH: unexpected status %d",rv); + } + infof(data, "ECH: result: status is %s, inner is %s, outer is %s", + (status?status:"NULL"), + (inner?inner:"NULL"), + (outer?outer:"NULL")); + OPENSSL_free(inner); + OPENSSL_free(outer); + if(rv == SSL_ECH_STATUS_GREASE_ECH) { + /* trace retry_configs if we got some */ + ossl_trace_ech_retry_configs(data, octx->ssl, 0); + } + if(rv != SSL_ECH_STATUS_SUCCESS + && data->set.tls_ech & CURLECH_HARD) { + infof(data, "ECH: ech-hard failed"); + return CURLE_SSL_CONNECT_ERROR; + } + } + else { + infof(data, "ECH: result: status is not attempted"); + } +# endif /* BORING */ +#endif /* USE_ECH */ + #ifdef HAS_ALPN /* Sets data and len to negotiated protocol, len is 0 if no protocol was * negotiated @@ -4057,7 +4319,7 @@ static CURLcode ossl_connect_step2(struct Curl_cfilter *cf, if(connssl->alpn) { const unsigned char *neg_protocol; unsigned int len; - SSL_get0_alpn_selected(backend->handle, &neg_protocol, &len); + SSL_get0_alpn_selected(octx->ssl, &neg_protocol, &len); return Curl_alpn_set_negotiated(cf, data, neg_protocol, len); } @@ -4081,7 +4343,7 @@ static CURLcode ossl_pkp_pin_peer_pubkey(struct Curl_easy *data, X509* cert, /* Result is returned to caller */ CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH; - /* if a path wasn't specified, don't pin */ + /* if a path was not specified, do not pin */ if(!pinnedpubkey) return CURLE_OK; @@ -4102,12 +4364,12 @@ static CURLcode ossl_pkp_pin_peer_pubkey(struct Curl_easy *data, X509* cert, if(!buff1) break; /* failed */ - /* https://www.openssl.org/docs/crypto/d2i_X509.html */ + /* https://docs.openssl.org/master/man3/d2i_X509/ */ len2 = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), &temp); /* * These checks are verifying we got back the same values as when we - * sized the buffer. It's pretty weak since they should always be the + * sized the buffer. it is pretty weak since they should always be the * same. But it gives us something to test. */ if((len1 != len2) || !temp || ((temp - buff1) != len1)) @@ -4194,20 +4456,12 @@ static void infof_certstack(struct Curl_easy *data, const SSL *ssl) #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 - * purposes only! - * - * We check certificates to authenticate the server; otherwise we risk - * man-in-the-middle attack. - */ -static CURLcode servercert(struct Curl_cfilter *cf, - struct Curl_easy *data, - bool strict) +CURLcode Curl_oss_check_peer_cert(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct ossl_ctx *octx, + struct ssl_peer *peer) { 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; @@ -4219,10 +4473,9 @@ static CURLcode servercert(struct Curl_cfilter *cf, char buffer[2048]; const char *ptr; BIO *mem = BIO_new(BIO_s_mem()); - struct ossl_ssl_backend_data *backend = - (struct ossl_ssl_backend_data *)connssl->backend; + bool strict = (conn_config->verifypeer || conn_config->verifyhost); - DEBUGASSERT(backend); + DEBUGASSERT(octx); if(!mem) { failf(data, @@ -4235,34 +4488,34 @@ static CURLcode servercert(struct Curl_cfilter *cf, if(data->set.ssl.certinfo) /* asked to gather certificate info */ - (void)Curl_ossl_certchain(data, backend->handle); + (void)Curl_ossl_certchain(data, octx->ssl); - backend->server_cert = SSL_get1_peer_certificate(backend->handle); - if(!backend->server_cert) { + octx->server_cert = SSL_get1_peer_certificate(octx->ssl); + if(!octx->server_cert) { BIO_free(mem); if(!strict) return CURLE_OK; - failf(data, "SSL: couldn't get peer certificate"); + failf(data, "SSL: could not get peer certificate"); return CURLE_PEER_FAILED_VERIFICATION; } infof(data, "%s certificate:", Curl_ssl_cf_is_proxy(cf)? "Proxy" : "Server"); - rc = x509_name_oneline(X509_get_subject_name(backend->server_cert), + rc = x509_name_oneline(X509_get_subject_name(octx->server_cert), buffer, sizeof(buffer)); infof(data, " subject: %s", rc?"[NONE]":buffer); #ifndef CURL_DISABLE_VERBOSE_STRINGS { long len; - ASN1_TIME_print(mem, X509_get0_notBefore(backend->server_cert)); + ASN1_TIME_print(mem, X509_get0_notBefore(octx->server_cert)); len = BIO_get_mem_data(mem, (char **) &ptr); infof(data, " start date: %.*s", (int)len, ptr); (void)BIO_reset(mem); - ASN1_TIME_print(mem, X509_get0_notAfter(backend->server_cert)); + ASN1_TIME_print(mem, X509_get0_notAfter(octx->server_cert)); len = BIO_get_mem_data(mem, (char **) &ptr); infof(data, " expire date: %.*s", (int)len, ptr); (void)BIO_reset(mem); @@ -4272,20 +4525,19 @@ static CURLcode servercert(struct Curl_cfilter *cf, BIO_free(mem); if(conn_config->verifyhost) { - result = Curl_ossl_verifyhost(data, conn, &connssl->peer, - backend->server_cert); + result = Curl_ossl_verifyhost(data, conn, peer, octx->server_cert); if(result) { - X509_free(backend->server_cert); - backend->server_cert = NULL; + X509_free(octx->server_cert); + octx->server_cert = NULL; return result; } } - rc = x509_name_oneline(X509_get_issuer_name(backend->server_cert), + rc = x509_name_oneline(X509_get_issuer_name(octx->server_cert), buffer, sizeof(buffer)); if(rc) { if(strict) - failf(data, "SSL: couldn't get X509-issuer name"); + failf(data, "SSL: could not get X509-issuer name"); result = CURLE_PEER_FAILED_VERIFICATION; } else { @@ -4305,8 +4557,8 @@ static CURLcode servercert(struct Curl_cfilter *cf, " error %s", ossl_strerror(ERR_get_error(), error_buffer, sizeof(error_buffer)) ); - X509_free(backend->server_cert); - backend->server_cert = NULL; + X509_free(octx->server_cert); + octx->server_cert = NULL; return CURLE_OUT_OF_MEMORY; } } @@ -4318,8 +4570,8 @@ static CURLcode servercert(struct Curl_cfilter *cf, " error %s", ossl_strerror(ERR_get_error(), error_buffer, sizeof(error_buffer)) ); - X509_free(backend->server_cert); - backend->server_cert = NULL; + X509_free(octx->server_cert); + octx->server_cert = NULL; return CURLE_OUT_OF_MEMORY; } @@ -4328,8 +4580,8 @@ static CURLcode servercert(struct Curl_cfilter *cf, failf(data, "SSL: Unable to open issuer cert (%s)", conn_config->issuercert); BIO_free(fp); - X509_free(backend->server_cert); - backend->server_cert = NULL; + X509_free(octx->server_cert); + octx->server_cert = NULL; return CURLE_SSL_ISSUER_ERROR; } } @@ -4341,19 +4593,19 @@ static CURLcode servercert(struct Curl_cfilter *cf, conn_config->issuercert); BIO_free(fp); X509_free(issuer); - X509_free(backend->server_cert); - backend->server_cert = NULL; + X509_free(octx->server_cert); + octx->server_cert = NULL; return CURLE_SSL_ISSUER_ERROR; } - if(X509_check_issued(issuer, backend->server_cert) != X509_V_OK) { + if(X509_check_issued(issuer, octx->server_cert) != X509_V_OK) { if(strict) failf(data, "SSL: Certificate issuer check failed (%s)", conn_config->issuercert); BIO_free(fp); X509_free(issuer); - X509_free(backend->server_cert); - backend->server_cert = NULL; + X509_free(octx->server_cert); + octx->server_cert = NULL; return CURLE_SSL_ISSUER_ERROR; } @@ -4363,7 +4615,7 @@ static CURLcode servercert(struct Curl_cfilter *cf, X509_free(issuer); } - lerr = SSL_get_verify_result(backend->handle); + lerr = SSL_get_verify_result(octx->ssl); ssl_config->certverifyresult = lerr; if(lerr != X509_V_OK) { if(conn_config->verifypeer) { @@ -4383,13 +4635,13 @@ static CURLcode servercert(struct Curl_cfilter *cf, infof(data, " SSL certificate verify ok."); } - infof_certstack(data, backend->handle); + infof_certstack(data, octx->ssl); #if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \ !defined(OPENSSL_NO_OCSP) - if(conn_config->verifystatus && !connssl->reused_session) { - /* don't do this after Session ID reuse */ - result = verifystatus(cf, data); + if(conn_config->verifystatus && !octx->reused_session) { + /* do not do this after Session ID reuse */ + result = verifystatus(cf, data, octx); if(result) { /* when verifystatus failed, remove the session id from the cache again if present */ @@ -4397,7 +4649,8 @@ static CURLcode servercert(struct Curl_cfilter *cf, void *old_ssl_sessionid = NULL; bool incache; Curl_ssl_sessionid_lock(data); - incache = !(Curl_ssl_getsessionid(cf, data, &old_ssl_sessionid, NULL)); + incache = !(Curl_ssl_getsessionid(cf, data, peer, + &old_ssl_sessionid, NULL)); if(incache) { infof(data, "Remove session ID again from cache"); Curl_ssl_delsessionid(data, old_ssl_sessionid); @@ -4405,29 +4658,32 @@ static CURLcode servercert(struct Curl_cfilter *cf, Curl_ssl_sessionid_unlock(data); } - X509_free(backend->server_cert); - backend->server_cert = NULL; + X509_free(octx->server_cert); + octx->server_cert = NULL; return result; } } #endif if(!strict) - /* when not strict, we don't bother about the verify cert problems */ + /* when not strict, we do not bother about the verify cert problems */ result = CURLE_OK; +#ifndef CURL_DISABLE_PROXY ptr = Curl_ssl_cf_is_proxy(cf)? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]: data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#else + ptr = data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#endif if(!result && ptr) { - result = ossl_pkp_pin_peer_pubkey(data, backend->server_cert, ptr); + result = ossl_pkp_pin_peer_pubkey(data, octx->server_cert, ptr); if(result) failf(data, "SSL: public key does not match pinned public key"); } - X509_free(backend->server_cert); - backend->server_cert = NULL; - connssl->connecting_state = ssl_connect_done; + X509_free(octx->server_cert); + octx->server_cert = NULL; return result; } @@ -4437,20 +4693,18 @@ static CURLcode ossl_connect_step3(struct Curl_cfilter *cf, { CURLcode result = CURLE_OK; struct ssl_connect_data *connssl = cf->ctx; - struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf); + struct ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; DEBUGASSERT(ssl_connect_3 == connssl->connecting_state); /* * We check certificates to authenticate the server; otherwise we risk - * man-in-the-middle attack; NEVERTHELESS, if we're told explicitly not to + * man-in-the-middle attack; NEVERTHELESS, if we are told explicitly not to * verify the peer, ignore faults and failures from the server cert * operations. */ - result = servercert(cf, data, conn_config->verifypeer || - conn_config->verifyhost); - + result = Curl_oss_check_peer_cert(cf, data, octx, &connssl->peer); if(!result) connssl->connecting_state = ssl_connect_done; @@ -4474,7 +4728,7 @@ static CURLcode ossl_connect_common(struct Curl_cfilter *cf, } if(ssl_connect_1 == connssl->connecting_state) { - /* Find out how much more time we're allowed */ + /* Find out how much more time we are allowed */ const timediff_t timeout_ms = Curl_timeleft(data, NULL, TRUE); if(timeout_ms < 0) { @@ -4488,9 +4742,7 @@ static CURLcode ossl_connect_common(struct Curl_cfilter *cf, goto out; } - while(ssl_connect_2 == connssl->connecting_state || - ssl_connect_2_reading == connssl->connecting_state || - ssl_connect_2_writing == connssl->connecting_state) { + while(ssl_connect_2 == connssl->connecting_state) { /* check allowed time left */ const timediff_t timeout_ms = Curl_timeleft(data, NULL, TRUE); @@ -4502,15 +4754,13 @@ static CURLcode ossl_connect_common(struct Curl_cfilter *cf, goto out; } - /* if ssl is expecting something, check if it's available. */ - if(!nonblocking && - (connssl->connecting_state == ssl_connect_2_reading || - connssl->connecting_state == ssl_connect_2_writing)) { + /* if ssl is expecting something, check if it is available. */ + if(!nonblocking && connssl->io_need) { - curl_socket_t writefd = ssl_connect_2_writing == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; - curl_socket_t readfd = ssl_connect_2_reading == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; + curl_socket_t writefd = (connssl->io_need & CURL_SSL_IO_NEED_SEND)? + sockfd:CURL_SOCKET_BAD; + curl_socket_t readfd = (connssl->io_need & CURL_SSL_IO_NEED_RECV)? + sockfd:CURL_SOCKET_BAD; what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd, timeout_ms); @@ -4536,10 +4786,7 @@ static CURLcode ossl_connect_common(struct Curl_cfilter *cf, * or epoll() will always have a valid fdset to wait on. */ 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))) + if(result || (nonblocking && (ssl_connect_2 == connssl->connecting_state))) goto out; } /* repeat step2 until all transactions are done. */ @@ -4590,12 +4837,11 @@ static bool ossl_data_pending(struct Curl_cfilter *cf, const struct Curl_easy *data) { struct ssl_connect_data *connssl = cf->ctx; - struct ossl_ssl_backend_data *backend = - (struct ossl_ssl_backend_data *)connssl->backend; + struct ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; (void)data; - DEBUGASSERT(connssl && backend); - if(backend->handle && SSL_pending(backend->handle)) + DEBUGASSERT(connssl && octx); + if(octx->ssl && SSL_pending(octx->ssl)) return TRUE; return FALSE; } @@ -4614,19 +4860,18 @@ static ssize_t ossl_send(struct Curl_cfilter *cf, int memlen; int rc; struct ssl_connect_data *connssl = cf->ctx; - struct ossl_ssl_backend_data *backend = - (struct ossl_ssl_backend_data *)connssl->backend; + struct ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; (void)data; - DEBUGASSERT(backend); + DEBUGASSERT(octx); ERR_clear_error(); memlen = (len > (size_t)INT_MAX) ? INT_MAX : (int)len; - rc = SSL_write(backend->handle, mem, memlen); + rc = SSL_write(octx->ssl, mem, memlen); if(rc <= 0) { - err = SSL_get_error(backend->handle, rc); + err = SSL_get_error(octx->ssl, rc); switch(err) { case SSL_ERROR_WANT_READ: @@ -4641,7 +4886,7 @@ static ssize_t ossl_send(struct Curl_cfilter *cf, { int sockerr = SOCKERRNO; - if(backend->io_result == CURLE_AGAIN) { + if(octx->io_result == CURLE_AGAIN) { *curlcode = CURLE_AGAIN; rc = -1; goto out; @@ -4698,20 +4943,19 @@ static ssize_t ossl_recv(struct Curl_cfilter *cf, int buffsize; 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; + struct ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; (void)data; - DEBUGASSERT(backend); + DEBUGASSERT(octx); ERR_clear_error(); buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize; - nread = (ssize_t)SSL_read(backend->handle, buf, buffsize); + nread = (ssize_t)SSL_read(octx->ssl, buf, buffsize); if(nread <= 0) { /* failed SSL_read */ - int err = SSL_get_error(backend->handle, (int)nread); + int err = SSL_get_error(octx->ssl, (int)nread); switch(err) { case SSL_ERROR_NONE: /* this is not an error */ @@ -4725,15 +4969,15 @@ static ssize_t ossl_recv(struct Curl_cfilter *cf, break; case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_WRITE: - /* there's data pending, re-invoke SSL_read() */ + /* there is data pending, re-invoke SSL_read() */ *curlcode = CURLE_AGAIN; 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) { + /* https://docs.openssl.org/master/man3/ERR_get_error/ */ + if(octx->io_result == CURLE_AGAIN) { *curlcode = CURLE_AGAIN; nread = -1; goto out; @@ -4759,7 +5003,7 @@ static ssize_t ossl_recv(struct Curl_cfilter *cf, /* For debug builds be a little stricter and error on any SSL_ERROR_SYSCALL. For example a server may have closed the connection abruptly without a close_notify alert. For compatibility with older - peers we don't do this by default. #4624 + peers we do not do this by default. #4624 We can use this to gauge how many users may be affected, and if it goes ok eventually transition to allow in dev and release with @@ -4793,7 +5037,7 @@ static size_t ossl_version(char *buffer, size_t size) #ifdef LIBRESSL_VERSION_NUMBER #ifdef HAVE_OPENSSL_VERSION char *p; - int count; + size_t count; const char *ver = OpenSSL_version(OPENSSL_VERSION); const char expected[] = OSSL_PACKAGE " "; /* ie "LibreSSL " */ if(strncasecompare(ver, expected, sizeof(expected) - 1)) { @@ -4875,14 +5119,14 @@ static CURLcode ossl_random(struct Curl_easy *data, int rc; if(data) { if(ossl_seed(data)) /* Initiate the seed if not already done */ - return CURLE_FAILED_INIT; /* couldn't seed for some reason */ + return CURLE_FAILED_INIT; /* could not seed for some reason */ } else { if(!rand_enough()) return CURLE_FAILED_INIT; } /* RAND_bytes() returns 1 on success, 0 otherwise. */ - rc = RAND_bytes(entropy, curlx_uztosi(length)); + rc = RAND_bytes(entropy, (ossl_valsize_t)curlx_uztosi(length)); return (rc == 1 ? CURLE_OK : CURLE_FAILED_INIT); } @@ -4924,25 +5168,10 @@ static void *ossl_get_internals(struct ssl_connect_data *connssl, CURLINFO info) { /* Legacy: CURLINFO_TLS_SESSION must return an SSL_CTX pointer. */ - struct ossl_ssl_backend_data *backend = - (struct ossl_ssl_backend_data *)connssl->backend; - DEBUGASSERT(backend); + struct ossl_ctx *octx = (struct ossl_ctx *)connssl->backend; + DEBUGASSERT(octx); return info == CURLINFO_TLS_SESSION ? - (void *)backend->ctx : (void *)backend->handle; -} - -static void ossl_free_multi_ssl_backend_data( - struct multi_ssl_backend_data *mbackend) -{ -#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 */ + (void *)octx->ssl_ctx : (void *)octx->ssl; } const struct Curl_ssl Curl_ssl_openssl = { @@ -4956,9 +5185,13 @@ const struct Curl_ssl Curl_ssl_openssl = { #ifdef HAVE_SSL_CTX_SET_CIPHERSUITES SSLSUPP_TLS13_CIPHERSUITES | #endif +#ifdef USE_ECH + SSLSUPP_ECH | +#endif + SSLSUPP_CA_CACHE | SSLSUPP_HTTPS_PROXY, - sizeof(struct ossl_ssl_backend_data), + sizeof(struct ossl_ctx), ossl_init, /* init */ ossl_cleanup, /* cleanup */ @@ -4974,7 +5207,6 @@ const struct Curl_ssl Curl_ssl_openssl = { ossl_get_internals, /* get_internals */ ossl_close, /* close_one */ ossl_close_all, /* close_all */ - ossl_session_free, /* session_free */ ossl_set_engine, /* set_engine */ ossl_set_engine_default, /* set_engine_default */ ossl_engines_list, /* engines_list */ @@ -4986,7 +5218,6 @@ const struct Curl_ssl Curl_ssl_openssl = { #endif 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 */ }; diff --git a/lib/vtls/openssl.h b/lib/vtls/openssl.h index e802363a4..b0d78478a 100644 --- a/lib/vtls/openssl.h +++ b/lib/vtls/openssl.h @@ -36,6 +36,40 @@ #include "urldata.h" +/* Struct to hold a Curl OpenSSL instance */ +struct ossl_ctx { + /* these ones requires specific SSL-types */ + SSL_CTX* ssl_ctx; + SSL* ssl; + 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. + This is a bool and not a bitfield because it is passed by address. */ + bool keylog_done; +#endif + BIT(x509_store_setup); /* x509 store has been set up */ + BIT(reused_session); /* session-ID was reused for this */ +}; + +typedef CURLcode Curl_ossl_ctx_setup_cb(struct Curl_cfilter *cf, + struct Curl_easy *data, + void *user_data); + +typedef int Curl_ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid); + +CURLcode Curl_ossl_ctx_init(struct ossl_ctx *octx, + struct Curl_cfilter *cf, + struct Curl_easy *data, + struct ssl_peer *peer, + int transport, /* TCP or QUIC */ + const unsigned char *alpn, size_t alpn_len, + Curl_ossl_ctx_setup_cb *cb_setup, + void *cb_user_data, + Curl_ossl_new_session_cb *cb_new_session, + void *ssl_user_data); + #if (OPENSSL_VERSION_NUMBER < 0x30000000L) #define SSL_get1_peer_certificate SSL_get_peer_certificate #endif @@ -66,5 +100,23 @@ CURLcode Curl_ossl_ctx_configure(struct Curl_cfilter *cf, struct Curl_easy *data, SSL_CTX *ssl_ctx); +/* + * Add a new session to the cache. Takes ownership of the session. + */ +CURLcode Curl_ossl_add_session(struct Curl_cfilter *cf, + struct Curl_easy *data, + const struct ssl_peer *peer, + SSL_SESSION *ssl_sessionid); + +/* + * Get the server cert, verify it and show it, etc., only call failf() if + * ssl config verifypeer or -host is set. Otherwise all this is for + * informational purposes only! + */ +CURLcode Curl_oss_check_peer_cert(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct ossl_ctx *octx, + struct ssl_peer *peer); + #endif /* USE_OPENSSL */ #endif /* HEADER_CURL_SSLUSE_H */ diff --git a/lib/vtls/rustls.c b/lib/vtls/rustls.c index ceb26c5bd..bdcd08ab9 100644 --- a/lib/vtls/rustls.c +++ b/lib/vtls/rustls.c @@ -46,7 +46,9 @@ struct rustls_ssl_backend_data { const struct rustls_client_config *config; struct rustls_connection *conn; - bool data_pending; + size_t plain_out_buffered; + BIT(data_in_pending); + BIT(sent_shutdown); }; /* For a given rustls_result error code, return the best-matching CURLcode. */ @@ -61,7 +63,7 @@ static CURLcode map_error(rustls_result r) case RUSTLS_RESULT_NULL_PARAMETER: return CURLE_BAD_FUNCTION_ARGUMENT; default: - return CURLE_READ_ERROR; + return CURLE_RECV_ERROR; } } @@ -74,7 +76,7 @@ cr_data_pending(struct Curl_cfilter *cf, const struct Curl_easy *data) (void)data; DEBUGASSERT(ctx && ctx->backend); backend = (struct rustls_ssl_backend_data *)ctx->backend; - return backend->data_pending; + return backend->data_in_pending; } struct io_ctx { @@ -100,7 +102,9 @@ read_cb(void *userdata, uint8_t *buf, uintptr_t len, uintptr_t *out_n) } else if(nread == 0) connssl->peer_closed = TRUE; - *out_n = (int)nread; + *out_n = (uintptr_t)nread; + CURL_TRC_CF(io_ctx->data, io_ctx->cf, "cf->next recv(len=%zu) -> %zd, %d", + len, nread, result); return ret; } @@ -119,11 +123,9 @@ write_cb(void *userdata, const uint8_t *buf, uintptr_t len, uintptr_t *out_n) 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)); - */ + *out_n = (uintptr_t)nwritten; + CURL_TRC_CF(io_ctx->data, io_ctx->cf, "cf->next send(len=%zu) -> %zd, %d", + len, nwritten, result); return ret; } @@ -150,7 +152,7 @@ static ssize_t tls_recv_more(struct Curl_cfilter *cf, char buffer[STRERROR_LEN]; failf(data, "reading from socket: %s", Curl_strerror(io_error, buffer, sizeof(buffer))); - *err = CURLE_READ_ERROR; + *err = CURLE_RECV_ERROR; return -1; } @@ -165,7 +167,7 @@ static ssize_t tls_recv_more(struct Curl_cfilter *cf, return -1; } - backend->data_pending = TRUE; + backend->data_in_pending = TRUE; *err = CURLE_OK; return (ssize_t)tls_bytes_read; } @@ -177,10 +179,10 @@ static ssize_t tls_recv_more(struct Curl_cfilter *cf, * - Read out as many plaintext bytes from rustls as possible, until hitting * error, EOF, or EAGAIN/EWOULDBLOCK, or plainbuf/plainlen is filled up. * - * It's okay to call this function with plainbuf == NULL and plainlen == 0. - * In that case, it will copy bytes from the socket into rustls' TLS input - * buffer, and process packets, but won't consume bytes from rustls' plaintext - * output buffer. + * it is okay to call this function with plainbuf == NULL and plainlen == 0. In + * that case, it will copy bytes from the socket into rustls' TLS input + * buffer, and process packets, but will not consume bytes from rustls' + * plaintext output buffer. */ static ssize_t cr_recv(struct Curl_cfilter *cf, struct Curl_easy *data, @@ -200,7 +202,7 @@ cr_recv(struct Curl_cfilter *cf, struct Curl_easy *data, rconn = backend->conn; while(plain_bytes_copied < plainlen) { - if(!backend->data_pending) { + if(!backend->data_in_pending) { if(tls_recv_more(cf, data, err) < 0) { if(*err != CURLE_AGAIN) { nread = -1; @@ -215,22 +217,22 @@ cr_recv(struct Curl_cfilter *cf, struct Curl_easy *data, plainlen - plain_bytes_copied, &n); if(rresult == RUSTLS_RESULT_PLAINTEXT_EMPTY) { - backend->data_pending = FALSE; + backend->data_in_pending = FALSE; } else if(rresult == RUSTLS_RESULT_UNEXPECTED_EOF) { failf(data, "rustls: peer closed TCP connection " "without first closing TLS connection"); - *err = CURLE_READ_ERROR; + *err = CURLE_RECV_ERROR; nread = -1; goto out; } else if(rresult != RUSTLS_RESULT_OK) { - /* n always equals 0 in this case, don't need to check it */ + /* n always equals 0 in this case, do not need to check it */ char errorbuf[255]; size_t errorlen; rustls_error(rresult, errorbuf, sizeof(errorbuf), &errorlen); failf(data, "rustls_connection_read: %.*s", (int)errorlen, errorbuf); - *err = CURLE_READ_ERROR; + *err = CURLE_RECV_ERROR; nread = -1; goto out; } @@ -265,14 +267,50 @@ cr_recv(struct Curl_cfilter *cf, struct Curl_easy *data, return nread; } +static CURLcode cr_flush_out(struct Curl_cfilter *cf, struct Curl_easy *data, + struct rustls_connection *rconn) +{ + struct io_ctx io_ctx; + rustls_io_result io_error; + size_t tlswritten = 0; + size_t tlswritten_total = 0; + CURLcode result = CURLE_OK; + + io_ctx.cf = cf; + io_ctx.data = data; + + while(rustls_connection_wants_write(rconn)) { + io_error = rustls_connection_write_tls(rconn, write_cb, &io_ctx, + &tlswritten); + if(io_error == EAGAIN || io_error == EWOULDBLOCK) { + CURL_TRC_CF(data, cf, "cf_send: EAGAIN after %zu bytes", + tlswritten_total); + return CURLE_AGAIN; + } + else if(io_error) { + char buffer[STRERROR_LEN]; + failf(data, "writing to socket: %s", + Curl_strerror(io_error, buffer, sizeof(buffer))); + return CURLE_SEND_ERROR; + } + if(tlswritten == 0) { + failf(data, "EOF in swrite"); + return CURLE_SEND_ERROR; + } + CURL_TRC_CF(data, cf, "cf_send: wrote %zu TLS bytes", tlswritten); + tlswritten_total += tlswritten; + } + return result; +} + /* * On each call: * - Copy `plainlen` bytes into rustls' plaintext input buffer (if > 0). * - Fully drain rustls' plaintext output buffer into the socket until * we get either an error or EAGAIN/EWOULDBLOCK. * - * It's okay to call this function with plainbuf == NULL and plainlen == 0. - * In that case, it won't read anything into rustls' plaintext input buffer. + * it is okay to call this function with plainbuf == NULL and plainlen == 0. + * In that case, it will not read anything into rustls' plaintext input buffer. * It will only drain rustls' plaintext output buffer into the socket. */ static ssize_t @@ -283,26 +321,43 @@ cr_send(struct Curl_cfilter *cf, struct Curl_easy *data, 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; + const unsigned char *buf = plainbuf; + size_t blen = plainlen; + ssize_t nwritten = 0; DEBUGASSERT(backend); rconn = backend->conn; + DEBUGASSERT(rconn); + + CURL_TRC_CF(data, cf, "cf_send(len=%zu)", plainlen); + + /* If a previous send blocked, we already added its plain bytes + * to rustsls and must not do that again. Flush the TLS bytes and, + * if successful, deduct the previous plain bytes from the current + * send. */ + if(backend->plain_out_buffered) { + *err = cr_flush_out(cf, data, rconn); + CURL_TRC_CF(data, cf, "cf_send: flushing %zu previously added bytes -> %d", + backend->plain_out_buffered, *err); + if(*err) + return -1; + if(blen > backend->plain_out_buffered) { + blen -= backend->plain_out_buffered; + buf += backend->plain_out_buffered; + } + else + blen = 0; + nwritten += (ssize_t)backend->plain_out_buffered; + backend->plain_out_buffered = 0; + } - CURL_TRC_CF(data, cf, "cf_send: %zu plain bytes", plainlen); - - io_ctx.cf = cf; - io_ctx.data = data; - - if(plainlen > 0) { - rresult = rustls_connection_write(rconn, plainbuf, plainlen, - &plainwritten); + if(blen > 0) { + CURL_TRC_CF(data, cf, "cf_send: adding %zu plain bytes to rustls", blen); + rresult = rustls_connection_write(rconn, buf, blen, &plainwritten); if(rresult != RUSTLS_RESULT_OK) { rustls_error(rresult, errorbuf, sizeof(errorbuf), &errorlen); failf(data, "rustls_connection_write: %.*s", (int)errorlen, errorbuf); @@ -316,32 +371,27 @@ cr_send(struct Curl_cfilter *cf, struct Curl_easy *data, } } - while(rustls_connection_wants_write(rconn)) { - io_error = rustls_connection_write_tls(rconn, write_cb, &io_ctx, - &tlswritten); - if(io_error == EAGAIN || io_error == EWOULDBLOCK) { - CURL_TRC_CF(data, cf, "cf_send: EAGAIN after %zu bytes", - tlswritten_total); - *err = CURLE_AGAIN; - return -1; - } - else if(io_error) { - char buffer[STRERROR_LEN]; - failf(data, "writing to socket: %s", - Curl_strerror(io_error, buffer, sizeof(buffer))); - *err = CURLE_WRITE_ERROR; - return -1; - } - if(tlswritten == 0) { - failf(data, "EOF in swrite"); - *err = CURLE_WRITE_ERROR; - return -1; + *err = cr_flush_out(cf, data, rconn); + if(*err) { + if(CURLE_AGAIN == *err) { + /* The TLS bytes may have been partially written, but we fail the + * complete send() and remember how much we already added to rustls. */ + CURL_TRC_CF(data, cf, "cf_send: EAGAIN, remember we added %zu plain" + " bytes already to rustls", blen); + backend->plain_out_buffered = plainwritten; + if(nwritten) { + *err = CURLE_OK; + return (ssize_t)nwritten; + } } - CURL_TRC_CF(data, cf, "cf_send: wrote %zu TLS bytes", tlswritten); - tlswritten_total += tlswritten; + return -1; } + else + nwritten += (ssize_t)plainwritten; - return plainwritten; + CURL_TRC_CF(data, cf, "cf_send(len=%zu) -> %d, %zd", + plainlen, *err, nwritten); + return nwritten; } /* A server certificate verify callback for rustls that always returns @@ -357,12 +407,12 @@ static bool cr_hostname_is_ip(const char *hostname) { struct in_addr in; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct in6_addr in6; if(Curl_inet_pton(AF_INET6, hostname, &in6) > 0) { return true; } -#endif /* ENABLE_IPV6 */ +#endif /* USE_IPV6 */ if(Curl_inet_pton(AF_INET, hostname, &in) > 0) { return true; } @@ -389,7 +439,7 @@ cr_init_backend(struct Curl_cfilter *cf, struct Curl_easy *data, const char *hostname = connssl->peer.hostname; char errorbuf[256]; size_t errorlen; - int result; + rustls_result result; DEBUGASSERT(backend); rconn = backend->conn; @@ -412,7 +462,7 @@ cr_init_backend(struct Curl_cfilter *cf, struct Curl_easy *data, if(!verifypeer) { rustls_client_config_builder_dangerous_set_certificate_verifier( config_builder, cr_verify_none); - /* rustls doesn't support IP addresses (as of 0.19.0), and will reject + /* rustls does not support IP addresses (as of 0.19.0), and will reject * connections created with an IP address, even when certificate * verification is turned off. Set a placeholder hostname and disable * SNI. */ @@ -425,7 +475,7 @@ cr_init_backend(struct Curl_cfilter *cf, struct Curl_easy *data, roots_builder = rustls_root_cert_store_builder_new(); if(ca_info_blob) { - /* Enable strict parsing only if verification isn't disabled. */ + /* Enable strict parsing only if verification is not disabled. */ result = rustls_root_cert_store_builder_add_pem(roots_builder, ca_info_blob->data, ca_info_blob->len, @@ -439,7 +489,7 @@ cr_init_backend(struct Curl_cfilter *cf, struct Curl_easy *data, } } else if(ssl_cafile) { - /* Enable strict parsing only if verification isn't disabled. */ + /* Enable strict parsing only if verification is not disabled. */ result = rustls_root_cert_store_builder_load_roots_from_file( roots_builder, ssl_cafile, verifypeer); if(result != RUSTLS_RESULT_OK) { @@ -479,18 +529,14 @@ cr_init_backend(struct Curl_cfilter *cf, struct Curl_easy *data, backend->config = rustls_client_config_builder_build(config_builder); DEBUGASSERT(rconn == NULL); - { - /* 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); - } + result = rustls_client_connection_new(backend->config, + connssl->peer.hostname, &rconn); if(result != RUSTLS_RESULT_OK) { rustls_error(result, errorbuf, sizeof(errorbuf), &errorlen); failf(data, "rustls_client_connection_new: %.*s", (int)errorlen, errorbuf); return CURLE_COULDNT_CONNECT; } + DEBUGASSERT(rconn); rustls_connection_set_userdata(rconn, backend); backend->conn = rconn; return CURLE_OK; @@ -539,9 +585,12 @@ cr_connect_common(struct Curl_cfilter *cf, DEBUGASSERT(backend); - if(ssl_connection_none == connssl->state) { + CURL_TRC_CF(data, cf, "cr_connect_common, state=%d", connssl->state); + *done = FALSE; + if(!backend->conn) { result = cr_init_backend(cf, data, (struct rustls_ssl_backend_data *)connssl->backend); + CURL_TRC_CF(data, cf, "cr_connect_common, init backend -> %d", result); if(result != CURLE_OK) { return result; } @@ -556,19 +605,32 @@ cr_connect_common(struct Curl_cfilter *cf, * Connection has been established according to rustls. Set send/recv * handlers, and update the state machine. */ + connssl->io_need = CURL_SSL_IO_NEED_NONE; if(!rustls_connection_is_handshaking(rconn)) { infof(data, "Done handshaking"); - /* Done with the handshake. Set up callbacks to send/receive data. */ - connssl->state = ssl_connection_complete; - + /* rustls claims it is no longer handshaking *before* it has + * send its FINISHED message off. We attempt to let it write + * one more time. Oh my. + */ cr_set_negotiated_alpn(cf, data, rconn); - + cr_send(cf, data, NULL, 0, &tmperr); + if(tmperr == CURLE_AGAIN) { + connssl->io_need = CURL_SSL_IO_NEED_SEND; + return CURLE_OK; + } + else if(tmperr != CURLE_OK) { + return tmperr; + } + /* REALLY Done with the handshake. */ + connssl->state = ssl_connection_complete; *done = TRUE; return CURLE_OK; } + connssl->connecting_state = ssl_connect_2; wants_read = rustls_connection_wants_read(rconn); - wants_write = rustls_connection_wants_write(rconn); + wants_write = rustls_connection_wants_write(rconn) || + backend->plain_out_buffered; DEBUGASSERT(wants_read || wants_write); writefd = wants_write?sockfd:CURL_SOCKET_BAD; readfd = wants_read?sockfd:CURL_SOCKET_BAD; @@ -584,8 +646,8 @@ cr_connect_common(struct Curl_cfilter *cf, socket_check_timeout = blocking?timeout_ms:0; - what = Curl_socket_check( - readfd, CURL_SOCKET_BAD, writefd, socket_check_timeout); + 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); @@ -597,19 +659,22 @@ cr_connect_common(struct Curl_cfilter *cf, return CURLE_OPERATION_TIMEDOUT; } if(0 == what) { - infof(data, "Curl_socket_check: %s would block", + CURL_TRC_CF(data, cf, "Curl_socket_check: %s would block", wants_read&&wants_write ? "writing and reading" : wants_write ? "writing" : "reading"); - *done = FALSE; + if(wants_write) + connssl->io_need |= CURL_SSL_IO_NEED_SEND; + if(wants_read) + connssl->io_need |= CURL_SSL_IO_NEED_RECV; return CURLE_OK; } /* socket is readable or writable */ if(wants_write) { - infof(data, "rustls_connection wants us to write_tls."); + CURL_TRC_CF(data, cf, "rustls_connection wants us to write_tls."); cr_send(cf, data, NULL, 0, &tmperr); if(tmperr == CURLE_AGAIN) { - infof(data, "writing would block"); + CURL_TRC_CF(data, cf, "writing would block"); /* fall through */ } else if(tmperr != CURLE_OK) { @@ -618,14 +683,13 @@ cr_connect_common(struct Curl_cfilter *cf, } if(wants_read) { - infof(data, "rustls_connection wants us to read_tls."); - + CURL_TRC_CF(data, cf, "rustls_connection wants us to read_tls."); if(tls_recv_more(cf, data, &tmperr) < 0) { if(tmperr == CURLE_AGAIN) { - infof(data, "reading would block"); + CURL_TRC_CF(data, cf, "reading would block"); /* fall through */ } - else if(tmperr == CURLE_READ_ERROR) { + else if(tmperr == CURLE_RECV_ERROR) { return CURLE_SSL_CONNECT_ERROR; } else { @@ -636,7 +700,7 @@ cr_connect_common(struct Curl_cfilter *cf, } /* We should never fall through the loop. We should return either because - the handshake is done or because we can't read/write without blocking. */ + the handshake is done or because we cannot read/write without blocking. */ DEBUGASSERT(false); } @@ -648,37 +712,12 @@ cr_connect_nonblocking(struct Curl_cfilter *cf, } static CURLcode -cr_connect_blocking(struct Curl_cfilter *cf UNUSED_PARAM, - struct Curl_easy *data UNUSED_PARAM) +cr_connect_blocking(struct Curl_cfilter *cf, struct Curl_easy *data) { bool done; /* unused */ return cr_connect_common(cf, data, true, &done); } -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); - } - } -} - static void * cr_get_internals(struct ssl_connect_data *connssl, CURLINFO info UNUSED_PARAM) @@ -689,24 +728,85 @@ cr_get_internals(struct ssl_connect_data *connssl, return &backend->conn; } -static void -cr_close(struct Curl_cfilter *cf, struct Curl_easy *data) +static CURLcode +cr_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool send_shutdown, bool *done) { 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; + CURLcode result = CURLE_OK; + ssize_t nwritten, nread; + char buf[1024]; + size_t i; DEBUGASSERT(backend); + if(!backend->conn || cf->shutdown) { + *done = TRUE; + goto out; + } + + connssl->io_need = CURL_SSL_IO_NEED_NONE; + *done = FALSE; + + if(!backend->sent_shutdown) { + /* do this only once */ + backend->sent_shutdown = TRUE; + if(send_shutdown) { + rustls_connection_send_close_notify(backend->conn); + } + } - if(backend->conn && !connssl->peer_closed) { - rustls_connection_send_close_notify(backend->conn); - n = cr_send(cf, data, NULL, 0, &tmperr); - if(n < 0) { - failf(data, "rustls: error sending close_notify: %d", tmperr); + nwritten = cr_send(cf, data, NULL, 0, &result); + if(nwritten < 0) { + if(result == CURLE_AGAIN) { + connssl->io_need = CURL_SSL_IO_NEED_SEND; + result = CURLE_OK; + goto out; } + DEBUGASSERT(result); + CURL_TRC_CF(data, cf, "shutdown send failed: %d", result); + goto out; + } + for(i = 0; i < 10; ++i) { + nread = cr_recv(cf, data, buf, (int)sizeof(buf), &result); + if(nread <= 0) + break; + } + + if(nread > 0) { + /* still data coming in? */ + } + else if(nread == 0) { + /* We got the close notify alert and are done. */ + *done = TRUE; + } + else if(result == CURLE_AGAIN) { + connssl->io_need = CURL_SSL_IO_NEED_RECV; + result = CURLE_OK; + } + else { + DEBUGASSERT(result); + CURL_TRC_CF(data, cf, "shutdown, error: %d", result); + } + +out: + cf->shutdown = (result || *done); + return result; +} + +static void +cr_close(struct Curl_cfilter *cf, struct Curl_easy *data) +{ + struct ssl_connect_data *connssl = cf->ctx; + struct rustls_ssl_backend_data *backend = + (struct rustls_ssl_backend_data *)connssl->backend; + + (void)data; + DEBUGASSERT(backend); + if(backend->conn) { rustls_connection_free(backend->conn); backend->conn = NULL; } @@ -725,7 +825,6 @@ 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 | SSLSUPP_HTTPS_PROXY, sizeof(struct rustls_ssl_backend_data), @@ -733,17 +832,16 @@ const struct Curl_ssl Curl_ssl_rustls = { Curl_none_cleanup, /* cleanup */ cr_version, /* version */ Curl_none_check_cxn, /* check_cxn */ - Curl_none_shutdown, /* shutdown */ + cr_shutdown, /* shutdown */ cr_data_pending, /* data_pending */ Curl_none_random, /* random */ Curl_none_cert_status_request, /* cert_status_request */ cr_connect_blocking, /* connect */ cr_connect_nonblocking, /* connect_nonblocking */ - cr_adjust_pollset, /* adjust_pollset */ + Curl_ssl_adjust_pollset, /* adjust_pollset */ cr_get_internals, /* get_internals */ cr_close, /* close_one */ Curl_none_close_all, /* close_all */ - 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 */ @@ -751,7 +849,6 @@ const struct Curl_ssl Curl_ssl_rustls = { NULL, /* sha256sum */ NULL, /* associate_connection */ NULL, /* disassociate_connection */ - NULL, /* free_multi_ssl_backend_data */ cr_recv, /* recv decrypted data */ cr_send, /* send data to encrypt */ }; diff --git a/lib/vtls/schannel.c b/lib/vtls/schannel.c index 8736b9e28..f9bb2f824 100644 --- a/lib/vtls/schannel.c +++ b/lib/vtls/schannel.c @@ -34,7 +34,7 @@ #ifdef USE_SCHANNEL #ifndef USE_WINDOWS_SSPI -# error "Can't compile SCHANNEL support without SSPI." +# error "cannot compile SCHANNEL support without SSPI." #endif #include "schannel.h" @@ -171,7 +171,7 @@ schannel_set_ssl_version_min_max(DWORD *enabled_protocols, { 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 ssl_version_max = (long)conn_config->version_max; long i = ssl_version; switch(ssl_version_max) { @@ -364,7 +364,7 @@ set_ssl_ciphers(SCHANNEL_CRED *schannel_cred, char *ciphers, if(!alg) alg = get_alg_id_by_name(startCur); if(alg) - algIds[algCount++] = alg; + algIds[algCount++] = (ALG_ID)alg; else if(!strncmp(startCur, "USE_STRONG_CRYPTO", sizeof("USE_STRONG_CRYPTO") - 1) || !strncmp(startCur, "SCH_USE_STRONG_CRYPTO", @@ -377,7 +377,7 @@ set_ssl_ciphers(SCHANNEL_CRED *schannel_cred, char *ciphers, startCur++; } schannel_cred->palgSupportedAlgs = algIds; - schannel_cred->cSupportedAlgs = algCount; + schannel_cred->cSupportedAlgs = (DWORD)algCount; return CURLE_OK; } @@ -513,7 +513,7 @@ schannel_acquire_credential_handle(struct Curl_cfilter *cf, } if(!ssl_config->auto_client_cert) { - flags &= ~SCH_CRED_USE_DEFAULT_CREDS; + flags &= ~(DWORD)SCH_CRED_USE_DEFAULT_CREDS; flags |= SCH_CRED_NO_DEFAULT_CREDS; infof(data, "schannel: disabled automatic use of client certificate"); } @@ -950,7 +950,7 @@ schannel_acquire_credential_handle(struct Curl_cfilter *cf, tls_parameters.pDisabledCrypto = crypto_settings; /* The number of blocked suites */ - tls_parameters.cDisabledCrypto = crypto_settings_idx; + tls_parameters.cDisabledCrypto = (DWORD)crypto_settings_idx; credentials.pTlsParameters = &tls_parameters; credentials.cTlsParameters = 1; @@ -976,7 +976,7 @@ schannel_acquire_credential_handle(struct Curl_cfilter *cf, } else { /* 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 + does not document it, currently Schannel will not negotiate TLS 1.3 when SCHANNEL_CRED is used. */ ALG_ID algIds[NUM_CIPHERS]; char *ciphers = conn_config->cipher_list; @@ -1071,7 +1071,7 @@ schannel_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) DEBUGASSERT(backend); DEBUGF(infof(data, "schannel: SSL/TLS connection with %s port %d (step 1/3)", - connssl->peer.hostname, connssl->port)); + connssl->peer.hostname, connssl->peer.port)); if(curlx_verify_windows_version(5, 1, 0, PLATFORM_WINNT, VERSION_LESS_THAN_EQUAL)) { @@ -1083,7 +1083,7 @@ schannel_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) #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. */ + Also it does not seem to be supported for Wine, see curl bug #983. */ backend->use_alpn = connssl->alpn && !GetProcAddress(GetModuleHandle(TEXT("ntdll")), "wine_get_version") && @@ -1095,7 +1095,7 @@ schannel_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) #ifdef _WIN32_WCE #ifdef HAS_MANUAL_VERIFY_API - /* certificate validation on CE doesn't seem to work right; we'll + /* certificate validation on CE does not seem to work right; we will * do it following a more manual process. */ backend->use_manual_cred_validation = true; #else @@ -1127,9 +1127,10 @@ schannel_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) backend->cred = NULL; /* check for an existing reusable credential handle */ - if(ssl_config->primary.sessionid) { + if(ssl_config->primary.cache_session) { Curl_ssl_sessionid_lock(data); - if(!Curl_ssl_getsessionid(cf, data, (void **)&old_cred, NULL)) { + if(!Curl_ssl_getsessionid(cf, data, &connssl->peer, + (void **)&old_cred, NULL)) { backend->cred = old_cred; DEBUGF(infof(data, "schannel: reusing existing credential handle")); @@ -1240,7 +1241,7 @@ schannel_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) /* Schannel InitializeSecurityContext: https://msdn.microsoft.com/en-us/library/windows/desktop/aa375924.aspx - At the moment we don't pass inbuf unless we're using ALPN since we only + At the moment we do not pass inbuf unless we are using ALPN since we only use it for that, and Wine (for which we currently disable ALPN) is giving us problems with inbuf regardless. https://github.com/curl/curl/issues/983 */ @@ -1331,11 +1332,12 @@ schannel_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) DEBUGASSERT(backend); - doread = (connssl->connecting_state != ssl_connect_2_writing) ? TRUE : FALSE; + doread = (connssl->io_need & CURL_SSL_IO_NEED_SEND)? FALSE : TRUE; + connssl->io_need = CURL_SSL_IO_NEED_NONE; DEBUGF(infof(data, "schannel: SSL/TLS connection with %s port %d (step 2/3)", - connssl->peer.hostname, connssl->port)); + connssl->peer.hostname, connssl->peer.port)); if(!backend->cred || !backend->ctxt) return CURLE_SSL_CONNECT_ERROR; @@ -1392,8 +1394,7 @@ schannel_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) backend->encdata_offset, &result); if(result == CURLE_AGAIN) { - if(connssl->connecting_state != ssl_connect_2_writing) - connssl->connecting_state = ssl_connect_2_reading; + connssl->io_need = CURL_SSL_IO_NEED_RECV; DEBUGF(infof(data, "schannel: failed to receive handshake, " "need more data")); return CURLE_OK; @@ -1447,7 +1448,7 @@ schannel_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) /* check if the handshake was incomplete */ if(sspi_status == SEC_E_INCOMPLETE_MESSAGE) { backend->encdata_is_incomplete = true; - connssl->connecting_state = ssl_connect_2_reading; + connssl->io_need = CURL_SSL_IO_NEED_RECV; DEBUGF(infof(data, "schannel: received incomplete message, need more data")); return CURLE_OK; @@ -1459,7 +1460,7 @@ schannel_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) if(sspi_status == SEC_I_INCOMPLETE_CREDENTIALS && !(backend->req_flags & ISC_REQ_USE_SUPPLIED_CREDS)) { backend->req_flags |= ISC_REQ_USE_SUPPLIED_CREDS; - connssl->connecting_state = ssl_connect_2_writing; + connssl->io_need = CURL_SSL_IO_NEED_SEND; DEBUGF(infof(data, "schannel: a client certificate has been requested")); return CURLE_OK; @@ -1530,7 +1531,7 @@ schannel_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) inbuf[1].cbBuffer)); /* There are two cases where we could be getting extra data here: - 1) If we're renegotiating a connection and the handshake is already + 1) If we are renegotiating a connection and the handshake is already complete (from the server perspective), it can encrypted app data (not handshake data) in an extra buffer at this point. 2) (sspi_status == SEC_I_CONTINUE_NEEDED) We are negotiating a @@ -1559,7 +1560,7 @@ schannel_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) /* check if the handshake needs to be continued */ if(sspi_status == SEC_I_CONTINUE_NEEDED) { - connssl->connecting_state = ssl_connect_2_reading; + connssl->io_need = CURL_SSL_IO_NEED_RECV; return CURLE_OK; } @@ -1569,9 +1570,13 @@ schannel_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) DEBUGF(infof(data, "schannel: SSL/TLS handshake complete")); } +#ifndef CURL_DISABLE_PROXY pubkey_ptr = Curl_ssl_cf_is_proxy(cf)? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]: data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#else + pubkey_ptr = data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#endif if(pubkey_ptr) { result = schannel_pkp_pin_peer_pubkey(cf, data, pubkey_ptr); if(result) { @@ -1588,7 +1593,7 @@ schannel_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) #endif /* Verify the hostname manually when certificate verification is disabled, - because in that case Schannel won't verify it. */ + because in that case Schannel will not verify it. */ if(!conn_config->verifypeer && conn_config->verifyhost) return Curl_verify_host(cf, data); @@ -1670,6 +1675,28 @@ add_cert_to_certinfo(const CERT_CONTEXT *ccert_context, bool reverse_order, return args->result == CURLE_OK; } +static void schannel_session_free(void *sessionid, size_t idsize) +{ + /* this is expected to be called under sessionid lock */ + struct Curl_schannel_cred *cred = sessionid; + + (void)idsize; + if(cred) { + cred->refcount--; + if(cred->refcount == 0) { + s_pSecFn->FreeCredentialsHandle(&cred->cred_handle); + curlx_unicodefree(cred->sni_hostname); +#ifdef HAS_CLIENT_CERT_PATH + if(cred->client_cert_store) { + CertCloseStore(cred->client_cert_store, 0); + cred->client_cert_store = NULL; + } +#endif + Curl_safefree(cred); + } + } +} + static CURLcode schannel_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data) { @@ -1689,7 +1716,7 @@ schannel_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data) DEBUGF(infof(data, "schannel: SSL/TLS connection with %s port %d (step 3/3)", - connssl->peer.hostname, connssl->port)); + connssl->peer.hostname, connssl->peer.port)); if(!backend->cred) return CURLE_SSL_CONNECT_ERROR; @@ -1745,39 +1772,16 @@ schannel_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data) #endif /* 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; - + if(ssl_config->primary.cache_session) { Curl_ssl_sessionid_lock(data); - incache = !(Curl_ssl_getsessionid(cf, data, (void **)&old_cred, NULL)); - if(incache) { - if(old_cred != backend->cred) { - DEBUGF(infof(data, - "schannel: old credential handle is stale, removing")); - /* we're not taking old_cred ownership here, no refcount++ is needed */ - Curl_ssl_delsessionid(data, (void *)old_cred); - incache = FALSE; - } - } - if(!incache) { - result = Curl_ssl_addsessionid(cf, data, backend->cred, - sizeof(struct Curl_schannel_cred), - &added); - if(result) { - Curl_ssl_sessionid_unlock(data); - failf(data, "schannel: failed to store credential handle"); - return result; - } - else if(added) { - /* this cred session is now also referenced by sessionid cache */ - backend->cred->refcount++; - DEBUGF(infof(data, - "schannel: stored credential handle in session cache")); - } - } + /* Up ref count since call takes ownership */ + backend->cred->refcount++; + result = Curl_ssl_set_sessionid(cf, data, &connssl->peer, backend->cred, + sizeof(struct Curl_schannel_cred), + schannel_session_free); Curl_ssl_sessionid_unlock(data); + if(result) + return result; } if(data->set.ssl.certinfo) { @@ -1831,7 +1835,7 @@ schannel_connect_common(struct Curl_cfilter *cf, } if(ssl_connect_1 == connssl->connecting_state) { - /* check out how much more time we're allowed */ + /* check out how much more time we are allowed */ timeout_ms = Curl_timeleft(data, NULL, TRUE); if(timeout_ms < 0) { @@ -1845,11 +1849,9 @@ schannel_connect_common(struct Curl_cfilter *cf, return result; } - while(ssl_connect_2 == connssl->connecting_state || - ssl_connect_2_reading == connssl->connecting_state || - ssl_connect_2_writing == connssl->connecting_state) { + while(ssl_connect_2 == connssl->connecting_state) { - /* check out how much more time we're allowed */ + /* check out how much more time we are allowed */ timeout_ms = Curl_timeleft(data, NULL, TRUE); if(timeout_ms < 0) { @@ -1858,14 +1860,13 @@ schannel_connect_common(struct Curl_cfilter *cf, return CURLE_OPERATION_TIMEDOUT; } - /* 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 ssl is expecting something, check if it is available. */ + if(connssl->io_need) { - curl_socket_t writefd = ssl_connect_2_writing == - connssl->connecting_state ? sockfd : CURL_SOCKET_BAD; - curl_socket_t readfd = ssl_connect_2_reading == - connssl->connecting_state ? sockfd : CURL_SOCKET_BAD; + curl_socket_t writefd = (connssl->io_need & CURL_SSL_IO_NEED_SEND)? + sockfd : CURL_SOCKET_BAD; + curl_socket_t readfd = (connssl->io_need & CURL_SSL_IO_NEED_RECV)? + sockfd : CURL_SOCKET_BAD; what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd, nonblocking ? 0 : timeout_ms); @@ -1896,10 +1897,7 @@ schannel_connect_common(struct Curl_cfilter *cf, * have a valid fdset to wait on. */ result = schannel_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))) + if(result || (nonblocking && (ssl_connect_2 == connssl->connecting_state))) return result; } /* repeat step2 until all transactions are done. */ @@ -2007,10 +2005,10 @@ schannel_send(struct Curl_cfilter *cf, struct Curl_easy *data, len = outbuf[0].cbBuffer + outbuf[1].cbBuffer + outbuf[2].cbBuffer; /* - It's important to send the full message which includes the header, - encrypted payload, and trailer. Until the client receives all the + it is important to send the full message which includes the header, + encrypted payload, and trailer. Until the client receives all the data a coherent message has not been delivered and the client - can't read any of it. + cannot read any of it. If we wanted to buffer the unwritten encrypted bytes, we would tell the client that all data it has requested to be sent has been @@ -2107,8 +2105,9 @@ schannel_recv(struct Curl_cfilter *cf, struct Curl_easy *data, DEBUGASSERT(backend); /**************************************************************************** - * Don't return or set backend->recv_unrecoverable_err unless in the cleanup. - * The pattern for return error is set *err, optional infof, goto cleanup. + * Do not return or set backend->recv_unrecoverable_err unless in the + * cleanup. The pattern for return error is set *err, optional infof, goto + * cleanup. * * Our priority is to always return as much decrypted data to the caller as * possible, even if an error occurs. The state of the decrypted buffer must @@ -2133,7 +2132,7 @@ schannel_recv(struct Curl_cfilter *cf, struct Curl_easy *data, infof(data, "schannel: server indicated shutdown in a prior call"); goto cleanup; } - /* It's debatable what to return when !len. Regardless we can't return + /* it is debatable what to return when !len. Regardless we cannot return immediately because there may be data to decrypt (in the case we want to decrypt all encrypted cached data) so handle !len later in cleanup. */ @@ -2291,14 +2290,15 @@ schannel_recv(struct Curl_cfilter *cf, struct Curl_easy *data, if(sspi_status == SEC_I_RENEGOTIATE) { infof(data, "schannel: remote party requests renegotiation"); if(*err && *err != CURLE_AGAIN) { - infof(data, "schannel: can't renegotiate, an error is pending"); + infof(data, "schannel: cannot renegotiate, an error is pending"); goto cleanup; } /* begin renegotiation */ infof(data, "schannel: renegotiating SSL/TLS connection"); connssl->state = ssl_connection_negotiating; - connssl->connecting_state = ssl_connect_2_writing; + connssl->connecting_state = ssl_connect_2; + connssl->io_need = CURL_SSL_IO_NEED_SEND; backend->recv_renegotiating = true; *err = schannel_connect_common(cf, data, FALSE, &done); backend->recv_renegotiating = false; @@ -2355,13 +2355,13 @@ schannel_recv(struct Curl_cfilter *cf, struct Curl_easy *data, /* Error if the connection has closed without a close_notify. - The behavior here is a matter of debate. We don't want to be vulnerable - to a truncation attack however there's some browser precedent for + The behavior here is a matter of debate. We do not want to be vulnerable + to a truncation attack however there is some browser precedent for ignoring the close_notify for compatibility reasons. Additionally, Windows 2000 (v5.0) is a special case since it seems it - doesn't return close_notify. In that case if the connection was closed we - assume it was graceful (close_notify) since there doesn't seem to be a + does not return close_notify. In that case if the connection was closed we + assume it was graceful (close_notify) since there does not seem to be a way to tell. */ if(len && !backend->decdata_offset && backend->recv_connection_closed && @@ -2398,7 +2398,7 @@ schannel_recv(struct Curl_cfilter *cf, struct Curl_easy *data, if(!*err && !backend->recv_connection_closed) *err = CURLE_AGAIN; - /* It's debatable what to return when !len. We could return whatever error + /* it is debatable what to return when !len. We could return whatever error we got from decryption but instead we override here so the return is consistent. */ @@ -2450,32 +2450,12 @@ static bool schannel_data_pending(struct Curl_cfilter *cf, return FALSE; } -static void schannel_session_free(void *ptr) -{ - /* this is expected to be called under sessionid lock */ - struct Curl_schannel_cred *cred = ptr; - - if(cred) { - cred->refcount--; - if(cred->refcount == 0) { - s_pSecFn->FreeCredentialsHandle(&cred->cred_handle); - curlx_unicodefree(cred->sni_hostname); -#ifdef HAS_CLIENT_CERT_PATH - if(cred->client_cert_store) { - CertCloseStore(cred->client_cert_store, 0); - cred->client_cert_store = NULL; - } -#endif - Curl_safefree(cred); - } - } -} - /* 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_cfilter *cf, - struct Curl_easy *data) +static CURLcode schannel_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool send_shutdown, bool *done) { /* See https://msdn.microsoft.com/en-us/library/windows/desktop/aa380138.aspx * Shutting Down an Schannel Connection @@ -2483,22 +2463,36 @@ static int schannel_shutdown(struct Curl_cfilter *cf, struct ssl_connect_data *connssl = cf->ctx; struct schannel_ssl_backend_data *backend = (struct schannel_ssl_backend_data *)connssl->backend; + CURLcode result = CURLE_OK; + + if(cf->shutdown) { + *done = TRUE; + return CURLE_OK; + } DEBUGASSERT(data); DEBUGASSERT(backend); + /* Not supported in schannel */ + (void)send_shutdown; + + *done = FALSE; if(backend->ctxt) { infof(data, "schannel: shutting down SSL/TLS connection with %s port %d", - connssl->peer.hostname, connssl->port); + connssl->peer.hostname, connssl->peer.port); } - if(backend->cred && backend->ctxt) { + if(!backend->ctxt || cf->shutdown) { + *done = TRUE; + goto out; + } + + if(backend->cred && backend->ctxt && !backend->sent_shutdown) { SecBufferDesc BuffDesc; SecBuffer Buffer; SECURITY_STATUS sspi_status; SecBuffer outbuf; SecBufferDesc outbuf_desc; - CURLcode result; DWORD dwshut = SCHANNEL_SHUTDOWN; InitSecBuffer(&Buffer, SECBUFFER_TOKEN, &dwshut, sizeof(dwshut)); @@ -2511,6 +2505,8 @@ static int schannel_shutdown(struct Curl_cfilter *cf, char buffer[STRERROR_LEN]; failf(data, "schannel: ApplyControlToken failure: %s", Curl_sspi_strerror(sspi_status, buffer, sizeof(buffer))); + result = CURLE_SEND_ERROR; + goto out; } /* setup output buffer */ @@ -2537,13 +2533,75 @@ static int schannel_shutdown(struct Curl_cfilter *cf, 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" - " (bytes written: %zd)", curl_easy_strerror(result), written); + if(!result) { + if(written < (ssize_t)outbuf.cbBuffer) { + /* TODO: handle partial sends */ + infof(data, "schannel: failed to send close msg: %s" + " (bytes written: %zd)", curl_easy_strerror(result), written); + result = CURLE_SEND_ERROR; + goto out; + } + backend->sent_shutdown = TRUE; + *done = TRUE; + } + else if(result == CURLE_AGAIN) { + connssl->io_need = CURL_SSL_IO_NEED_SEND; + result = CURLE_OK; + goto out; + } + else { + if(!backend->recv_connection_closed) { + infof(data, "schannel: error sending close msg: %d", result); + result = CURLE_SEND_ERROR; + goto out; + } + /* Looks like server already closed the connection. + * An error to send our close notify is not a failure. */ + *done = TRUE; + result = CURLE_OK; } } } + /* If the connection seems open and we have not seen the close notify + * from the server yet, try to receive it. */ + if(backend->cred && backend->ctxt && + !backend->recv_sspi_close_notify && !backend->recv_connection_closed) { + char buffer[1024]; + ssize_t nread; + + nread = schannel_recv(cf, data, buffer, sizeof(buffer), &result); + if(nread > 0) { + /* still data coming in? */ + } + else if(nread == 0) { + /* We got the close notify alert and are done. */ + backend->recv_connection_closed = TRUE; + *done = TRUE; + } + else if(nread < 0 && result == CURLE_AGAIN) { + connssl->io_need = CURL_SSL_IO_NEED_RECV; + } + else { + CURL_TRC_CF(data, cf, "SSL shutdown, error %d", result); + result = CURLE_RECV_ERROR; + } + } + +out: + cf->shutdown = (result || *done); + return result; +} + +static void schannel_close(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; + + DEBUGASSERT(data); + DEBUGASSERT(backend); + /* free SSPI Schannel API security context handle */ if(backend->ctxt) { DEBUGF(infof(data, "schannel: clear security context handle")); @@ -2554,7 +2612,7 @@ static int schannel_shutdown(struct Curl_cfilter *cf, /* free SSPI Schannel API credential handle */ if(backend->cred) { Curl_ssl_sessionid_lock(data); - schannel_session_free(backend->cred); + schannel_session_free(backend->cred, 0); Curl_ssl_sessionid_unlock(data); backend->cred = NULL; } @@ -2573,13 +2631,6 @@ static int schannel_shutdown(struct Curl_cfilter *cf, backend->decdata_length = 0; backend->decdata_offset = 0; } - - return CURLE_OK; -} - -static void schannel_close(struct Curl_cfilter *cf, struct Curl_easy *data) -{ - schannel_shutdown(cf, data); } static int schannel_init(void) @@ -2594,9 +2645,7 @@ static void schannel_cleanup(void) static size_t schannel_version(char *buffer, size_t size) { - size = msnprintf(buffer, size, "Schannel"); - - return size; + return msnprintf(buffer, size, "Schannel"); } static CURLcode schannel_random(struct Curl_easy *data UNUSED_PARAM, @@ -2621,7 +2670,7 @@ static CURLcode schannel_pkp_pin_peer_pubkey(struct Curl_cfilter *cf, DEBUGASSERT(backend); - /* if a path wasn't specified, don't pin */ + /* if a path was not specified, do not pin */ if(!pinnedpubkey) return CURLE_OK; @@ -2683,6 +2732,13 @@ static void schannel_checksum(const unsigned char *input, DWORD provType, const unsigned int algId) { +#ifdef CURL_WINDOWS_APP + (void)input; + (void)inputlen; + (void)provType; + (void)algId; + memset(checksum, 0, checksumlen); +#else HCRYPTPROV hProv = 0; HCRYPTHASH hHash = 0; DWORD cbHashSize = 0; @@ -2723,6 +2779,7 @@ static void schannel_checksum(const unsigned char *input, if(hProv) CryptReleaseContext(hProv, 0); +#endif } static CURLcode schannel_sha256sum(const unsigned char *input, @@ -2749,9 +2806,9 @@ 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; + struct Curl_multi *multi = data->multi; const struct curl_blob *ca_info_blob = conn_config->ca_info_blob; - struct schannel_multi_ssl_backend_data *mbackend; + struct schannel_cert_share *share; const struct ssl_general_config *cfg = &data->set.general_ssl; timediff_t timeout_ms; timediff_t elapsed_ms; @@ -2760,12 +2817,14 @@ HCERTSTORE Curl_schannel_get_cached_cert_store(struct Curl_cfilter *cf, DEBUGASSERT(multi); - if(!multi || !multi->ssl_backend_data) { + if(!multi) { return NULL; } - mbackend = (struct schannel_multi_ssl_backend_data *)multi->ssl_backend_data; - if(!mbackend->cert_store) { + share = Curl_hash_pick(&multi->proto_hash, + (void *)MPROTO_SCHANNEL_CERT_SHARE_KEY, + sizeof(MPROTO_SCHANNEL_CERT_SHARE_KEY)-1); + if(!share || !share->cert_store) { return NULL; } @@ -2780,37 +2839,52 @@ HCERTSTORE Curl_schannel_get_cached_cert_store(struct Curl_cfilter *cf, timeout_ms = cfg->ca_cache_timeout * (timediff_t)1000; if(timeout_ms >= 0) { now = Curl_now(); - elapsed_ms = Curl_timediff(now, mbackend->time); + elapsed_ms = Curl_timediff(now, share->time); if(elapsed_ms >= timeout_ms) { return NULL; } } if(ca_info_blob) { - if(!mbackend->CAinfo_blob_digest) { + if(!share->CAinfo_blob_digest) { return NULL; } - if(mbackend->CAinfo_blob_size != ca_info_blob->len) { + if(share->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, + if(memcmp(share->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)) { + if(!conn_config->CAfile || !share->CAfile || + strcmp(share->CAfile, conn_config->CAfile)) { return NULL; } } - return mbackend->cert_store; + return share->cert_store; +} + +static void schannel_cert_share_free(void *key, size_t key_len, void *p) +{ + struct schannel_cert_share *share = p; + DEBUGASSERT(key_len == (sizeof(MPROTO_SCHANNEL_CERT_SHARE_KEY)-1)); + DEBUGASSERT(!memcmp(MPROTO_SCHANNEL_CERT_SHARE_KEY, key, key_len)); + (void)key; + (void)key_len; + if(share->cert_store) { + CertCloseStore(share->cert_store, 0); + } + free(share->CAinfo_blob_digest); + free(share->CAfile); + free(share); } bool Curl_schannel_set_cached_cert_store(struct Curl_cfilter *cf, @@ -2818,9 +2892,9 @@ bool Curl_schannel_set_cached_cert_store(struct Curl_cfilter *cf, 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; + struct Curl_multi *multi = data->multi; const struct curl_blob *ca_info_blob = conn_config->ca_info_blob; - struct schannel_multi_ssl_backend_data *mbackend; + struct schannel_cert_share *share; unsigned char *CAinfo_blob_digest = NULL; size_t CAinfo_blob_size = 0; char *CAfile = NULL; @@ -2831,17 +2905,23 @@ bool Curl_schannel_set_cached_cert_store(struct Curl_cfilter *cf, 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) { + share = Curl_hash_pick(&multi->proto_hash, + (void *)MPROTO_SCHANNEL_CERT_SHARE_KEY, + sizeof(MPROTO_SCHANNEL_CERT_SHARE_KEY)-1); + if(!share) { + share = calloc(1, sizeof(*share)); + if(!share) { + return false; + } + if(!Curl_hash_add2(&multi->proto_hash, + (void *)MPROTO_SCHANNEL_CERT_SHARE_KEY, + sizeof(MPROTO_SCHANNEL_CERT_SHARE_KEY)-1, + share, schannel_cert_share_free)) { + free(share); 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) { @@ -2863,33 +2943,20 @@ bool Curl_schannel_set_cached_cert_store(struct Curl_cfilter *cf, } /* free old cache data */ - if(mbackend->cert_store) { - CertCloseStore(mbackend->cert_store, 0); + if(share->cert_store) { + CertCloseStore(share->cert_store, 0); } - free(mbackend->CAinfo_blob_digest); - free(mbackend->CAfile); + free(share->CAinfo_blob_digest); + free(share->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; + share->time = Curl_now(); + share->cert_store = cert_store; + share->CAinfo_blob_digest = CAinfo_blob_digest; + share->CAinfo_blob_size = CAinfo_blob_size; + share->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 */ @@ -2897,8 +2964,11 @@ const struct Curl_ssl Curl_ssl_schannel = { #ifdef HAS_MANUAL_VERIFY_API SSLSUPP_CAINFO_BLOB | #endif +#ifndef CURL_WINDOWS_APP SSLSUPP_PINNEDPUBKEY | +#endif SSLSUPP_TLS13_CIPHERSUITES | + SSLSUPP_CA_CACHE | SSLSUPP_HTTPS_PROXY, sizeof(struct schannel_ssl_backend_data), @@ -2917,7 +2987,6 @@ const struct Curl_ssl Curl_ssl_schannel = { schannel_get_internals, /* get_internals */ schannel_close, /* close_one */ Curl_none_close_all, /* close_all */ - schannel_session_free, /* session_free */ Curl_none_set_engine, /* set_engine */ Curl_none_set_engine_default, /* set_engine_default */ Curl_none_engines_list, /* engines_list */ @@ -2925,7 +2994,6 @@ const struct Curl_ssl Curl_ssl_schannel = { schannel_sha256sum, /* sha256sum */ NULL, /* associate_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 */ }; diff --git a/lib/vtls/schannel_int.h b/lib/vtls/schannel_int.h index fe7450d45..b04f1804b 100644 --- a/lib/vtls/schannel_int.h +++ b/lib/vtls/schannel_int.h @@ -28,7 +28,8 @@ #ifdef USE_SCHANNEL -#if defined(__MINGW32__) || defined(CERT_CHAIN_REVOCATION_CHECK_CHAIN) +#if (defined(__MINGW32__) || defined(CERT_CHAIN_REVOCATION_CHECK_CHAIN)) \ + && !defined(CURL_WINDOWS_APP) #define HAS_MANUAL_VERIFY_API #endif @@ -53,6 +54,16 @@ #define CERT_ALT_NAME_IP_ADDRESS 8 #endif +#if defined(_MSC_VER) && (_MSC_VER <= 1600) +/* Workaround for warning: + 'type cast' : conversion from 'int' to 'LPCSTR' of greater size */ +#undef CERT_STORE_PROV_MEMORY +#undef CERT_STORE_PROV_SYSTEM_A +#undef CERT_STORE_PROV_SYSTEM_W +#define CERT_STORE_PROV_MEMORY ((LPCSTR)(size_t)2) +#define CERT_STORE_PROV_SYSTEM_A ((LPCSTR)(size_t)9) +#define CERT_STORE_PROV_SYSTEM_W ((LPCSTR)(size_t)10) +#endif #ifndef SCH_CREDENTIALS_VERSION @@ -134,7 +145,7 @@ struct schannel_ssl_backend_data { 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 + cannot 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; @@ -147,9 +158,13 @@ struct schannel_ssl_backend_data { #ifdef HAS_MANUAL_VERIFY_API bool use_manual_cred_validation; /* true if manual cred validation is used */ #endif + BIT(sent_shutdown); }; -struct schannel_multi_ssl_backend_data { +/* key to use at `multi->proto_hash` */ +#define MPROTO_SCHANNEL_CERT_SHARE_KEY "tls:schannel:cert:share" + +struct schannel_cert_share { 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 diff --git a/lib/vtls/schannel_verify.c b/lib/vtls/schannel_verify.c index 24146d0bd..96ad0e517 100644 --- a/lib/vtls/schannel_verify.c +++ b/lib/vtls/schannel_verify.c @@ -33,7 +33,7 @@ #ifdef USE_SCHANNEL #ifndef USE_WINDOWS_SSPI -# error "Can't compile SCHANNEL support without SSPI." +# error "cannot compile SCHANNEL support without SSPI." #endif #include "schannel.h" @@ -82,7 +82,7 @@ static int is_cr_or_lf(char c) } /* Search the substring needle,needlelen into string haystack,haystacklen - * Strings don't need to be terminated by a '\0'. + * Strings do not need to be terminated by a '\0'. * Similar of OSX/Linux memmem (not available on Visual Studio). * Return position of beginning of first occurrence or NULL if not found */ @@ -335,7 +335,7 @@ static CURLcode add_certs_file_to_store(HCERTSTORE trust_store, /* * 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 + * If host_names is not NULL, populate it with all the hostnames. Each string * in the host_names is null-terminated and the last string is double * null-terminated. If no DNS names are found, a single null-terminated empty * string is returned. @@ -346,6 +346,12 @@ static DWORD cert_get_name_string(struct Curl_easy *data, DWORD length) { DWORD actual_length = 0; +#if defined(CURL_WINDOWS_APP) + (void)data; + (void)cert_context; + (void)host_names; + (void)length; +#else BOOL compute_content = FALSE; CERT_INFO *cert_info = NULL; CERT_EXTENSION *extension = NULL; @@ -441,14 +447,14 @@ static DWORD cert_get_name_string(struct Curl_easy *data, } /* Sanity check to prevent buffer overrun. */ if((actual_length + current_length) > length) { - failf(data, "schannel: Not enough memory to list all host names."); + failf(data, "schannel: Not enough memory to list all hostnames."); break; } dns_w = entry->pwszDNSName; - /* pwszDNSName is in ia5 string format and hence doesn't contain any + /* pwszDNSName is in ia5 string format and hence does not contain any * non-ascii characters. */ while(*dns_w != '\0') { - *current_pos++ = (char)(*dns_w++); + *current_pos++ = (TCHAR)(*dns_w++); } *current_pos++ = '\0'; actual_length += (DWORD)current_length; @@ -457,6 +463,7 @@ static DWORD cert_get_name_string(struct Curl_easy *data, /* Last string has double null-terminator. */ *current_pos = '\0'; } +#endif return actual_length; } diff --git a/lib/vtls/sectransp.c b/lib/vtls/sectransp.c index 67f534c67..c2803e8bf 100644 --- a/lib/vtls/sectransp.c +++ b/lib/vtls/sectransp.c @@ -30,6 +30,8 @@ #include "curl_setup.h" +#ifdef USE_SECTRANSP + #include "urldata.h" /* for the Curl_easy definition */ #include "curl_base64.h" #include "strtok.h" @@ -37,19 +39,16 @@ #include "strcase.h" #include "x509asn1.h" #include "strerror.h" - -#ifdef USE_SECTRANSP +#include "cipher_suite.h" #ifdef __clang__ #pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wtautological-pointer-compare" +#pragma clang diagnostic ignored "-Wunreachable-code" #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 @@ -72,7 +71,7 @@ #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) #if MAC_OS_X_VERSION_MAX_ALLOWED < 1050 -#error "The Secure Transport back-end requires Leopard or later." +#error "The Secure Transport backend requires Leopard or later." #endif /* MAC_OS_X_VERSION_MAX_ALLOWED < 1050 */ #define CURL_BUILD_IOS 0 @@ -122,7 +121,7 @@ #define CURL_SUPPORT_MAC_10_9 0 #else -#error "The Secure Transport back-end requires iOS or macOS." +#error "The Secure Transport backend requires iOS or macOS." #endif /* (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) */ #if CURL_BUILD_MAC @@ -144,7 +143,8 @@ #include "memdebug.h" -/* From MacTypes.h (which we can't include because it isn't present in iOS: */ +/* From MacTypes.h (which we cannot include because it is not present in + iOS: */ #define ioErr -36 #define paramErr -50 @@ -152,636 +152,60 @@ struct st_ssl_backend_data { SSLContextRef ssl_ctx; bool ssl_direction; /* true if writing, false if reading */ size_t ssl_write_buffered_length; + BIT(sent_shutdown); }; -struct st_cipher { - const char *name; /* Cipher suite IANA name. It starts with "TLS_" prefix */ - const char *alias_name; /* Alias name is the same as OpenSSL cipher name */ - SSLCipherSuite num; /* Cipher suite code/number defined in IANA registry */ - bool weak; /* Flag to mark cipher as weak based on previous implementation - of Secure Transport back-end by CURL */ -}; - -/* Macro to initialize st_cipher data structure: stringify id to name, cipher - number/id, 'weak' suite flag +/* Create the list of default ciphers to use by making an intersection of the + * ciphers supported by Secure Transport and the list below, using the order + * of the former. + * This list is based on TLS recommendations by Mozilla, balancing between + * security and wide compatibility: "Most ciphers that are not clearly broken + * and dangerous to use are supported" */ -#define CIPHER_DEF(num, alias, weak) \ - { #num, alias, num, weak } - -/* - Macro to initialize st_cipher data structure with name, code (IANA cipher - number/id value), and 'weak' suite flag. The first 28 cipher suite numbers - have the same IANA code for both SSL and TLS standards: numbers 0x0000 to - 0x001B. They have different names though. The first 4 letters of the cipher - suite name are the protocol name: "SSL_" or "TLS_", rest of the IANA name is - the same for both SSL and TLS cipher suite name. - The second part of the problem is that macOS/iOS SDKs don't define all TLS - codes but only 12 of them. The SDK defines all SSL codes though, i.e. SSL_NUM - constant is always defined for those 28 ciphers while TLS_NUM is defined only - for 12 of the first 28 ciphers. Those 12 TLS cipher codes match to - corresponding SSL enum value and represent the same cipher suite. Therefore - we'll use the SSL enum value for those cipher suites because it is defined - for all 28 of them. - We make internal data consistent and based on TLS names, i.e. all st_cipher - item names start with the "TLS_" prefix. - Summarizing all the above, those 28 first ciphers are presented in our table - with both TLS and SSL names. Their cipher numbers are assigned based on the - SDK enum value for the SSL cipher, which matches to IANA TLS number. - */ -#define CIPHER_DEF_SSLTLS(num_wo_prefix, alias, weak) \ - { "TLS_" #num_wo_prefix, alias, SSL_##num_wo_prefix, weak } - -/* - Cipher suites were marked as weak based on the following: - RC4 encryption - rfc7465, the document contains a list of deprecated ciphers. - Marked in the code below as weak. - RC2 encryption - many mentions, was found vulnerable to a relatively easy - attack https://link.springer.com/chapter/10.1007%2F3-540-69710-1_14 - Marked in the code below as weak. - DES and IDEA encryption - rfc5469, has a list of deprecated ciphers. - Marked in the code below as weak. - Anonymous Diffie-Hellman authentication and anonymous elliptic curve - Diffie-Hellman - vulnerable to a man-in-the-middle attack. Deprecated by - RFC 4346 aka TLS 1.1 (section A.5, page 60) - Null bulk encryption suites - not encrypted communication - Export ciphers, i.e. ciphers with restrictions to be used outside the US for - software exported to some countries, they were excluded from TLS 1.1 - version. More precisely, they were noted as ciphers which MUST NOT be - negotiated in RFC 4346 aka TLS 1.1 (section A.5, pages 60 and 61). - All of those filters were considered weak because they contain a weak - algorithm like DES, RC2 or RC4, and already considered weak by other - criteria. - 3DES - NIST deprecated it and is going to retire it by 2023 - https://csrc.nist.gov/News/2017/Update-to-Current-Use-and-Deprecation-of-TDEA - OpenSSL https://www.openssl.org/blog/blog/2016/08/24/sweet32/ also - deprecated those ciphers. Some other libraries also consider it - vulnerable or at least not strong enough. - - CBC ciphers are vulnerable with SSL3.0 and TLS1.0: - https://www.cisco.com/c/en/us/support/docs/security/email-security-appliance - /118518-technote-esa-00.html - We don't take care of this issue because it is resolved by later TLS - versions and for us, it requires more complicated checks, we need to - check a protocol version also. Vulnerability doesn't look very critical - and we do not filter out those cipher suites. - */ - -#define CIPHER_WEAK_NOT_ENCRYPTED TRUE -#define CIPHER_WEAK_RC_ENCRYPTION TRUE -#define CIPHER_WEAK_DES_ENCRYPTION TRUE -#define CIPHER_WEAK_IDEA_ENCRYPTION TRUE -#define CIPHER_WEAK_ANON_AUTH TRUE -#define CIPHER_WEAK_3DES_ENCRYPTION TRUE -#define CIPHER_STRONG_ENOUGH FALSE - -/* Please do not change the order of the first ciphers available for SSL. - Do not insert and do not delete any of them. Code below - depends on their order and continuity. - If you add a new cipher, please maintain order by number, i.e. - insert in between existing items to appropriate place based on - cipher suite IANA number -*/ -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 */ - NULL, - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF_SSLTLS(RSA_WITH_NULL_MD5, /* 0x0001 */ - "NULL-MD5", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF_SSLTLS(RSA_WITH_NULL_SHA, /* 0x0002 */ - "NULL-SHA", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF_SSLTLS(RSA_EXPORT_WITH_RC4_40_MD5, /* 0x0003 */ - "EXP-RC4-MD5", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF_SSLTLS(RSA_WITH_RC4_128_MD5, /* 0x0004 */ - "RC4-MD5", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF_SSLTLS(RSA_WITH_RC4_128_SHA, /* 0x0005 */ - "RC4-SHA", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF_SSLTLS(RSA_EXPORT_WITH_RC2_CBC_40_MD5, /* 0x0006 */ - "EXP-RC2-CBC-MD5", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF_SSLTLS(RSA_WITH_IDEA_CBC_SHA, /* 0x0007 */ - "IDEA-CBC-SHA", - CIPHER_WEAK_IDEA_ENCRYPTION), - CIPHER_DEF_SSLTLS(RSA_EXPORT_WITH_DES40_CBC_SHA, /* 0x0008 */ - "EXP-DES-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(RSA_WITH_DES_CBC_SHA, /* 0x0009 */ - "DES-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(RSA_WITH_3DES_EDE_CBC_SHA, /* 0x000A */ - "DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DH_DSS_EXPORT_WITH_DES40_CBC_SHA, /* 0x000B */ - "EXP-DH-DSS-DES-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DH_DSS_WITH_DES_CBC_SHA, /* 0x000C */ - "DH-DSS-DES-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DH_DSS_WITH_3DES_EDE_CBC_SHA, /* 0x000D */ - "DH-DSS-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DH_RSA_EXPORT_WITH_DES40_CBC_SHA, /* 0x000E */ - "EXP-DH-RSA-DES-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DH_RSA_WITH_DES_CBC_SHA, /* 0x000F */ - "DH-RSA-DES-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DH_RSA_WITH_3DES_EDE_CBC_SHA, /* 0x0010 */ - "DH-RSA-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, /* 0x0011 */ - "EXP-EDH-DSS-DES-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DHE_DSS_WITH_DES_CBC_SHA, /* 0x0012 */ - "EDH-DSS-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DHE_DSS_WITH_3DES_EDE_CBC_SHA, /* 0x0013 */ - "DHE-DSS-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, /* 0x0014 */ - "EXP-EDH-RSA-DES-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DHE_RSA_WITH_DES_CBC_SHA, /* 0x0015 */ - "EDH-RSA-DES-CBC-SHA", - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DHE_RSA_WITH_3DES_EDE_CBC_SHA, /* 0x0016 */ - "DHE-RSA-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF_SSLTLS(DH_anon_EXPORT_WITH_RC4_40_MD5, /* 0x0017 */ - "EXP-ADH-RC4-MD5", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF_SSLTLS(DH_anon_WITH_RC4_128_MD5, /* 0x0018 */ - "ADH-RC4-MD5", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF_SSLTLS(DH_anon_EXPORT_WITH_DES40_CBC_SHA, /* 0x0019 */ - "EXP-ADH-DES-CBC-SHA", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF_SSLTLS(DH_anon_WITH_DES_CBC_SHA, /* 0x001A */ - "ADH-DES-CBC-SHA", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF_SSLTLS(DH_anon_WITH_3DES_EDE_CBC_SHA, /* 0x001B */ - "ADH-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF(SSL_FORTEZZA_DMS_WITH_NULL_SHA, /* 0x001C */ - NULL, - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA, /* 0x001D */ - NULL, - CIPHER_STRONG_ENOUGH), - -#if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 - /* RFC 4785 - Pre-Shared Key (PSK) Ciphersuites with NULL Encryption */ - CIPHER_DEF(TLS_PSK_WITH_NULL_SHA, /* 0x002C */ - "PSK-NULL-SHA", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_DHE_PSK_WITH_NULL_SHA, /* 0x002D */ - "DHE-PSK-NULL-SHA", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_RSA_PSK_WITH_NULL_SHA, /* 0x002E */ - "RSA-PSK-NULL-SHA", - CIPHER_WEAK_NOT_ENCRYPTED), -#endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */ - - /* TLS addenda using AES, per RFC 3268. Defined since SDK 10.4u */ - CIPHER_DEF(TLS_RSA_WITH_AES_128_CBC_SHA, /* 0x002F */ - "AES128-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_DSS_WITH_AES_128_CBC_SHA, /* 0x0030 */ - "DH-DSS-AES128-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_RSA_WITH_AES_128_CBC_SHA, /* 0x0031 */ - "DH-RSA-AES128-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_DSS_WITH_AES_128_CBC_SHA, /* 0x0032 */ - "DHE-DSS-AES128-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_RSA_WITH_AES_128_CBC_SHA, /* 0x0033 */ - "DHE-RSA-AES128-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_anon_WITH_AES_128_CBC_SHA, /* 0x0034 */ - "ADH-AES128-SHA", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF(TLS_RSA_WITH_AES_256_CBC_SHA, /* 0x0035 */ - "AES256-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_DSS_WITH_AES_256_CBC_SHA, /* 0x0036 */ - "DH-DSS-AES256-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_RSA_WITH_AES_256_CBC_SHA, /* 0x0037 */ - "DH-RSA-AES256-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_DSS_WITH_AES_256_CBC_SHA, /* 0x0038 */ - "DHE-DSS-AES256-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_RSA_WITH_AES_256_CBC_SHA, /* 0x0039 */ - "DHE-RSA-AES256-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_anon_WITH_AES_256_CBC_SHA, /* 0x003A */ - "ADH-AES256-SHA", - CIPHER_WEAK_ANON_AUTH), - -#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS - /* TLS 1.2 addenda, RFC 5246 */ - /* Server provided RSA certificate for key exchange. */ - CIPHER_DEF(TLS_RSA_WITH_NULL_SHA256, /* 0x003B */ - "NULL-SHA256", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_RSA_WITH_AES_128_CBC_SHA256, /* 0x003C */ - "AES128-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_RSA_WITH_AES_256_CBC_SHA256, /* 0x003D */ - "AES256-SHA256", - CIPHER_STRONG_ENOUGH), - /* Server-authenticated (and optionally client-authenticated) - Diffie-Hellman. */ - CIPHER_DEF(TLS_DH_DSS_WITH_AES_128_CBC_SHA256, /* 0x003E */ - "DH-DSS-AES128-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_RSA_WITH_AES_128_CBC_SHA256, /* 0x003F */ - "DH-RSA-AES128-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, /* 0x0040 */ - "DHE-DSS-AES128-SHA256", - CIPHER_STRONG_ENOUGH), - - /* TLS 1.2 addenda, RFC 5246 */ - CIPHER_DEF(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, /* 0x0067 */ - "DHE-RSA-AES128-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_DSS_WITH_AES_256_CBC_SHA256, /* 0x0068 */ - "DH-DSS-AES256-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_RSA_WITH_AES_256_CBC_SHA256, /* 0x0069 */ - "DH-RSA-AES256-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, /* 0x006A */ - "DHE-DSS-AES256-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, /* 0x006B */ - "DHE-RSA-AES256-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_anon_WITH_AES_128_CBC_SHA256, /* 0x006C */ - "ADH-AES128-SHA256", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF(TLS_DH_anon_WITH_AES_256_CBC_SHA256, /* 0x006D */ - "ADH-AES256-SHA256", - CIPHER_WEAK_ANON_AUTH), -#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */ - -#if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 - /* Addendum from RFC 4279, TLS PSK */ - CIPHER_DEF(TLS_PSK_WITH_RC4_128_SHA, /* 0x008A */ - "PSK-RC4-SHA", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF(TLS_PSK_WITH_3DES_EDE_CBC_SHA, /* 0x008B */ - "PSK-3DES-EDE-CBC-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF(TLS_PSK_WITH_AES_128_CBC_SHA, /* 0x008C */ - "PSK-AES128-CBC-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_PSK_WITH_AES_256_CBC_SHA, /* 0x008D */ - "PSK-AES256-CBC-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_PSK_WITH_RC4_128_SHA, /* 0x008E */ - "DHE-PSK-RC4-SHA", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF(TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, /* 0x008F */ - "DHE-PSK-3DES-EDE-CBC-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF(TLS_DHE_PSK_WITH_AES_128_CBC_SHA, /* 0x0090 */ - "DHE-PSK-AES128-CBC-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_PSK_WITH_AES_256_CBC_SHA, /* 0x0091 */ - "DHE-PSK-AES256-CBC-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_RSA_PSK_WITH_RC4_128_SHA, /* 0x0092 */ - "RSA-PSK-RC4-SHA", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF(TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, /* 0x0093 */ - "RSA-PSK-3DES-EDE-CBC-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF(TLS_RSA_PSK_WITH_AES_128_CBC_SHA, /* 0x0094 */ - "RSA-PSK-AES128-CBC-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_RSA_PSK_WITH_AES_256_CBC_SHA, /* 0x0095 */ - "RSA-PSK-AES256-CBC-SHA", - CIPHER_STRONG_ENOUGH), -#endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */ - -#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS - /* Addenda from rfc 5288 AES Galois Counter Mode (GCM) Cipher Suites - for TLS. */ - CIPHER_DEF(TLS_RSA_WITH_AES_128_GCM_SHA256, /* 0x009C */ - "AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_RSA_WITH_AES_256_GCM_SHA384, /* 0x009D */ - "AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, /* 0x009E */ - "DHE-RSA-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, /* 0x009F */ - "DHE-RSA-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_RSA_WITH_AES_128_GCM_SHA256, /* 0x00A0 */ - "DH-RSA-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_RSA_WITH_AES_256_GCM_SHA384, /* 0x00A1 */ - "DH-RSA-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, /* 0x00A2 */ - "DHE-DSS-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, /* 0x00A3 */ - "DHE-DSS-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_DSS_WITH_AES_128_GCM_SHA256, /* 0x00A4 */ - "DH-DSS-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_DSS_WITH_AES_256_GCM_SHA384, /* 0x00A5 */ - "DH-DSS-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DH_anon_WITH_AES_128_GCM_SHA256, /* 0x00A6 */ - "ADH-AES128-GCM-SHA256", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF(TLS_DH_anon_WITH_AES_256_GCM_SHA384, /* 0x00A7 */ - "ADH-AES256-GCM-SHA384", - CIPHER_WEAK_ANON_AUTH), -#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */ - -#if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 - /* RFC 5487 - PSK with SHA-256/384 and AES GCM */ - CIPHER_DEF(TLS_PSK_WITH_AES_128_GCM_SHA256, /* 0x00A8 */ - "PSK-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_PSK_WITH_AES_256_GCM_SHA384, /* 0x00A9 */ - "PSK-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, /* 0x00AA */ - "DHE-PSK-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, /* 0x00AB */ - "DHE-PSK-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, /* 0x00AC */ - "RSA-PSK-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, /* 0x00AD */ - "RSA-PSK-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_PSK_WITH_AES_128_CBC_SHA256, /* 0x00AE */ - "PSK-AES128-CBC-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_PSK_WITH_AES_256_CBC_SHA384, /* 0x00AF */ - "PSK-AES256-CBC-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_PSK_WITH_NULL_SHA256, /* 0x00B0 */ - "PSK-NULL-SHA256", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_PSK_WITH_NULL_SHA384, /* 0x00B1 */ - "PSK-NULL-SHA384", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, /* 0x00B2 */ - "DHE-PSK-AES128-CBC-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, /* 0x00B3 */ - "DHE-PSK-AES256-CBC-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_DHE_PSK_WITH_NULL_SHA256, /* 0x00B4 */ - "DHE-PSK-NULL-SHA256", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_DHE_PSK_WITH_NULL_SHA384, /* 0x00B5 */ - "DHE-PSK-NULL-SHA384", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, /* 0x00B6 */ - "RSA-PSK-AES128-CBC-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, /* 0x00B7 */ - "RSA-PSK-AES256-CBC-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_RSA_PSK_WITH_NULL_SHA256, /* 0x00B8 */ - "RSA-PSK-NULL-SHA256", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_RSA_PSK_WITH_NULL_SHA384, /* 0x00B9 */ - "RSA-PSK-NULL-SHA384", - CIPHER_WEAK_NOT_ENCRYPTED), -#endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */ - - /* RFC 5746 - Secure Renegotiation. This is not a real suite, - it is a response to initiate negotiation again */ - CIPHER_DEF(TLS_EMPTY_RENEGOTIATION_INFO_SCSV, /* 0x00FF */ - NULL, - CIPHER_STRONG_ENOUGH), - -#if CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11 - /* TLS 1.3 standard cipher suites for ChaCha20+Poly1305. - Note: TLS 1.3 ciphersuites do not specify the key exchange - algorithm -- they only specify the symmetric ciphers. - Cipher alias name matches to OpenSSL cipher name, and for - TLS 1.3 ciphers */ - CIPHER_DEF(TLS_AES_128_GCM_SHA256, /* 0x1301 */ - NULL, /* The OpenSSL cipher name matches to the IANA name */ - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_AES_256_GCM_SHA384, /* 0x1302 */ - NULL, /* The OpenSSL cipher name matches to the IANA name */ - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_CHACHA20_POLY1305_SHA256, /* 0x1303 */ - NULL, /* The OpenSSL cipher name matches to the IANA name */ - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_AES_128_CCM_SHA256, /* 0x1304 */ - NULL, /* The OpenSSL cipher name matches to the IANA name */ - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_AES_128_CCM_8_SHA256, /* 0x1305 */ - NULL, /* The OpenSSL cipher name matches to the IANA name */ - CIPHER_STRONG_ENOUGH), -#endif /* CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11 */ +static const uint16_t default_ciphers[] = { + TLS_RSA_WITH_3DES_EDE_CBC_SHA, /* 0x000A */ + TLS_RSA_WITH_AES_128_CBC_SHA, /* 0x002F */ + TLS_RSA_WITH_AES_256_CBC_SHA, /* 0x0035 */ #if CURL_BUILD_MAC_10_6 || CURL_BUILD_IOS - /* ECDSA addenda, RFC 4492 */ - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_NULL_SHA, /* 0xC001 */ - "ECDH-ECDSA-NULL-SHA", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_RC4_128_SHA, /* 0xC002 */ - "ECDH-ECDSA-RC4-SHA", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, /* 0xC003 */ - "ECDH-ECDSA-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, /* 0xC004 */ - "ECDH-ECDSA-AES128-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, /* 0xC005 */ - "ECDH-ECDSA-AES256-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_NULL_SHA, /* 0xC006 */ - "ECDHE-ECDSA-NULL-SHA", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, /* 0xC007 */ - "ECDHE-ECDSA-RC4-SHA", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, /* 0xC008 */ - "ECDHE-ECDSA-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, /* 0xC009 */ - "ECDHE-ECDSA-AES128-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, /* 0xC00A */ - "ECDHE-ECDSA-AES256-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_RSA_WITH_NULL_SHA, /* 0xC00B */ - "ECDH-RSA-NULL-SHA", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_ECDH_RSA_WITH_RC4_128_SHA, /* 0xC00C */ - "ECDH-RSA-RC4-SHA", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF(TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, /* 0xC00D */ - "ECDH-RSA-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, /* 0xC00E */ - "ECDH-RSA-AES128-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, /* 0xC00F */ - "ECDH-RSA-AES256-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_NULL_SHA, /* 0xC010 */ - "ECDHE-RSA-NULL-SHA", - CIPHER_WEAK_NOT_ENCRYPTED), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_RC4_128_SHA, /* 0xC011 */ - "ECDHE-RSA-RC4-SHA", - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, /* 0xC012 */ - "ECDHE-RSA-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, /* 0xC013 */ - "ECDHE-RSA-AES128-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, /* 0xC014 */ - "ECDHE-RSA-AES256-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_anon_WITH_NULL_SHA, /* 0xC015 */ - "AECDH-NULL-SHA", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF(TLS_ECDH_anon_WITH_RC4_128_SHA, /* 0xC016 */ - "AECDH-RC4-SHA", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF(TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA, /* 0xC017 */ - "AECDH-DES-CBC3-SHA", - CIPHER_WEAK_3DES_ENCRYPTION), - CIPHER_DEF(TLS_ECDH_anon_WITH_AES_128_CBC_SHA, /* 0xC018 */ - "AECDH-AES128-SHA", - CIPHER_WEAK_ANON_AUTH), - CIPHER_DEF(TLS_ECDH_anon_WITH_AES_256_CBC_SHA, /* 0xC019 */ - "AECDH-AES256-SHA", - CIPHER_WEAK_ANON_AUTH), + TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, /* 0xC009 */ + TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, /* 0xC00A */ + TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, /* 0xC013 */ + TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, /* 0xC014 */ #endif /* CURL_BUILD_MAC_10_6 || CURL_BUILD_IOS */ #if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS - /* Addenda from rfc 5289 Elliptic Curve Cipher Suites with - HMAC SHA-256/384. */ - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, /* 0xC023 */ - "ECDHE-ECDSA-AES128-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, /* 0xC024 */ - "ECDHE-ECDSA-AES256-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, /* 0xC025 */ - "ECDH-ECDSA-AES128-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, /* 0xC026 */ - "ECDH-ECDSA-AES256-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, /* 0xC027 */ - "ECDHE-RSA-AES128-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, /* 0xC028 */ - "ECDHE-RSA-AES256-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, /* 0xC029 */ - "ECDH-RSA-AES128-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, /* 0xC02A */ - "ECDH-RSA-AES256-SHA384", - CIPHER_STRONG_ENOUGH), - /* Addenda from rfc 5289 Elliptic Curve Cipher Suites with - SHA-256/384 and AES Galois Counter Mode (GCM) */ - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, /* 0xC02B */ - "ECDHE-ECDSA-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, /* 0xC02C */ - "ECDHE-ECDSA-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, /* 0xC02D */ - "ECDH-ECDSA-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, /* 0xC02E */ - "ECDH-ECDSA-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, /* 0xC02F */ - "ECDHE-RSA-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, /* 0xC030 */ - "ECDHE-RSA-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, /* 0xC031 */ - "ECDH-RSA-AES128-GCM-SHA256", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, /* 0xC032 */ - "ECDH-RSA-AES256-GCM-SHA384", - CIPHER_STRONG_ENOUGH), + TLS_RSA_WITH_AES_128_CBC_SHA256, /* 0x003C */ + TLS_RSA_WITH_AES_256_CBC_SHA256, /* 0x003D */ + TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, /* 0x0067 */ + TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, /* 0x006B */ + TLS_RSA_WITH_AES_128_GCM_SHA256, /* 0x009C */ + TLS_RSA_WITH_AES_256_GCM_SHA384, /* 0x009D */ + TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, /* 0x009E */ + TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, /* 0x009F */ + TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, /* 0xC023 */ + TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, /* 0xC024 */ + TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, /* 0xC027 */ + TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, /* 0xC028 */ + TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, /* 0xC02B */ + TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, /* 0xC02C */ + TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, /* 0xC02F */ + TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, /* 0xC030 */ #endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */ -#if CURL_BUILD_MAC_10_15 || CURL_BUILD_IOS_13 - /* ECDHE_PSK Cipher Suites for Transport Layer Security (TLS), RFC 5489 */ - CIPHER_DEF(TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, /* 0xC035 */ - "ECDHE-PSK-AES128-CBC-SHA", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, /* 0xC036 */ - "ECDHE-PSK-AES256-CBC-SHA", - CIPHER_STRONG_ENOUGH), -#endif /* CURL_BUILD_MAC_10_15 || CURL_BUILD_IOS_13 */ - #if CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11 - /* Addenda from rfc 7905 ChaCha20-Poly1305 Cipher Suites for - Transport Layer Security (TLS). */ - CIPHER_DEF(TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCA8 */ - "ECDHE-RSA-CHACHA20-POLY1305", - CIPHER_STRONG_ENOUGH), - CIPHER_DEF(TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCA9 */ - "ECDHE-ECDSA-CHACHA20-POLY1305", - CIPHER_STRONG_ENOUGH), + TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCA8 */ + TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCA9 */ + + /* TLSv1.3 is not supported by sectransp, but there is also other + * code referencing TLSv1.3, like: kTLSProtocol13 ? */ + TLS_AES_128_GCM_SHA256, /* 0x1301 */ + TLS_AES_256_GCM_SHA384, /* 0x1302 */ + TLS_CHACHA20_POLY1305_SHA256, /* 0x1303 */ #endif /* CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11 */ - -#if CURL_BUILD_MAC_10_15 || CURL_BUILD_IOS_13 - /* ChaCha20-Poly1305 Cipher Suites for Transport Layer Security (TLS), - RFC 7905 */ - CIPHER_DEF(TLS_PSK_WITH_CHACHA20_POLY1305_SHA256, /* 0xCCAB */ - "PSK-CHACHA20-POLY1305", - CIPHER_STRONG_ENOUGH), -#endif /* CURL_BUILD_MAC_10_15 || CURL_BUILD_IOS_13 */ - - /* Tags for SSL 2 cipher kinds which are not specified for SSL 3. - Defined since SDK 10.2.8 */ - CIPHER_DEF(SSL_RSA_WITH_RC2_CBC_MD5, /* 0xFF80 */ - NULL, - CIPHER_WEAK_RC_ENCRYPTION), - CIPHER_DEF(SSL_RSA_WITH_IDEA_CBC_MD5, /* 0xFF81 */ - NULL, - CIPHER_WEAK_IDEA_ENCRYPTION), - CIPHER_DEF(SSL_RSA_WITH_DES_CBC_MD5, /* 0xFF82 */ - NULL, - CIPHER_WEAK_DES_ENCRYPTION), - CIPHER_DEF(SSL_RSA_WITH_3DES_EDE_CBC_MD5, /* 0xFF83 */ - NULL, - CIPHER_WEAK_3DES_ENCRYPTION), }; -#define NUM_OF_CIPHERS sizeof(ciphertable)/sizeof(ciphertable[0]) +#define DEFAULT_CIPHERS_LEN sizeof(default_ciphers)/sizeof(default_ciphers[0]) /* pinned public key support tests */ @@ -816,7 +240,7 @@ static const unsigned char rsa2048SpkiHeader[] = { 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00}; #ifdef SECTRANSP_PINNEDPUBKEY_V1 -/* the *new* version doesn't return DER encoded ecdsa certs like the old... */ +/* the *new* version does not return DER encoded ecdsa certs like the old... */ static const unsigned char ecDsaSecp256r1SpkiHeader[] = { 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, @@ -906,25 +330,6 @@ static OSStatus sectransp_bio_cf_out_write(SSLConnectionRef connection, return rtn; } -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(i = SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA + 1; i < NUM_OF_CIPHERS; - ++i) { - if(ciphertable[i].num == cipher) { - return ciphertable[i].name; - } - } - return ciphertable[SSL_NULL_WITH_NULL_NULL].name; -} - #if CURL_BUILD_MAC CF_INLINE void GetDarwinVersionNumber(int *major, int *minor) { @@ -957,27 +362,27 @@ CF_INLINE void GetDarwinVersionNumber(int *major, int *minor) #endif /* CURL_BUILD_MAC */ /* Apple provides a myriad of ways of getting information about a certificate - into a string. Some aren't available under iOS or newer cats. So here's - a unified function for getting a string describing the certificate that - ought to work in all cats starting with Leopard. */ + into a string. Some are not available under iOS or newer cats. Here's a + unified function for getting a string describing the certificate that ought + to work in all cats starting with Leopard. */ CF_INLINE CFStringRef getsubject(SecCertificateRef cert) { CFStringRef server_cert_summary = CFSTR("(null)"); #if CURL_BUILD_IOS - /* iOS: There's only one way to do this. */ + /* iOS: There is only one way to do this. */ server_cert_summary = SecCertificateCopySubjectSummary(cert); #else #if CURL_BUILD_MAC_10_7 /* Lion & later: Get the long description if we can. */ - if(SecCertificateCopyLongDescription) + if(&SecCertificateCopyLongDescription) server_cert_summary = SecCertificateCopyLongDescription(NULL, cert, NULL); else #endif /* CURL_BUILD_MAC_10_7 */ #if CURL_BUILD_MAC_10_6 /* Snow Leopard: Get the certificate summary. */ - if(SecCertificateCopySubjectSummary) + if(&SecCertificateCopySubjectSummary) server_cert_summary = SecCertificateCopySubjectSummary(cert); else #endif /* CURL_BUILD_MAC_10_6 */ @@ -1015,7 +420,7 @@ static CURLcode CopyCertSubject(struct Curl_easy *data, size_t cbuf_size = ((size_t)CFStringGetLength(c) * 4) + 1; cbuf = calloc(1, cbuf_size); if(cbuf) { - if(!CFStringGetCString(c, cbuf, cbuf_size, + if(!CFStringGetCString(c, cbuf, (CFIndex)cbuf_size, kCFStringEncodingUTF8)) { failf(data, "SSL: invalid CA certificate subject"); result = CURLE_PEER_FAILED_VERIFICATION; @@ -1025,7 +430,7 @@ static CURLcode CopyCertSubject(struct Curl_easy *data, *certp = cbuf; } else { - failf(data, "SSL: couldn't allocate %zu bytes of memory", cbuf_size); + failf(data, "SSL: could not allocate %zu bytes of memory", cbuf_size); result = CURLE_OUT_OF_MEMORY; } } @@ -1037,7 +442,7 @@ static CURLcode CopyCertSubject(struct Curl_easy *data, #if CURL_SUPPORT_MAC_10_6 /* The SecKeychainSearch API was deprecated in Lion, and using it will raise - deprecation warnings, so let's not compile this unless it's necessary: */ + deprecation warnings, so let's not compile this unless it is necessary: */ static OSStatus CopyIdentityWithLabelOldSchool(char *label, SecIdentityRef *out_c_a_k) { @@ -1090,7 +495,7 @@ static OSStatus CopyIdentityWithLabel(char *label, /* SecItemCopyMatching() was introduced in iOS and Snow Leopard. kSecClassIdentity was introduced in Lion. If both exist, let's use them to find the certificate. */ - if(SecItemCopyMatching && kSecClassIdentity) { + if(&SecItemCopyMatching && kSecClassIdentity) { CFTypeRef keys[5]; CFTypeRef values[5]; CFDictionaryRef query_dict; @@ -1108,7 +513,7 @@ static OSStatus CopyIdentityWithLabel(char *label, /* identity searches need a SecPolicyRef in order to work */ values[3] = SecPolicyCreateSSL(false, NULL); keys[3] = kSecMatchPolicy; - /* match the name of the certificate (doesn't work in macOS 10.12.1) */ + /* match the name of the certificate (does not work in macOS 10.12.1) */ values[4] = label_cf; keys[4] = kSecAttrLabel; query_dict = CFDictionaryCreate(NULL, (const void **)keys, @@ -1120,7 +525,7 @@ static OSStatus CopyIdentityWithLabel(char *label, /* Do we have a match? */ status = SecItemCopyMatching(query_dict, (CFTypeRef *) &keys_list); - /* Because kSecAttrLabel matching doesn't work with kSecClassIdentity, + /* Because kSecAttrLabel matching does not work with kSecClassIdentity, * we need to find the correct identity ourselves */ if(status == noErr) { keys_list_count = CFArrayGetCount(keys_list); @@ -1194,7 +599,8 @@ static OSStatus CopyIdentityFromPKCS12File(const char *cPath, if(blob) { pkcs_data = CFDataCreate(kCFAllocatorDefault, - (const unsigned char *)blob->data, blob->len); + (const unsigned char *)blob->data, + (CFIndex)blob->len); status = (pkcs_data != NULL) ? errSecSuccess : errSecAllocate; resource_imported = (pkcs_data != NULL); } @@ -1202,7 +608,7 @@ static OSStatus CopyIdentityFromPKCS12File(const char *cPath, pkcs_url = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8 *)cPath, - strlen(cPath), false); + (CFIndex)strlen(cPath), false); resource_imported = CFURLCreateDataAndPropertiesFromResource(NULL, pkcs_url, &pkcs_data, @@ -1231,7 +637,7 @@ static OSStatus CopyIdentityFromPKCS12File(const char *cPath, /* On macOS SecPKCS12Import will always add the client certificate to * the Keychain. * - * As this doesn't match iOS, and apps may not want to see their client + * As this does not match iOS, and apps may not want to see their client * certificate saved in the user's keychain, we use SecItemImport * with a NULL keychain to avoid importing it. * @@ -1327,13 +733,14 @@ static CURLcode sectransp_version_from_curl(SSLProtocol *darwinver, return CURLE_OK; case CURL_SSLVERSION_TLSv1_3: /* TLS 1.3 support first appeared in iOS 11 and macOS 10.13 */ -#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAILABLE == 1 +#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && \ + defined(HAVE_BUILTIN_AVAILABLE) if(__builtin_available(macOS 10.13, iOS 11.0, *)) { *darwinver = kTLSProtocol13; return CURLE_OK; } #endif /* (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && - HAVE_BUILTIN_AVAILABLE == 1 */ + defined(HAVE_BUILTIN_AVAILABLE) */ break; } return CURLE_SSL_CONNECT_ERROR; @@ -1356,7 +763,8 @@ static CURLcode set_ssl_version_min_max(struct Curl_cfilter *cf, /* macOS 10.5-10.7 supported TLS 1.0 only. macOS 10.8 and later, and iOS 5 and later, added TLS 1.1 and 1.2. macOS 10.13 and later, and iOS 11 and later, added TLS 1.3. */ -#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAILABLE == 1 +#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && \ + defined(HAVE_BUILTIN_AVAILABLE) if(__builtin_available(macOS 10.13, iOS 11.0, *)) { max_supported_version_by_os = CURL_SSLVERSION_MAX_TLSv1_3; } @@ -1366,7 +774,7 @@ static CURLcode set_ssl_version_min_max(struct Curl_cfilter *cf, #else max_supported_version_by_os = CURL_SSLVERSION_MAX_TLSv1_2; #endif /* (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && - HAVE_BUILTIN_AVAILABLE == 1 */ + defined(HAVE_BUILTIN_AVAILABLE) */ switch(ssl_version) { case CURL_SSLVERSION_DEFAULT: @@ -1383,7 +791,7 @@ static CURLcode set_ssl_version_min_max(struct Curl_cfilter *cf, } #if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS - if(SSLSetProtocolVersionMax) { + if(&SSLSetProtocolVersionMax) { SSLProtocol darwin_ver_min = kTLSProtocol1; SSLProtocol darwin_ver_max = kTLSProtocol1; CURLcode result = sectransp_version_from_curl(&darwin_ver_min, @@ -1439,201 +847,228 @@ static CURLcode set_ssl_version_min_max(struct Curl_cfilter *cf, return CURLE_SSL_CONNECT_ERROR; } -static bool is_cipher_suite_strong(SSLCipherSuite suite_num) +static int sectransp_cipher_suite_get_str(uint16_t id, char *buf, + size_t buf_size, bool prefer_rfc) { - size_t i; - for(i = 0; i < NUM_OF_CIPHERS; ++i) { - if(ciphertable[i].num == suite_num) { - return !ciphertable[i].weak; - } - } - /* If the cipher is not in our list, assume it is a new one - and therefore strong. Previous implementation was the same, - if cipher suite is not in the list, it was considered strong enough */ - return true; + /* are these fortezza suites even supported ? */ + if(id == SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA) + msnprintf(buf, buf_size, "%s", "SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA"); + else if(id == SSL_FORTEZZA_DMS_WITH_NULL_SHA) + msnprintf(buf, buf_size, "%s", "SSL_FORTEZZA_DMS_WITH_NULL_SHA"); + /* can TLS_EMPTY_RENEGOTIATION_INFO_SCSV even be set ? */ + else if(id == TLS_EMPTY_RENEGOTIATION_INFO_SCSV) + msnprintf(buf, buf_size, "%s", "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"); + /* do we still need to support these SSL2-only ciphers ? */ + else if(id == SSL_RSA_WITH_RC2_CBC_MD5) + msnprintf(buf, buf_size, "%s", "SSL_RSA_WITH_RC2_CBC_MD5"); + else if(id == SSL_RSA_WITH_IDEA_CBC_MD5) + msnprintf(buf, buf_size, "%s", "SSL_RSA_WITH_IDEA_CBC_MD5"); + else if(id == SSL_RSA_WITH_DES_CBC_MD5) + msnprintf(buf, buf_size, "%s", "SSL_RSA_WITH_DES_CBC_MD5"); + else if(id == SSL_RSA_WITH_3DES_EDE_CBC_MD5) + msnprintf(buf, buf_size, "%s", "SSL_RSA_WITH_3DES_EDE_CBC_MD5"); + else + return Curl_cipher_suite_get_str(id, buf, buf_size, prefer_rfc); + return 0; } -static bool is_separator(char c) +static uint16_t sectransp_cipher_suite_walk_str(const char **str, + const char **end) { - /* Return whether character is a cipher list separator. */ - switch(c) { - case ' ': - case '\t': - case ':': - case ',': - case ';': - return true; - } - return false; + uint16_t id = Curl_cipher_suite_walk_str(str, end); + size_t len = *end - *str; + + if(!id) { + /* are these fortezza suites even supported ? */ + if(strncasecompare("SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA", *str, len)) + id = SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA; + else if(strncasecompare("SSL_FORTEZZA_DMS_WITH_NULL_SHA", *str, len)) + id = SSL_FORTEZZA_DMS_WITH_NULL_SHA; + /* can TLS_EMPTY_RENEGOTIATION_INFO_SCSV even be set ? */ + else if(strncasecompare("TLS_EMPTY_RENEGOTIATION_INFO_SCSV", *str, len)) + id = TLS_EMPTY_RENEGOTIATION_INFO_SCSV; + /* do we still need to support these SSL2-only ciphers ? */ + else if(strncasecompare("SSL_RSA_WITH_RC2_CBC_MD5", *str, len)) + id = SSL_RSA_WITH_RC2_CBC_MD5; + else if(strncasecompare("SSL_RSA_WITH_IDEA_CBC_MD5", *str, len)) + id = SSL_RSA_WITH_IDEA_CBC_MD5; + else if(strncasecompare("SSL_RSA_WITH_DES_CBC_MD5", *str, len)) + id = SSL_RSA_WITH_DES_CBC_MD5; + else if(strncasecompare("SSL_RSA_WITH_3DES_EDE_CBC_MD5", *str, len)) + id = SSL_RSA_WITH_3DES_EDE_CBC_MD5; + } + return id; } -static CURLcode sectransp_set_default_ciphers(struct Curl_easy *data, - SSLContextRef ssl_ctx) +/* allocated memory must be freed */ +static SSLCipherSuite * sectransp_get_supported_ciphers(SSLContextRef ssl_ctx, + size_t *len) { - size_t all_ciphers_count = 0UL, allowed_ciphers_count = 0UL, i; - SSLCipherSuite *all_ciphers = NULL, *allowed_ciphers = NULL; + SSLCipherSuite *ciphers = NULL; OSStatus err = noErr; + *len = 0; -#if CURL_BUILD_MAC - int darwinver_maj = 0, darwinver_min = 0; + err = SSLGetNumberSupportedCiphers(ssl_ctx, len); + if(err != noErr) + goto failed; - GetDarwinVersionNumber(&darwinver_maj, &darwinver_min); -#endif /* CURL_BUILD_MAC */ + ciphers = malloc(*len * sizeof(SSLCipherSuite)); + if(!ciphers) + goto failed; + + err = SSLGetSupportedCiphers(ssl_ctx, ciphers, len); + if(err != noErr) + goto failed; - /* Disable cipher suites that ST supports but are not safe. These ciphers - are unlikely to be used in any case since ST gives other ciphers a much - higher priority, but it's probably better that we not connect at all than - to give the user a false sense of security if the server only supports - insecure ciphers. (Note: We don't care about SSLv2-only ciphers.) */ - err = SSLGetNumberSupportedCiphers(ssl_ctx, &all_ciphers_count); - if(err != noErr) { - failf(data, "SSL: SSLGetNumberSupportedCiphers() failed: OSStatus %d", - err); - return CURLE_SSL_CIPHER; - } - all_ciphers = malloc(all_ciphers_count*sizeof(SSLCipherSuite)); - if(!all_ciphers) { - failf(data, "SSL: Failed to allocate memory for all ciphers"); - return CURLE_OUT_OF_MEMORY; - } - allowed_ciphers = malloc(all_ciphers_count*sizeof(SSLCipherSuite)); - if(!allowed_ciphers) { - Curl_safefree(all_ciphers); - failf(data, "SSL: Failed to allocate memory for allowed ciphers"); - return CURLE_OUT_OF_MEMORY; - } - err = SSLGetSupportedCiphers(ssl_ctx, all_ciphers, - &all_ciphers_count); - if(err != noErr) { - Curl_safefree(all_ciphers); - Curl_safefree(allowed_ciphers); - return CURLE_SSL_CIPHER; - } - for(i = 0UL ; i < all_ciphers_count ; i++) { #if CURL_BUILD_MAC - /* There's a known bug in early versions of Mountain Lion where ST's ECC - ciphers (cipher suite 0xC001 through 0xC032) simply do not work. - Work around the problem here by disabling those ciphers if we are - running in an affected version of OS X. */ - if(darwinver_maj == 12 && darwinver_min <= 3 && - all_ciphers[i] >= 0xC001 && all_ciphers[i] <= 0xC032) { - continue; + { + int maj = 0, min = 0; + GetDarwinVersionNumber(&maj, &min); + /* There is a known bug in early versions of Mountain Lion where ST's ECC + ciphers (cipher suite 0xC001 through 0xC032) simply do not work. + Work around the problem here by disabling those ciphers if we are + running in an affected version of OS X. */ + if(maj == 12 && min <= 3) { + size_t i = 0, j = 0; + for(; i < *len; i++) { + if(ciphers[i] >= 0xC001 && ciphers[i] <= 0xC032) + continue; + ciphers[j++] = ciphers[i]; + } + *len = j; } -#endif /* CURL_BUILD_MAC */ - if(is_cipher_suite_strong(all_ciphers[i])) { - allowed_ciphers[allowed_ciphers_count++] = all_ciphers[i]; + } +#endif + + return ciphers; +failed: + *len = 0; + Curl_safefree(ciphers); + return NULL; +} + +static CURLcode sectransp_set_default_ciphers(struct Curl_easy *data, + SSLContextRef ssl_ctx) +{ + CURLcode ret = CURLE_SSL_CIPHER; + size_t count = 0, i, j; + OSStatus err; + size_t supported_len; + SSLCipherSuite *ciphers = NULL; + + ciphers = sectransp_get_supported_ciphers(ssl_ctx, &supported_len); + if(!ciphers) { + failf(data, "SSL: Failed to get supported ciphers"); + goto failed; + } + + /* Intersect the ciphers supported by Secure Transport with the default + * ciphers, using the order of the former. */ + for(i = 0; i < supported_len; i++) { + for(j = 0; j < DEFAULT_CIPHERS_LEN; j++) { + if(default_ciphers[j] == ciphers[i]) { + ciphers[count++] = ciphers[i]; + break; + } } } - err = SSLSetEnabledCiphers(ssl_ctx, allowed_ciphers, - allowed_ciphers_count); - Curl_safefree(all_ciphers); - Curl_safefree(allowed_ciphers); + + if(count == 0) { + failf(data, "SSL: no supported default ciphers"); + goto failed; + } + + err = SSLSetEnabledCiphers(ssl_ctx, ciphers, count); if(err != noErr) { failf(data, "SSL: SSLSetEnabledCiphers() failed: OSStatus %d", err); - return CURLE_SSL_CIPHER; + goto failed; } - return CURLE_OK; + + ret = CURLE_OK; +failed: + Curl_safefree(ciphers); + return ret; } static CURLcode sectransp_set_selected_ciphers(struct Curl_easy *data, SSLContextRef ssl_ctx, const char *ciphers) { - size_t ciphers_count = 0; - const char *cipher_start = ciphers; - OSStatus err = noErr; - SSLCipherSuite selected_ciphers[NUM_OF_CIPHERS]; + CURLcode ret = CURLE_SSL_CIPHER; + size_t count = 0, i; + const char *ptr, *end; + OSStatus err; + size_t supported_len; + SSLCipherSuite *supported = NULL; + SSLCipherSuite *selected = NULL; - if(!ciphers) - return CURLE_OK; + supported = sectransp_get_supported_ciphers(ssl_ctx, &supported_len); + if(!supported) { + failf(data, "SSL: Failed to get supported ciphers"); + goto failed; + } - while(is_separator(*ciphers)) /* Skip initial separators. */ - ciphers++; - if(!*ciphers) - return CURLE_OK; + selected = malloc(supported_len * sizeof(SSLCipherSuite)); + if(!selected) { + failf(data, "SSL: Failed to allocate memory"); + goto failed; + } - cipher_start = ciphers; - while(*cipher_start && ciphers_count < NUM_OF_CIPHERS) { - bool cipher_found = FALSE; - 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++; - 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)) { - ++cipher_end; - } + for(ptr = ciphers; ptr[0] != '\0' && count < supported_len; ptr = end) { + uint16_t id = sectransp_cipher_suite_walk_str(&ptr, &end); - /* IANA cipher names start with the TLS_ or SSL_ prefix. - If the 4th symbol of the cipher is '_' we look for a cipher in the - table by its (TLS) name. - Otherwise, we try to match cipher by an alias. */ - if(cipher_start[3] == '_') { - tls_name = TRUE; + /* Check if cipher is supported */ + if(id) { + for(i = 0; i < supported_len && supported[i] != id; i++); + if(i == supported_len) + id = 0; } - /* 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(i = 1; i < NUM_OF_CIPHERS; ++i) { - const char *table_cipher_name = NULL; - if(tls_name) { - table_cipher_name = ciphertable[i].name; - } - else if(ciphertable[i].alias_name) { - table_cipher_name = ciphertable[i].alias_name; - } - else { - continue; - } - /* Compare a part of the string between separators with a cipher name - in the table and make sure we matched the whole cipher name */ - if(strncmp(cipher_start, table_cipher_name, cipher_len) == 0 - && table_cipher_name[cipher_len] == '\0') { - selected_ciphers[ciphers_count] = ciphertable[i].num; - ++ciphers_count; - cipher_found = TRUE; - break; - } - } - if(!cipher_found) { - /* It would be more human-readable if we print the wrong cipher name - but we don't want to allocate any additional memory and copy the name - into it, then add it into logs. - Also, we do not modify an original cipher list string. We just point - to positions where cipher starts and ends in the cipher list string. - 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 %zd and ending position %zd", - ciphers, - cipher_start - ciphers, - cipher_end - ciphers); - return CURLE_SSL_CIPHER; - } - if(*cipher_end) { - cipher_start = cipher_end + 1; + if(!id) { + if(ptr[0] != '\0') + infof(data, "SSL: unknown cipher in list: \"%.*s\"", (int) (end - ptr), + ptr); + continue; } - else { - break; + + /* No duplicates allowed (so selected cannot overflow) */ + for(i = 0; i < count && selected[i] != id; i++); + if(i < count) { + infof(data, "SSL: duplicate cipher in list: \"%.*s\"", (int) (end - ptr), + ptr); + continue; } + + selected[count++] = id; } - /* All cipher suites in the list are found. Report to logs as-is */ - infof(data, "SSL: Setting cipher suites list \"%s\"", ciphers); - err = SSLSetEnabledCiphers(ssl_ctx, selected_ciphers, ciphers_count); + if(count == 0) { + failf(data, "SSL: no supported cipher in list"); + goto failed; + } + + err = SSLSetEnabledCiphers(ssl_ctx, selected, count); if(err != noErr) { failf(data, "SSL: SSLSetEnabledCiphers() failed: OSStatus %d", err); - return CURLE_SSL_CIPHER; + goto failed; } - return CURLE_OK; + + ret = CURLE_OK; +failed: + Curl_safefree(supported); + Curl_safefree(selected); + return ret; +} + +static void sectransp_session_free(void *sessionid, size_t idsize) +{ + /* ST, as of iOS 5 and Mountain Lion, has no public method of deleting a + cached session ID inside the Security framework. There is a private + function that does this, but I do not want to have to explain to you why I + got your application rejected from the App Store due to the use of a + private API, so the best we can do is free up our own char array that we + created way back in sectransp_connect_step1... */ + (void)idsize; + Curl_safefree(sessionid); } static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, @@ -1653,6 +1088,7 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, const struct curl_blob *ssl_cert_blob = ssl_config->primary.cert_blob; char *ciphers; OSStatus err = noErr; + CURLcode result; #if CURL_BUILD_MAC int darwinver_maj = 0, darwinver_min = 0; @@ -1663,23 +1099,23 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, #endif /* CURL_BUILD_MAC */ #if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS - if(SSLCreateContext) { /* use the newer API if available */ + if(&SSLCreateContext) { /* use the newer API if available */ if(backend->ssl_ctx) CFRelease(backend->ssl_ctx); backend->ssl_ctx = SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType); if(!backend->ssl_ctx) { - failf(data, "SSL: couldn't create a context"); + failf(data, "SSL: could not create a context"); return CURLE_OUT_OF_MEMORY; } } else { - /* The old ST API does not exist under iOS, so don't compile it: */ + /* The old ST API does not exist under iOS, so do not compile it: */ #if CURL_SUPPORT_MAC_10_8 if(backend->ssl_ctx) (void)SSLDisposeContext(backend->ssl_ctx); err = SSLNewContext(false, &(backend->ssl_ctx)); if(err != noErr) { - failf(data, "SSL: couldn't create a context: OSStatus %d", err); + failf(data, "SSL: could not create a context: OSStatus %d", err); return CURLE_OUT_OF_MEMORY; } #endif /* CURL_SUPPORT_MAC_10_8 */ @@ -1689,19 +1125,20 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, (void)SSLDisposeContext(backend->ssl_ctx); err = SSLNewContext(false, &(backend->ssl_ctx)); if(err != noErr) { - failf(data, "SSL: couldn't create a context: OSStatus %d", err); + failf(data, "SSL: could not create a context: OSStatus %d", err); return CURLE_OUT_OF_MEMORY; } #endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */ backend->ssl_write_buffered_length = 0UL; /* reset buffered write length */ - /* check to see if we've been told to use an explicit SSL/TLS version */ + /* check to see if we have been told to use an explicit SSL/TLS version */ #if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS - if(SSLSetProtocolVersionMax) { + if(&SSLSetProtocolVersionMax) { 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 +#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && \ + defined(HAVE_BUILTIN_AVAILABLE) if(__builtin_available(macOS 10.13, iOS 11.0, *)) { (void)SSLSetProtocolVersionMax(backend->ssl_ctx, kTLSProtocol13); } @@ -1711,19 +1148,17 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, #else (void)SSLSetProtocolVersionMax(backend->ssl_ctx, kTLSProtocol12); #endif /* (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && - HAVE_BUILTIN_AVAILABLE == 1 */ + defined(HAVE_BUILTIN_AVAILABLE) */ break; case CURL_SSLVERSION_DEFAULT: case CURL_SSLVERSION_TLSv1_0: case CURL_SSLVERSION_TLSv1_1: case CURL_SSLVERSION_TLSv1_2: case CURL_SSLVERSION_TLSv1_3: - { - CURLcode result = set_ssl_version_min_max(cf, data); - if(result != CURLE_OK) - return result; - break; - } + result = set_ssl_version_min_max(cf, data); + if(result != CURLE_OK) + return result; + break; case CURL_SSLVERSION_SSLv3: case CURL_SSLVERSION_SSLv2: failf(data, "SSL versions not supported"); @@ -1755,12 +1190,10 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, case CURL_SSLVERSION_TLSv1_1: case CURL_SSLVERSION_TLSv1_2: case CURL_SSLVERSION_TLSv1_3: - { - CURLcode result = set_ssl_version_min_max(cf, data); - if(result != CURLE_OK) - return result; - break; - } + result = set_ssl_version_min_max(cf, data); + if(result != CURLE_OK) + return result; + break; case CURL_SSLVERSION_SSLv3: case CURL_SSLVERSION_SSLv2: failf(data, "SSL versions not supported"); @@ -1805,7 +1238,8 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, } #endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */ -#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAILABLE == 1 +#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && \ + defined(HAVE_BUILTIN_AVAILABLE) if(connssl->alpn) { if(__builtin_available(macOS 10.13.4, iOS 11, tvOS 11, *)) { struct alpn_proto_buf proto; @@ -1874,7 +1308,7 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, err = SecIdentityCopyCertificate(cert_and_key, &cert); if(err == noErr) { char *certp; - CURLcode result = CopyCertSubject(data, cert, &certp); + result = CopyCertSubject(data, cert, &certp); if(!result) { infof(data, "Client certificate: %s", certp); free(certp); @@ -1917,11 +1351,11 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, cert_showfilename_error); break; case errSecItemNotFound: - failf(data, "SSL: Can't find the certificate \"%s\" and its private " + failf(data, "SSL: cannot find the certificate \"%s\" and its private " "key in the Keychain.", cert_showfilename_error); break; default: - failf(data, "SSL: Can't load the certificate \"%s\" and its private " + failf(data, "SSL: cannot load the certificate \"%s\" and its private " "key: OSStatus %d", cert_showfilename_error, err); break; } @@ -1936,7 +1370,7 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, #if CURL_BUILD_MAC_10_6 || CURL_BUILD_IOS /* Snow Leopard introduced the SSLSetSessionOption() function, but due to a library bug with the way the kSSLSessionOptionBreakOnServerAuth flag - works, it doesn't work as expected under Snow Leopard, Lion or + works, it does not work as expected under Snow Leopard, Lion or Mountain Lion. So we need to call SSLSetEnableCertVerify() on those older cats in order to disable certificate validation if the user turned that off. @@ -1950,9 +1384,9 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, Darwin 15.x.x is El Capitan (10.11) */ #if CURL_BUILD_MAC - if(SSLSetSessionOption && darwinver_maj >= 13) { + if(&SSLSetSessionOption && darwinver_maj >= 13) { #else - if(SSLSetSessionOption) { + if(&SSLSetSessionOption) { #endif /* CURL_BUILD_MAC */ bool break_on_auth = !conn_config->verifypeer || ssl_cafile || ssl_cablob; @@ -1988,7 +1422,7 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, bool is_cert_file = (!is_cert_data) && is_file(ssl_cafile); if(!(is_cert_file || is_cert_data)) { - failf(data, "SSL: can't load CA certificate file %s", + failf(data, "SSL: cannot load CA certificate file %s", ssl_cafile ? ssl_cafile : "(blob memory)"); return CURLE_SSL_CACERT_BADFILE; } @@ -2019,21 +1453,21 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, ciphers = conn_config->cipher_list; if(ciphers) { - err = sectransp_set_selected_ciphers(data, backend->ssl_ctx, ciphers); + result = sectransp_set_selected_ciphers(data, backend->ssl_ctx, ciphers); } else { - err = sectransp_set_default_ciphers(data, backend->ssl_ctx); + result = sectransp_set_default_ciphers(data, backend->ssl_ctx); } - if(err != noErr) { + if(result != CURLE_OK) { failf(data, "SSL: Unable to set ciphers for SSL/TLS handshake. " - "Error code: %d", err); + "Error code: %d", (int)result); return CURLE_SSL_CIPHER; } #if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 /* We want to enable 1/n-1 when using a CBC cipher unless the user - specifically doesn't want us doing that: */ - if(SSLSetSessionOption) { + specifically does not want us doing that: */ + if(&SSLSetSessionOption) { SSLSetSessionOption(backend->ssl_ctx, kSSLSessionOptionSendOneByteRecord, !ssl_config->enable_beast); SSLSetSessionOption(backend->ssl_ctx, kSSLSessionOptionFalseStart, @@ -2041,14 +1475,14 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, } #endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */ - /* Check if there's a cached ID we can/should use here! */ - if(ssl_config->primary.sessionid) { + /* Check if there is a cached ID we can/should use here! */ + if(ssl_config->primary.cache_session) { char *ssl_sessionid; size_t ssl_sessionid_len; Curl_ssl_sessionid_lock(data); - if(!Curl_ssl_getsessionid(cf, data, (void **)&ssl_sessionid, - &ssl_sessionid_len)) { + if(!Curl_ssl_getsessionid(cf, data, &connssl->peer, + (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); @@ -2059,15 +1493,14 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, /* Informational message */ infof(data, "SSL reusing session ID"); } - /* If there isn't one, then let's make one up! This has to be done prior + /* If there is not 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:%d", ssl_cafile ? ssl_cafile : "(blob memory)", verifypeer, conn_config->verifyhost, connssl->peer.hostname, - connssl->port); + connssl->peer.port); ssl_sessionid_len = strlen(ssl_sessionid); err = SSLSetPeerID(backend->ssl_ctx, ssl_sessionid, ssl_sessionid_len); @@ -2077,13 +1510,12 @@ static CURLcode sectransp_connect_step1(struct Curl_cfilter *cf, return CURLE_SSL_CONNECT_ERROR; } - result = Curl_ssl_addsessionid(cf, data, ssl_sessionid, - ssl_sessionid_len, NULL); + result = Curl_ssl_set_sessionid(cf, data, &connssl->peer, ssl_sessionid, + ssl_sessionid_len, + sectransp_session_free); Curl_ssl_sessionid_unlock(data); - if(result) { - failf(data, "failed to store ssl session"); + if(result) return result; - } } } @@ -2110,7 +1542,7 @@ static long pem_to_der(const char *in, unsigned char **out, size_t *outlen) char *sep_start, *sep_end, *cert_start, *cert_end; size_t i, j, err; size_t len; - unsigned char *b64; + char *b64; /* Jump through the separators at the beginning of the certificate. */ sep_start = strstr(in, "-----"); @@ -2191,16 +1623,16 @@ static int read_cert(const char *file, unsigned char **out, size_t *outlen) return 0; } -static int append_cert_to_array(struct Curl_easy *data, - const unsigned char *buf, size_t buflen, - CFMutableArrayRef array) +static CURLcode append_cert_to_array(struct Curl_easy *data, + const unsigned char *buf, size_t buflen, + CFMutableArrayRef array) { char *certp; CURLcode result; SecCertificateRef cacert; CFDataRef certdata; - certdata = CFDataCreate(kCFAllocatorDefault, buf, buflen); + certdata = CFDataCreate(kCFAllocatorDefault, buf, (CFIndex)buflen); if(!certdata) { failf(data, "SSL: failed to allocate array for CA certificate"); return CURLE_OUT_OF_MEMORY; @@ -2237,7 +1669,8 @@ static CURLcode verify_cert_buf(struct Curl_cfilter *cf, const unsigned char *certbuf, size_t buflen, SSLContextRef ctx) { - int n = 0, rc; + int n = 0; + CURLcode rc; long res; unsigned char *der; size_t derlen, offset = 0; @@ -2408,7 +1841,7 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data, /* Result is returned to caller */ CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH; - /* if a path wasn't specified, don't pin */ + /* if a path was not specified, do not pin */ if(!pinnedpubkey) return CURLE_OK; @@ -2440,17 +1873,17 @@ static CURLcode pkp_pin_peer_pubkey(struct Curl_easy *data, #elif SECTRANSP_PINNEDPUBKEY_V2 { - OSStatus success; - 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 */ - pubkeylen = CFDataGetLength(publicKeyBits); + pubkeylen = (size_t)CFDataGetLength(publicKeyBits); pubkey = (unsigned char *)CFDataGetBytePtr(publicKeyBits); switch(pubkeylen) { @@ -2519,24 +1952,23 @@ static CURLcode sectransp_connect_step2(struct Curl_cfilter *cf, SSLCipherSuite cipher; SSLProtocol protocol = 0; - DEBUGASSERT(ssl_connect_2 == connssl->connecting_state - || ssl_connect_2_reading == connssl->connecting_state - || ssl_connect_2_writing == connssl->connecting_state); + DEBUGASSERT(ssl_connect_2 == connssl->connecting_state); DEBUGASSERT(backend); CURL_TRC_CF(data, cf, "connect_step2"); /* Here goes nothing: */ check_handshake: + connssl->io_need = CURL_SSL_IO_NEED_NONE; err = SSLHandshake(backend->ssl_ctx); if(err != noErr) { switch(err) { - case errSSLWouldBlock: /* they're not done with us yet */ - connssl->connecting_state = backend->ssl_direction ? - ssl_connect_2_writing : ssl_connect_2_reading; + case errSSLWouldBlock: /* they are not done with us yet */ + connssl->io_need = backend->ssl_direction ? + CURL_SSL_IO_NEED_SEND : CURL_SSL_IO_NEED_RECV; return CURLE_OK; - /* The below is errSSLServerAuthCompleted; it's not defined in + /* The below is errSSLServerAuthCompleted; it is not defined in Leopard's headers */ case -9841: if((conn_config->CAfile || conn_config->ca_info_blob) && @@ -2646,8 +2078,8 @@ static CURLcode sectransp_connect_step2(struct Curl_cfilter *cf, "authority"); break; - /* This error is raised if the server's cert didn't match the server's - host name: */ + /* This error is raised if the server's cert did not match the server's + hostname: */ case errSSLHostNameMismatch: failf(data, "SSL certificate peer verification failed, the " "certificate did not match \"%s\"\n", connssl->peer.dispname); @@ -2748,7 +2180,8 @@ static CURLcode sectransp_connect_step2(struct Curl_cfilter *cf, return CURLE_SSL_CONNECT_ERROR; } else { - /* we have been connected fine, we're not waiting for anything else. */ + char cipher_str[64]; + /* we have been connected fine, we are not waiting for anything else. */ connssl->connecting_state = ssl_connect_3; #ifdef SECTRANSP_PINNEDPUBKEY @@ -2766,33 +2199,30 @@ static CURLcode sectransp_connect_step2(struct Curl_cfilter *cf, /* Informational message */ (void)SSLGetNegotiatedCipher(backend->ssl_ctx, &cipher); (void)SSLGetNegotiatedProtocolVersion(backend->ssl_ctx, &protocol); + + sectransp_cipher_suite_get_str((uint16_t) cipher, cipher_str, + sizeof(cipher_str), true); switch(protocol) { case kSSLProtocol2: - infof(data, "SSL 2.0 connection using %s", - TLSCipherNameForNumber(cipher)); + infof(data, "SSL 2.0 connection using %s", cipher_str); break; case kSSLProtocol3: - infof(data, "SSL 3.0 connection using %s", - TLSCipherNameForNumber(cipher)); + infof(data, "SSL 3.0 connection using %s", cipher_str); break; case kTLSProtocol1: - infof(data, "TLS 1.0 connection using %s", - TLSCipherNameForNumber(cipher)); + infof(data, "TLS 1.0 connection using %s", cipher_str); break; #if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS case kTLSProtocol11: - infof(data, "TLS 1.1 connection using %s", - TLSCipherNameForNumber(cipher)); + infof(data, "TLS 1.1 connection using %s", cipher_str); break; case kTLSProtocol12: - infof(data, "TLS 1.2 connection using %s", - TLSCipherNameForNumber(cipher)); + infof(data, "TLS 1.2 connection using %s", cipher_str); break; #endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */ #if CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11 case kTLSProtocol13: - infof(data, "TLS 1.3 connection using %s", - TLSCipherNameForNumber(cipher)); + infof(data, "TLS 1.3 connection using %s", cipher_str); break; #endif /* CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11 */ default: @@ -2800,7 +2230,8 @@ static CURLcode sectransp_connect_step2(struct Curl_cfilter *cf, break; } -#if(CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && HAVE_BUILTIN_AVAILABLE == 1 +#if (CURL_BUILD_MAC_10_13 || CURL_BUILD_IOS_11) && \ + defined(HAVE_BUILTIN_AVAILABLE) if(connssl->alpn) { if(__builtin_available(macOS 10.13.4, iOS 11, tvOS 11, *)) { CFArrayRef alpnArr = NULL; @@ -2828,7 +2259,7 @@ static CURLcode sectransp_connect_step2(struct Curl_cfilter *cf, BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE); /* chosenProtocol is a reference to the string within alpnArr - and doesn't need to be freed separately */ + and does not need to be freed separately */ if(alpnArr) CFRelease(alpnArr); } @@ -2930,10 +2361,10 @@ static CURLcode collect_server_cert(struct Curl_cfilter *cf, /* SSLCopyPeerCertificates() is deprecated as of Mountain Lion. The function SecTrustGetCertificateAtIndex() is officially present in Lion, but it is unfortunately also present in Snow Leopard as - private API and doesn't work as expected. So we have to look for + private API and does not work as expected. So we have to look for a different symbol to make sure this code is only executed under Lion or later. */ - if(SecTrustCopyPublicKey) { + if(&SecTrustCopyPublicKey) { #pragma unused(server_certs) err = SSLCopyPeerTrust(backend->ssl_ctx, &trust); /* For some reason, SSLCopyPeerTrust() can return noErr and yet return @@ -3019,7 +2450,7 @@ sectransp_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data, } if(ssl_connect_1 == connssl->connecting_state) { - /* Find out how much more time we're allowed */ + /* Find out how much more time we are allowed */ const timediff_t timeout_ms = Curl_timeleft(data, NULL, TRUE); if(timeout_ms < 0) { @@ -3033,9 +2464,7 @@ sectransp_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data, return result; } - while(ssl_connect_2 == connssl->connecting_state || - ssl_connect_2_reading == connssl->connecting_state || - ssl_connect_2_writing == connssl->connecting_state) { + while(ssl_connect_2 == connssl->connecting_state) { /* check allowed time left */ const timediff_t timeout_ms = Curl_timeleft(data, NULL, TRUE); @@ -3046,14 +2475,13 @@ sectransp_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data, return CURLE_OPERATION_TIMEDOUT; } - /* 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 ssl is expecting something, check if it is available. */ + if(connssl->io_need) { - curl_socket_t writefd = ssl_connect_2_writing == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; - curl_socket_t readfd = ssl_connect_2_reading == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; + curl_socket_t writefd = (connssl->io_need & CURL_SSL_IO_NEED_SEND)? + sockfd:CURL_SOCKET_BAD; + curl_socket_t readfd = (connssl->io_need & CURL_SSL_IO_NEED_RECV)? + sockfd:CURL_SOCKET_BAD; what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd, nonblocking ? 0 : timeout_ms); @@ -3083,10 +2511,7 @@ sectransp_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data, * or epoll() will always have a valid fdset to wait on. */ result = sectransp_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))) + if(result || (nonblocking && (ssl_connect_2 == connssl->connecting_state))) return result; } /* repeat step2 until all transactions are done. */ @@ -3135,105 +2560,116 @@ static CURLcode sectransp_connect(struct Curl_cfilter *cf, return CURLE_OK; } -static void sectransp_close(struct Curl_cfilter *cf, struct Curl_easy *data) -{ - 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) - CFRelease(backend->ssl_ctx); -#if CURL_SUPPORT_MAC_10_8 - else - (void)SSLDisposeContext(backend->ssl_ctx); -#endif /* CURL_SUPPORT_MAC_10_8 */ -#else - (void)SSLDisposeContext(backend->ssl_ctx); -#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */ - backend->ssl_ctx = NULL; - } -} +static ssize_t sectransp_recv(struct Curl_cfilter *cf, + struct Curl_easy *data, + char *buf, + size_t buffersize, + CURLcode *curlcode); -static int sectransp_shutdown(struct Curl_cfilter *cf, - struct Curl_easy *data) +static CURLcode sectransp_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool send_shutdown, bool *done) { struct ssl_connect_data *connssl = cf->ctx; struct st_ssl_backend_data *backend = (struct st_ssl_backend_data *)connssl->backend; + CURLcode result = CURLE_OK; ssize_t nread; - int what; - int rc; - char buf[120]; - int loop = 10; /* avoid getting stuck */ - CURLcode result; + char buf[1024]; + size_t i; DEBUGASSERT(backend); + if(!backend->ssl_ctx || cf->shutdown) { + *done = TRUE; + goto out; + } - if(!backend->ssl_ctx) - return 0; - -#ifndef CURL_DISABLE_FTP - if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE) - return 0; -#endif - - sectransp_close(cf, data); - - rc = 0; + connssl->io_need = CURL_SSL_IO_NEED_NONE; + *done = FALSE; - what = SOCKET_READABLE(Curl_conn_cf_get_socket(cf, data), - SSL_SHUTDOWN_TIMEOUT); + if(send_shutdown && !backend->sent_shutdown) { + OSStatus err; - CURL_TRC_CF(data, cf, "shutdown"); - while(loop--) { - if(what < 0) { - /* anything that gets here is fatally bad */ - failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO); - rc = -1; - break; + CURL_TRC_CF(data, cf, "shutdown, send close notify"); + err = SSLClose(backend->ssl_ctx); + switch(err) { + case noErr: + backend->sent_shutdown = TRUE; + break; + case errSSLWouldBlock: + connssl->io_need = CURL_SSL_IO_NEED_SEND; + result = CURLE_OK; + goto out; + default: + CURL_TRC_CF(data, cf, "shutdown, error: %d", (int)err); + result = CURLE_SEND_ERROR; + goto out; } + } - if(!what) { /* timeout */ - failf(data, "SSL shutdown timeout"); - break; + for(i = 0; i < 10; ++i) { + if(!backend->sent_shutdown) { + nread = sectransp_recv(cf, data, buf, (int)sizeof(buf), &result); } - - /* 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 = Curl_conn_cf_recv(cf->next, data, buf, sizeof(buf), &result); - - if(nread < 0) { - failf(data, "read: %s", curl_easy_strerror(result)); - rc = -1; + else { + /* We would like to read the close notify from the server using + * secure transport, however SSLRead() no longer works after we + * sent the notify from our side. So, we just read from the + * underlying filter and hope it will end. */ + nread = Curl_conn_cf_recv(cf->next, data, buf, sizeof(buf), &result); } - + CURL_TRC_CF(data, cf, "shutdown read -> %zd, %d", nread, result); if(nread <= 0) break; + } - what = SOCKET_READABLE(Curl_conn_cf_get_socket(cf, data), 0); + if(nread > 0) { + /* still data coming in? */ + connssl->io_need = CURL_SSL_IO_NEED_RECV; + } + else if(nread == 0) { + /* We got the close notify alert and are done. */ + CURL_TRC_CF(data, cf, "shutdown done"); + *done = TRUE; + } + else if(result == CURLE_AGAIN) { + connssl->io_need = CURL_SSL_IO_NEED_RECV; + result = CURLE_OK; + } + else { + DEBUGASSERT(result); + CURL_TRC_CF(data, cf, "shutdown, error: %d", result); } - return rc; +out: + cf->shutdown = (result || *done); + return result; } -static void sectransp_session_free(void *ptr) +static void sectransp_close(struct Curl_cfilter *cf, struct Curl_easy *data) { - /* ST, as of iOS 5 and Mountain Lion, has no public method of deleting a - cached session ID inside the Security framework. There is a private - function that does this, but I don't want to have to explain to you why I - got your application rejected from the App Store due to the use of a - private API, so the best we can do is free up our own char array that we - created way back in sectransp_connect_step1... */ - Curl_safefree(ptr); + 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"); +#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS + if(&SSLCreateContext) + CFRelease(backend->ssl_ctx); +#if CURL_SUPPORT_MAC_10_8 + else + (void)SSLDisposeContext(backend->ssl_ctx); +#endif /* CURL_SUPPORT_MAC_10_8 */ +#else + (void)SSLDisposeContext(backend->ssl_ctx); +#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */ + backend->ssl_ctx = NULL; + } } static size_t sectransp_version(char *buffer, size_t size) @@ -3267,7 +2703,7 @@ static bool sectransp_data_pending(struct Curl_cfilter *cf, static CURLcode sectransp_random(struct Curl_easy *data UNUSED_PARAM, unsigned char *entropy, size_t length) { - /* arc4random_buf() isn't available on cats older than Lion, so let's + /* arc4random_buf() is not available on cats older than Lion, so let's do this manually for the benefit of the older cats. */ size_t i; u_int32_t random_number = 0; @@ -3298,7 +2734,7 @@ static CURLcode sectransp_sha256sum(const unsigned char *tmp, /* input */ static bool sectransp_false_start(void) { #if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 - if(SSLSetSessionOption) + if(&SSLSetSessionOption) return TRUE; #endif return FALSE; @@ -3325,7 +2761,7 @@ static ssize_t sectransp_send(struct Curl_cfilter *cf, Now, one could interpret that as "written to the socket," but actually, it returns the amount of data that was written to a buffer internal to - the SSLContextRef instead. So it's possible for SSLWrite() to return + the SSLContextRef instead. So it is possible for SSLWrite() to return errSSLWouldBlock and a number of bytes "written" because those bytes were encrypted and written to a buffer, not to the socket. @@ -3338,7 +2774,7 @@ static ssize_t sectransp_send(struct Curl_cfilter *cf, err = SSLWrite(backend->ssl_ctx, NULL, 0UL, &processed); switch(err) { case noErr: - /* processed is always going to be 0 because we didn't write to + /* processed is always going to be 0 because we did not write to the buffer, so return how much was written to the socket */ processed = backend->ssl_write_buffered_length; backend->ssl_write_buffered_length = 0UL; @@ -3353,7 +2789,7 @@ static ssize_t sectransp_send(struct Curl_cfilter *cf, } } else { - /* We've got new data to write: */ + /* We have got new data to write: */ err = SSLWrite(backend->ssl_ctx, mem, len, &processed); if(err != noErr) { switch(err) { @@ -3410,7 +2846,7 @@ static ssize_t sectransp_recv(struct Curl_cfilter *cf, *curlcode = CURLE_OK; return 0; - /* The below is errSSLPeerAuthCompleted; it's not defined in + /* The below is errSSLPeerAuthCompleted; it is not defined in Leopard's headers */ case -9841: if((conn_config->CAfile || conn_config->ca_info_blob) && @@ -3469,7 +2905,6 @@ const struct Curl_ssl Curl_ssl_sectransp = { sectransp_get_internals, /* get_internals */ sectransp_close, /* close_one */ Curl_none_close_all, /* close_all */ - sectransp_session_free, /* session_free */ Curl_none_set_engine, /* set_engine */ Curl_none_set_engine_default, /* set_engine_default */ Curl_none_engines_list, /* engines_list */ @@ -3477,7 +2912,6 @@ const struct Curl_ssl Curl_ssl_sectransp = { sectransp_sha256sum, /* sha256sum */ NULL, /* associate_connection */ NULL, /* disassociate_connection */ - NULL, /* free_multi_ssl_backend_data */ sectransp_recv, /* recv decrypted data */ sectransp_send, /* send data to encrypt */ }; diff --git a/lib/vtls/vtls.c b/lib/vtls/vtls.c index d13a3cb1b..e601f4b16 100644 --- a/lib/vtls/vtls.c +++ b/lib/vtls/vtls.c @@ -68,6 +68,8 @@ #include "curl_base64.h" #include "curl_printf.h" #include "inet_pton.h" +#include "connect.h" +#include "select.h" #include "strdup.h" /* The last #include files should be: */ @@ -103,7 +105,7 @@ static CURLcode blobdup(struct curl_blob **dest, DEBUGASSERT(dest); DEBUGASSERT(!*dest); if(src) { - /* only if there's data to dupe! */ + /* only if there is data to dupe! */ struct curl_blob *d; d = malloc(sizeof(struct curl_blob) + src->len); if(!d) @@ -152,7 +154,7 @@ static const struct alpn_spec *alpn_get_spec(int httpwant, bool use_alpn) (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. */ + Avoid "http/1.0" because some servers do not support it. */ return &ALPN_SPEC_H11; } #endif /* USE_SSL */ @@ -166,7 +168,7 @@ void Curl_ssl_easy_config_init(struct Curl_easy *data) */ data->set.ssl.primary.verifypeer = TRUE; data->set.ssl.primary.verifyhost = TRUE; - data->set.ssl.primary.sessionid = TRUE; /* session ID caching by default */ + data->set.ssl.primary.cache_session = TRUE; /* caching by default */ #ifndef CURL_DISABLE_PROXY data->set.proxy_ssl = data->set.ssl; #endif @@ -228,7 +230,7 @@ static bool clone_ssl_primary_config(struct ssl_primary_config *source, dest->verifypeer = source->verifypeer; dest->verifyhost = source->verifyhost; dest->verifystatus = source->verifystatus; - dest->sessionid = source->sessionid; + dest->cache_session = source->cache_session; dest->ssl_options = source->ssl_options; CLONE_BLOB(cert_blob); @@ -411,23 +413,6 @@ int Curl_ssl_init(void) return Curl_ssl->init(); } -#if defined(CURL_WITH_MULTI_SSL) -static const struct Curl_ssl Curl_ssl_multi; -#endif - -/* Global cleanup */ -void Curl_ssl_cleanup(void) -{ - if(init_ssl) { - /* only cleanup if we did a previous init */ - Curl_ssl->cleanup(); -#if defined(CURL_WITH_MULTI_SSL) - Curl_ssl = &Curl_ssl_multi; -#endif - init_ssl = FALSE; - } -} - static bool ssl_prefs_check(struct Curl_easy *data) { /* check for CURLOPT_SSLVERSION invalid parameter value */ @@ -453,7 +438,7 @@ static bool ssl_prefs_check(struct Curl_easy *data) } static struct ssl_connect_data *cf_ctx_new(struct Curl_easy *data, - const struct alpn_spec *alpn) + const struct alpn_spec *alpn) { struct ssl_connect_data *ctx; @@ -529,15 +514,15 @@ 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. + * Check if there is a session ID for the given connection in the cache, and if + * there is one suitable, it is provided. Returns TRUE when no entry matched. */ bool Curl_ssl_getsessionid(struct Curl_cfilter *cf, struct Curl_easy *data, + const struct ssl_peer *peer, void **ssl_sessionid, 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; @@ -549,9 +534,9 @@ bool Curl_ssl_getsessionid(struct Curl_cfilter *cf, if(!ssl_config) return TRUE; - DEBUGASSERT(ssl_config->primary.sessionid); + DEBUGASSERT(ssl_config->primary.cache_session); - if(!ssl_config->primary.sessionid || !data->state.session) + if(!ssl_config->primary.cache_session || !data->state.session) /* session ID reuse is disabled or the session cache has not been setup */ return TRUE; @@ -567,14 +552,15 @@ bool Curl_ssl_getsessionid(struct Curl_cfilter *cf, if(!check->sessionid) /* not session ID means blank entry */ continue; - if(strcasecompare(connssl->peer.hostname, check->name) && + if(strcasecompare(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) && + (peer->port == check->remote_port) && + (peer->transport == check->transport) && strcasecompare(cf->conn->handler->scheme, check->scheme) && match_ssl_primary_config(data, conn_config, &check->ssl_config)) { /* yes, we have a session ID! */ @@ -589,10 +575,9 @@ bool Curl_ssl_getsessionid(struct Curl_cfilter *cf, } DEBUGF(infof(data, "%s Session ID in cache for %s %s://%s:%d", - no_match? "Didn't find": "Found", + no_match? "Did not find": "Found", Curl_ssl_cf_is_proxy(cf) ? "proxy" : "host", - cf->conn->handler->scheme, connssl->peer.hostname, - connssl->port)); + cf->conn->handler->scheme, peer->hostname, peer->port)); return no_match; } @@ -605,9 +590,10 @@ void Curl_ssl_kill_session(struct Curl_ssl_session *session) /* defensive check */ /* free the ID the SSL-layer specific way */ - Curl_ssl->session_free(session->sessionid); + session->sessionid_free(session->sessionid, session->idsize); session->sessionid = NULL; + session->sessionid_free = NULL; session->age = 0; /* fresh */ Curl_free_primary_ssl_config(&session->ssl_config); @@ -634,60 +620,66 @@ void Curl_ssl_delsessionid(struct Curl_easy *data, void *ssl_sessionid) } } -/* - * Store session id in the session cache. The ID passed on to this function - * must already have been extracted and allocated the proper way for the SSL - * layer. Curl_XXXX_session_free() will be called to free/kill the session ID - * later on. - */ -CURLcode Curl_ssl_addsessionid(struct Curl_cfilter *cf, - struct Curl_easy *data, - void *ssl_sessionid, - size_t idsize, - bool *added) +CURLcode Curl_ssl_set_sessionid(struct Curl_cfilter *cf, + struct Curl_easy *data, + const struct ssl_peer *peer, + void *ssl_sessionid, + size_t idsize, + Curl_ssl_sessionid_dtor *sessionid_free_cb) { - 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; - char *clone_host; - char *clone_conn_to_host; + char *clone_host = NULL; + char *clone_conn_to_host = NULL; int conn_to_port; long *general_age; + void *old_sessionid; + size_t old_size; + CURLcode result = CURLE_OUT_OF_MEMORY; - if(added) - *added = FALSE; + DEBUGASSERT(ssl_sessionid); + DEBUGASSERT(sessionid_free_cb); - if(!data->state.session) + if(!data->state.session) { + sessionid_free_cb(ssl_sessionid, idsize); return CURLE_OK; + } + + if(!Curl_ssl_getsessionid(cf, data, peer, &old_sessionid, &old_size)) { + if((old_size == idsize) && + ((old_sessionid == ssl_sessionid) || + (idsize && !memcmp(old_sessionid, ssl_sessionid, idsize)))) { + /* the very same */ + sessionid_free_cb(ssl_sessionid, idsize); + return CURLE_OK; + } + Curl_ssl_delsessionid(data, old_sessionid); + } store = &data->state.session[0]; oldest_age = data->state.session[0].age; /* zero if unused */ + DEBUGASSERT(ssl_config->primary.cache_session); (void)ssl_config; - DEBUGASSERT(ssl_config->primary.sessionid); - clone_host = strdup(connssl->peer.hostname); + clone_host = strdup(peer->hostname); if(!clone_host) - return CURLE_OUT_OF_MEMORY; /* bail out */ + goto out; 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 */ - } + if(!clone_conn_to_host) + goto out; } - else - clone_conn_to_host = NULL; if(cf->conn->bits.conn_to_port) conn_to_port = cf->conn->conn_to_port; else conn_to_port = -1; - /* Now we should add the session ID and the host name to the cache, (remove + /* Now we should add the session ID and the hostname to the cache, (remove the oldest if necessary) */ /* If using shared SSL session, lock! */ @@ -713,42 +705,46 @@ CURLcode Curl_ssl_addsessionid(struct Curl_cfilter *cf, store = &data->state.session[i]; /* use this slot */ /* now init the session struct wisely */ + 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 */ + goto out; + } store->sessionid = ssl_sessionid; store->idsize = idsize; + store->sessionid_free = sessionid_free_cb; store->age = *general_age; /* set current age */ - /* free it if there's one already present */ + /* free it if there is one already present */ free(store->name); free(store->conn_to_host); - store->name = clone_host; /* clone host name */ - store->conn_to_host = clone_conn_to_host; /* clone connect to host name */ + store->name = clone_host; /* clone hostname */ + clone_host = NULL; + store->conn_to_host = clone_conn_to_host; /* clone connect to hostname */ + clone_conn_to_host = NULL; store->conn_to_port = conn_to_port; /* connect to port number */ /* port number */ - store->remote_port = connssl->port; + store->remote_port = peer->port; store->scheme = cf->conn->handler->scheme; + store->transport = peer->transport; - 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); - free(clone_conn_to_host); - return CURLE_OUT_OF_MEMORY; - } + result = CURLE_OK; - if(added) - *added = TRUE; - - DEBUGF(infof(data, "Added Session ID to cache for %s://%s:%d [%s]", - store->scheme, store->name, store->remote_port, - Curl_ssl_cf_is_proxy(cf) ? "PROXY" : "server")); +out: + free(clone_host); + free(clone_conn_to_host); + if(result) { + failf(data, "Failed to add Session ID to cache for %s://%s:%d [%s]", + store->scheme, store->name, store->remote_port, + Curl_ssl_cf_is_proxy(cf) ? "PROXY" : "server"); + sessionid_free_cb(ssl_sessionid, idsize); + return result; + } + CURL_TRC_CF(data, cf, "Added Session ID to cache for %s://%s:%d [%s]", + store->scheme, store->name, store->remote_port, + Curl_ssl_cf_is_proxy(cf) ? "PROXY" : "server"); return CURLE_OK; } -void Curl_free_multi_ssl_backend_data(struct multi_ssl_backend_data *mbackend) -{ - 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) { /* kill the session ID cache if not shared */ @@ -768,11 +764,12 @@ void Curl_ssl_close_all(struct Curl_easy *data) void Curl_ssl_adjust_pollset(struct Curl_cfilter *cf, struct Curl_easy *data, struct easy_pollset *ps) { - if(!cf->connected) { - struct ssl_connect_data *connssl = cf->ctx; + struct ssl_connect_data *connssl = cf->ctx; + + if(connssl->io_need) { 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) { + if(connssl->io_need & CURL_SSL_IO_NEED_SEND) { Curl_pollset_set_out_only(data, ps, sock); CURL_TRC_CF(data, cf, "adjust_pollset, POLLOUT fd=%" CURL_FORMAT_SOCKET_T, sock); @@ -990,7 +987,7 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data, (void)data; #endif - /* if a path wasn't specified, don't pin */ + /* if a path was not specified, do not pin */ if(!pinnedpubkey) return CURLE_OK; if(!pubkey || !pubkeylen) @@ -1038,7 +1035,7 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data, end_pos = strstr(begin_pos, ";sha256//"); /* * if there is an end_pos, null terminate, - * otherwise it'll go to the end of the original string + * otherwise it will go to the end of the original string */ if(end_pos) end_pos[0] = '\0'; @@ -1084,7 +1081,7 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data, /* * if the size of our certificate is bigger than the file - * size then it can't match + * size then it cannot match */ size = curlx_sotouz((curl_off_t) filesize); if(pubkeylen > size) @@ -1102,7 +1099,7 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data, if((int) fread(buf, size, 1, fp) != 1) break; - /* If the sizes are the same, it can't be base64 encoded, must be der */ + /* If the sizes are the same, it cannot be base64 encoded, must be der */ if(pubkeylen == size) { if(!memcmp(pubkey, buf, pubkeylen)) result = CURLE_OK; @@ -1110,18 +1107,18 @@ CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data, } /* - * Otherwise we will assume it's PEM and try to decode it + * Otherwise we will assume it is PEM and try to decode it * after placing null terminator */ buf[size] = '\0'; pem_read = pubkey_pem_to_der((const char *)buf, &pem_ptr, &pem_len); - /* if it wasn't read successfully, exit */ + /* if it was not read successfully, exit */ if(pem_read) break; /* - * if the size of our certificate doesn't match the size of - * the decoded file, they can't be the same, otherwise compare + * if the size of our certificate does not match the size of + * the decoded file, they cannot be the same, otherwise compare */ if(pubkeylen == pem_len && !memcmp(pubkey, pem_ptr, pubkeylen)) result = CURLE_OK; @@ -1163,12 +1160,18 @@ int Curl_none_init(void) void Curl_none_cleanup(void) { } -int Curl_none_shutdown(struct Curl_cfilter *cf UNUSED_PARAM, - struct Curl_easy *data UNUSED_PARAM) +CURLcode Curl_none_shutdown(struct Curl_cfilter *cf UNUSED_PARAM, + struct Curl_easy *data UNUSED_PARAM, + bool send_shutdown UNUSED_PARAM, + bool *done) { (void)data; (void)cf; - return 0; + (void)send_shutdown; + /* Every SSL backend should have a shutdown implementation. Until we + * have implemented that, we put this fake in place. */ + *done = TRUE; + return CURLE_OK; } int Curl_none_check_cxn(struct Curl_cfilter *cf, struct Curl_easy *data) @@ -1322,7 +1325,6 @@ static const struct Curl_ssl Curl_ssl_multi = { multissl_get_internals, /* get_internals */ multissl_close, /* close_one */ Curl_none_close_all, /* close_all */ - 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 */ @@ -1330,7 +1332,6 @@ static const struct Curl_ssl Curl_ssl_multi = { NULL, /* sha256sum */ NULL, /* associate_connection */ NULL, /* disassociate_connection */ - NULL, /* free_multi_ssl_backend_data */ multissl_recv_plain, /* recv decrypted data */ multissl_send_plain, /* send data to encrypt */ }; @@ -1340,8 +1341,6 @@ const struct Curl_ssl *Curl_ssl = &Curl_ssl_multi; #elif defined(USE_WOLFSSL) &Curl_ssl_wolfssl; -#elif defined(USE_SECTRANSP) - &Curl_ssl_sectransp; #elif defined(USE_GNUTLS) &Curl_ssl_gnutls; #elif defined(USE_MBEDTLS) @@ -1350,6 +1349,8 @@ const struct Curl_ssl *Curl_ssl = &Curl_ssl_rustls; #elif defined(USE_OPENSSL) &Curl_ssl_openssl; +#elif defined(USE_SECTRANSP) + &Curl_ssl_sectransp; #elif defined(USE_SCHANNEL) &Curl_ssl_schannel; #elif defined(USE_BEARSSL) @@ -1362,9 +1363,6 @@ static const struct Curl_ssl *available_backends[] = { #if defined(USE_WOLFSSL) &Curl_ssl_wolfssl, #endif -#if defined(USE_SECTRANSP) - &Curl_ssl_sectransp, -#endif #if defined(USE_GNUTLS) &Curl_ssl_gnutls, #endif @@ -1374,6 +1372,9 @@ static const struct Curl_ssl *available_backends[] = { #if defined(USE_OPENSSL) &Curl_ssl_openssl, #endif +#if defined(USE_SECTRANSP) + &Curl_ssl_sectransp, +#endif #if defined(USE_SCHANNEL) &Curl_ssl_schannel, #endif @@ -1386,6 +1387,19 @@ static const struct Curl_ssl *available_backends[] = { NULL }; +/* Global cleanup */ +void Curl_ssl_cleanup(void) +{ + if(init_ssl) { + /* only cleanup if we did a previous init */ + Curl_ssl->cleanup(); +#if defined(CURL_WITH_MULTI_SSL) + Curl_ssl = &Curl_ssl_multi; +#endif + init_ssl = FALSE; + } +} + static size_t multissl_version(char *buffer, size_t size) { static const struct Curl_ssl *selected; @@ -1533,14 +1547,14 @@ static void cf_close(struct Curl_cfilter *cf, struct Curl_easy *data) static ssl_peer_type get_peer_type(const char *hostname) { if(hostname && hostname[0]) { -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 struct in6_addr addr; #else struct in_addr addr; #endif if(Curl_inet_pton(AF_INET, hostname, &addr)) return CURL_SSL_PEER_IPV4; -#ifdef ENABLE_IPV6 +#ifdef USE_IPV6 else if(Curl_inet_pton(AF_INET6, hostname, &addr)) { return CURL_SSL_PEER_IPV6; } @@ -1549,16 +1563,16 @@ static ssl_peer_type get_peer_type(const char *hostname) return CURL_SSL_PEER_DNS; } -CURLcode Curl_ssl_peer_init(struct ssl_peer *peer, struct Curl_cfilter *cf) +CURLcode Curl_ssl_peer_init(struct ssl_peer *peer, struct Curl_cfilter *cf, + int transport) { - 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. + /* We need the hostname for SNI negotiation. Once handshaked, this remains + * the SNI hostname for the TLS connection. When the connection is reused, + * the settings in cf->conn might change. We keep a copy of the hostname we + * use for SNI. */ #ifndef CURL_DISABLE_PROXY if(Curl_ssl_cf_is_proxy(cf)) { @@ -1594,7 +1608,6 @@ CURLcode Curl_ssl_peer_init(struct ssl_peer *peer, struct Curl_cfilter *cf) } } - peer->sni = NULL; peer->type = get_peer_type(peer->hostname); if(peer->type == CURL_SSL_PEER_DNS && peer->hostname[0]) { /* not an IP address, normalize according to RCC 6066 ch. 3, @@ -1614,7 +1627,8 @@ CURLcode Curl_ssl_peer_init(struct ssl_peer *peer, struct Curl_cfilter *cf) } } - connssl->port = eport; + peer->port = eport; + peer->transport = transport; return CURLE_OK; } @@ -1667,7 +1681,7 @@ static CURLcode ssl_cf_connect(struct Curl_cfilter *cf, goto out; *done = FALSE; - result = Curl_ssl_peer_init(&connssl->peer, cf); + result = Curl_ssl_peer_init(&connssl->peer, cf, TRNSPRT_TCP); if(result) goto out; @@ -1742,17 +1756,34 @@ static ssize_t ssl_cf_recv(struct Curl_cfilter *cf, return nread; } -static void ssl_cf_adjust_pollset(struct Curl_cfilter *cf, - struct Curl_easy *data, - struct easy_pollset *ps) +static CURLcode ssl_cf_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool *done) { - struct cf_call_data save; + CURLcode result = CURLE_OK; + + *done = TRUE; + if(!cf->shutdown) { + struct cf_call_data save; - if(!cf->connected) { CF_DATA_SAVE(save, cf, data); - Curl_ssl->adjust_pollset(cf, data, ps); + result = Curl_ssl->shut_down(cf, data, TRUE, done); + CURL_TRC_CF(data, cf, "cf_shutdown -> %d, done=%d", result, *done); CF_DATA_RESTORE(cf, save); + cf->shutdown = (result || *done); } + return result; +} + +static void ssl_cf_adjust_pollset(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct easy_pollset *ps) +{ + struct cf_call_data save; + + 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, @@ -1842,6 +1873,7 @@ struct Curl_cftype Curl_cft_ssl = { ssl_cf_destroy, ssl_cf_connect, ssl_cf_close, + ssl_cf_shutdown, Curl_cf_def_get_host, ssl_cf_adjust_pollset, ssl_cf_data_pending, @@ -1857,11 +1889,12 @@ struct Curl_cftype Curl_cft_ssl = { struct Curl_cftype Curl_cft_ssl_proxy = { "SSL-PROXY", - CF_TYPE_SSL, + CF_TYPE_SSL|CF_TYPE_PROXY, CURL_LOG_LVL_NONE, ssl_cf_destroy, ssl_cf_connect, ssl_cf_close, + ssl_cf_shutdown, Curl_cf_def_get_host, ssl_cf_adjust_pollset, ssl_cf_data_pending, @@ -1973,10 +2006,10 @@ CURLcode Curl_cf_ssl_proxy_insert_after(struct Curl_cfilter *cf_at, #endif /* !CURL_DISABLE_PROXY */ -bool Curl_ssl_supports(struct Curl_easy *data, int option) +bool Curl_ssl_supports(struct Curl_easy *data, unsigned int ssl_option) { (void)data; - return (Curl_ssl->supports & option)? TRUE : FALSE; + return (Curl_ssl->supports & ssl_option)? TRUE : FALSE; } static struct Curl_cfilter *get_ssl_filter(struct Curl_cfilter *cf) @@ -2012,19 +2045,77 @@ void *Curl_ssl_get_internals(struct Curl_easy *data, int sockindex, return result; } +static CURLcode vtls_shutdown_blocking(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool send_shutdown, bool *done) +{ + struct ssl_connect_data *connssl = cf->ctx; + struct cf_call_data save; + CURLcode result = CURLE_OK; + timediff_t timeout_ms; + int what, loop = 10; + + if(cf->shutdown) { + *done = TRUE; + return CURLE_OK; + } + CF_DATA_SAVE(save, cf, data); + + *done = FALSE; + while(!result && !*done && loop--) { + timeout_ms = Curl_shutdown_timeleft(cf->conn, cf->sockindex, NULL); + + if(timeout_ms < 0) { + /* no need to continue if time is already up */ + failf(data, "SSL shutdown timeout"); + return CURLE_OPERATION_TIMEDOUT; + } + + result = Curl_ssl->shut_down(cf, data, send_shutdown, done); + if(result ||*done) + goto out; + + if(connssl->io_need) { + what = Curl_conn_cf_poll(cf, data, timeout_ms); + if(what < 0) { + /* fatal error */ + failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO); + result = CURLE_RECV_ERROR; + goto out; + } + else if(0 == what) { + /* timeout */ + failf(data, "SSL shutdown timeout"); + result = CURLE_OPERATION_TIMEDOUT; + goto out; + } + /* socket is readable or writable */ + } + } +out: + CF_DATA_RESTORE(cf, save); + cf->shutdown = (result || *done); + return result; +} + CURLcode Curl_ssl_cfilter_remove(struct Curl_easy *data, - int sockindex) + int sockindex, bool send_shutdown) { 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)) + bool done; + CURL_TRC_CF(data, cf, "shutdown and remove SSL, start"); + Curl_shutdown_start(data, sockindex, NULL); + result = vtls_shutdown_blocking(cf, data, send_shutdown, &done); + Curl_shutdown_clear(data, sockindex); + if(!result && !done) /* blocking failed? */ result = CURLE_SSL_SHUTDOWN_FAILED; Curl_conn_cf_discard_sub(head, cf, data, FALSE); + CURL_TRC_CF(data, cf, "shutdown and remove SSL, done -> %d", result); break; } } @@ -2033,12 +2124,7 @@ CURLcode Curl_ssl_cfilter_remove(struct Curl_easy *data, bool Curl_ssl_cf_is_proxy(struct Curl_cfilter *cf) { -#ifndef CURL_DISABLE_PROXY - return (cf->cft == &Curl_cft_ssl_proxy); -#else - (void)cf; - return FALSE; -#endif + return (cf->cft->flags & CF_TYPE_SSL) && (cf->cft->flags & CF_TYPE_PROXY); } struct ssl_config_data * diff --git a/lib/vtls/vtls.h b/lib/vtls/vtls.h index 744bbf8fd..8fe2bc7ce 100644 --- a/lib/vtls/vtls.h +++ b/lib/vtls/vtls.h @@ -37,6 +37,8 @@ struct Curl_ssl_session; #define SSLSUPP_HTTPS_PROXY (1<<4) /* supports access via HTTPS proxies */ #define SSLSUPP_TLS13_CIPHERSUITES (1<<5) /* supports TLS 1.3 ciphersuites */ #define SSLSUPP_CAINFO_BLOB (1<<6) +#define SSLSUPP_ECH (1<<7) +#define SSLSUPP_CA_CACHE (1<<8) #define ALPN_ACCEPTED "ALPN: server accepted " @@ -51,7 +53,6 @@ struct Curl_ssl_session; /* 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, @@ -107,7 +108,8 @@ 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); +CURLcode Curl_ssl_peer_init(struct ssl_peer *peer, + struct Curl_cfilter *cf, int transport); /** * Free all allocated data and reset peer information. */ @@ -179,8 +181,6 @@ bool Curl_ssl_cert_status_request(void); bool Curl_ssl_false_start(struct Curl_easy *data); -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, @@ -191,7 +191,7 @@ 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); + int sockindex, bool send_shutdown); #ifndef CURL_DISABLE_PROXY CURLcode Curl_cf_ssl_proxy_insert_after(struct Curl_cfilter *cf_at, @@ -203,7 +203,7 @@ CURLcode Curl_cf_ssl_proxy_insert_after(struct Curl_cfilter *cf_at, * 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); +bool Curl_ssl_supports(struct Curl_easy *data, unsigned int ssl_option); /** * Get the internal ssl instance (like OpenSSL's SSL*) from the filter @@ -250,7 +250,7 @@ extern struct Curl_cftype Curl_cft_ssl_proxy; #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_cfilter_remove(a,b,c) CURLE_OK #define Curl_ssl_cf_get_config(a,b) NULL #define Curl_ssl_cf_get_primary_config(a) NULL #endif diff --git a/lib/vtls/vtls_int.h b/lib/vtls/vtls_int.h index 0361fa95a..1472a0ca5 100644 --- a/lib/vtls/vtls_int.h +++ b/lib/vtls/vtls_int.h @@ -64,18 +64,35 @@ CURLcode Curl_alpn_set_negotiated(struct Curl_cfilter *cf, const unsigned char *proto, size_t proto_len); +/* enum for the nonblocking SSL connection state machine */ +typedef enum { + ssl_connect_1, + ssl_connect_2, + ssl_connect_3, + ssl_connect_done +} ssl_connect_state; + +typedef enum { + ssl_connection_none, + ssl_connection_negotiating, + ssl_connection_complete +} ssl_connection_state; + +#define CURL_SSL_IO_NEED_NONE (0) +#define CURL_SSL_IO_NEED_RECV (1<<0) +#define CURL_SSL_IO_NEED_SEND (1<<1) + /* 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 */ + ssl_connection_state state; + ssl_connect_state connecting_state; + int io_need; /* TLS signals special SEND/RECV needs */ BIT(use_alpn); /* if ALPN shall be used in handshake */ - BIT(reused_session); /* session-ID was reused for this */ BIT(peer_closed); /* peer has closed connection */ }; @@ -101,8 +118,8 @@ struct Curl_ssl { 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); + CURLcode (*shut_down)(struct Curl_cfilter *cf, struct Curl_easy *data, + bool send_shutdown, bool *done); bool (*data_pending)(struct Curl_cfilter *cf, const struct Curl_easy *data); @@ -117,15 +134,13 @@ struct Curl_ssl { struct Curl_easy *data, bool *done); - /* During handshake, adjust the pollset to include the socket - * for POLLOUT or POLLIN as needed. - * Mandatory. */ + /* During handshake/shutdown, 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); @@ -138,8 +153,6 @@ struct Curl_ssl { 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, @@ -152,7 +165,8 @@ 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); +CURLcode Curl_none_shutdown(struct Curl_cfilter *cf, struct Curl_easy *data, + bool send_shutdown, bool *done); 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); @@ -181,18 +195,25 @@ bool Curl_ssl_cf_is_proxy(struct Curl_cfilter *cf); */ bool Curl_ssl_getsessionid(struct Curl_cfilter *cf, struct Curl_easy *data, + const struct ssl_peer *peer, void **ssl_sessionid, size_t *idsize); /* set 0 if unknown */ -/* add a new session ID + +/* Set a TLS session ID for `peer`. Replaces an existing session ID if + * not already the very same. * Sessionid mutex must be locked (see Curl_ssl_sessionid_lock). + * Call takes ownership of `ssl_sessionid`, using `sessionid_free_cb` + * to deallocate it. Is called in all outcomes, either right away or + * later when the session cache is cleaned up. * 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); +CURLcode Curl_ssl_set_sessionid(struct Curl_cfilter *cf, + struct Curl_easy *data, + const struct ssl_peer *peer, + void *sessionid, + size_t sessionid_size, + Curl_ssl_sessionid_dtor *sessionid_free_cb); #include "openssl.h" /* OpenSSL versions */ #include "gtls.h" /* GnuTLS versions */ diff --git a/lib/vtls/wolfssl.c b/lib/vtls/wolfssl.c index 3187bb8df..2b467c935 100644 --- a/lib/vtls/wolfssl.c +++ b/lib/vtls/wolfssl.c @@ -74,6 +74,14 @@ #include "curl_memory.h" #include "memdebug.h" +#ifdef USE_ECH +# include "curl_base64.h" +# define ECH_ENABLED(__data__) \ + (__data__->set.tls_ech && \ + !(__data__->set.tls_ech & CURLECH_DISABLE)\ + ) +#endif /* USE_ECH */ + /* KEEP_PEER_CERT is a product of the presence of build time symbol OPENSSL_EXTRA without NO_CERTS, depending on the version. KEEP_PEER_CERT is in wolfSSL's settings.h, and the latter two are build time symbols in @@ -91,17 +99,11 @@ #undef USE_BIO_CHAIN #endif -struct wolfssl_ssl_backend_data { - WOLFSSL_CTX *ctx; - WOLFSSL *handle; - CURLcode io_result; /* result of last BIO cfilter operation */ -}; - #ifdef OPENSSL_EXTRA /* * Availability note: * The TLS 1.3 secret callback (wolfSSL_set_tls13_secret_cb) was added in - * WolfSSL 4.4.0, but requires the -DHAVE_SECRET_CALLBACK build option. If that + * wolfSSL 4.4.0, but requires the -DHAVE_SECRET_CALLBACK build option. If that * option is not set, then TLS 1.3 will not be logged. * For TLS 1.2 and before, we use wolfSSL_get_keys(). * SSL_get_client_random and wolfSSL_get_keys require OPENSSL_EXTRA @@ -210,7 +212,7 @@ static int do_file_type(const char *type) return -1; } -#ifdef HAVE_LIBOQS +#ifdef WOLFSSL_HAVE_KYBER struct group_name_map { const word16 group; const char *name; @@ -282,8 +284,8 @@ static int wolfssl_bio_cf_out_write(WOLFSSL_BIO *bio, { 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 wolfssl_ctx *backend = + (struct wolfssl_ctx *)connssl->backend; struct Curl_easy *data = CF_DATA_CURRENT(cf); ssize_t nwritten; CURLcode result = CURLE_OK; @@ -303,8 +305,8 @@ 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 wolfssl_ctx *backend = + (struct wolfssl_ctx *)connssl->backend; struct Curl_easy *data = CF_DATA_CURRENT(cf); ssize_t nread; CURLcode result = CURLE_OK; @@ -349,6 +351,263 @@ static void wolfssl_bio_cf_free_methods(void) #endif /* !USE_BIO_CHAIN */ +static CURLcode populate_x509_store(struct Curl_cfilter *cf, + struct Curl_easy *data, + X509_STORE *store, + struct wolfssl_ctx *wssl) +{ + 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 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; + struct ssl_config_data *ssl_config = Curl_ssl_cf_get_config(cf, data); + bool imported_native_ca = false; + +#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(wssl->ctx) != WOLFSSL_SUCCESS) { + infof(data, "error importing native CA store, continuing anyway"); + } + else { + imported_native_ca = true; + infof(data, "successfully imported native CA store"); + wssl->x509_store_setup = TRUE; + } + } +#endif /* !NO_FILESYSTEM */ + + /* load certificate blob */ + if(ca_info_blob) { + if(wolfSSL_CTX_load_verify_buffer(wssl->ctx, ca_info_blob->data, + (long)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 { + infof(data, "successfully imported CA certificate blob"); + wssl->x509_store_setup = TRUE; + } + } + +#ifndef NO_FILESYSTEM + /* load trusted cacert from file if not blob */ + + CURL_TRC_CF(data, cf, "populate_x509_store, path=%s, blob=%d", + ssl_cafile? ssl_cafile : "none", !!ca_info_blob); + if(!store) + return CURLE_OUT_OF_MEMORY; + + if((ssl_cafile || ssl_capath) && (!wssl->x509_store_setup)) { + int rc = + wolfSSL_CTX_load_verify_locations_ex(wssl->ctx, + ssl_cafile, + ssl_capath, + WOLFSSL_LOAD_FLAG_IGNORE_ERR); + if(SSL_SUCCESS != rc) { + if(conn_config->verifypeer) { + /* 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 { + /* Just continue with a warning if no strict certificate + verification is required. */ + infof(data, "error setting certificate verify locations," + " continuing anyway:"); + } + } + else { + /* Everything is fine. */ + infof(data, "successfully set certificate verify locations:"); + } + infof(data, " CAfile: %s", ssl_cafile ? ssl_cafile : "none"); + infof(data, " CApath: %s", ssl_capath ? ssl_capath : "none"); + } +#endif + (void)store; + wssl->x509_store_setup = TRUE; + return CURLE_OK; +} + +/* key to use at `multi->proto_hash` */ +#define MPROTO_WSSL_X509_KEY "tls:wssl:x509:share" + +struct wssl_x509_share { + char *CAfile; /* CAfile path used to generate X509 store */ + WOLFSSL_X509_STORE *store; /* cached X509 store or NULL if none */ + struct curltime time; /* when the cached store was created */ +}; + +static void wssl_x509_share_free(void *key, size_t key_len, void *p) +{ + struct wssl_x509_share *share = p; + DEBUGASSERT(key_len == (sizeof(MPROTO_WSSL_X509_KEY)-1)); + DEBUGASSERT(!memcmp(MPROTO_WSSL_X509_KEY, key, key_len)); + (void)key; + (void)key_len; + if(share->store) { + wolfSSL_X509_STORE_free(share->store); + } + free(share->CAfile); + free(share); +} + +static bool +cached_x509_store_expired(const struct Curl_easy *data, + const struct wssl_x509_share *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 wssl_x509_share *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; + struct wssl_x509_share *share; + WOLFSSL_X509_STORE *store = NULL; + + DEBUGASSERT(multi); + share = multi? Curl_hash_pick(&multi->proto_hash, + (void *)MPROTO_WSSL_X509_KEY, + sizeof(MPROTO_WSSL_X509_KEY)-1) : NULL; + if(share && share->store && + !cached_x509_store_expired(data, share) && + !cached_x509_store_different(cf, share)) { + store = share->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; + struct wssl_x509_share *share; + + DEBUGASSERT(multi); + if(!multi) + return; + share = Curl_hash_pick(&multi->proto_hash, + (void *)MPROTO_WSSL_X509_KEY, + sizeof(MPROTO_WSSL_X509_KEY)-1); + + if(!share) { + share = calloc(1, sizeof(*share)); + if(!share) + return; + if(!Curl_hash_add2(&multi->proto_hash, + (void *)MPROTO_WSSL_X509_KEY, + sizeof(MPROTO_WSSL_X509_KEY)-1, + share, wssl_x509_share_free)) { + free(share); + return; + } + } + + if(wolfSSL_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(share->store) { + X509_STORE_free(share->store); + free(share->CAfile); + } + + share->time = Curl_now(); + share->store = store; + share->CAfile = CAfile; + } +} + +CURLcode Curl_wssl_setup_x509_store(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct wolfssl_ctx *wssl) +{ + 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; + WOLFSSL_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 wolfSSL'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 = cache_criteria_met ? get_cached_x509_store(cf, data) : NULL; + if(cached_store && wolfSSL_X509_STORE_up_ref(cached_store)) { + wolfSSL_CTX_set_cert_store(wssl->ctx, cached_store); + } + else if(cache_criteria_met) { + /* wolfSSL's initial store in CTX is not shareable by default. + * Make a new one, suitable for adding to the cache. See #14278 */ + X509_STORE *store = wolfSSL_X509_STORE_new(); + if(!store) { + failf(data, "SSL: could not create a X509 store"); + return CURLE_OUT_OF_MEMORY; + } + wolfSSL_CTX_set_cert_store(wssl->ctx, store); + + result = populate_x509_store(cf, data, store, wssl); + if(!result) { + set_cached_x509_store(cf, data, store); + } + } + else { + /* We never share the CTX's store, use it. */ + X509_STORE *store = wolfSSL_CTX_get_cert_store(wssl->ctx); + result = populate_x509_store(cf, data, store, wssl); + } + + return result; +} + /* * This function loads all the client/CA certificates and CRLs. Setup the TLS * layer and do all necessary magic. @@ -358,18 +617,13 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) { char *ciphers, *curves; struct ssl_connect_data *connssl = cf->ctx; - struct wolfssl_ssl_backend_data *backend = - (struct wolfssl_ssl_backend_data *)connssl->backend; + struct wolfssl_ctx *backend = + (struct wolfssl_ctx *)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; +#ifdef WOLFSSL_HAVE_KYBER + word16 pqkem = 0; size_t idx = 0; #endif #ifdef HAVE_SNI @@ -378,8 +632,6 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) #else #define use_sni(x) Curl_nop_stmt #endif - bool imported_native_ca = false; - bool imported_ca_info_blob = false; DEBUGASSERT(backend); @@ -391,7 +643,7 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) return CURLE_SSL_CONNECT_ERROR; } - /* check to see if we've been told to use an explicit SSL/TLS version */ + /* check to see if we have been told to use an explicit SSL/TLS version */ switch(conn_config->version) { case CURL_SSLVERSION_DEFAULT: case CURL_SSLVERSION_TLSv1: @@ -409,20 +661,20 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) #if defined(WOLFSSL_ALLOW_TLSV10) && !defined(NO_OLD_TLS) req_method = TLSv1_client_method(); use_sni(TRUE); + break; #else failf(data, "wolfSSL does not support TLS 1.0"); return CURLE_NOT_BUILT_IN; #endif - break; case CURL_SSLVERSION_TLSv1_1: #ifndef NO_OLD_TLS req_method = TLSv1_1_client_method(); use_sni(TRUE); + break; #else failf(data, "wolfSSL does not support TLS 1.1"); return CURLE_NOT_BUILT_IN; #endif - break; case CURL_SSLVERSION_TLSv1_2: #ifndef WOLFSSL_NO_TLS12 req_method = TLSv1_2_client_method(); @@ -447,7 +699,7 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) } if(!req_method) { - failf(data, "SSL: couldn't create a method"); + failf(data, "SSL: could not create a method"); return CURLE_OUT_OF_MEMORY; } @@ -456,7 +708,7 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) backend->ctx = wolfSSL_CTX_new(req_method); if(!backend->ctx) { - failf(data, "SSL: couldn't create a context"); + failf(data, "SSL: could not create a context"); return CURLE_OUT_OF_MEMORY; } @@ -477,10 +729,11 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) && (wolfSSL_CTX_SetMinVersion(backend->ctx, WOLFSSL_TLSV1_3) != 1) #endif ) { - failf(data, "SSL: couldn't set the minimum protocol version"); + failf(data, "SSL: could not set the minimum protocol version"); return CURLE_SSL_CONNECT_ERROR; } #endif + FALLTHROUGH(); default: break; } @@ -497,15 +750,15 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) curves = conn_config->curves; if(curves) { -#ifdef HAVE_LIBOQS +#ifdef WOLFSSL_HAVE_KYBER for(idx = 0; gnm[idx].name != NULL; idx++) { if(strncmp(curves, gnm[idx].name, strlen(gnm[idx].name)) == 0) { - oqsAlg = gnm[idx].group; + pqkem = gnm[idx].group; break; } } - if(oqsAlg == 0) + if(pqkem == 0) #endif { if(!SSL_CTX_set1_curves_list(backend->ctx, curves)) { @@ -515,73 +768,10 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) } } -#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 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_cafile ? ssl_cafile : "none", - ssl_capath ? ssl_capath : "none"); - return CURLE_SSL_CACERT_BADFILE; - } - else { - /* Just continue with a warning if no strict certificate - verification is required. */ - infof(data, "error setting certificate verify locations," - " continuing anyway:"); - } - } - else { - /* Everything is fine. */ - infof(data, "successfully set certificate verify locations:"); - } - 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_config->primary.clientcert && ssl_config->key) { + if(ssl_config->primary.clientcert) { + char *key_file = ssl_config->key; int file_type = do_file_type(ssl_config->cert_type); if(file_type == WOLFSSL_FILETYPE_PEM) { @@ -605,8 +795,12 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) return CURLE_BAD_FUNCTION_ARGUMENT; } - file_type = do_file_type(ssl_config->key_type); - if(wolfSSL_CTX_use_PrivateKey_file(backend->ctx, ssl_config->key, + if(!key_file) + key_file = ssl_config->primary.clientcert; + else + file_type = do_file_type(ssl_config->key_type); + + if(wolfSSL_CTX_use_PrivateKey_file(backend->ctx, key_file, file_type) != 1) { failf(data, "unable to set private key"); return CURLE_SSL_CONNECT_ERROR; @@ -638,8 +832,14 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) /* give application a chance to interfere with SSL set up. */ if(data->set.ssl.fsslctx) { - CURLcode result = (*data->set.ssl.fsslctx)(data, backend->ctx, - data->set.ssl.fsslctxp); + CURLcode result; + if(!backend->x509_store_setup) { + result = Curl_wssl_setup_x509_store(cf, data, backend); + if(result) + return result; + } + result = (*data->set.ssl.fsslctx)(data, backend->ctx, + data->set.ssl.fsslctxp); if(result) { failf(data, "error signaled by ssl ctx callback"); return result; @@ -647,7 +847,7 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) } #ifdef NO_FILESYSTEM else if(conn_config->verifypeer) { - failf(data, "SSL: Certificates can't be loaded because wolfSSL was built" + failf(data, "SSL: Certificates cannot be loaded because wolfSSL was built" " with \"no filesystem\". Either disable peer verification" " (insecure) or if you are building an application with libcurl you" " can load certificates via CURLOPT_SSL_CTX_FUNCTION."); @@ -660,14 +860,14 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) wolfSSL_free(backend->handle); backend->handle = wolfSSL_new(backend->ctx); if(!backend->handle) { - failf(data, "SSL: couldn't create a handle"); + failf(data, "SSL: could not create a handle"); return CURLE_OUT_OF_MEMORY; } -#ifdef HAVE_LIBOQS - if(oqsAlg) { - if(wolfSSL_UseKeyShare(backend->handle, oqsAlg) != WOLFSSL_SUCCESS) { - failf(data, "unable to use oqs KEM"); +#ifdef WOLFSSL_HAVE_KYBER + if(pqkem) { + if(wolfSSL_UseKeyShare(backend->handle, pqkem) != WOLFSSL_SUCCESS) { + failf(data, "unable to use PQ KEM"); } } #endif @@ -679,7 +879,8 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) result = Curl_alpn_to_proto_str(&proto, connssl->alpn); if(result || - wolfSSL_UseALPN(backend->handle, (char *)proto.data, proto.len, + wolfSSL_UseALPN(backend->handle, + (char *)proto.data, (unsigned int)proto.len, WOLFSSL_ALPN_CONTINUE_ON_MISMATCH) != SSL_SUCCESS) { failf(data, "SSL: failed setting ALPN protocols"); return CURLE_SSL_CONNECT_ERROR; @@ -706,16 +907,17 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) } #endif /* HAVE_SECURE_RENEGOTIATION */ - /* Check if there's a cached ID we can/should use here! */ - if(ssl_config->primary.sessionid) { + /* Check if there is a cached ID we can/should use here! */ + if(ssl_config->primary.cache_session) { void *ssl_sessionid = NULL; Curl_ssl_sessionid_lock(data); - if(!Curl_ssl_getsessionid(cf, data, &ssl_sessionid, NULL)) { + if(!Curl_ssl_getsessionid(cf, data, &connssl->peer, + &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"); + infof(data, "cannot use session ID, going on without"); } else infof(data, "SSL reusing session ID"); @@ -723,6 +925,82 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) Curl_ssl_sessionid_unlock(data); } +#ifdef USE_ECH + if(ECH_ENABLED(data)) { + int trying_ech_now = 0; + + if(data->set.str[STRING_ECH_PUBLIC]) { + infof(data, "ECH: outername not (yet) supported with wolfSSL"); + return CURLE_SSL_CONNECT_ERROR; + } + if(data->set.tls_ech == CURLECH_GREASE) { + infof(data, "ECH: GREASE'd ECH not yet supported for wolfSSL"); + return CURLE_SSL_CONNECT_ERROR; + } + if(data->set.tls_ech & CURLECH_CLA_CFG + && data->set.str[STRING_ECH_CONFIG]) { + char *b64val = data->set.str[STRING_ECH_CONFIG]; + word32 b64len = 0; + + b64len = (word32) strlen(b64val); + if(b64len + && wolfSSL_SetEchConfigsBase64(backend->handle, b64val, b64len) + != WOLFSSL_SUCCESS) { + if(data->set.tls_ech & CURLECH_HARD) + return CURLE_SSL_CONNECT_ERROR; + } + else { + trying_ech_now = 1; + infof(data, "ECH: ECHConfig from command line"); + } + } + else { + struct Curl_dns_entry *dns = NULL; + + dns = Curl_fetch_addr(data, connssl->peer.hostname, connssl->peer.port); + if(!dns) { + infof(data, "ECH: requested but no DNS info available"); + if(data->set.tls_ech & CURLECH_HARD) + return CURLE_SSL_CONNECT_ERROR; + } + else { + struct Curl_https_rrinfo *rinfo = NULL; + + rinfo = dns->hinfo; + if(rinfo && rinfo->echconfiglist) { + unsigned char *ecl = rinfo->echconfiglist; + size_t elen = rinfo->echconfiglist_len; + + infof(data, "ECH: ECHConfig from DoH HTTPS RR"); + if(wolfSSL_SetEchConfigs(backend->handle, ecl, (word32) elen) != + WOLFSSL_SUCCESS) { + infof(data, "ECH: wolfSSL_SetEchConfigs failed"); + if(data->set.tls_ech & CURLECH_HARD) + return CURLE_SSL_CONNECT_ERROR; + } + else { + trying_ech_now = 1; + infof(data, "ECH: imported ECHConfigList of length %ld", elen); + } + } + else { + infof(data, "ECH: requested but no ECHConfig available"); + if(data->set.tls_ech & CURLECH_HARD) + return CURLE_SSL_CONNECT_ERROR; + } + Curl_resolv_unlock(data, dns); + } + } + + if(trying_ech_now + && SSL_set_min_proto_version(backend->handle, TLS1_3_VERSION) != 1) { + infof(data, "ECH: cannot force TLSv1.3 [ERROR]"); + return CURLE_SSL_CONNECT_ERROR; + } + + } +#endif /* USE_ECH */ + #ifdef USE_BIO_CHAIN { WOLFSSL_BIO *bio; @@ -748,17 +1026,39 @@ wolfssl_connect_step1(struct Curl_cfilter *cf, struct Curl_easy *data) } +static char *wolfssl_strerror(unsigned long error, char *buf, + unsigned long size) +{ + DEBUGASSERT(size); + *buf = '\0'; + + wolfSSL_ERR_error_string_n(error, buf, size); + + if(!*buf) { + const char *msg = error ? "Unknown error" : "No error"; + strncpy(buf, msg, size - 1); + buf[size - 1] = '\0'; + } + + return buf; +} + + static CURLcode wolfssl_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) { int ret = -1; struct ssl_connect_data *connssl = cf->ctx; - struct wolfssl_ssl_backend_data *backend = - (struct wolfssl_ssl_backend_data *)connssl->backend; + struct wolfssl_ctx *backend = + (struct wolfssl_ctx *)connssl->backend; struct ssl_primary_config *conn_config = Curl_ssl_cf_get_primary_config(cf); +#ifndef CURL_DISABLE_PROXY const char * const pinnedpubkey = Curl_ssl_cf_is_proxy(cf)? data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY]: data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#else + const char * const pinnedpubkey = data->set.str[STRING_SSL_PINNEDPUBLICKEY]; +#endif DEBUGASSERT(backend); @@ -772,6 +1072,16 @@ wolfssl_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) return CURLE_SSL_CONNECT_ERROR; } + 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; + result = Curl_wssl_setup_x509_store(cf, data, backend); + if(result) + return result; + } + + connssl->io_need = CURL_SSL_IO_NEED_NONE; ret = wolfSSL_connect(backend->handle); #ifdef OPENSSL_EXTRA @@ -799,15 +1109,14 @@ wolfssl_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) #endif /* OPENSSL_EXTRA */ if(ret != 1) { - char error_buffer[WOLFSSL_MAX_ERROR_SZ]; - int detail = wolfSSL_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; + connssl->io_need = CURL_SSL_IO_NEED_RECV; return CURLE_OK; } else if(SSL_ERROR_WANT_WRITE == detail) { - connssl->connecting_state = ssl_connect_2_writing; + connssl->io_need = CURL_SSL_IO_NEED_SEND; return CURLE_OK; } /* There is no easy way to override only the CN matching. @@ -852,13 +1161,40 @@ wolfssl_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) "continuing anyway"); } } +#endif +#ifdef USE_ECH + else if(-1 == detail) { + /* try access a retry_config ECHConfigList for tracing */ + byte echConfigs[1000]; + word32 echConfigsLen = 1000; + int rv = 0; + + /* this currently does not produce the retry_configs */ + rv = wolfSSL_GetEchConfigs(backend->handle, echConfigs, + &echConfigsLen); + if(rv != WOLFSSL_SUCCESS) { + infof(data, "Failed to get ECHConfigs"); + } + else { + char *b64str = NULL; + size_t blen = 0; + + rv = Curl_base64_encode((const char *)echConfigs, echConfigsLen, + &b64str, &blen); + if(!rv && b64str) + infof(data, "ECH: (not yet) retry_configs %s", b64str); + free(b64str); + } + } #endif else if(backend->io_result == CURLE_AGAIN) { return CURLE_OK; } else { + char error_buffer[256]; failf(data, "SSL_connect failed with error %d: %s", detail, - wolfSSL_ERR_error_string(detail, error_buffer)); + wolfssl_strerror((unsigned long)detail, error_buffer, + sizeof(error_buffer))); return CURLE_SSL_CONNECT_ERROR; } } @@ -898,6 +1234,7 @@ wolfssl_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) pinnedpubkey, (const unsigned char *)pubkey->header, (size_t)(pubkey->end - pubkey->header)); + wolfSSL_FreeX509(x509); if(result) { failf(data, "SSL: public key does not match pinned public key"); return result; @@ -942,53 +1279,39 @@ wolfssl_connect_step2(struct Curl_cfilter *cf, struct Curl_easy *data) } +static void wolfssl_session_free(void *sessionid, size_t idsize) +{ + (void)idsize; + wolfSSL_SESSION_free(sessionid); +} + + static CURLcode wolfssl_connect_step3(struct Curl_cfilter *cf, struct Curl_easy *data) { CURLcode result = CURLE_OK; struct ssl_connect_data *connssl = cf->ctx; - struct wolfssl_ssl_backend_data *backend = - (struct wolfssl_ssl_backend_data *)connssl->backend; + struct wolfssl_ctx *backend = + (struct wolfssl_ctx *)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_config->primary.sessionid) { - bool incache; - bool added = FALSE; - void *old_ssl_sessionid = NULL; + if(ssl_config->primary.cache_session) { /* 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(cf, data, &old_ssl_sessionid, NULL)); - if(incache) { - if(old_ssl_sessionid != our_ssl_sessionid) { - infof(data, "old SSL session ID is stale, removing"); - Curl_ssl_delsessionid(data, old_ssl_sessionid); - incache = FALSE; - } - } - - if(!incache) { - result = Curl_ssl_addsessionid(cf, data, our_ssl_sessionid, 0, NULL); - if(result) { - Curl_ssl_sessionid_unlock(data); - wolfSSL_SESSION_free(our_ssl_sessionid); - failf(data, "failed to store ssl session"); - return result; - } - else { - added = TRUE; - } - } + /* call takes ownership of `our_ssl_sessionid` */ + result = Curl_ssl_set_sessionid(cf, data, &connssl->peer, + our_ssl_sessionid, 0, + wolfssl_session_free); Curl_ssl_sessionid_unlock(data); - - if(!added) { - /* If the session info wasn't added to the cache, free our copy. */ - wolfSSL_SESSION_free(our_ssl_sessionid); + if(result) { + failf(data, "failed to store ssl session"); + return result; } } } @@ -1006,9 +1329,8 @@ static ssize_t wolfssl_send(struct Curl_cfilter *cf, CURLcode *curlcode) { 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]; + struct wolfssl_ctx *backend = + (struct wolfssl_ctx *)connssl->backend; int memlen = (len > (size_t)INT_MAX) ? INT_MAX : (int)len; int rc; @@ -1023,7 +1345,7 @@ static ssize_t wolfssl_send(struct Curl_cfilter *cf, switch(err) { case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_WRITE: - /* there's data pending, re-invoke SSL_write() */ + /* there is data pending, re-invoke SSL_write() */ CURL_TRC_CF(data, cf, "wolfssl_send(len=%zu) -> AGAIN", len); *curlcode = CURLE_AGAIN; return -1; @@ -1034,9 +1356,13 @@ static ssize_t wolfssl_send(struct Curl_cfilter *cf, return -1; } CURL_TRC_CF(data, cf, "wolfssl_send(len=%zu) -> %d, %d", len, rc, err); - failf(data, "SSL write: %s, errno %d", - wolfSSL_ERR_error_string(err, error_buffer), - SOCKERRNO); + { + char error_buffer[256]; + failf(data, "SSL write: %s, errno %d", + wolfssl_strerror((unsigned long)err, error_buffer, + sizeof(error_buffer)), + SOCKERRNO); + } *curlcode = CURLE_SEND_ERROR; return -1; } @@ -1045,23 +1371,111 @@ static ssize_t wolfssl_send(struct Curl_cfilter *cf, return rc; } +static CURLcode wolfssl_shutdown(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool send_shutdown, bool *done) +{ + struct ssl_connect_data *connssl = cf->ctx; + struct wolfssl_ctx *wctx = (struct wolfssl_ctx *)connssl->backend; + CURLcode result = CURLE_OK; + char buf[1024]; + int nread, err; + + DEBUGASSERT(wctx); + if(!wctx->handle || cf->shutdown) { + *done = TRUE; + goto out; + } + + connssl->io_need = CURL_SSL_IO_NEED_NONE; + *done = FALSE; + if(!(wolfSSL_get_shutdown(wctx->handle) & SSL_SENT_SHUTDOWN)) { + /* We have not started the shutdown from our side yet. Check + * if the server already sent us one. */ + ERR_clear_error(); + nread = wolfSSL_read(wctx->handle, buf, (int)sizeof(buf)); + err = wolfSSL_get_error(wctx->handle, nread); + if(!nread && err == SSL_ERROR_ZERO_RETURN) { + bool input_pending; + /* Yes, it did. */ + if(!send_shutdown) { + CURL_TRC_CF(data, cf, "SSL shutdown received, not sending"); + *done = TRUE; + goto out; + } + else if(!cf->next->cft->is_alive(cf->next, data, &input_pending)) { + /* Server closed the connection after its closy notify. It + * seems not interested to see our close notify, so do not + * send it. We are done. */ + CURL_TRC_CF(data, cf, "peer closed connection"); + connssl->peer_closed = TRUE; + *done = TRUE; + goto out; + } + } + } + + if(send_shutdown && wolfSSL_shutdown(wctx->handle) == 1) { + CURL_TRC_CF(data, cf, "SSL shutdown finished"); + *done = TRUE; + goto out; + } + else { + size_t i; + /* SSL should now have started the shutdown from our side. Since it + * was not complete, we are lacking the close notify from the server. */ + for(i = 0; i < 10; ++i) { + ERR_clear_error(); + nread = wolfSSL_read(wctx->handle, buf, (int)sizeof(buf)); + if(nread <= 0) + break; + } + err = wolfSSL_get_error(wctx->handle, nread); + switch(err) { + case SSL_ERROR_ZERO_RETURN: /* no more data */ + CURL_TRC_CF(data, cf, "SSL shutdown received"); + *done = TRUE; + break; + case SSL_ERROR_NONE: /* just did not get anything */ + 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, want receive"); + connssl->io_need = CURL_SSL_IO_NEED_RECV; + break; + case SSL_ERROR_WANT_WRITE: + CURL_TRC_CF(data, cf, "SSL shutdown send blocked"); + connssl->io_need = CURL_SSL_IO_NEED_SEND; + break; + default: { + char error_buffer[256]; + int detail = wolfSSL_get_error(wctx->handle, err); + CURL_TRC_CF(data, cf, "SSL shutdown, error: '%s'(%d)", + wolfssl_strerror((unsigned long)err, error_buffer, + sizeof(error_buffer)), + detail); + result = CURLE_RECV_ERROR; + break; + } + } + } + +out: + cf->shutdown = (result || *done); + return result; +} + static void wolfssl_close(struct Curl_cfilter *cf, struct Curl_easy *data) { struct ssl_connect_data *connssl = cf->ctx; - struct wolfssl_ssl_backend_data *backend = - (struct wolfssl_ssl_backend_data *)connssl->backend; + struct wolfssl_ctx *backend = + (struct wolfssl_ctx *)connssl->backend; (void) data; DEBUGASSERT(backend); 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)wolfSSL_read(backend->handle, buf, (int)sizeof(buf)); - if(!connssl->peer_closed) - (void)wolfSSL_shutdown(backend->handle); wolfSSL_free(backend->handle); backend->handle = NULL; } @@ -1077,9 +1491,8 @@ static ssize_t wolfssl_recv(struct Curl_cfilter *cf, CURLcode *curlcode) { 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]; + struct wolfssl_ctx *backend = + (struct wolfssl_ctx *)connssl->backend; int buffsize = (blen > (size_t)INT_MAX) ? INT_MAX : (int)blen; int nread; @@ -1101,7 +1514,7 @@ static ssize_t wolfssl_recv(struct Curl_cfilter *cf, case SSL_ERROR_NONE: case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_WRITE: - /* there's data pending, re-invoke wolfSSL_read() */ + /* there is data pending, re-invoke wolfSSL_read() */ CURL_TRC_CF(data, cf, "wolfssl_recv(len=%zu) -> AGAIN", blen); *curlcode = CURLE_AGAIN; return -1; @@ -1111,8 +1524,13 @@ static ssize_t wolfssl_recv(struct Curl_cfilter *cf, *curlcode = CURLE_AGAIN; return -1; } - failf(data, "SSL read: %s, errno %d", - wolfSSL_ERR_error_string(err, error_buffer), SOCKERRNO); + { + char error_buffer[256]; + failf(data, "SSL read: %s, errno %d", + wolfssl_strerror((unsigned long)err, error_buffer, + sizeof(error_buffer)), + SOCKERRNO); + } *curlcode = CURLE_RECV_ERROR; return -1; } @@ -1122,12 +1540,6 @@ static ssize_t wolfssl_recv(struct Curl_cfilter *cf, } -static void wolfssl_session_free(void *ptr) -{ - wolfSSL_SESSION_free(ptr); -} - - static size_t wolfssl_version(char *buffer, size_t size) { #if LIBWOLFSSL_VERSION_HEX >= 0x03006000 @@ -1165,43 +1577,18 @@ static bool wolfssl_data_pending(struct Curl_cfilter *cf, const struct Curl_easy *data) { struct ssl_connect_data *ctx = cf->ctx; - struct wolfssl_ssl_backend_data *backend; + struct wolfssl_ctx *backend; (void)data; DEBUGASSERT(ctx && ctx->backend); - backend = (struct wolfssl_ssl_backend_data *)ctx->backend; + backend = (struct wolfssl_ctx *)ctx->backend; if(backend->handle) /* SSL is in use */ return (0 != wolfSSL_pending(backend->handle)) ? TRUE : FALSE; else return FALSE; } - -/* - * 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_cfilter *cf, - struct Curl_easy *data) -{ - struct ssl_connect_data *ctx = cf->ctx; - struct wolfssl_ssl_backend_data *backend; - int retval = 0; - - (void)data; - DEBUGASSERT(ctx && ctx->backend); - - backend = (struct wolfssl_ssl_backend_data *)ctx->backend; - if(backend->handle) { - wolfSSL_ERR_clear_error(); - wolfSSL_free(backend->handle); - backend->handle = NULL; - } - return retval; -} - - static CURLcode wolfssl_connect_common(struct Curl_cfilter *cf, struct Curl_easy *data, @@ -1220,7 +1607,7 @@ wolfssl_connect_common(struct Curl_cfilter *cf, } if(ssl_connect_1 == connssl->connecting_state) { - /* Find out how much more time we're allowed */ + /* Find out how much more time we are allowed */ const timediff_t timeout_ms = Curl_timeleft(data, NULL, TRUE); if(timeout_ms < 0) { @@ -1234,9 +1621,7 @@ wolfssl_connect_common(struct Curl_cfilter *cf, return result; } - while(ssl_connect_2 == connssl->connecting_state || - ssl_connect_2_reading == connssl->connecting_state || - ssl_connect_2_writing == connssl->connecting_state) { + while(ssl_connect_2 == connssl->connecting_state) { /* check allowed time left */ const timediff_t timeout_ms = Curl_timeleft(data, NULL, TRUE); @@ -1247,14 +1632,13 @@ wolfssl_connect_common(struct Curl_cfilter *cf, return CURLE_OPERATION_TIMEDOUT; } - /* 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 ssl is expecting something, check if it is available. */ + if(connssl->io_need) { - curl_socket_t writefd = ssl_connect_2_writing == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; - curl_socket_t readfd = ssl_connect_2_reading == - connssl->connecting_state?sockfd:CURL_SOCKET_BAD; + curl_socket_t writefd = (connssl->io_need & CURL_SSL_IO_NEED_SEND)? + sockfd:CURL_SOCKET_BAD; + curl_socket_t readfd = (connssl->io_need & CURL_SSL_IO_NEED_RECV)? + sockfd:CURL_SOCKET_BAD; what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd, nonblocking?0:timeout_ms); @@ -1285,10 +1669,7 @@ wolfssl_connect_common(struct Curl_cfilter *cf, * have a valid fdset to wait on. */ result = wolfssl_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))) + if(result || (nonblocking && (ssl_connect_2 == connssl->connecting_state))) return result; } /* repeat step2 until all transactions are done. */ @@ -1368,15 +1749,15 @@ static CURLcode wolfssl_sha256sum(const unsigned char *tmp, /* input */ static void *wolfssl_get_internals(struct ssl_connect_data *connssl, CURLINFO info UNUSED_PARAM) { - struct wolfssl_ssl_backend_data *backend = - (struct wolfssl_ssl_backend_data *)connssl->backend; + struct wolfssl_ctx *backend = + (struct wolfssl_ctx *)connssl->backend; (void)info; DEBUGASSERT(backend); return backend->handle; } const struct Curl_ssl Curl_ssl_wolfssl = { - { CURLSSLBACKEND_WOLFSSL, "WolfSSL" }, /* info */ + { CURLSSLBACKEND_WOLFSSL, "wolfssl" }, /* info */ #ifdef KEEP_PEER_CERT SSLSUPP_PINNEDPUBKEY | @@ -1386,9 +1767,13 @@ const struct Curl_ssl Curl_ssl_wolfssl = { #endif SSLSUPP_CA_PATH | SSLSUPP_CAINFO_BLOB | - SSLSUPP_SSL_CTX, +#ifdef USE_ECH + SSLSUPP_ECH | +#endif + SSLSUPP_SSL_CTX | + SSLSUPP_CA_CACHE, - sizeof(struct wolfssl_ssl_backend_data), + sizeof(struct wolfssl_ctx), wolfssl_init, /* init */ wolfssl_cleanup, /* cleanup */ @@ -1404,7 +1789,6 @@ const struct Curl_ssl Curl_ssl_wolfssl = { wolfssl_get_internals, /* get_internals */ wolfssl_close, /* close_one */ Curl_none_close_all, /* close_all */ - wolfssl_session_free, /* session_free */ Curl_none_set_engine, /* set_engine */ Curl_none_set_engine_default, /* set_engine_default */ Curl_none_engines_list, /* engines_list */ @@ -1412,7 +1796,6 @@ const struct Curl_ssl Curl_ssl_wolfssl = { wolfssl_sha256sum, /* sha256sum */ NULL, /* associate_connection */ NULL, /* disassociate_connection */ - NULL, /* free_multi_ssl_backend_data */ wolfssl_recv, /* recv decrypted data */ wolfssl_send, /* send data to encrypt */ }; diff --git a/lib/vtls/wolfssl.h b/lib/vtls/wolfssl.h index a5ed84809..d75bdaa1e 100644 --- a/lib/vtls/wolfssl.h +++ b/lib/vtls/wolfssl.h @@ -26,8 +26,25 @@ #include "curl_setup.h" #ifdef USE_WOLFSSL +#include +#include +#include +#include + +#include "urldata.h" extern const struct Curl_ssl Curl_ssl_wolfssl; +struct wolfssl_ctx { + WOLFSSL_CTX *ctx; + WOLFSSL *handle; + CURLcode io_result; /* result of last BIO cfilter operation */ + BIT(x509_store_setup); /* x509 store has been set up */ +}; + +CURLcode Curl_wssl_setup_x509_store(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct wolfssl_ctx *wssl); + #endif /* USE_WOLFSSL */ #endif /* HEADER_CURL_WOLFSSL_H */ diff --git a/lib/vtls/x509asn1.c b/lib/vtls/x509asn1.c index da079361d..7f04af3b9 100644 --- a/lib/vtls/x509asn1.c +++ b/lib/vtls/x509asn1.c @@ -25,13 +25,15 @@ #include "curl_setup.h" #if defined(USE_GNUTLS) || defined(USE_WOLFSSL) || \ - defined(USE_SCHANNEL) || defined(USE_SECTRANSP) + defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \ + defined(USE_MBEDTLS) #if defined(USE_WOLFSSL) || defined(USE_SCHANNEL) #define WANT_PARSEX509 /* uses Curl_parseX509() */ #endif -#if defined(USE_GNUTLS) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) +#if defined(USE_GNUTLS) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \ + defined(USE_MBEDTLS) #define WANT_EXTRACT_CERTINFO /* uses Curl_extract_certinfo() */ #define WANT_PARSEX509 /* ... uses Curl_parseX509() */ #endif @@ -110,15 +112,16 @@ struct Curl_OID { }; /* ASN.1 OIDs. */ -static const char cnOID[] = "2.5.4.3"; /* Common name. */ -static const char sanOID[] = "2.5.29.17"; /* Subject alternative name. */ - static const struct Curl_OID OIDtable[] = { { "1.2.840.10040.4.1", "dsa" }, { "1.2.840.10040.4.3", "dsa-with-sha1" }, { "1.2.840.10045.2.1", "ecPublicKey" }, { "1.2.840.10045.3.0.1", "c2pnb163v1" }, { "1.2.840.10045.4.1", "ecdsa-with-SHA1" }, + { "1.2.840.10045.4.3.1", "ecdsa-with-SHA224" }, + { "1.2.840.10045.4.3.2", "ecdsa-with-SHA256" }, + { "1.2.840.10045.4.3.3", "ecdsa-with-SHA384" }, + { "1.2.840.10045.4.3.4", "ecdsa-with-SHA512" }, { "1.2.840.10046.2.1", "dhpublicnumber" }, { "1.2.840.113549.1.1.1", "rsaEncryption" }, { "1.2.840.113549.1.1.2", "md2WithRSAEncryption" }, @@ -132,7 +135,7 @@ static const struct Curl_OID OIDtable[] = { { "1.2.840.113549.2.2", "md2" }, { "1.2.840.113549.2.5", "md5" }, { "1.3.14.3.2.26", "sha1" }, - { cnOID, "CN" }, + { "2.5.4.3", "CN" }, { "2.5.4.4", "SN" }, { "2.5.4.5", "serialNumber" }, { "2.5.4.6", "C" }, @@ -153,13 +156,14 @@ static const struct Curl_OID OIDtable[] = { { "2.5.4.65", "pseudonym" }, { "1.2.840.113549.1.9.1", "emailAddress" }, { "2.5.4.72", "role" }, - { sanOID, "subjectAltName" }, + { "2.5.29.17", "subjectAltName" }, { "2.5.29.18", "issuerAltName" }, { "2.5.29.19", "basicConstraints" }, { "2.16.840.1.101.3.4.2.4", "sha224" }, { "2.16.840.1.101.3.4.2.1", "sha256" }, { "2.16.840.1.101.3.4.2.2", "sha384" }, { "2.16.840.1.101.3.4.2.3", "sha512" }, + { "1.2.840.113549.1.9.2", "unstructuredName" }, { (const char *) NULL, (const char *) NULL } }; @@ -371,7 +375,7 @@ utf8asn1str(struct dynbuf *to, int type, const char *from, const char *end) else { while(!result && (from < end)) { char buf[4]; /* decode buffer */ - int charsize = 1; + size_t charsize = 1; unsigned int wc = 0; switch(size) { @@ -389,7 +393,6 @@ utf8asn1str(struct dynbuf *to, int type, const char *from, const char *end) if(wc >= 0x00000800) { if(wc >= 0x00010000) { if(wc >= 0x00200000) { - free(buf); /* Invalid char. size for target encoding. */ return CURLE_WEIRD_SERVER_REPLY; } @@ -467,6 +470,8 @@ static CURLcode OID2str(struct dynbuf *store, const struct Curl_OID *op = searchOID(Curl_dyn_ptr(&buf)); if(op) result = Curl_dyn_add(store, op->textoid); + else + result = Curl_dyn_add(store, Curl_dyn_ptr(&buf)); Curl_dyn_free(&buf); } } @@ -489,7 +494,7 @@ static CURLcode GTime2str(struct dynbuf *store, /* Convert an ASN.1 Generalized time to a printable string. Return the dynamically allocated string, or NULL if an error occurs. */ - for(fracp = beg; fracp < end && *fracp >= '0' && *fracp <= '9'; fracp++) + for(fracp = beg; fracp < end && ISDIGIT(*fracp); fracp++) ; /* Get seconds digits. */ @@ -508,32 +513,44 @@ static CURLcode GTime2str(struct dynbuf *store, return CURLE_BAD_FUNCTION_ARGUMENT; } - /* Scan for timezone, measure fractional seconds. */ + /* timezone follows optional fractional seconds. */ tzp = fracp; - fracl = 0; + fracl = 0; /* no fractional seconds detected so far */ if(fracp < end && (*fracp == '.' || *fracp == ',')) { - fracp++; - do + /* Have fractional seconds, e.g. "[.,]\d+". How many? */ + fracp++; /* should be a digit char or BAD ARGUMENT */ + tzp = fracp; + while(tzp < end && ISDIGIT(*tzp)) tzp++; - while(tzp < end && *tzp >= '0' && *tzp <= '9'); - /* Strip leading zeroes in fractional seconds. */ - for(fracl = tzp - fracp - 1; fracl && fracp[fracl - 1] == '0'; fracl--) - ; + if(tzp == fracp) /* never looped, no digit after [.,] */ + return CURLE_BAD_FUNCTION_ARGUMENT; + fracl = tzp - fracp; /* number of fractional sec digits */ + DEBUGASSERT(fracl > 0); + /* Strip trailing zeroes in fractional seconds. + * May reduce fracl to 0 if only '0's are present. */ + while(fracl && fracp[fracl - 1] == '0') + fracl--; } /* Process timezone. */ - if(tzp >= end) - ; /* Nothing to do. */ + if(tzp >= end) { + tzp = ""; + tzl = 0; + } else if(*tzp == 'Z') { - tzp = " GMT"; - end = tzp + 4; + sep = " "; + tzp = "GMT"; + tzl = 3; + } + else if((*tzp == '+') || (*tzp == '-')) { + sep = " UTC"; + tzl = end - tzp; } else { sep = " "; - tzp++; + tzl = end - tzp; } - tzl = end - tzp; return Curl_dyn_addf(store, "%.4s-%.2s-%.2s %.2s:%.2s:%c%c%s%.*s%s%.*s", beg, beg + 4, beg + 6, @@ -542,6 +559,15 @@ static CURLcode GTime2str(struct dynbuf *store, sep, (int)tzl, tzp); } +#ifdef UNITTESTS +/* used by unit1656.c */ +CURLcode Curl_x509_GTime2str(struct dynbuf *store, + const char *beg, const char *end) +{ + return GTime2str(store, beg, end); +} +#endif + /* * Convert an ASN.1 UTC time to a printable string. * @@ -595,7 +621,7 @@ static CURLcode ASN1tostr(struct dynbuf *store, { CURLcode result = CURLE_BAD_FUNCTION_ARGUMENT; if(elem->constructed) - return CURLE_OK; /* No conversion of structured elements. */ + return result; /* No conversion of structured elements. */ if(!type) type = elem->tag; /* Type not forced: use element tag as type. */ @@ -689,6 +715,11 @@ static CURLcode encodeDN(struct dynbuf *store, struct Curl_asn1Element *dn) str = Curl_dyn_ptr(&temp); + if(!str) { + result = CURLE_BAD_FUNCTION_ARGUMENT; + goto error; + } + /* Encode delimiter. If attribute has a short uppercase name, delimiter is ", ". */ for(p3 = str; ISUPPER(*p3); p3++) @@ -956,7 +987,8 @@ static int do_pubkey(struct Curl_easy *data, int certnum, if(ssl_push_certinfo(data, certnum, "ECC Public Key", q)) return 1; } - return do_pubkey_field(data, certnum, "ecPublicKey", pubkey); + return do_pubkey_field(data, certnum, "ecPublicKey", pubkey) == CURLE_OK + ? 0 : 1; } /* Get the public key (single element). */ @@ -1220,6 +1252,8 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data, result = ssl_push_certinfo_dyn(data, certnum, "Cert", &out); done: + if(result) + failf(data, "Failed extracting certificate chain"); Curl_dyn_free(&out); return result; } diff --git a/lib/vtls/x509asn1.h b/lib/vtls/x509asn1.h index 23a67b828..5b48596c7 100644 --- a/lib/vtls/x509asn1.h +++ b/lib/vtls/x509asn1.h @@ -28,7 +28,8 @@ #include "curl_setup.h" #if defined(USE_GNUTLS) || defined(USE_WOLFSSL) || \ - defined(USE_SCHANNEL) || defined(USE_SECTRANSP) + defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \ + defined(USE_MBEDTLS) #include "cfilters.h" #include "urldata.h" @@ -76,5 +77,16 @@ CURLcode Curl_extract_certinfo(struct Curl_easy *data, int certnum, const char *beg, const char *end); CURLcode Curl_verifyhost(struct Curl_cfilter *cf, struct Curl_easy *data, const char *beg, const char *end); + +#ifdef UNITTESTS +#if defined(USE_GNUTLS) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \ + defined(USE_MBEDTLS) + +/* used by unit1656.c */ +CURLcode Curl_x509_GTime2str(struct dynbuf *store, + const char *beg, const char *end); +#endif +#endif + #endif /* USE_GNUTLS or USE_WOLFSSL or USE_SCHANNEL or USE_SECTRANSP */ #endif /* HEADER_CURL_X509ASN1_H */ diff --git a/lib/warnless.h b/lib/warnless.h index e5a02c8d9..6adf63a79 100644 --- a/lib/warnless.h +++ b/lib/warnless.h @@ -77,20 +77,6 @@ ssize_t curlx_write(int fd, const void *buf, size_t count); #endif /* _WIN32 */ -#if defined(__INTEL_COMPILER) && defined(__unix__) - -int curlx_FD_ISSET(int fd, fd_set *fdset); - -void curlx_FD_SET(int fd, fd_set *fdset); - -void curlx_FD_ZERO(fd_set *fdset); - -unsigned short curlx_htons(unsigned short usnum); - -unsigned short curlx_ntohs(unsigned short usnum); - -#endif /* __INTEL_COMPILER && __unix__ */ - #endif /* HEADER_CURL_WARNLESS_H */ #ifndef HEADER_CURL_WARNLESS_H_REDEFS diff --git a/lib/ws.c b/lib/ws.c index 5bc5eccc4..3c2d94950 100644 --- a/lib/ws.c +++ b/lib/ws.c @@ -102,7 +102,7 @@ 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 (unsigned char)WS_FRAMES[i].proto_opcode; } return 0; } @@ -114,23 +114,23 @@ static void ws_dec_info(struct ws_decoder *dec, struct Curl_easy *data, 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"); + CURL_TRC_WRITE(data, "websocket, decoded %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); + CURL_TRC_WRITE(data, "websocket, decoded %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); + CURL_TRC_WRITE(data, "websocket, decoded %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; } @@ -171,7 +171,7 @@ static CURLcode ws_dec_read_head(struct ws_decoder *dec, dec->head[0] = *inbuf; Curl_bufq_skip(inraw, 1); - dec->frame_flags = ws_frame_op2flags(dec->head[0]); + 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); @@ -277,9 +277,8 @@ static CURLcode ws_dec_pass_payload(struct ws_decoder *dec, 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); */ + CURL_TRC_WRITE(data, "websocket, passed %zd bytes payload, %" + CURL_FORMAT_CURL_OFF_T " remain", nwritten, remain); } return remain? CURLE_AGAIN : CURLE_OK; @@ -454,10 +453,12 @@ static CURLcode ws_cw_write(struct Curl_easy *data, pass_ctx.cw_type = type; result = ws_dec_pass(&ws->dec, data, &ctx->buf, ws_cw_dec_next, &pass_ctx); - if(result == CURLE_AGAIN) + if(result == CURLE_AGAIN) { /* insufficient amount of data, keep it for later. * we pretend to have written all since we have a copy */ + CURL_TRC_WRITE(data, "websocket, buffered incomplete frame head"); return CURLE_OK; + } else if(result) { infof(data, "WS: decode error %d", (int)result); return result; @@ -559,7 +560,7 @@ static ssize_t ws_enc_write_head(struct Curl_easy *data, return -1; } - opcode = ws_frame_flags2op(flags); + opcode = ws_frame_flags2op((int)flags); if(!opcode) { failf(data, "WS: provided flags not recognized '%x'", flags); *err = CURLE_SEND_ERROR; @@ -578,7 +579,7 @@ static ssize_t ws_enc_write_head(struct Curl_easy *data, enc->contfragment = FALSE; } else if(enc->contfragment) { - /* the previous fragment was not a final one and this isn't either, keep a + /* the previous fragment was not a final one and this is not either, keep a CONT opcode and no FIN bit */ firstbyte |= WSBIT_OPCODE_CONT; } @@ -717,8 +718,10 @@ CURLcode Curl_ws_request(struct Curl_easy *data, REQTYPE *req) if(result) return result; DEBUGASSERT(randlen < sizeof(keyval)); - if(randlen >= sizeof(keyval)) + if(randlen >= sizeof(keyval)) { + free(randstr); return CURLE_FAILED_INIT; + } strcpy(keyval, randstr); free(randstr); for(i = 0; !result && (i < sizeof(heads)/sizeof(heads[0])); i++) { @@ -949,10 +952,6 @@ CURL_EXTERN CURLcode curl_ws_recv(struct Curl_easy *data, void *buffer, *nread = 0; *metap = NULL; - /* get a download buffer */ - result = Curl_preconnect(data); - if(result) - return result; memset(&ctx, 0, sizeof(ctx)); ctx.data = data; @@ -1198,6 +1197,7 @@ const struct Curl_handler Curl_handler_ws = { ZERO_NULL, /* perform_getsock */ ws_disconnect, /* disconnect */ Curl_http_write_resp, /* write_resp */ + Curl_http_write_resp_hd, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_HTTP, /* defport */ @@ -1223,6 +1223,7 @@ const struct Curl_handler Curl_handler_wss = { ZERO_NULL, /* perform_getsock */ ws_disconnect, /* disconnect */ Curl_http_write_resp, /* write_resp */ + Curl_http_write_resp_hd, /* write_resp_hd */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_HTTPS, /* defport */ diff --git a/lib/ws.h b/lib/ws.h index baa77b442..398900cc3 100644 --- a/lib/ws.h +++ b/lib/ws.h @@ -57,7 +57,7 @@ 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 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 */ }; diff --git a/libcurl.def b/libcurl.def index c6c96063a..9bf9fcc95 100644 --- a/libcurl.def +++ b/libcurl.def @@ -64,6 +64,7 @@ curl_multi_socket_all curl_multi_strerror curl_multi_timeout curl_multi_wait +curl_multi_waitfds curl_multi_wakeup curl_mvaprintf curl_mvfprintf diff --git a/libcurl.pc.in b/libcurl.pc.in index 9db6b0f89..0eb180485 100644 --- a/libcurl.pc.in +++ b/libcurl.pc.in @@ -22,9 +22,6 @@ # ########################################################################### -# This should most probably benefit from getting a "Requires:" field added -# dynamically by configure. -# prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ @@ -36,6 +33,8 @@ Name: libcurl URL: https://curl.se/ Description: Library to transfer files with ftp, http, etc. Version: @CURLVERSION@ +Requires: @LIBCURL_PC_REQUIRES@ +Requires.private: @LIBCURL_PC_REQUIRES_PRIVATE@ Libs: -L${libdir} -lcurl @LIBCURL_NO_SHARED@ Libs.private: @LIBCURL_LIBS@ Cflags: -I${includedir} @CPPFLAG_CURL_STATICLIB@ diff --git a/ltmain.sh b/ltmain.sh index 9b12fbb7f..3846a5068 100644 --- a/ltmain.sh +++ b/ltmain.sh @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.7 Debian-2.4.7-5" +VERSION="2.4.7 Debian-2.4.7-7~deb12u1" 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-5 + version: $progname $scriptversion Debian-2.4.7-7~deb12u1 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` diff --git a/m4/.gitignore b/m4/.gitignore deleted file mode 100644 index 59602da5a..000000000 --- a/m4/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -libtool.m4 -libtool.m4.tmp -ltoptions.m4 -ltsugar.m4 -ltversion.m4 -lt~obsolete.m4 diff --git a/m4/curl-compilers.m4 b/m4/curl-compilers.m4 index 9a4547709..001e5f4aa 100644 --- a/m4/curl-compilers.m4 +++ b/m4/curl-compilers.m4 @@ -48,8 +48,12 @@ AC_DEFUN([CURL_CHECK_COMPILER], [ CURL_CHECK_COMPILER_INTEL_C CURL_CHECK_COMPILER_CLANG CURL_CHECK_COMPILER_GNU_C - CURL_CHECK_COMPILER_SGI_MIPSPRO_C - CURL_CHECK_COMPILER_SGI_MIPS_C + case $host in + mips-sgi-irix*) + CURL_CHECK_COMPILER_SGI_MIPSPRO_C + CURL_CHECK_COMPILER_SGI_MIPS_C + ;; + esac CURL_CHECK_COMPILER_SUNPRO_C CURL_CHECK_COMPILER_TINY_C # @@ -515,6 +519,7 @@ 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" + tmp_CFLAGS="$tmp_CFLAGS -Werror-implicit-function-declaration" ;; # DEC_C) @@ -893,10 +898,6 @@ AC_DEFUN([CURL_SET_COMPILER_WARNING_OPTS], [ tmp_CFLAGS="$tmp_CFLAGS -Wimplicit-fallthrough" # we have silencing markup for clang 10.0 and above only 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) @@ -1244,52 +1245,6 @@ squeeze() { ]) -dnl CURL_CHECK_CURLDEBUG -dnl ------------------------------------------------- -dnl Settings which depend on configure's curldebug given -dnl option, and other additional configure pre-requisites. -dnl Actually the curl debug memory tracking feature can -dnl only be used/enabled when libcurl is built as a static -dnl library or as a shared one on those systems on which -dnl shared libraries support undefined symbols. - -AC_DEFUN([CURL_CHECK_CURLDEBUG], [ - AC_REQUIRE([XC_LIBTOOL])dnl - AC_REQUIRE([CURL_SHFUNC_SQUEEZE])dnl - supports_curldebug="unknown" - if test "$want_curldebug" = "yes"; then - if test "x$enable_shared" != "xno" && - test "x$enable_shared" != "xyes"; then - AC_MSG_WARN([unknown enable_shared setting.]) - supports_curldebug="no" - fi - if test "x$enable_static" != "xno" && - test "x$enable_static" != "xyes"; then - AC_MSG_WARN([unknown enable_static setting.]) - supports_curldebug="no" - fi - if test "$supports_curldebug" != "no"; then - if test "$enable_shared" = "yes" && - test "x$xc_lt_shlib_use_no_undefined" = 'xyes'; then - supports_curldebug="no" - AC_MSG_WARN([shared library does not support undefined symbols.]) - fi - fi - fi - # - if test "$want_curldebug" = "yes"; then - AC_MSG_CHECKING([if curl debug memory tracking can be enabled]) - test "$supports_curldebug" = "no" || supports_curldebug="yes" - AC_MSG_RESULT([$supports_curldebug]) - if test "$supports_curldebug" = "no"; then - AC_MSG_WARN([cannot enable curl debug memory tracking.]) - want_curldebug="no" - fi - fi -]) - - - dnl CURL_CHECK_COMPILER_HALT_ON_ERROR dnl ------------------------------------------------- dnl Verifies if the compiler actually halts after the diff --git a/m4/curl-confopts.m4 b/m4/curl-confopts.m4 index 37f7d4c2e..5ee1632c6 100644 --- a/m4/curl-confopts.m4 +++ b/m4/curl-confopts.m4 @@ -561,13 +561,14 @@ AC_DEFUN([CURL_CHECK_LIB_ARES], [ if test "$want_ares" = "yes"; then dnl finally c-ares will be used AC_DEFINE(USE_ARES, 1, [Define to enable c-ares support]) + AC_DEFINE(CARES_NO_DEPRECATED, 1, [Ignore c-ares deprecation warnings]) AC_SUBST([USE_ARES], [1]) + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE libcares" curl_res_msg="c-ares" fi fi ]) - dnl CURL_CHECK_OPTION_NTLM_WB dnl ------------------------------------------------- dnl Verify if configure has been invoked with option @@ -631,6 +632,41 @@ AC_DEFUN([CURL_CHECK_NTLM_WB], [ fi ]) +dnl CURL_CHECK_OPTION_HTTPSRR +dnl ----------------------------------------------------- +dnl Verify whether configure has been invoked with option +dnl --enable-httpsrr or --disable-httpsrr, and set +dnl shell variable want_httpsrr as appropriate. + +AC_DEFUN([CURL_CHECK_OPTION_HTTPSRR], [ + AC_MSG_CHECKING([whether to enable HTTPSRR support]) + OPT_HTTPSRR="default" + AC_ARG_ENABLE(httpsrr, +AS_HELP_STRING([--enable-httpsrr],[Enable HTTPSRR support]) +AS_HELP_STRING([--disable-httpsrr],[Disable HTTPSRR support]), + OPT_HTTPSRR=$enableval) + case "$OPT_HTTPSRR" in + no) + dnl --disable-httpsrr option used + want_httpsrr="no" + curl_httpsrr_msg="no (--enable-httpsrr)" + AC_MSG_RESULT([no]) + ;; + default) + dnl configure option not specified + want_httpsrr="no" + curl_httpsrr_msg="no (--enable-httpsrr)" + AC_MSG_RESULT([no]) + ;; + *) + dnl --enable-httpsrr option used + want_httpsrr="yes" + curl_httpsrr_msg="enabled (--disable-httpsrr)" + AC_MSG_RESULT([yes]) + ;; + esac +]) + dnl CURL_CHECK_OPTION_ECH dnl ----------------------------------------------------- dnl Verify whether configure has been invoked with option @@ -661,8 +697,8 @@ AS_HELP_STRING([--disable-ech],[Disable ECH support]), dnl --enable-ech option used want_ech="yes" curl_ech_msg="enabled (--disable-ech)" - experimental="ech" AC_MSG_RESULT([yes]) ;; esac ]) +]) diff --git a/m4/curl-functions.m4 b/m4/curl-functions.m4 index 425d9f96f..c65120271 100644 --- a/m4/curl-functions.m4 +++ b/m4/curl-functions.m4 @@ -1019,249 +1019,6 @@ AC_DEFUN([CURL_CHECK_FUNC_FCNTL_O_NONBLOCK], [ fi ]) -dnl CURL_CHECK_FUNC_FGETXATTR -dnl ------------------------------------------------- -dnl Verify if fgetxattr 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_fgetxattr, then -dnl HAVE_FGETXATTR will be defined. - -AC_DEFUN([CURL_CHECK_FUNC_FGETXATTR], [ - AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl - # - tst_links_fgetxattr="unknown" - tst_proto_fgetxattr="unknown" - tst_compi_fgetxattr="unknown" - tst_allow_fgetxattr="unknown" - tst_nargs_fgetxattr="unknown" - # - AC_MSG_CHECKING([if fgetxattr can be linked]) - AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([fgetxattr]) - ],[ - AC_MSG_RESULT([yes]) - tst_links_fgetxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_links_fgetxattr="no" - ]) - # - if test "$tst_links_fgetxattr" = "yes"; then - AC_MSG_CHECKING([if fgetxattr is prototyped]) - AC_EGREP_CPP([fgetxattr],[ - $curl_includes_sys_xattr - ],[ - AC_MSG_RESULT([yes]) - tst_proto_fgetxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_proto_fgetxattr="no" - ]) - fi - # - if test "$tst_proto_fgetxattr" = "yes"; then - if test "$tst_nargs_fgetxattr" = "unknown"; then - AC_MSG_CHECKING([if fgetxattr takes 4 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != fgetxattr(0, 0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_fgetxattr="yes" - tst_nargs_fgetxattr="4" - ],[ - AC_MSG_RESULT([no]) - tst_compi_fgetxattr="no" - ]) - fi - if test "$tst_nargs_fgetxattr" = "unknown"; then - AC_MSG_CHECKING([if fgetxattr takes 6 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != fgetxattr(0, 0, 0, 0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_fgetxattr="yes" - tst_nargs_fgetxattr="6" - ],[ - AC_MSG_RESULT([no]) - tst_compi_fgetxattr="no" - ]) - fi - AC_MSG_CHECKING([if fgetxattr is compilable]) - if test "$tst_compi_fgetxattr" = "yes"; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - fi - # - if test "$tst_compi_fgetxattr" = "yes"; then - AC_MSG_CHECKING([if fgetxattr usage allowed]) - if test "x$curl_disallow_fgetxattr" != "xyes"; then - AC_MSG_RESULT([yes]) - tst_allow_fgetxattr="yes" - else - AC_MSG_RESULT([no]) - tst_allow_fgetxattr="no" - fi - fi - # - AC_MSG_CHECKING([if fgetxattr might be used]) - if test "$tst_links_fgetxattr" = "yes" && - test "$tst_proto_fgetxattr" = "yes" && - test "$tst_compi_fgetxattr" = "yes" && - test "$tst_allow_fgetxattr" = "yes"; then - AC_MSG_RESULT([yes]) - AC_DEFINE_UNQUOTED(HAVE_FGETXATTR, 1, - [Define to 1 if you have the fgetxattr function.]) - dnl AC_DEFINE_UNQUOTED(FGETXATTR_ARGS, $tst_nargs_fgetxattr, - dnl [Specifies the number of arguments to fgetxattr]) - # - if test "$tst_nargs_fgetxattr" -eq "4"; then - AC_DEFINE(HAVE_FGETXATTR_4, 1, [fgetxattr() takes 4 args]) - elif test "$tst_nargs_fgetxattr" -eq "6"; then - AC_DEFINE(HAVE_FGETXATTR_6, 1, [fgetxattr() takes 6 args]) - fi - # - curl_cv_func_fgetxattr="yes" - else - AC_MSG_RESULT([no]) - curl_cv_func_fgetxattr="no" - fi -]) - - -dnl CURL_CHECK_FUNC_FLISTXATTR -dnl ------------------------------------------------- -dnl Verify if flistxattr 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_flistxattr, then -dnl HAVE_FLISTXATTR will be defined. - -AC_DEFUN([CURL_CHECK_FUNC_FLISTXATTR], [ - AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl - # - tst_links_flistxattr="unknown" - tst_proto_flistxattr="unknown" - tst_compi_flistxattr="unknown" - tst_allow_flistxattr="unknown" - tst_nargs_flistxattr="unknown" - # - AC_MSG_CHECKING([if flistxattr can be linked]) - AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([flistxattr]) - ],[ - AC_MSG_RESULT([yes]) - tst_links_flistxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_links_flistxattr="no" - ]) - # - if test "$tst_links_flistxattr" = "yes"; then - AC_MSG_CHECKING([if flistxattr is prototyped]) - AC_EGREP_CPP([flistxattr],[ - $curl_includes_sys_xattr - ],[ - AC_MSG_RESULT([yes]) - tst_proto_flistxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_proto_flistxattr="no" - ]) - fi - # - if test "$tst_proto_flistxattr" = "yes"; then - if test "$tst_nargs_flistxattr" = "unknown"; then - AC_MSG_CHECKING([if flistxattr takes 3 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != flistxattr(0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_flistxattr="yes" - tst_nargs_flistxattr="3" - ],[ - AC_MSG_RESULT([no]) - tst_compi_flistxattr="no" - ]) - fi - if test "$tst_nargs_flistxattr" = "unknown"; then - AC_MSG_CHECKING([if flistxattr takes 4 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != flistxattr(0, 0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_flistxattr="yes" - tst_nargs_flistxattr="4" - ],[ - AC_MSG_RESULT([no]) - tst_compi_flistxattr="no" - ]) - fi - AC_MSG_CHECKING([if flistxattr is compilable]) - if test "$tst_compi_flistxattr" = "yes"; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - fi - # - if test "$tst_compi_flistxattr" = "yes"; then - AC_MSG_CHECKING([if flistxattr usage allowed]) - if test "x$curl_disallow_flistxattr" != "xyes"; then - AC_MSG_RESULT([yes]) - tst_allow_flistxattr="yes" - else - AC_MSG_RESULT([no]) - tst_allow_flistxattr="no" - fi - fi - # - AC_MSG_CHECKING([if flistxattr might be used]) - if test "$tst_links_flistxattr" = "yes" && - test "$tst_proto_flistxattr" = "yes" && - test "$tst_compi_flistxattr" = "yes" && - test "$tst_allow_flistxattr" = "yes"; then - AC_MSG_RESULT([yes]) - AC_DEFINE_UNQUOTED(HAVE_FLISTXATTR, 1, - [Define to 1 if you have the flistxattr function.]) - dnl AC_DEFINE_UNQUOTED(FLISTXATTR_ARGS, $tst_nargs_flistxattr, - dnl [Specifies the number of arguments to flistxattr]) - # - if test "$tst_nargs_flistxattr" -eq "3"; then - AC_DEFINE(HAVE_FLISTXATTR_3, 1, [flistxattr() takes 3 args]) - elif test "$tst_nargs_flistxattr" -eq "4"; then - AC_DEFINE(HAVE_FLISTXATTR_4, 1, [flistxattr() takes 4 args]) - fi - # - curl_cv_func_flistxattr="yes" - else - AC_MSG_RESULT([no]) - curl_cv_func_flistxattr="no" - fi -]) - dnl CURL_CHECK_FUNC_FREEADDRINFO dnl ------------------------------------------------- @@ -1359,128 +1116,6 @@ AC_DEFUN([CURL_CHECK_FUNC_FREEADDRINFO], [ ]) -dnl CURL_CHECK_FUNC_FREMOVEXATTR -dnl ------------------------------------------------- -dnl Verify if fremovexattr 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_fremovexattr, then -dnl HAVE_FREMOVEXATTR will be defined. - -AC_DEFUN([CURL_CHECK_FUNC_FREMOVEXATTR], [ - AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl - # - tst_links_fremovexattr="unknown" - tst_proto_fremovexattr="unknown" - tst_compi_fremovexattr="unknown" - tst_allow_fremovexattr="unknown" - tst_nargs_fremovexattr="unknown" - # - AC_MSG_CHECKING([if fremovexattr can be linked]) - AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([fremovexattr]) - ],[ - AC_MSG_RESULT([yes]) - tst_links_fremovexattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_links_fremovexattr="no" - ]) - # - if test "$tst_links_fremovexattr" = "yes"; then - AC_MSG_CHECKING([if fremovexattr is prototyped]) - AC_EGREP_CPP([fremovexattr],[ - $curl_includes_sys_xattr - ],[ - AC_MSG_RESULT([yes]) - tst_proto_fremovexattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_proto_fremovexattr="no" - ]) - fi - # - if test "$tst_proto_fremovexattr" = "yes"; then - if test "$tst_nargs_fremovexattr" = "unknown"; then - AC_MSG_CHECKING([if fremovexattr takes 2 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != fremovexattr(0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_fremovexattr="yes" - tst_nargs_fremovexattr="2" - ],[ - AC_MSG_RESULT([no]) - tst_compi_fremovexattr="no" - ]) - fi - if test "$tst_nargs_fremovexattr" = "unknown"; then - AC_MSG_CHECKING([if fremovexattr takes 3 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != fremovexattr(0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_fremovexattr="yes" - tst_nargs_fremovexattr="3" - ],[ - AC_MSG_RESULT([no]) - tst_compi_fremovexattr="no" - ]) - fi - AC_MSG_CHECKING([if fremovexattr is compilable]) - if test "$tst_compi_fremovexattr" = "yes"; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - fi - # - if test "$tst_compi_fremovexattr" = "yes"; then - AC_MSG_CHECKING([if fremovexattr usage allowed]) - if test "x$curl_disallow_fremovexattr" != "xyes"; then - AC_MSG_RESULT([yes]) - tst_allow_fremovexattr="yes" - else - AC_MSG_RESULT([no]) - tst_allow_fremovexattr="no" - fi - fi - # - AC_MSG_CHECKING([if fremovexattr might be used]) - if test "$tst_links_fremovexattr" = "yes" && - test "$tst_proto_fremovexattr" = "yes" && - test "$tst_compi_fremovexattr" = "yes" && - test "$tst_allow_fremovexattr" = "yes"; then - AC_MSG_RESULT([yes]) - AC_DEFINE_UNQUOTED(HAVE_FREMOVEXATTR, 1, - [Define to 1 if you have the fremovexattr function.]) - dnl AC_DEFINE_UNQUOTED(FREMOVEXATTR_ARGS, $tst_nargs_fremovexattr, - dnl [Specifies the number of arguments to fremovexattr]) - # - if test "$tst_nargs_fremovexattr" -eq "2"; then - AC_DEFINE(HAVE_FREMOVEXATTR_2, 1, [fremovexattr() takes 2 args]) - elif test "$tst_nargs_fremovexattr" -eq "3"; then - AC_DEFINE(HAVE_FREMOVEXATTR_3, 1, [fremovexattr() takes 3 args]) - fi - # - curl_cv_func_fremovexattr="yes" - else - AC_MSG_RESULT([no]) - curl_cv_func_fremovexattr="no" - fi -]) - - dnl CURL_CHECK_FUNC_FSETXATTR dnl ------------------------------------------------- dnl Verify if fsetxattr is available, prototyped, and @@ -1928,7 +1563,7 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO], [ #elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700) return 0; #else - force compilation error + #error force compilation error #endif ]]) ],[ @@ -2734,128 +2369,6 @@ AC_DEFUN([CURL_CHECK_FUNC_GETIFADDRS], [ ]) -dnl CURL_CHECK_FUNC_GETXATTR -dnl ------------------------------------------------- -dnl Verify if getxattr 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_getxattr, then -dnl HAVE_GETXATTR will be defined. - -AC_DEFUN([CURL_CHECK_FUNC_GETXATTR], [ - AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl - # - tst_links_getxattr="unknown" - tst_proto_getxattr="unknown" - tst_compi_getxattr="unknown" - tst_allow_getxattr="unknown" - tst_nargs_getxattr="unknown" - # - AC_MSG_CHECKING([if getxattr can be linked]) - AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([getxattr]) - ],[ - AC_MSG_RESULT([yes]) - tst_links_getxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_links_getxattr="no" - ]) - # - if test "$tst_links_getxattr" = "yes"; then - AC_MSG_CHECKING([if getxattr is prototyped]) - AC_EGREP_CPP([getxattr],[ - $curl_includes_sys_xattr - ],[ - AC_MSG_RESULT([yes]) - tst_proto_getxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_proto_getxattr="no" - ]) - fi - # - if test "$tst_proto_getxattr" = "yes"; then - if test "$tst_nargs_getxattr" = "unknown"; then - AC_MSG_CHECKING([if getxattr takes 4 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != getxattr(0, 0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_getxattr="yes" - tst_nargs_getxattr="4" - ],[ - AC_MSG_RESULT([no]) - tst_compi_getxattr="no" - ]) - fi - if test "$tst_nargs_getxattr" = "unknown"; then - AC_MSG_CHECKING([if getxattr takes 6 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != getxattr(0, 0, 0, 0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_getxattr="yes" - tst_nargs_getxattr="6" - ],[ - AC_MSG_RESULT([no]) - tst_compi_getxattr="no" - ]) - fi - AC_MSG_CHECKING([if getxattr is compilable]) - if test "$tst_compi_getxattr" = "yes"; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - fi - # - if test "$tst_compi_getxattr" = "yes"; then - AC_MSG_CHECKING([if getxattr usage allowed]) - if test "x$curl_disallow_getxattr" != "xyes"; then - AC_MSG_RESULT([yes]) - tst_allow_getxattr="yes" - else - AC_MSG_RESULT([no]) - tst_allow_getxattr="no" - fi - fi - # - AC_MSG_CHECKING([if getxattr might be used]) - if test "$tst_links_getxattr" = "yes" && - test "$tst_proto_getxattr" = "yes" && - test "$tst_compi_getxattr" = "yes" && - test "$tst_allow_getxattr" = "yes"; then - AC_MSG_RESULT([yes]) - AC_DEFINE_UNQUOTED(HAVE_GETXATTR, 1, - [Define to 1 if you have the getxattr function.]) - dnl AC_DEFINE_UNQUOTED(GETXATTR_ARGS, $tst_nargs_getxattr, - dnl [Specifies the number of arguments to getxattr]) - # - if test "$tst_nargs_getxattr" -eq "4"; then - AC_DEFINE(HAVE_GETXATTR_4, 1, [getxattr() takes 4 args]) - elif test "$tst_nargs_getxattr" -eq "6"; then - AC_DEFINE(HAVE_GETXATTR_6, 1, [getxattr() takes 6 args]) - fi - # - curl_cv_func_getxattr="yes" - else - AC_MSG_RESULT([no]) - curl_cv_func_getxattr="no" - fi -]) - - dnl CURL_CHECK_FUNC_GMTIME_R dnl ------------------------------------------------- dnl Verify if gmtime_r is available, prototyped, can @@ -3592,7 +3105,7 @@ AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET_FIONBIO], [ AC_LANG_PROGRAM([[ $curl_includes_winsock2 ]],[[ - int flags = 0; + unsigned long flags = 0; if(0 != ioctlsocket(0, FIONBIO, &flags)) return 1; ]]) @@ -3776,128 +3289,6 @@ AC_DEFUN([CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL_FIONBIO], [ ]) -dnl CURL_CHECK_FUNC_LISTXATTR -dnl ------------------------------------------------- -dnl Verify if listxattr 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_listxattr, then -dnl HAVE_LISTXATTR will be defined. - -AC_DEFUN([CURL_CHECK_FUNC_LISTXATTR], [ - AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl - # - tst_links_listxattr="unknown" - tst_proto_listxattr="unknown" - tst_compi_listxattr="unknown" - tst_allow_listxattr="unknown" - tst_nargs_listxattr="unknown" - # - AC_MSG_CHECKING([if listxattr can be linked]) - AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([listxattr]) - ],[ - AC_MSG_RESULT([yes]) - tst_links_listxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_links_listxattr="no" - ]) - # - if test "$tst_links_listxattr" = "yes"; then - AC_MSG_CHECKING([if listxattr is prototyped]) - AC_EGREP_CPP([listxattr],[ - $curl_includes_sys_xattr - ],[ - AC_MSG_RESULT([yes]) - tst_proto_listxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_proto_listxattr="no" - ]) - fi - # - if test "$tst_proto_listxattr" = "yes"; then - if test "$tst_nargs_listxattr" = "unknown"; then - AC_MSG_CHECKING([if listxattr takes 3 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != listxattr(0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_listxattr="yes" - tst_nargs_listxattr="3" - ],[ - AC_MSG_RESULT([no]) - tst_compi_listxattr="no" - ]) - fi - if test "$tst_nargs_listxattr" = "unknown"; then - AC_MSG_CHECKING([if listxattr takes 4 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != listxattr(0, 0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_listxattr="yes" - tst_nargs_listxattr="4" - ],[ - AC_MSG_RESULT([no]) - tst_compi_listxattr="no" - ]) - fi - AC_MSG_CHECKING([if listxattr is compilable]) - if test "$tst_compi_listxattr" = "yes"; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - fi - # - if test "$tst_compi_listxattr" = "yes"; then - AC_MSG_CHECKING([if listxattr usage allowed]) - if test "x$curl_disallow_listxattr" != "xyes"; then - AC_MSG_RESULT([yes]) - tst_allow_listxattr="yes" - else - AC_MSG_RESULT([no]) - tst_allow_listxattr="no" - fi - fi - # - AC_MSG_CHECKING([if listxattr might be used]) - if test "$tst_links_listxattr" = "yes" && - test "$tst_proto_listxattr" = "yes" && - test "$tst_compi_listxattr" = "yes" && - test "$tst_allow_listxattr" = "yes"; then - AC_MSG_RESULT([yes]) - AC_DEFINE_UNQUOTED(HAVE_LISTXATTR, 1, - [Define to 1 if you have the listxattr function.]) - dnl AC_DEFINE_UNQUOTED(LISTXATTR_ARGS, $tst_nargs_listxattr, - dnl [Specifies the number of arguments to listxattr]) - # - if test "$tst_nargs_listxattr" -eq "3"; then - AC_DEFINE(HAVE_LISTXATTR_3, 1, [listxattr() takes 3 args]) - elif test "$tst_nargs_listxattr" -eq "4"; then - AC_DEFINE(HAVE_LISTXATTR_4, 1, [listxattr() takes 4 args]) - fi - # - curl_cv_func_listxattr="yes" - else - AC_MSG_RESULT([no]) - curl_cv_func_listxattr="no" - fi -]) - - dnl CURL_CHECK_FUNC_MEMRCHR dnl ------------------------------------------------- dnl Verify if memrchr is available, prototyped, and @@ -4146,303 +3537,6 @@ AC_DEFUN([CURL_CHECK_FUNC_POLL], [ ]) -dnl CURL_CHECK_FUNC_REMOVEXATTR -dnl ------------------------------------------------- -dnl Verify if removexattr 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_removexattr, then -dnl HAVE_REMOVEXATTR will be defined. - -AC_DEFUN([CURL_CHECK_FUNC_REMOVEXATTR], [ - AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl - # - tst_links_removexattr="unknown" - tst_proto_removexattr="unknown" - tst_compi_removexattr="unknown" - tst_allow_removexattr="unknown" - tst_nargs_removexattr="unknown" - # - AC_MSG_CHECKING([if removexattr can be linked]) - AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([removexattr]) - ],[ - AC_MSG_RESULT([yes]) - tst_links_removexattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_links_removexattr="no" - ]) - # - if test "$tst_links_removexattr" = "yes"; then - AC_MSG_CHECKING([if removexattr is prototyped]) - AC_EGREP_CPP([removexattr],[ - $curl_includes_sys_xattr - ],[ - AC_MSG_RESULT([yes]) - tst_proto_removexattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_proto_removexattr="no" - ]) - fi - # - if test "$tst_proto_removexattr" = "yes"; then - if test "$tst_nargs_removexattr" = "unknown"; then - AC_MSG_CHECKING([if removexattr takes 2 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != removexattr(0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_removexattr="yes" - tst_nargs_removexattr="2" - ],[ - AC_MSG_RESULT([no]) - tst_compi_removexattr="no" - ]) - fi - if test "$tst_nargs_removexattr" = "unknown"; then - AC_MSG_CHECKING([if removexattr takes 3 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != removexattr(0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_removexattr="yes" - tst_nargs_removexattr="3" - ],[ - AC_MSG_RESULT([no]) - tst_compi_removexattr="no" - ]) - fi - AC_MSG_CHECKING([if removexattr is compilable]) - if test "$tst_compi_removexattr" = "yes"; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - fi - # - if test "$tst_compi_removexattr" = "yes"; then - AC_MSG_CHECKING([if removexattr usage allowed]) - if test "x$curl_disallow_removexattr" != "xyes"; then - AC_MSG_RESULT([yes]) - tst_allow_removexattr="yes" - else - AC_MSG_RESULT([no]) - tst_allow_removexattr="no" - fi - fi - # - AC_MSG_CHECKING([if removexattr might be used]) - if test "$tst_links_removexattr" = "yes" && - test "$tst_proto_removexattr" = "yes" && - test "$tst_compi_removexattr" = "yes" && - test "$tst_allow_removexattr" = "yes"; then - AC_MSG_RESULT([yes]) - AC_DEFINE_UNQUOTED(HAVE_REMOVEXATTR, 1, - [Define to 1 if you have the removexattr function.]) - dnl AC_DEFINE_UNQUOTED(REMOVEXATTR_ARGS, $tst_nargs_removexattr, - dnl [Specifies the number of arguments to removexattr]) - # - if test "$tst_nargs_removexattr" -eq "2"; then - AC_DEFINE(HAVE_REMOVEXATTR_2, 1, [removexattr() takes 2 args]) - elif test "$tst_nargs_removexattr" -eq "3"; then - AC_DEFINE(HAVE_REMOVEXATTR_3, 1, [removexattr() takes 3 args]) - fi - # - curl_cv_func_removexattr="yes" - else - AC_MSG_RESULT([no]) - curl_cv_func_removexattr="no" - fi -]) - - -dnl CURL_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK -dnl ------------------------------------------------- -dnl Verify if setsockopt with the SO_NONBLOCK command is -dnl available, can be compiled, and seems to work. If -dnl all of these are true, then HAVE_SETSOCKOPT_SO_NONBLOCK -dnl will be defined. - -AC_DEFUN([CURL_CHECK_FUNC_SETSOCKOPT_SO_NONBLOCK], [ - # - tst_compi_setsockopt_so_nonblock="unknown" - tst_allow_setsockopt_so_nonblock="unknown" - # - if test "$curl_cv_func_setsockopt" = "yes"; then - AC_MSG_CHECKING([if setsockopt SO_NONBLOCK is compilable]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_winsock2 - $curl_includes_bsdsocket - $curl_includes_sys_socket - ]],[[ - if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_setsockopt_so_nonblock="yes" - ],[ - AC_MSG_RESULT([no]) - tst_compi_setsockopt_so_nonblock="no" - ]) - fi - # - if test "$tst_compi_setsockopt_so_nonblock" = "yes"; then - AC_MSG_CHECKING([if setsockopt SO_NONBLOCK usage allowed]) - if test "x$curl_disallow_setsockopt_so_nonblock" != "xyes"; then - AC_MSG_RESULT([yes]) - tst_allow_setsockopt_so_nonblock="yes" - else - AC_MSG_RESULT([no]) - tst_allow_setsockopt_so_nonblock="no" - fi - fi - # - AC_MSG_CHECKING([if setsockopt SO_NONBLOCK might be used]) - if test "$tst_compi_setsockopt_so_nonblock" = "yes" && - test "$tst_allow_setsockopt_so_nonblock" = "yes"; then - AC_MSG_RESULT([yes]) - AC_DEFINE_UNQUOTED(HAVE_SETSOCKOPT_SO_NONBLOCK, 1, - [Define to 1 if you have a working setsockopt SO_NONBLOCK function.]) - curl_cv_func_setsockopt_so_nonblock="yes" - else - AC_MSG_RESULT([no]) - curl_cv_func_setsockopt_so_nonblock="no" - fi -]) - - -dnl CURL_CHECK_FUNC_SETXATTR -dnl ------------------------------------------------- -dnl Verify if setxattr 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_setxattr, then -dnl HAVE_SETXATTR will be defined. - -AC_DEFUN([CURL_CHECK_FUNC_SETXATTR], [ - AC_REQUIRE([CURL_INCLUDES_SYS_XATTR])dnl - # - tst_links_setxattr="unknown" - tst_proto_setxattr="unknown" - tst_compi_setxattr="unknown" - tst_allow_setxattr="unknown" - tst_nargs_setxattr="unknown" - # - AC_MSG_CHECKING([if setxattr can be linked]) - AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([setxattr]) - ],[ - AC_MSG_RESULT([yes]) - tst_links_setxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_links_setxattr="no" - ]) - # - if test "$tst_links_setxattr" = "yes"; then - AC_MSG_CHECKING([if setxattr is prototyped]) - AC_EGREP_CPP([setxattr],[ - $curl_includes_sys_xattr - ],[ - AC_MSG_RESULT([yes]) - tst_proto_setxattr="yes" - ],[ - AC_MSG_RESULT([no]) - tst_proto_setxattr="no" - ]) - fi - # - if test "$tst_proto_setxattr" = "yes"; then - if test "$tst_nargs_setxattr" = "unknown"; then - AC_MSG_CHECKING([if setxattr takes 5 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != setxattr(0, 0, 0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_setxattr="yes" - tst_nargs_setxattr="5" - ],[ - AC_MSG_RESULT([no]) - tst_compi_setxattr="no" - ]) - fi - if test "$tst_nargs_setxattr" = "unknown"; then - AC_MSG_CHECKING([if setxattr takes 6 args.]) - AC_COMPILE_IFELSE([ - AC_LANG_PROGRAM([[ - $curl_includes_sys_xattr - ]],[[ - if(0 != setxattr(0, 0, 0, 0, 0, 0)) - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes]) - tst_compi_setxattr="yes" - tst_nargs_setxattr="6" - ],[ - AC_MSG_RESULT([no]) - tst_compi_setxattr="no" - ]) - fi - AC_MSG_CHECKING([if setxattr is compilable]) - if test "$tst_compi_setxattr" = "yes"; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - fi - # - if test "$tst_compi_setxattr" = "yes"; then - AC_MSG_CHECKING([if setxattr usage allowed]) - if test "x$curl_disallow_setxattr" != "xyes"; then - AC_MSG_RESULT([yes]) - tst_allow_setxattr="yes" - else - AC_MSG_RESULT([no]) - tst_allow_setxattr="no" - fi - fi - # - AC_MSG_CHECKING([if setxattr might be used]) - if test "$tst_links_setxattr" = "yes" && - test "$tst_proto_setxattr" = "yes" && - test "$tst_compi_setxattr" = "yes" && - test "$tst_allow_setxattr" = "yes"; then - AC_MSG_RESULT([yes]) - AC_DEFINE_UNQUOTED(HAVE_SETXATTR, 1, - [Define to 1 if you have the setxattr function.]) - dnl AC_DEFINE_UNQUOTED(SETXATTR_ARGS, $tst_nargs_setxattr, - dnl [Specifies the number of arguments to setxattr]) - # - if test "$tst_nargs_setxattr" -eq "5"; then - AC_DEFINE(HAVE_SETXATTR_5, 1, [setxattr() takes 5 args]) - elif test "$tst_nargs_setxattr" -eq "6"; then - AC_DEFINE(HAVE_SETXATTR_6, 1, [setxattr() takes 6 args]) - fi - # - curl_cv_func_setxattr="yes" - else - AC_MSG_RESULT([no]) - curl_cv_func_setxattr="no" fi ]) @@ -5910,7 +5004,7 @@ $2 fi AC_MSG_RESULT($r) dnl lowercase and underscore instead of space - tname=$(echo "ac_cv_sizeof_$1" | tr A-Z a-z | tr " " "_") + tname=`echo "ac_cv_sizeof_$1" | tr A-Z a-z | tr " " "_"` eval "$tname=$r" AC_DEFINE_UNQUOTED(TYPE, [$r], [Size of $1 in number of bytes]) diff --git a/m4/curl-gnutls.m4 b/m4/curl-gnutls.m4 index d4f553d69..6a297f684 100644 --- a/m4/curl-gnutls.m4 +++ b/m4/curl-gnutls.m4 @@ -126,6 +126,7 @@ if test "x$OPT_GNUTLS" != xno; then AC_MSG_NOTICE([Added $gtlslib to CURL_LIBRARY_PATH]) fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE gnutls nettle" fi fi diff --git a/m4/curl-mbedtls.m4 b/m4/curl-mbedtls.m4 index 64116e758..8504015da 100644 --- a/m4/curl-mbedtls.m4 +++ b/m4/curl-mbedtls.m4 @@ -101,6 +101,7 @@ if test "x$OPT_MBEDTLS" != xno; then AC_MSG_NOTICE([Added $mbedtlslib to CURL_LIBRARY_PATH]) fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE mbedtls" fi fi dnl mbedTLS not disabled diff --git a/m4/curl-openssl.m4 b/m4/curl-openssl.m4 index 2fb2abecc..76107c21a 100644 --- a/m4/curl-openssl.m4 +++ b/m4/curl-openssl.m4 @@ -293,7 +293,7 @@ if test "x$OPT_OPENSSL" != xno; then AC_MSG_RESULT([no]) ]) - AC_MSG_CHECKING([for libressl]) + AC_MSG_CHECKING([for LibreSSL]) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #include @@ -303,8 +303,8 @@ if test "x$OPT_OPENSSL" != xno; then ],[ AC_MSG_RESULT([yes]) AC_DEFINE_UNQUOTED(HAVE_LIBRESSL, 1, - [Define to 1 if using libressl.]) - ssl_msg="libressl" + [Define to 1 if using LibreSSL.]) + ssl_msg="LibreSSL" ],[ AC_MSG_RESULT([no]) ]) @@ -351,6 +351,7 @@ if test "x$OPT_OPENSSL" != xno; then fi fi check_for_ca_bundle=1 + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE openssl" fi test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" @@ -428,11 +429,14 @@ dnl --- dnl We may use OpenSSL QUIC. dnl --- if test "$OPENSSL_ENABLED" = "1"; then - AC_MSG_CHECKING([for QUIC support in OpenSSL]) + AC_MSG_CHECKING([for QUIC support and OpenSSL >= 3.3]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ #include ]],[[ + #if (OPENSSL_VERSION_NUMBER < 0x30300000L) + #error need at least version 3.3.0 + #endif OSSL_QUIC_client_method(); ]]) ],[ diff --git a/m4/curl-reentrant.m4 b/m4/curl-reentrant.m4 index c1f333982..256f53c7d 100644 --- a/m4/curl-reentrant.m4 +++ b/m4/curl-reentrant.m4 @@ -58,7 +58,7 @@ AC_DEFUN([CURL_CHECK_NEED_REENTRANT_ERRNO], [ #ifdef errno int dummy=1; #else - force compilation error + #error force compilation error #endif ]]) ],[ @@ -72,7 +72,7 @@ AC_DEFUN([CURL_CHECK_NEED_REENTRANT_ERRNO], [ #ifdef errno int dummy=1; #else - force compilation error + #error force compilation error #endif ]]) ],[ @@ -413,7 +413,7 @@ AC_DEFUN([CURL_CONFIGURE_REENTRANT], [ #ifdef _REENTRANT int dummy=1; #else - force compilation error + #error force compilation error #endif ]]) ],[ @@ -473,7 +473,7 @@ AC_DEFUN([CURL_CONFIGURE_THREAD_SAFE], [ #ifdef _THREAD_SAFE int dummy=1; #else - force compilation error + #error force compilation error #endif ]]) ],[ diff --git a/m4/curl-rustls.m4 b/m4/curl-rustls.m4 index 7c55230ef..c9f9caedd 100644 --- a/m4/curl-rustls.m4 +++ b/m4/curl-rustls.m4 @@ -100,9 +100,6 @@ if test "x$OPT_RUSTLS" != xno; then AC_MSG_ERROR([--with-rustls was specified but could not find rustls.]), -lpthread -ldl -lm) - USE_RUSTLS="yes" - ssl_msg="rustls" - LIB_RUSTLS="$PREFIX_RUSTLS/lib$libsuff" if test "$PREFIX_RUSTLS" != "/usr" ; then SSL_LDFLAGS="-L$LIB_RUSTLS" @@ -140,8 +137,12 @@ if test "x$OPT_RUSTLS" != xno; then dnl additional libs may be necessary. Hope that we dnl don't need any. LIBS="$SSL_LIBS $LIBS" - USE_RUSTLS="yes" ssl_msg="rustls" + AC_DEFINE(USE_RUSTLS, 1, [if rustls is enabled]) + AC_SUBST(USE_RUSTLS, [1]) + USE_RUSTLS="yes" + RUSTLS_ENABLED=1 + test rustls != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes else AC_MSG_ERROR([pkg-config: Could not find rustls]) fi @@ -171,8 +172,19 @@ if test "x$OPT_RUSTLS" != xno; then AC_MSG_NOTICE([Added $LIB_RUSTLS to CURL_LIBRARY_PATH]) fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE rustls" fi test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg" + + if test X"$OPT_RUSTLS" != Xno && + test "$RUSTLS_ENABLED" != "1"; then + AC_MSG_NOTICE([OPT_RUSTLS: $OPT_RUSTLS]) + AC_MSG_NOTICE([RUSTLS_ENABLED: $RUSTLS_ENABLED]) + AC_MSG_ERROR([--with-rustls was given but Rustls could not be detected]) + fi fi ]) + + +RUSTLS_ENABLED diff --git a/m4/curl-sysconfig.m4 b/m4/curl-sysconfig.m4 index 9b287bc76..f92fc1899 100644 --- a/m4/curl-sysconfig.m4 +++ b/m4/curl-sysconfig.m4 @@ -28,6 +28,7 @@ case $host_os in darwin*) AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ +#include #include ]],[[ #if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) diff --git a/m4/curl-wolfssl.m4 b/m4/curl-wolfssl.m4 index 1da47a91e..cb3dc2902 100644 --- a/m4/curl-wolfssl.m4 +++ b/m4/curl-wolfssl.m4 @@ -91,7 +91,7 @@ if test "x$OPT_WOLFSSL" != xno; then AC_MSG_CHECKING([for wolfSSL_Init in -lwolfssl]) AC_LINK_IFELSE([ AC_LANG_PROGRAM([[ -/* These aren't needed for detection and confuse WolfSSL. +/* These are not needed for detection and confuse wolfSSL. They are set up properly later if it is detected. */ #undef SIZEOF_LONG #undef SIZEOF_LONG_LONG @@ -106,7 +106,7 @@ if test "x$OPT_WOLFSSL" != xno; then AC_SUBST(USE_WOLFSSL, [1]) WOLFSSL_ENABLED=1 USE_WOLFSSL="yes" - ssl_msg="WolfSSL" + ssl_msg="wolfSSL" QUIC_ENABLED=yes test wolfssl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes ], @@ -128,7 +128,7 @@ if test "x$OPT_WOLFSSL" != xno; then LIBS="$addlib -lm $LIBS" - dnl WolfSSL needs configure --enable-opensslextra to have *get_peer* + dnl wolfSSL needs configure --enable-opensslextra to have *get_peer* dnl DES* is needed for NTLM support and lives in the OpenSSL compatibility dnl layer AC_CHECK_FUNCS(wolfSSL_get_peer_certificate \ @@ -164,6 +164,7 @@ if test "x$OPT_WOLFSSL" != xno; then AC_MSG_NOTICE([Added $wolfssllibpath to CURL_LIBRARY_PATH]) fi fi + LIBCURL_PC_REQUIRES_PRIVATE="$LIBCURL_PC_REQUIRES_PRIVATE wolfssl" else AC_MSG_ERROR([--with-wolfssl but wolfSSL was not found or doesn't work]) fi diff --git a/m4/xc-am-iface.m4 b/m4/xc-am-iface.m4 index c035f58c5..e85e6d424 100644 --- a/m4/xc-am-iface.m4 +++ b/m4/xc-am-iface.m4 @@ -2,7 +2,7 @@ # # xc-am-iface.m4 # -# Copyright (C) Daniel Stenberg +# Copyright (C) Daniel Stenberg, # # 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-cc-check.m4 b/m4/xc-cc-check.m4 index a6cfb07eb..5cf2af7be 100644 --- a/m4/xc-cc-check.m4 +++ b/m4/xc-cc-check.m4 @@ -2,7 +2,7 @@ # # xc-cc-check.m4 # -# Copyright (C), Daniel Stenberg +# Copyright (C) Daniel Stenberg, # # 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 d5e437ffd..f3ac0dede 100644 --- a/m4/xc-lt-iface.m4 +++ b/m4/xc-lt-iface.m4 @@ -2,7 +2,7 @@ # # xc-lt-iface.m4 # -# Copyright (C), Daniel Stenberg +# Copyright (C) Daniel Stenberg, # # 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 deleted file mode 100644 index 6d6677197..000000000 --- a/m4/xc-translit.m4 +++ /dev/null @@ -1,165 +0,0 @@ -#--------------------------------------------------------------------------- -# -# xc-translit.m4 -# -# Copyright (C), Daniel Stenberg -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -# SPDX-License-Identifier: ISC -# -#--------------------------------------------------------------------------- - -# File version for 'aclocal' use. Keep it a single number. -# serial 2 - - -dnl XC_SH_TR_SH (expression) -dnl ------------------------------------------------- -dnl Shell execution time transliteration of 'expression' -dnl argument, where all non-alfanumeric characters are -dnl converted to the underscore '_' character. -dnl Normal shell expansion and substitution takes place -dnl for given 'expression' at shell execution time before -dnl transliteration is applied to it. - -AC_DEFUN([XC_SH_TR_SH], -[`echo "$1" | sed 's/[[^a-zA-Z0-9_]]/_/g'`]) - - -dnl XC_SH_TR_SH_EX (expression, [extra]) -dnl ------------------------------------------------- -dnl Like XC_SH_TR_SH but transliterating characters -dnl given in 'extra' argument to lowercase 'p'. For -dnl example [*+], [*], and [+] are valid 'extra' args. - -AC_DEFUN([XC_SH_TR_SH_EX], -[ifelse([$2], [], - [XC_SH_TR_SH([$1])], - [`echo "$1" | sed 's/[[$2]]/p/g' | sed 's/[[^a-zA-Z0-9_]]/_/g'`])]) - - -dnl XC_M4_TR_SH (expression) -dnl ------------------------------------------------- -dnl m4 execution time transliteration of 'expression' -dnl argument, where all non-alfanumeric characters are -dnl converted to the underscore '_' character. - -AC_DEFUN([XC_M4_TR_SH], -[patsubst(XC_QPATSUBST(XC_QUOTE($1), - [[^a-zA-Z0-9_]], [_]), - [\(_\(.*\)_\)], [\2])]) - - -dnl XC_M4_TR_SH_EX (expression, [extra]) -dnl ------------------------------------------------- -dnl Like XC_M4_TR_SH but transliterating characters -dnl given in 'extra' argument to lowercase 'p'. For -dnl example [*+], [*], and [+] are valid 'extra' args. - -AC_DEFUN([XC_M4_TR_SH_EX], -[ifelse([$2], [], - [XC_M4_TR_SH([$1])], - [patsubst(XC_QPATSUBST(XC_QPATSUBST(XC_QUOTE($1), - [[$2]], - [p]), - [[^a-zA-Z0-9_]], [_]), - [\(_\(.*\)_\)], [\2])])]) - - -dnl XC_SH_TR_CPP (expression) -dnl ------------------------------------------------- -dnl Shell execution time transliteration of 'expression' -dnl argument, where all non-alfanumeric characters are -dnl converted to the underscore '_' character and alnum -dnl characters are converted to uppercase. -dnl Normal shell expansion and substitution takes place -dnl for given 'expression' at shell execution time before -dnl transliteration is applied to it. - -AC_DEFUN([XC_SH_TR_CPP], -[`echo "$1" | dnl -sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' | dnl -sed 's/[[^A-Z0-9_]]/_/g'`]) - - -dnl XC_SH_TR_CPP_EX (expression, [extra]) -dnl ------------------------------------------------- -dnl Like XC_SH_TR_CPP but transliterating characters -dnl given in 'extra' argument to uppercase 'P'. For -dnl example [*+], [*], and [+] are valid 'extra' args. - -AC_DEFUN([XC_SH_TR_CPP_EX], -[ifelse([$2], [], - [XC_SH_TR_CPP([$1])], - [`echo "$1" | dnl -sed 's/[[$2]]/P/g' | dnl -sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' | dnl -sed 's/[[^A-Z0-9_]]/_/g'`])]) - - -dnl XC_M4_TR_CPP (expression) -dnl ------------------------------------------------- -dnl m4 execution time transliteration of 'expression' -dnl argument, where all non-alfanumeric characters are -dnl converted to the underscore '_' character and alnum -dnl characters are converted to uppercase. - -AC_DEFUN([XC_M4_TR_CPP], -[patsubst(XC_QPATSUBST(XC_QTRANSLIT(XC_QUOTE($1), - [abcdefghijklmnopqrstuvwxyz], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ]), - [[^A-Z0-9_]], [_]), - [\(_\(.*\)_\)], [\2])]) - - -dnl XC_M4_TR_CPP_EX (expression, [extra]) -dnl ------------------------------------------------- -dnl Like XC_M4_TR_CPP but transliterating characters -dnl given in 'extra' argument to uppercase 'P'. For -dnl example [*+], [*], and [+] are valid 'extra' args. - -AC_DEFUN([XC_M4_TR_CPP_EX], -[ifelse([$2], [], - [XC_M4_TR_CPP([$1])], - [patsubst(XC_QPATSUBST(XC_QTRANSLIT(XC_QPATSUBST(XC_QUOTE($1), - [[$2]], - [P]), - [abcdefghijklmnopqrstuvwxyz], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ]), - [[^A-Z0-9_]], [_]), - [\(_\(.*\)_\)], [\2])])]) - - -dnl XC_QUOTE (expression) -dnl ------------------------------------------------- -dnl Expands to quoted result of 'expression' expansion. - -AC_DEFUN([XC_QUOTE], -[[$@]]) - - -dnl XC_QPATSUBST (string, regexp[, repl]) -dnl ------------------------------------------------- -dnl Expands to quoted result of 'patsubst' expansion. - -AC_DEFUN([XC_QPATSUBST], -[XC_QUOTE(patsubst([$1], [$2], [$3]))]) - - -dnl XC_QTRANSLIT (string, chars, repl) -dnl ------------------------------------------------- -dnl Expands to quoted result of 'translit' expansion. - -AC_DEFUN([XC_QTRANSLIT], -[XC_QUOTE(translit([$1], [$2], [$3]))]) diff --git a/m4/xc-val-flgs.m4 b/m4/xc-val-flgs.m4 index c8f779651..af7a3d2d8 100644 --- a/m4/xc-val-flgs.m4 +++ b/m4/xc-val-flgs.m4 @@ -2,7 +2,7 @@ # # xc-val-flgs.m4 # -# Copyright (C), Daniel Stenberg +# Copyright (C) Daniel Stenberg, # # 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 fa457876f..6faa94e43 100644 --- a/m4/zz40-xc-ovr.m4 +++ b/m4/zz40-xc-ovr.m4 @@ -2,7 +2,7 @@ # # zz40-xc-ovr.m4 # -# Copyright (C) Daniel Stenberg +# Copyright (C) Daniel Stenberg, # # 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 18c1f0aba..735df2f59 100644 --- a/m4/zz50-xc-ovr.m4 +++ b/m4/zz50-xc-ovr.m4 @@ -2,7 +2,7 @@ # # zz50-xc-ovr.m4 # -# Copyright (C), Daniel Stenberg +# Copyright (C) Daniel Stenberg, # # 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 531668672..d1d3a2fd5 100644 --- a/m4/zz60-xc-ovr.m4 +++ b/m4/zz60-xc-ovr.m4 @@ -2,7 +2,7 @@ # # zz60-xc-ovr.m4 # -# Copyright (C), Daniel Stenberg +# Copyright (C) Daniel Stenberg, # # 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 4ebda82a9..0492371a9 100755 --- a/maketgz +++ b/maketgz @@ -26,26 +26,33 @@ # ########################################################################### -version=$1 +set -eu + +export LC_ALL=C +export TZ=UTC + +version="${1:-}" if [ -z "$version" ]; then echo "Specify a version number!" exit fi -if [ "xonly" = "x$2" ]; then +if [ "only" = "${2:-}" ]; then echo "Setup version number only!" only=1 +else + only= fi libversion="$version" # we make curl the same version as libcurl -curlversion=$libversion +curlversion="$libversion" -major=`echo $libversion | cut -d. -f1 | sed -e "s/[^0-9]//g"` -minor=`echo $libversion | cut -d. -f2 | sed -e "s/[^0-9]//g"` -patch=`echo $libversion | cut -d. -f3 | cut -d- -f1 | sed -e "s/[^0-9]//g"` +major=$(echo "$libversion" | cut -d. -f1 | sed -e "s/[^0-9]//g") +minor=$(echo "$libversion" | cut -d. -f2 | sed -e "s/[^0-9]//g") +patch=$(echo "$libversion" | cut -d. -f3 | cut -d- -f1 | sed -e "s/[^0-9]//g") if test -z "$patch"; then echo "invalid version number? needs to be z.y.z" @@ -59,48 +66,44 @@ fi echo "removing all old *.dist files" find . -name "*.dist" -a ! -name Makefile.dist -exec rm {} \; -numeric=`perl -e 'printf("%02x%02x%02x\n", '"$major, $minor, $patch);"` +numeric="$(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" # when not setting up version numbers locally - for a in $HEADER $CHEADER $PLIST; do - cp $a "$a$ext" + for a in $HEADER $CHEADER; do + cp "$a" "$a$ext" done HEADER="$HEADER$ext" CHEADER="$CHEADER$ext" - PLIST="$PLIST$ext" fi -# requires a date command that knows + for format -datestamp=`date +"%F"` +# requires a date command that knows + for format and -d for date input +timestamp=${SOURCE_DATE_EPOCH:-$(date +"%s")} +datestamp=$(date -d "@$timestamp" +"%F") +filestamp=$(date -d "@$timestamp" +"%Y%m%d%H%M.%S") # Replace version number in header file: sed -i.bak \ - -e 's/^#define LIBCURL_VERSION .*/#define LIBCURL_VERSION "'$libversion'"/g' \ - -e 's/^#define LIBCURL_VERSION_NUM .*/#define LIBCURL_VERSION_NUM 0x'$numeric'/g' \ - -e 's/^#define LIBCURL_VERSION_MAJOR .*/#define LIBCURL_VERSION_MAJOR '$major'/g' \ - -e 's/^#define LIBCURL_VERSION_MINOR .*/#define LIBCURL_VERSION_MINOR '$minor'/g' \ - -e 's/^#define LIBCURL_VERSION_PATCH .*/#define LIBCURL_VERSION_PATCH '$patch'/g' \ - -e "s/^#define LIBCURL_TIMESTAMP .*/#define LIBCURL_TIMESTAMP \"$datestamp\"/g" \ - $HEADER + -e "s/^#define LIBCURL_VERSION .*/#define LIBCURL_VERSION \"$libversion\"/g" \ + -e "s/^#define LIBCURL_VERSION_NUM .*/#define LIBCURL_VERSION_NUM 0x$numeric/g" \ + -e "s/^#define LIBCURL_VERSION_MAJOR .*/#define LIBCURL_VERSION_MAJOR $major/g" \ + -e "s/^#define LIBCURL_VERSION_MINOR .*/#define LIBCURL_VERSION_MINOR $minor/g" \ + -e "s/^#define LIBCURL_VERSION_PATCH .*/#define LIBCURL_VERSION_PATCH $patch/g" \ + -e "s/^#define LIBCURL_TIMESTAMP .*/#define LIBCURL_TIMESTAMP \"$datestamp\"/g" \ + "$HEADER" rm -f "$HEADER.bak" # Replace version number in header file: -sed -i.bak 's/#define CURL_VERSION .*/#define CURL_VERSION "'$curlversion'"/g' $CHEADER +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; + exit fi echo "curl version $curlversion" @@ -110,7 +113,7 @@ echo "datestamp $datestamp" findprog() { file="$1" - for part in `echo $PATH| tr ':' ' '`; do + for part in $(echo "$PATH" | tr ':' ' '); do path="$part/$file" if [ -x "$path" ]; then # there it is! @@ -137,27 +140,18 @@ echo "Re-running config.status" # if { findprog automake >/dev/null 2>/dev/null; } then - echo "- Could not find or run automake, I hope you know what you're doing!" + echo "- Could not find or run automake, I hope you know what you are doing!" else echo "Runs automake --include-deps" automake --include-deps Makefile >/dev/null fi -############################################################################ -# -# make the generated file newer than the man page - -touch src/tool_hugehelp.c - -############################################################################ -# -# Update the IDE files -echo "make vc-ide" -make -s vc-ide - echo "produce CHANGES" git log --pretty=fuller --no-color --date=short --decorate=full -1000 | ./scripts/log2changes.pl > CHANGES.dist +echo "produce RELEASE-TOOLS.md" +./scripts/release-tools.sh "$timestamp" "$version" > docs/RELEASE-TOOLS.md.dist + ############################################################################ # # Now run make dist to generate a tar.gz archive @@ -165,14 +159,31 @@ git log --pretty=fuller --no-color --date=short --decorate=full -1000 | ./script echo "make dist" targz="curl-$version.tar.gz" -make -sj dist VERSION=$version +make -sj dist "VERSION=$version" res=$? if test "$res" != 0; then - echo "make dist failed" - exit 2 + echo "make dist failed" + exit 2 fi +retar() { + tempdir=$1 + rm -rf "$tempdir" + mkdir "$tempdir" + cd "$tempdir" + gzip -dc "../$targz" | tar -xf - + find curl-* -depth -exec touch -c -t "$filestamp" '{}' + + tar --create --format=ustar --owner=0 --group=0 --numeric-owner --sort=name curl-* | gzip --best --no-name > out.tar.gz + mv out.tar.gz ../ + cd .. + rm -rf "$tempdir" +} + +retar ".tarbuild" +echo "replace $targz with out.tar.gz" +mv out.tar.gz "$targz" + ############################################################################ # # Now make a bz2 archive from the tar.gz original @@ -180,7 +191,7 @@ fi bzip2="curl-$version.tar.bz2" echo "Generating $bzip2" -gzip -dc $targz | bzip2 --best > $bzip2 +gzip -dc "$targz" | bzip2 --best > "$bzip2" ############################################################################ # @@ -189,21 +200,21 @@ gzip -dc $targz | bzip2 --best > $bzip2 xz="curl-$version.tar.xz" echo "Generating $xz" -gzip -dc $targz | xz -6e - > $xz +gzip -dc "$targz" | xz -6e - > "$xz" ############################################################################ # # Now make a zip archive from the tar.gz original # makezip() { - rm -rf $tempdir - mkdir $tempdir - cd $tempdir - gzip -dc ../$targz | tar -xf - - find . | zip $zip -@ >/dev/null - mv $zip ../ + rm -rf "$tempdir" + mkdir "$tempdir" + cd "$tempdir" + gzip -dc "../$targz" | tar -xf - + find . | sort | zip -9 -X "$zip" -@ >/dev/null + mv "$zip" ../ cd .. - rm -rf $tempdir + rm -rf "$tempdir" } zip="curl-$version.zip" @@ -211,10 +222,14 @@ echo "Generating $zip" tempdir=".builddir" makezip +# Set deterministic timestamp +touch -c -t "$filestamp" "$targz" "$bzip2" "$xz" "$zip" + echo "------------------" echo "maketgz report:" echo "" -ls -l $targz $bzip2 $zip $xz +ls -l "$targz" "$bzip2" "$xz" "$zip" +sha256sum "$targz" "$bzip2" "$xz" "$zip" echo "Run this:" -echo "gpg -b -a $targz && gpg -b -a $bzip2 && gpg -b -a $zip && gpg -b -a $xz" +echo "gpg -b -a '$targz' && gpg -b -a '$bzip2' && gpg -b -a '$xz' && gpg -b -a '$zip'" diff --git a/packages/Makefile.am b/packages/Makefile.am index b7bf1e591..96f52bdb4 100644 --- a/packages/Makefile.am +++ b/packages/Makefile.am @@ -33,6 +33,7 @@ EXTRA_DIST = README.md \ OS400/curl.inc.in \ OS400/initscript.sh \ OS400/config400.default \ + OS400/make-docs.sh \ OS400/make-include.sh \ OS400/make-lib.sh \ OS400/make-src.sh \ diff --git a/packages/Makefile.in b/packages/Makefile.in index 1047169d7..bf43b8db8 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 \ @@ -109,7 +109,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.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 \ @@ -175,7 +174,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 +204,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 +214,7 @@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@ +CADDY = @CADDY@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -245,7 +247,6 @@ 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@ @@ -271,9 +272,12 @@ HAVE_BROTLI = @HAVE_BROTLI@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_OPENSSL_QUIC = @HAVE_OPENSSL_QUIC@ 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@ @@ -286,6 +290,8 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCURL_LIBS = @LIBCURL_LIBS@ LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -296,12 +302,9 @@ 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@ -NSS_LIBS = @NSS_LIBS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ @@ -337,6 +340,7 @@ USE_ARES = @USE_ARES@ USE_BEARSSL = @USE_BEARSSL@ USE_GNUTLS = @USE_GNUTLS@ USE_HYPER = @USE_HYPER@ +USE_LIBPSL = @USE_LIBPSL@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ @@ -345,11 +349,14 @@ USE_MSH3 = @USE_MSH3@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ +USE_NGTCP2_CRYPTO_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ 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_NGTCP2_H3 = @USE_NGTCP2_H3@ USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ USE_QUICHE = @USE_QUICHE@ USE_RUSTLS = @USE_RUSTLS@ USE_SCHANNEL = @USE_SCHANNEL@ @@ -363,6 +370,7 @@ USE_WOLFSSH = @USE_WOLFSSH@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ +VSFTPD = @VSFTPD@ ZLIB_LIBS = @ZLIB_LIBS@ ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ abs_builddir = @abs_builddir@ @@ -427,7 +435,7 @@ top_srcdir = @top_srcdir@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -444,13 +452,17 @@ top_srcdir = @top_srcdir@ # ########################################################################### SUBDIRS = vms -EXTRA_DIST = README \ +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-docs.sh \ OS400/make-include.sh \ OS400/make-lib.sh \ OS400/make-src.sh \ @@ -458,7 +470,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/.gitattributes b/packages/OS400/.gitattributes deleted file mode 100644 index e9b8201b5..000000000 --- a/packages/OS400/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -# OS400 .cmd files are not windows scripts. -*.cmd text eol=auto diff --git a/packages/OS400/README.OS400 b/packages/OS400/README.OS400 index 38b2c7f06..1bc4132f6 100644 --- a/packages/OS400/README.OS400 +++ b/packages/OS400/README.OS400 @@ -226,8 +226,7 @@ in fact, very few common utilities are available. As a consequence, the config-os400.h has been coded manually and the compilation scripts are a set of shell scripts stored in subdirectory packages/OS400. - The "curl" command and the test environment are currently not supported on -OS/400. + The test environment is currently not supported on OS/400. Protocols currently implemented on OS/400: diff --git a/packages/OS400/ccsidcurl.c b/packages/OS400/ccsidcurl.c index 596c1f1e1..60a10d7ea 100644 --- a/packages/OS400/ccsidcurl.c +++ b/packages/OS400/ccsidcurl.c @@ -437,7 +437,8 @@ curl_version_info_ccsid(CURLversion stamp, unsigned int ccsid) 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, feature_names) + offsetof(curl_version_info_data, feature_names), + offsetof(curl_version_info_data, rtmp_version) }; /* The assertion below is possible, because although the second operand @@ -1097,6 +1098,7 @@ curl_easy_setopt_ccsid(CURL *easy, CURLoption tag, ...) case CURLOPT_DNS_LOCAL_IP6: case CURLOPT_DNS_SERVERS: case CURLOPT_DOH_URL: + case CURLOPT_ECH: case CURLOPT_EGDSOCKET: case CURLOPT_FTPPORT: case CURLOPT_FTP_ACCOUNT: diff --git a/packages/OS400/config400.default b/packages/OS400/config400.default index 91a82771f..4e7ddbac5 100644 --- a/packages/OS400/config400.default +++ b/packages/OS400/config400.default @@ -39,6 +39,7 @@ 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. +setenv PASEPERL '/QOpenSys/pkgs/bin/perl' # PASE Perl interpreter. # Define ZLIB availability and locations. diff --git a/packages/OS400/curl.inc.in b/packages/OS400/curl.inc.in index b3a4e9efd..81ba82c35 100644 --- a/packages/OS400/curl.inc.in +++ b/packages/OS400/curl.inc.in @@ -206,8 +206,10 @@ d CURLAUTH_NTLM c X'00000008' d CURLAUTH_DIGEST_IE... d c X'00000010' + /if not defined(CURL_NO_OLDIES) d CURLAUTH_NTLM_WB... d c X'00000020' + /endif d CURLAUTH_BEARER... d c X'00000040' d CURLAUTH_AWS_SIGV4... @@ -441,8 +443,12 @@ d c X'00000400' d CURLU_ALLOW_SPACE... d c X'00000800' - d CURLU_PUNYCODE... - d c X'00001000' + d CURLU_PUNYCODE c X'00001000' + d CURLU_PUNY2IDN c X'00002000' + d CURLU_GET_EMPTY... + d c X'00004000' + d CURLU_NO_GUESS_SCHEME... + d c X'00008000' * d CURLOT_FLAG_ALIAS... d c X'00000001' @@ -669,6 +675,8 @@ d c 99 d CURLE_TOO_LARGE... d c 100 + d CURLE_ECH_REQUIRED... + d c 101 * /if not defined(CURL_NO_OLDIES) d CURLE_URL_MALFORMAT_USER... @@ -1661,6 +1669,9 @@ d c 10323 d CURLOPT_SERVER_RESPONSE_TIMEOUT_MS... d c 00324 + d CURLOPT_ECH c 10325 + d CURLOPT_TCP_KEEPCNT... + d c 00326 * /if not defined(CURL_NO_OLDIES) d CURLOPT_FILE c 10001 @@ -1902,6 +1913,8 @@ d c X'00600040' d CURLINFO_QUEUE_TIME_T... CURLINFO_OFF_T + 65 d c X'00600041' + d CURLINFO_USED_PROXY... CURLINFO_LONG + 66 + d c X'00200042' * d CURLINFO_HTTP_CODE... Old ...RESPONSE_CODE d c X'00200002' @@ -2065,8 +2078,10 @@ d c 9 d CURLVERSION_ELEVENTH... d c 10 + d CURLVERSION_TWELFTH... + d c 11 d CURLVERSION_NOW... - d c 10 CURLVERSION_ELEVENTH + d c 11 CURLVERSION_ELEVENTH * d CURLHcode s 10i 0 based(######ptr######) Enum d CURLHE_OK c 0 @@ -2413,6 +2428,8 @@ d gsasl_version... d * const char * d feature_names... + d * const char * + d rtmp_version... d * const char * * d curl_certinfo ds based(######ptr######) @@ -3015,6 +3032,14 @@ d running_handles... d 10i 0 * + d curl_multi_waitfds... + d pr extproc('curl_multi_waitfds') + d like(CURLMcode) + d multi * value CURLM * + d ufds * value curl_waitfd * + d size 10u 0 value + d fd_count 10u 0 + * d curl_multi_socket_action... d pr extproc('curl_multi_socket_action') d like(CURLMcode) diff --git a/packages/OS400/initscript.sh b/packages/OS400/initscript.sh index b75055a8d..2f6d78c24 100755 --- a/packages/OS400/initscript.sh +++ b/packages/OS400/initscript.sh @@ -33,14 +33,14 @@ setenv() { # Define and export. - eval ${1}="${2}" - export ${1} + eval "${1}=${2}" + export "${1?}" } case "${SCRIPTDIR}" in /*) ;; -*) SCRIPTDIR="`pwd`/${SCRIPTDIR}" +*) SCRIPTDIR="$(pwd)/${SCRIPTDIR}" esac while true @@ -52,14 +52,14 @@ done # The script directory is supposed to be in $TOPDIR/packages/os400. -TOPDIR=`dirname "${SCRIPTDIR}"` -TOPDIR=`dirname "${TOPDIR}"` +TOPDIR=$(dirname "${SCRIPTDIR}") +TOPDIR=$(dirname "${TOPDIR}") export SCRIPTDIR TOPDIR # Extract the SONAME from the library makefile. -SONAME=`sed -e '/^VERSIONCHANGE=/!d;s/^.*=\([0-9]*\).*/\1/' \ - < "${TOPDIR}/lib/Makefile.soname"` +SONAME="$(sed -e '/^VERSIONCHANGE=/!d;s/^.*=\([0-9]*\).*/\1/' \ + < "${TOPDIR}/lib/Makefile.soname")" export SONAME # Get OS/400 configuration parameters. @@ -69,26 +69,29 @@ if [ -f "${SCRIPTDIR}/config400.override" ] then . "${SCRIPTDIR}/config400.override" fi +# Check if perl available. +{ [ -n "${PASEPERL}" ] && [ -x "${PASEPERL}" ]; } || PASEPERL= + # Need to get the version definitions. -LIBCURL_VERSION=`grep '^#define *LIBCURL_VERSION ' \ +LIBCURL_VERSION=$(grep '^#define *LIBCURL_VERSION ' \ "${TOPDIR}/include/curl/curlver.h" | - sed 's/.*"\(.*\)".*/\1/'` -LIBCURL_VERSION_MAJOR=`grep '^#define *LIBCURL_VERSION_MAJOR ' \ + sed 's/.*"\(.*\)".*/\1/') +LIBCURL_VERSION_MAJOR=$(grep '^#define *LIBCURL_VERSION_MAJOR ' \ "${TOPDIR}/include/curl/curlver.h" | - sed 's/^#define *LIBCURL_VERSION_MAJOR *\([^ ]*\).*/\1/'` -LIBCURL_VERSION_MINOR=`grep '^#define *LIBCURL_VERSION_MINOR ' \ + sed 's/^#define *LIBCURL_VERSION_MAJOR *\([^ ]*\).*/\1/') +LIBCURL_VERSION_MINOR=$(grep '^#define *LIBCURL_VERSION_MINOR ' \ "${TOPDIR}/include/curl/curlver.h" | - sed 's/^#define *LIBCURL_VERSION_MINOR *\([^ ]*\).*/\1/'` -LIBCURL_VERSION_PATCH=`grep '^#define *LIBCURL_VERSION_PATCH ' \ + sed 's/^#define *LIBCURL_VERSION_MINOR *\([^ ]*\).*/\1/') +LIBCURL_VERSION_PATCH=$(grep '^#define *LIBCURL_VERSION_PATCH ' \ "${TOPDIR}/include/curl/curlver.h" | - sed 's/^#define *LIBCURL_VERSION_PATCH *\([^ ]*\).*/\1/'` -LIBCURL_VERSION_NUM=`grep '^#define *LIBCURL_VERSION_NUM ' \ + sed 's/^#define *LIBCURL_VERSION_PATCH *\([^ ]*\).*/\1/') +LIBCURL_VERSION_NUM=$(grep '^#define *LIBCURL_VERSION_NUM ' \ "${TOPDIR}/include/curl/curlver.h" | - sed 's/^#define *LIBCURL_VERSION_NUM *0x\([^ ]*\).*/\1/'` -LIBCURL_TIMESTAMP=`grep '^#define *LIBCURL_TIMESTAMP ' \ + sed 's/^#define *LIBCURL_VERSION_NUM *0x\([^ ]*\).*/\1/') +LIBCURL_TIMESTAMP=$(grep '^#define *LIBCURL_TIMESTAMP ' \ "${TOPDIR}/include/curl/curlver.h" | - sed 's/.*"\(.*\)".*/\1/'` + sed 's/.*"\(.*\)".*/\1/') export LIBCURL_VERSION export LIBCURL_VERSION_MAJOR LIBCURL_VERSION_MINOR LIBCURL_VERSION_PATCH export LIBCURL_VERSION_NUM LIBCURL_TIMESTAMP @@ -119,7 +122,8 @@ action_needed() { [ ! -e "${1}" ] && return 0 - [ "${2}" ] || return 1 + [ -n "${2}" ] || return 1 + # shellcheck disable=SC3013 [ "${1}" -ot "${2}" ] && return 0 return 1 } @@ -136,7 +140,7 @@ canonicalize_path() { if expr "${1}" : '^/' > /dev/null then P="${1}" - else P="`pwd`/${1}" + else P="$(pwd)/${1}" fi R= @@ -147,7 +151,7 @@ canonicalize_path() do IFS="${IFSSAVE}" case "${C}" in .) ;; - ..) R=`expr "${R}" : '^\(.*/\)..*'` + ..) R="$(expr "${R}" : '^\(.*/\)..*')" ;; ?*) R="${R}${C}/" ;; @@ -156,7 +160,7 @@ canonicalize_path() done IFS="${IFSSAVE}" - echo "/`expr "${R}" : '^\(.*\)/'`" + echo "/$(expr "${R}" : '^\(.*\)/')" } @@ -172,7 +176,7 @@ make_module() MODULES="${MODULES} ${1}" MODIFSNAME="${LIBIFSNAME}/${1}.MODULE" action_needed "${MODIFSNAME}" "${2}" || return 0; - SRCDIR=`dirname \`canonicalize_path "${2}"\`` + SRCDIR="$(dirname "$(canonicalize_path "${2}")")" # #pragma convert has to be in the source file itself, i.e. # putting it in an include file makes it only active @@ -180,10 +184,12 @@ make_module() # Thus we build a temporary file with the pragma prepended to # 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 + { + echo "#line 1 \"${2}\"" + echo "#pragma convert(819)" + echo "#line 1" + cat "${2}" + } > __tmpsrcf.c CMD="CRTCMOD MODULE(${TARGETLIB}/${1}) SRCSTMF('__tmpsrcf.c')" CMD="${CMD} SYSIFCOPT(*IFS64IO *ASYNCSIGNAL)" # CMD="${CMD} OPTION(*INCDIRFIRST *SHOWINC *SHOWSYS)" @@ -217,12 +223,13 @@ make_module() then DEFINES="${DEFINES} USE_LIBSSH2" fi - if [ "${DEFINES}" ] + if [ -n "${DEFINES}" ] then CMD="${CMD} DEFINE(${DEFINES})" fi CLcommand "${CMD}" rm -f __tmpsrcf.c + # shellcheck disable=SC2034 LINK=YES } @@ -272,16 +279,17 @@ versioned_copy() get_make_vars() { - eval "`sed -e ': begin' \ - -e '/\\\\$/{' \ + eval "$(sed -e ': begin' \ + -e '/\\$/{' \ -e 'N' \ - -e 's/\\\\\\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}\"`" + -e 's/[[:space:]][[:space:]]*/ /g' \ + -e '/^[A-Za-z_][A-Za-z0-9_]* *=/!d' \ + -e 's/@\([A-Za-z0-9_]*\)@/${\1}/g' \ + -e 's/ *= */=/' \ + -e 's/=\(.*[^ ]\) *$/="\1"/' \ + -e 's/\$(\([^)]*\))/${\1}/g' \ + < "${1}")" } diff --git a/packages/OS400/make-docs.sh b/packages/OS400/make-docs.sh new file mode 100644 index 000000000..b79b19e92 --- /dev/null +++ b/packages/OS400/make-docs.sh @@ -0,0 +1,65 @@ +#!/bin/sh +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# +# Documentation build script for the OS/400. +# + + +SCRIPTDIR=$(dirname "${0}") +. "${SCRIPTDIR}/initscript.sh" + +[ -n "${PASEPERL}" ] || exit 0 # Perl needed for doc build. +cd "${TOPDIR}/docs" || exit 1 +[ -d "${IFSDIR}/docs" ] || mkdir "${IFSDIR}/docs" + + +# Command line options. + +( + cd cmdline-opts || exit 1 + MANPAGE=curl.1 + TEXTPAGE=curl.txt + get_make_vars Makefile.inc + rm -f "${IFSDIR}/docs/${MANPAGE}" "${IFSDIR}/docs/${TEXTPAGE}" + + # Prepare online manual. + # shellcheck disable=SC2086 + ${PASEPERL} "${TOPDIR}/scripts/managen" -c 75 \ + listhelp ${DPAGES} > "${TOPDIR}/src/tool_listhelp.c" + + # Generate text manual and copy it to DB2. + # shellcheck disable=SC2086 + ${PASEPERL} "${TOPDIR}/scripts/managen" -I "${TOPDIR}/include" \ + -c 75 ascii ${DPAGES} > "${IFSDIR}/docs/${TEXTPAGE}" + MEMBER="${LIBIFSNAME}/DOCS.FILE/MANUAL.MBR" + CMD="CPY OBJ('${IFSDIR}/docs/${TEXTPAGE}') TOOBJ('${MEMBER}')" + CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)" + CLcommand "${CMD}" + +# Man page is useless as OS/400 has no man command. +# # shellcheck disable=SC2086 +# ${PASEPERL} "${TOPDIR}/scripts/managen" -I "${TOPDIR}/include" \ +# mainpage ${DPAGES} > "${IFSDIR}/docs/${MANPAGE}" +) diff --git a/packages/OS400/make-include.sh b/packages/OS400/make-include.sh index 30235eb79..e30e95053 100755 --- a/packages/OS400/make-include.sh +++ b/packages/OS400/make-include.sh @@ -26,9 +26,9 @@ # Installation of the header files in the OS/400 library. # -SCRIPTDIR=`dirname "${0}"` +SCRIPTDIR=$(dirname "${0}") . "${SCRIPTDIR}/initscript.sh" -cd "${TOPDIR}/include" +cd "${TOPDIR}/include" || exit 1 # Create the OS/400 source program file for the header files. @@ -71,16 +71,16 @@ copy_hfile() # Copy the header files. for HFILE in curl/*.h ${SCRIPTDIR}/ccsidcurl.h -do case "`basename \"${HFILE}\" .h`" in +do case "$(basename "${HFILE}" .h)" in stdcheaders|typecheck-gcc) continue;; esac - DEST="${SRCPF}/`db2_name \"${HFILE}\" nomangle`.MBR" + DEST="${SRCPF}/$(db2_name "${HFILE}" nomangle).MBR" if action_needed "${DEST}" "${HFILE}" then copy_hfile "${DEST}" "${HFILE}" - IFSDEST="${IFSINCLUDE}/`basename \"${HFILE}\"`" + IFSDEST="${IFSINCLUDE}/$(basename "${HFILE}")" rm -f "${IFSDEST}" ln -s "${DEST}" "${IFSDEST}" fi diff --git a/packages/OS400/make-lib.sh b/packages/OS400/make-lib.sh index 8179d816d..e7b5b519e 100755 --- a/packages/OS400/make-lib.sh +++ b/packages/OS400/make-lib.sh @@ -26,9 +26,9 @@ # libcurl compilation script for the OS/400. # -SCRIPTDIR=`dirname "${0}"` +SCRIPTDIR=$(dirname "${0}") . "${SCRIPTDIR}/initscript.sh" -cd "${TOPDIR}/lib" +cd "${TOPDIR}/lib" || exit 1 # Need to have IFS access to the mih/cipher header file. @@ -40,10 +40,12 @@ fi # Create and compile the identification source file. -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) Daniel Stenberg et al. OS/400 version by P. Monnerat")' >> os400.c +{ + echo '#pragma comment(user, "libcurl version '"${LIBCURL_VERSION}"'")' + echo '#pragma comment(user, __DATE__)' + echo '#pragma comment(user, __TIME__)' + 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= @@ -56,13 +58,14 @@ get_make_vars Makefile.inc # Compile the sources into modules. -INCLUDES="'`pwd`'" +# shellcheck disable=SC2034 +INCLUDES="'$(pwd)'" 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}"` +do MODULE=$(db2_name "${SRC}") make_module "${MODULE}" "${SRC}" BUILDING_LIBCURL done @@ -73,7 +76,7 @@ if action_needed "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR" then LINK=YES fi -if [ "${LINK}" ] +if [ -n "${LINK}" ] then rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR" CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})" CMD="${CMD} TEXT('LibCurl API static binding directory')" @@ -101,17 +104,17 @@ fi # - Unfold lines from the header files so that they contain a semicolon. # - Keep only CURL_EXTERN definitions. # - Remove the CURL_DEPRECATED and CURL_TEMP_PRINTF macro calls. -# - Drop the parenthesized function arguments and what follows. +# - Drop the parenthesized function arguments and what follows. # - Keep the trailing function name only. -EXPORTS=`cat "${TOPDIR}"/include/curl/*.h "${SCRIPTDIR}/ccsidcurl.h" | +EXPORTS=$(cat "${TOPDIR}"/include/curl/*.h "${SCRIPTDIR}/ccsidcurl.h" | sed -e 'H;s/.*//;x;s/\n//;s/.*/& /' \ -e '/^CURL_EXTERN[[:space:]]/!d' \ -e '/\;/!{x;d;}' \ -e 's/ CURL_DEPRECATED([^)]*)//g' \ -e 's/ CURL_TEMP_PRINTF([^)]*)//g' \ -e 's/[[:space:]]*(.*$//' \ - -e 's/^.*[^A-Za-z0-9_]\([A-Za-z0-9_]*\)$/\1/'` + -e 's/^.*[^A-Za-z0-9_]\([A-Za-z0-9_]*\)$/\1/') # Create the service program exportation file in DB2 member if needed. @@ -122,7 +125,7 @@ if action_needed "${BSF}" Makefile.am then LINK=YES fi -if [ "${LINK}" ] +if [ -n "${LINK}" ] then echo " STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('LIBCURL_${SONAME}')" \ > "${BSF}" for EXPORT in ${EXPORTS} @@ -139,7 +142,7 @@ if action_needed "${LIBIFSNAME}/${SRVPGM}.SRVPGM" then LINK=YES fi -if [ "${LINK}" ] +if [ -n "${LINK}" ] then CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})" CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(BNDSRC)" CMD="${CMD} MODULE(${TARGETLIB}/OS400)" @@ -167,7 +170,7 @@ if action_needed "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR" then LINK=YES fi -if [ "${LINK}" ] +if [ -n "${LINK}" ] then rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR" CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})" CMD="${CMD} TEXT('LibCurl API dynamic binding directory')" diff --git a/packages/OS400/make-src.sh b/packages/OS400/make-src.sh index 931c1f335..21fd0015b 100755 --- a/packages/OS400/make-src.sh +++ b/packages/OS400/make-src.sh @@ -25,9 +25,18 @@ # # Command line interface tool compilation script for the OS/400. -SCRIPTDIR=`dirname "${0}"` +SCRIPTDIR=$(dirname "${0}") . "${SCRIPTDIR}/initscript.sh" -cd "${TOPDIR}/src" +cd "${TOPDIR}/src" || exit 1 + + +# Check if built-in manual can be generated. + +USE_MANUAL= +if [ -f "${IFSDIR}/docs/curl.txt" ] && [ -n "${PASEPERL}" ] +then "${PASEPERL}" ./mkhelp.pl < "${IFSDIR}/docs/curl.txt" > tool_hugehelp.c + USE_MANUAL="'USE_MANUAL'" +fi # Get source lists. @@ -40,25 +49,27 @@ get_make_vars Makefile.inc # Compile the sources into modules. +# shellcheck disable=SC2034 LINK= MODULES= +# shellcheck disable=SC2034 INCLUDES="'${TOPDIR}/lib'" for SRC in ${CURLX_CFILES} -do MODULE=`db2_name "${SRC}"` - MODULE=`db2_name "X${MODULE}"` - make_module "${MODULE}" "${SRC}" +do MODULE=$(db2_name "${SRC}") + MODULE=$(db2_name "X${MODULE}") + make_module "${MODULE}" "${SRC}" "${USE_MANUAL}" done for SRC in ${CURL_CFILES} -do MODULE=`db2_name "${SRC}"` - make_module "${MODULE}" "${SRC}" +do MODULE=$(db2_name "${SRC}") + make_module "${MODULE}" "${SRC}" "${USE_MANUAL}" done # Link modules into program. -MODULES="`echo \"${MODULES}\" | sed \"s/[^ ][^ ]*/${TARGETLIB}\/&/g\"`" +MODULES="$(echo "${MODULES}" | sed "s/[^ ][^ ]*/${TARGETLIB}\/&/g")" CMD="CRTPGM PGM(${TARGETLIB}/${CURLPGM})" CMD="${CMD} ENTMOD(${TARGETLIB}/CURLMAIN)" CMD="${CMD} MODULE(${MODULES})" diff --git a/packages/OS400/make-tests.sh b/packages/OS400/make-tests.sh index ed475956c..8ff64d2fb 100755 --- a/packages/OS400/make-tests.sh +++ b/packages/OS400/make-tests.sh @@ -27,9 +27,9 @@ # -SCRIPTDIR=`dirname "${0}"` +SCRIPTDIR=$(dirname "${0}") . "${SCRIPTDIR}/initscript.sh" -cd "${TOPDIR}/tests" +cd "${TOPDIR}/tests" || exit 1 # Build programs in a directory. @@ -40,23 +40,26 @@ build_all_programs() # Compile all programs. # The list is found in variable "noinst_PROGRAMS" - INCLUDES="'`pwd`' '${TOPDIR}/lib' '${TOPDIR}/src'" + # shellcheck disable=SC2034 + INCLUDES="'$(pwd)' '${TOPDIR}/lib' '${TOPDIR}/src'" MODS="${1}" SRVPGMS="${2}" + # shellcheck disable=SC2154 for PGM in ${noinst_PROGRAMS} - do DB2PGM=`db2_name "${PGM}"` + do DB2PGM=$(db2_name "${PGM}") PGMIFSNAME="${LIBIFSNAME}/${DB2PGM}.PGM" # Extract preprocessor symbol definitions from # compilation options for the program. - PGMCFLAGS="`eval echo \"\\${${PGM}_CFLAGS}\"`" + PGMCFLAGS="$(eval echo "\${${PGM}_CFLAGS}")" PGMDFNS= for FLAG in ${PGMCFLAGS} do case "${FLAG}" in - -D?*) DEFINE="`echo \"${FLAG}\" | sed 's/^..//'`" + -D?*) # shellcheck disable=SC2001 + DEFINE="$(echo "${FLAG}" | sed 's/^..//')" PGMDFNS="${PGMDFNS} '${DEFINE}'" ;; esac @@ -64,7 +67,7 @@ build_all_programs() # Compile all C sources for the program into modules. - PGMSOURCES="`eval echo \"\\${${PGM}_SOURCES}\"`" + PGMSOURCES="$(eval echo "\${${PGM}_SOURCES}")" LINK= MODULES= @@ -77,7 +80,7 @@ build_all_programs() case "${SOURCE}" in lib*.c) MODULE="${DB2PGM}" ;; - *) MODULE=`db2_name "${SOURCE}"` + *) MODULE=$(db2_name "${SOURCE}") ;; esac @@ -85,7 +88,7 @@ build_all_programs() # prefix module name with 'X'. case "${SOURCE}" in - ../*) MODULE=`db2_name "X${MODULE}"` + ../*) MODULE=$(db2_name "X${MODULE}") ;; esac @@ -99,17 +102,17 @@ build_all_programs() # Link program if needed. - if [ "${LINK}" ] - then PGMLDADD="`eval echo \"\\${${PGM}_LDADD}\"`" - for ARG in ${PGMLDADD} - do case "${ARG}" in + if [ -n "${LINK}" ] + then PGMLDADD="$(eval echo "\${${PGM}_LDADD}")" + for M in ${PGMLDADD} + do case "${M}" in -*) ;; # Ignore non-module. - *) MODULES="${MODULES} "`db2_name "${ARG}"` + *) MODULES="${MODULES} $(db2_name "${M}")" ;; esac done - MODULES="`echo \"${MODULES}\" | - sed \"s/[^ ][^ ]*/${TARGETLIB}\/&/g\"`" + MODULES="$(echo "${MODULES}" | + sed "s/[^ ][^ ]*/${TARGETLIB}\/&/g")" CMD="CRTPGM PGM(${TARGETLIB}/${DB2PGM})" CMD="${CMD} ENTMOD(${TARGETLIB}/CURLMAIN)" CMD="${CMD} MODULE(${MODULES} ${MODS})" @@ -124,7 +127,7 @@ build_all_programs() # Build programs in the server directory. ( - cd server + cd server || exit 1 get_make_vars Makefile.inc build_all_programs "${TARGETLIB}/OS400SYS" ) @@ -133,13 +136,16 @@ build_all_programs() # Build all programs in the libtest subdirectory. ( - cd libtest + cd libtest || exit 1 get_make_vars Makefile.inc # Special case: redefine chkhostname compilation parameters. + # shellcheck disable=SC2034 chkhostname_SOURCES=chkhostname.c + # shellcheck disable=SC2034 chkhostname_LDADD=curl_gethostname.o + # shellcheck disable=SC2153 build_all_programs "" "${TARGETLIB}/${SRVPGM}" ) diff --git a/packages/OS400/makefile.sh b/packages/OS400/makefile.sh index 3d659645d..fb1f14671 100755 --- a/packages/OS400/makefile.sh +++ b/packages/OS400/makefile.sh @@ -28,9 +28,21 @@ # # This is a shell script since make is not a standard component of OS/400. -SCRIPTDIR=`dirname "${0}"` +SCRIPTDIR=$(dirname "${0}") . "${SCRIPTDIR}/initscript.sh" -cd "${TOPDIR}" +cd "${TOPDIR}" || exit 1 + + +# Make sure all files are UTF8-encoded. + +# shellcheck disable=SC2038 +find "${TOPDIR}" -type f -print | xargs ls -S | while read -r CCSID FILE +do if [ "${CCSID}" != 1208 ] + then CMD="CPY OBJ('${FILE}') TOOBJ('${FILE}') FROMCCSID(*OBJ)" + CMD="${CMD} TOCCSID(1208) DTAFMT(*TEXT) REPLACE(*YES)" + (CLcommand "${CMD}") + fi +done # Create the OS/400 library if it does not exist. @@ -57,9 +69,9 @@ for TEXT in "${TOPDIR}/COPYING" "${SCRIPTDIR}/README.OS400" \ "${TOPDIR}/docs/FEATURES" "${TOPDIR}/docs/SSLCERTS.md" \ "${TOPDIR}/docs/RESOURCES" "${TOPDIR}/docs/VERSIONS.md" \ "${TOPDIR}/docs/HISTORY.md" -do MEMBER="`basename \"${TEXT}\" .OS400`" - MEMBER="`basename \"${MEMBER}\" .md`" - MEMBER="${LIBIFSNAME}/DOCS.FILE/`db2_name \"${MEMBER}\"`.MBR" +do MEMBER="$(basename "${TEXT}" .OS400)" + MEMBER="$(basename "${MEMBER}" .md)" + MEMBER="${LIBIFSNAME}/DOCS.FILE/$(db2_name "${MEMBER}").MBR" [ -e "${TEXT}" ] || continue @@ -83,8 +95,8 @@ fi # Copy RPG examples if needed. for EXAMPLE in "${SCRIPTDIR}/rpg-examples"/* -do MEMBER="`basename \"${EXAMPLE}\"`" - IFSMEMBER="${LIBIFSNAME}/RPGXAMPLES.FILE/`db2_name \"${MEMBER}\"`.MBR" +do MEMBER="$(basename "${EXAMPLE}")" + IFSMEMBER="${LIBIFSNAME}/RPGXAMPLES.FILE/$(db2_name "${MEMBER}").MBR" [ -e "${EXAMPLE}" ] || continue @@ -92,8 +104,8 @@ do MEMBER="`basename \"${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}"` + 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}" @@ -117,7 +129,7 @@ fi # Build in each directory. -# for SUBDIR in include lib src tests -for SUBDIR in include lib src +# for SUBDIR in include lib docs src tests +for SUBDIR in include lib docs src do "${SCRIPTDIR}/make-${SUBDIR}.sh" done diff --git a/packages/vms/Makefile.in b/packages/vms/Makefile.in index 7aa39e77e..b25a55bfb 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 \ @@ -109,7 +109,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.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 \ @@ -147,6 +146,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 +156,7 @@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@ +CADDY = @CADDY@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -187,7 +189,6 @@ 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@ @@ -213,9 +214,12 @@ HAVE_BROTLI = @HAVE_BROTLI@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_OPENSSL_QUIC = @HAVE_OPENSSL_QUIC@ 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@ @@ -228,6 +232,8 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCURL_LIBS = @LIBCURL_LIBS@ LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -238,12 +244,9 @@ 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@ -NSS_LIBS = @NSS_LIBS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ @@ -279,6 +282,7 @@ USE_ARES = @USE_ARES@ USE_BEARSSL = @USE_BEARSSL@ USE_GNUTLS = @USE_GNUTLS@ USE_HYPER = @USE_HYPER@ +USE_LIBPSL = @USE_LIBPSL@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ @@ -287,11 +291,14 @@ USE_MSH3 = @USE_MSH3@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ +USE_NGTCP2_CRYPTO_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ 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_NGTCP2_H3 = @USE_NGTCP2_H3@ USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ USE_QUICHE = @USE_QUICHE@ USE_RUSTLS = @USE_RUSTLS@ USE_SCHANNEL = @USE_SCHANNEL@ @@ -305,6 +312,7 @@ USE_WOLFSSH = @USE_WOLFSSH@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ +VSFTPD = @VSFTPD@ ZLIB_LIBS = @ZLIB_LIBS@ ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ abs_builddir = @abs_builddir@ @@ -369,7 +377,7 @@ top_srcdir = @top_srcdir@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms diff --git a/packages/vms/clean_gnv_curl.com b/packages/vms/clean_gnv_curl.com index 198c0debf..1a9a0eb71 100644 --- a/packages/vms/clean_gnv_curl.com +++ b/packages/vms/clean_gnv_curl.com @@ -179,9 +179,6 @@ $! $ file = "lcl_root:[.lib]libcurl.vers" $ if f$search(file) .nes. "" then delete 'file';* $! -$ file = "lcl_root:[.lib]libcurl.plist" -$ if f$search(file) .nes. "" then delete 'file';* -$! $ file = "lcl_root:[]ca-bundle.h" $ if f$search(file) .nes. "" then delete 'file';* $! diff --git a/packages/vms/compare_curl_source.com b/packages/vms/compare_curl_source.com index 3f7542de0..13ff4667f 100644 --- a/packages/vms/compare_curl_source.com +++ b/packages/vms/compare_curl_source.com @@ -17,9 +17,9 @@ $! $! First the files in the original source directory which is assumed to be $! under source code control are compared with the copy directory. $! -$! Then the files are are only in the copy directory are listed. +$! Only files present in the copy directory are listed. $! -$! The result will five diagnostics about of files: +$! Diagnostics are displayed about the files: $! 1. Files that are not generation 1. $! 2. Files missing in the copy directory. $! 3. Files in the copy directory not in the source directory. diff --git a/packages/vms/config_h.com b/packages/vms/config_h.com index 6378802ad..b54a1a0f9 100644 --- a/packages/vms/config_h.com +++ b/packages/vms/config_h.com @@ -113,19 +113,19 @@ $else $ cfile = f$search("sys$disk:[]config.h.in") $ if cfile .eqs. "" $ then -$ cfile = f$search("sys$disk:[]config.h_in") -$ if cfile .eqs. "" -$ then -$ cfile = f$search("sys$disk:[]configh.in") -$ if cfile .eqs. "" -$ then -$ cfile = f$search("sys$disk:[]config__2eh.in") -$ if cfile .eqs. "" -$ then -$ cfile = f$search("sys$disk:[]config.h__2ein") -$ endif -$ endif -$ endif +$ cfile = f$search("sys$disk:[]config.h_in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("sys$disk:[]configh.in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("sys$disk:[]config__2eh.in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("sys$disk:[]config.h__2ein") +$ endif +$ endif +$ endif $ endif $endif $if f$trnlnm("PRJ_INCLUDE") .nes. "" @@ -133,19 +133,19 @@ $then $ cfile = f$search("PRJ_INCLUDE:config.h.in") $ if cfile .eqs. "" $ then -$ cfile = f$search("PRJ_INCLUDE:config.h_in") -$ if cfile .eqs. "" -$ then -$ cfile = f$search("PRJ_INCLUDE:config__2eh.in") -$ if cfile .eqs. "" -$ then -$ cfile = f$search("PRJ_INCLUDE:config__2eh.in") -$ if cfile .eqs. "" -$ then -$ cfile = f$search("PRJ_INCLUDE:config.h__2ein") -$ endif -$ endif -$ endif +$ cfile = f$search("PRJ_INCLUDE:config.h_in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("PRJ_INCLUDE:config__2eh.in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("PRJ_INCLUDE:config__2eh.in") +$ if cfile .eqs. "" +$ then +$ cfile = f$search("PRJ_INCLUDE:config.h__2ein") +$ endif +$ endif +$ endif $ endif $endif $if cfile .eqs. "" @@ -156,23 +156,23 @@ $ line_out = line_out + "config__2eh.in, config.h__2ein" $ write/symbol sys$output line_out $ if f$trnlnm("PRJ_INCLUDE") .nes. "" $ then -$ write sys$output "Also looked in PRJ_INCLUDE: for these files." +$ write sys$output "Also looked in PRJ_INCLUDE: for these files." $ endif $! $ write tf "" $ write tf - - " /* Could not find sys$disk:config.h.in */" + " /* Could not find sys$disk:config.h.in */" $ write tf - - " /* Looked also for config.h_in, configh.in, config__2eh.in, */" + " /* Looked also for config.h_in, configh.in, config__2eh.in, */" $ write tf - - " /* config.h__2ein */" + " /* config.h__2ein */" $ if f$trnlnm("PRJ_INCLUDE") .nes. "" $ then -$ write tf - - " /* Also looked in PRJ_INCLUDE: for these files. */" +$ write tf - + " /* Also looked in PRJ_INCLUDE: for these files. */" $ endif $ write tf - - "/*--------------------------------------------------------------*/ + "/*--------------------------------------------------------------*/ $ write tf "" $ goto write_tail $endif @@ -244,8 +244,8 @@ $! Blank line handling $!--------------------- $ if xline .eqs. "" $ then -$ write tf "" -$ goto cfgh_in_loop1 +$ write tf "" +$ goto cfgh_in_loop1 $ endif $ xlen = f$length(xline) $ key = f$extract(0,2,xline) @@ -254,11 +254,11 @@ $! deal with comments by copying exactly $!----------------------------------------- $ if (do_comment .eq. 1) .or. (key .eqs. "/*") $ then -$ do_comment = 1 -$ write tf line_in -$ key = f$extract(xlen - 2, 2, xline) -$ if key .eqs. "*/" then do_comment = 0 -$ goto cfgh_in_loop1 +$ do_comment = 1 +$ write tf line_in +$ key = f$extract(xlen - 2, 2, xline) +$ if key .eqs. "*/" then do_comment = 0 +$ goto cfgh_in_loop1 $ endif $! $! Some quick parsing @@ -281,33 +281,33 @@ $! Comment out this section of the ifblock $!----------------------------------------- $ if if_block .ge. 3 $ then -$ write tf "/* ", xline, " */" -$ if keyif .eqs. "#en" then if_block = 0 -$ goto cfgh_in_loop1 +$ write tf "/* ", xline, " */" +$ if keyif .eqs. "#en" then if_block = 0 +$ goto cfgh_in_loop1 $ endif $! $! Handle the end of an ifblock $!------------------------------- $ if keyif .eqs. "#en" $ then -$ write tf xline -$ if_block = 0 -$ goto cfgh_in_loop1 +$ write tf xline +$ if_block = 0 +$ goto cfgh_in_loop1 $ endif $! $ if key1 .eqs. "#ifndef" $ then -$! Manual check for _ALL_SOURCE on AIX error +$! Manual check for _ALL_SOURCE on AIX error $!----------------------------------------------- -$ if key2 .eqs. "_ALL_SOURCE" -$ then -$ write tf "/* ", xline, " */" +$ if key2 .eqs. "_ALL_SOURCE" +$ then +$ write tf "/* ", xline, " */" $! -$! Ignore the rest of the block +$! Ignore the rest of the block $!-------------------------------------- -$ if_block = 3 -$ goto cfgh_in_loop1 -$ endif +$ if_block = 3 +$ goto cfgh_in_loop1 +$ endif $ endif $! $! @@ -315,9 +315,9 @@ $! Default action for an #if/#else/#endif $!------------------------------------------ $ if keyif .eqs. "#if" .or. keyif .eqs. "#el" $ then -$ if_block = 1 -$ write tf xline -$ goto cfgh_in_loop1 +$ if_block = 1 +$ write tf xline +$ goto cfgh_in_loop1 $ endif $! $! @@ -325,1514 +325,1514 @@ $! Process "normal?" stuff $!--------------------------- $ if key1 .eqs. "#undef" $ then -$ key2c = f$element(2, "_", key2) -$ if (key2c .eqs. "_") .or. (key2c .eqs. "H") then key2c = "" -$ key2d = f$element(3, "_", key2) -$ if (key2d .eqs. "_") .or. (key2d .eqs. "H") then key2d = "" -$ key2e = f$element(4, "_", key2) -$ if (key2e .eqs. "_") .or. (key2e .eqs. "H") then key2e = "" -$ if key2d .eqs. "T" -$ then -$ if key2e .eqs. "TYPE" -$ then -$ key2_h = "_T" -$ key2d = "" -$ endif -$ endif -$! -$ double_under = 0 -$! -$! Process FCNTL directives +$ key2c = f$element(2, "_", key2) +$ if (key2c .eqs. "_") .or. (key2c .eqs. "H") then key2c = "" +$ key2d = f$element(3, "_", key2) +$ if (key2d .eqs. "_") .or. (key2d .eqs. "H") then key2d = "" +$ key2e = f$element(4, "_", key2) +$ if (key2e .eqs. "_") .or. (key2e .eqs. "H") then key2e = "" +$ if key2d .eqs. "T" +$ then +$ if key2e .eqs. "TYPE" +$ then +$ key2_h = "_T" +$ key2d = "" +$ endif +$ endif +$! +$ double_under = 0 +$! +$! Process FCNTL directives $!------------------------------------- -$ if (key2b .eqs. "FCNTL") .and. (key2c .eqs. "O") .and. - - (key2d .eqs. "NONBLOCK") -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! Process GETADDRINFO directives +$ if (key2b .eqs. "FCNTL") .and. (key2c .eqs. "O") .and. - + (key2d .eqs. "NONBLOCK") +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process GETADDRINFO directives $!------------------------------------- -$ if key2 .eqs. "GETADDRINFO_THREADSAFE" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! Process IOCTL directives +$ if key2 .eqs. "GETADDRINFO_THREADSAFE" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process IOCTL directives $!------------------------------------- -$ if (key2b .eqs. "IOCTL") .and. (key2c .nes. "") -$ then -$ if (key2c .eqs. "FIONBIO") .or. (key2c .eqs. "SIOCGIFADDR") -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ endif -$! -$! -$! Manual check for LL on +$ if (key2b .eqs. "IOCTL") .and. (key2c .nes. "") +$ then +$ if (key2c .eqs. "FIONBIO") .or. (key2c .eqs. "SIOCGIFADDR") +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ endif +$! +$! +$! Manual check for LL on $!----------------------------------------------- -$ if key2 .eqs. "LL" -$ then -$ write tf "#ifndef __VAX -$ write tf "#define HAVE_''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "bool_t" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' short" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "bits16_t" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' short" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "u_bits16_t" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' unsigned short" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "bits32_t" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "u_bits32_t" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' unsigned int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "intmax_t" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#ifdef __VAX" -$ write tf "#define ''key2' long" -$ write tf "#else" -$ write tf "#define ''key2' long long" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "uintmax_t" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#ifdef __VAX" -$ write tf "#define ''key2' unsigned long" -$ write tf "#else" -$ write tf "#define ''key2' unsigned long long" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "socklen_t" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "GETGROUPS_T" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' gid_t" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_SYS_SIGLIST" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 0" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_SYS_ERRLIST" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_STRUCT_DIRENT_D_INO" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_STRUCT_TIMEVAL" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! ! The header files have this information, however +$ if key2 .eqs. "LL" +$ then +$ write tf "#ifndef __VAX +$ write tf "#define HAVE_''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "bool_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' short" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "bits16_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' short" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "u_bits16_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' unsigned short" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "bits32_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "u_bits32_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' unsigned int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "intmax_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#ifdef __VAX" +$ write tf "#define ''key2' long" +$ write tf "#else" +$ write tf "#define ''key2' long long" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "uintmax_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#ifdef __VAX" +$ write tf "#define ''key2' unsigned long" +$ write tf "#else" +$ write tf "#define ''key2' unsigned long long" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "socklen_t" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "GETGROUPS_T" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' gid_t" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_SYS_SIGLIST" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_SYS_ERRLIST" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_STRUCT_DIRENT_D_INO" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_STRUCT_TIMEVAL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! ! The header files have this information, however $! ! The ioctl() call only works on sockets. -$! if key2 .eqs. "FIONREAD_IN_SYS_IOCTL" -$! then -$! write tf "#ifndef ''key2'" -$! write tf "#define ''key2' 1" -$! write tf "#endif" -$! goto cfgh_in_loop1 -$! endif -$! -$! ! The header files have this information, however +$! if key2 .eqs. "FIONREAD_IN_SYS_IOCTL" +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ''key2' 1" +$! write tf "#endif" +$! goto cfgh_in_loop1 +$! endif +$! +$! ! The header files have this information, however $! ! The ioctl() call only works on sockets. -$! if key2 .eqs. "GWINSZ_IN_SYS_IOCTL" -$! then -$! write tf "#ifndef ''key2'" -$! write tf "#define ''key2' 1" -$! write tf "#endif" -$! goto cfgh_in_loop1 -$! endif -$! -$! ! The header files have this information, however +$! if key2 .eqs. "GWINSZ_IN_SYS_IOCTL" +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ''key2' 1" +$! write tf "#endif" +$! goto cfgh_in_loop1 +$! endif +$! +$! ! The header files have this information, however $! ! The ioctl() call only works on sockets. -$! if key2 .eqs. "STRUCT_WINSIZE_IN_SYS_IOCTL" -$! then -$! write tf "#ifndef ''key2'" -$! write tf "#define ''key2' 0" -$! write tf "#endif" -$! goto cfgh_in_loop1 -$! endif -$! -$ if key2 .eqs. "HAVE_STRUCT_TM_TM_ZONE" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_TM_ZONE" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_TIMEVAL" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "WEXITSTATUS_OFFSET" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 2" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_GETPW_DECLS" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_CONFSTR" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_PRINTF" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_SBRK" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_STRSIGNAL" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 0" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2a .eqs. "HAVE_DECL_STRTOLD" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 0" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_STRTOIMAX" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 0" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_STRTOL" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_STRTOLL" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_STRTOUL" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_STRTOULL" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_STRTOUMAX" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 0" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "GETPGRP_VOID" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "NAMED_PIPES_MISSING" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "OPENDIR_NOT_ROBUST" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "PGRP_PIPE" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "CAN_REDEFINE_GETENV" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_PRINTF_A_FORMAT" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "CTYPE_NON_ASCII" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_LANGINFO_CODESET" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 0" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif +$! if key2 .eqs. "STRUCT_WINSIZE_IN_SYS_IOCTL" +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ''key2' 0" +$! write tf "#endif" +$! goto cfgh_in_loop1 +$! endif +$! +$ if key2 .eqs. "HAVE_STRUCT_TM_TM_ZONE" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_TM_ZONE" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_TIMEVAL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "WEXITSTATUS_OFFSET" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 2" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_GETPW_DECLS" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_CONFSTR" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_PRINTF" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_SBRK" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRSIGNAL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2a .eqs. "HAVE_DECL_STRTOLD" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOIMAX" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOLL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOUL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOULL" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_STRTOUMAX" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "GETPGRP_VOID" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "NAMED_PIPES_MISSING" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "OPENDIR_NOT_ROBUST" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "PGRP_PIPE" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "CAN_REDEFINE_GETENV" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_PRINTF_A_FORMAT" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "CTYPE_NON_ASCII" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_LANGINFO_CODESET" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 0" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif $! $! This wants execve() to do this automagically to pass. -$! if key2 .eqs. "HAVE_HASH_BANG_EXEC" -$! then -$! write tf "#ifndef ''key2'" -$! write tf "#define ''key2' 1" -$! write tf "#endif" -$! goto cfgh_in_loop1 -$! endif -$! -$ if key2 .eqs. "ICONV_CONST" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2'" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "VOID_SIGHANDLER" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_POSIX_SIGNALS" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "UNUSABLE_RT_SIGNALS" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2a .eqs. "HAVE_DECL_FPURGE" -$ then -$ write tf "#ifndef ''key2a'" -$ write tf "#define ''key2a' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_DECL_SETREGID" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "HAVE_POSIX_SIGSETJMP" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2b .eqs. "RAND" .and. key2c .nes. "" .and. key2d .eqs. "" -$ then -$ if (key2c .eqs. "EGD") .or. - - (key2c .eqs. "STATUS") .or. - - (key2c .eqs. "SCREEN") -$ then -$ if f$search("''ssl_header_dir'rand.h") .nes. "" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ else -$ write tf "/* #undef ''key2' */" -$ endif -$ endif -$ endif -$! -$ if key2 .eqs. "STRCOLL_BROKEN" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2 .eqs. "DUP_BROKEN" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! This is for a test that getcwd(0,0) works. -$! It does not on VMS. +$! if key2 .eqs. "HAVE_HASH_BANG_EXEC" +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ''key2' 1" +$! write tf "#endif" +$! goto cfgh_in_loop1 +$! endif +$! +$ if key2 .eqs. "ICONV_CONST" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2'" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "VOID_SIGHANDLER" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_POSIX_SIGNALS" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "UNUSABLE_RT_SIGNALS" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2a .eqs. "HAVE_DECL_FPURGE" +$ then +$ write tf "#ifndef ''key2a'" +$ write tf "#define ''key2a' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_DECL_SETREGID" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "HAVE_POSIX_SIGSETJMP" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2b .eqs. "RAND" .and. key2c .nes. "" .and. key2d .eqs. "" +$ then +$ if (key2c .eqs. "EGD") .or. - + (key2c .eqs. "STATUS") .or. - + (key2c .eqs. "SCREEN") +$ then +$ if f$search("''ssl_header_dir'rand.h") .nes. "" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ else +$ write tf "/* #undef ''key2' */" +$ endif +$ endif +$ endif +$! +$ if key2 .eqs. "STRCOLL_BROKEN" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2 .eqs. "DUP_BROKEN" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! This is for a test that getcwd(0,0) works. +$! It does not on VMS. $!-------------------------- -$ if key2 .eqs. "GETCWD_BROKEN" -$ then -$ write sys$output "" -$ write sys$output - +$ if key2 .eqs. "GETCWD_BROKEN" +$ then +$ write sys$output "" +$ write sys$output - "%CONFIG_H-I-NONPORT, ''key2' being tested for!" -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-GETCWD, GETCWD(0,0) does not work on VMS." -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-GETCWD2, Work around hack probably required." -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-REVIEW, Manual Code review required!" -$ if update_config_vms -$ then -$ open/append tfcv sys$disk:[]config_vms.h -$ write tfcv "" -$ write tfcv - - "/* Check config.h for use of ''key2' settings */" -$ write tfcv "" -$ close tfcv -$ endif +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of ''key2' settings */" +$ write tfcv "" +$ close tfcv +$ endif $ -$ goto cfgh_in_loop1 -$ endif +$ goto cfgh_in_loop1 +$ endif $! -$ if (key2a .eqs. "HAVE") .or. (key2a .eqs. "STAT") .or. - - (key2 .eqs. "ENABLE_IPV6") .or. (key2b .eqs. "LDAP") -$ then +$ if (key2a .eqs. "HAVE") .or. (key2a .eqs. "STAT") .or. - + (key2 .eqs. "USE_IPV6") .or. (key2b .eqs. "LDAP") +$ then $! -$! Process extra underscores +$! Process extra underscores $!------------------------------------ -$ if f$locate("HAVE___", key2) .lt. key2_len -$ then -$ key2b = "__" + key2d -$ key2d = "" -$ double_under = 1 -$ else -$ if f$locate("HAVE__", key2) .lt. key2_len -$ then -$ key2b = "_" + key2c -$ key2c = "" -$ double_under = 1 -$ endif -$ endif -$! -$ if (key2_h .eqs. "_H") .or. (key2 .eqs. "ENABLE_IPV6") .or. - - (key2b .eqs. "LDAP") -$ then -$! -$! Looking for a header file +$ if f$locate("HAVE___", key2) .lt. key2_len +$ then +$ key2b = "__" + key2d +$ key2d = "" +$ double_under = 1 +$ else +$ if f$locate("HAVE__", key2) .lt. key2_len +$ then +$ key2b = "_" + key2c +$ key2c = "" +$ double_under = 1 +$ endif +$ endif +$! +$ if (key2_h .eqs. "_H") .or. (key2 .eqs. "USE_IPV6") .or. - + (key2b .eqs. "LDAP") +$ then +$! +$! Looking for a header file $!--------------------------------------- -$ headf = key2b -$ if key2c .nes. "" then headf = headf + "_" + key2c -$ if key2d .nes. "" then headf = headf + "_" + key2d +$ headf = key2b +$ if key2c .nes. "" then headf = headf + "_" + key2c +$ if key2d .nes. "" then headf = headf + "_" + key2d $! -$! (key2b .eqs. "READLINE") +$! (key2b .eqs. "READLINE") $! -$! Some special parsing +$! Some special parsing $!------------------------------------------ -$ if (key2b .eqs. "SYS") .or. (key2b .eqs. "ARPA") .or. - - (key2b .eqs. "NET") .or. (key2b .eqs. "NETINET") -$ then -$ if key2c .nes. "" -$ then -$ headf = key2c -$ if key2d .nes. "" then headf = key2c + "_" + key2d -$ endif -$ endif -$! -$! And of course what's life with out some special cases +$ if (key2b .eqs. "SYS") .or. (key2b .eqs. "ARPA") .or. - + (key2b .eqs. "NET") .or. (key2b .eqs. "NETINET") +$ then +$ if key2c .nes. "" +$ then +$ headf = key2c +$ if key2d .nes. "" then headf = key2c + "_" + key2d +$ endif +$ endif +$! +$! And of course what's life with out some special cases $!-------------------------------------------------------------------- -$ if key2 .eqs. "ENABLE_IPV6" -$ then -$ headf = "in6" -$ endif -$! -$ if key2b .eqs. "LDAP" -$ then -$ if (key2 .eqs. "HAVE_LDAP_SSL") .or. - - (key2 .eqs. "HAVE_LDAP_URL_PARSE") -$ then -$ headf = "ldap" -$ endif -$ endif -$! -$! -$ if key2b .eqs. "FILE" -$ then -$ write sys$output "" -$ write sys$output - +$ if key2 .eqs. "USE_IPV6" +$ then +$ headf = "in6" +$ endif +$! +$ if key2b .eqs. "LDAP" +$ then +$ if (key2 .eqs. "HAVE_LDAP_SSL") .or. - + (key2 .eqs. "HAVE_LDAP_URL_PARSE") +$ then +$ headf = "ldap" +$ endif +$ endif +$! +$! +$ if key2b .eqs. "FILE" +$ then +$ write sys$output "" +$ write sys$output - "%CONFIG_H-I-NONPORT, ''key2' being asked for!" -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-FILE_OLD, file.h will not be configured as is obsolete!" -$ write sys$output - +$ write sys$output - "-CONFIG_H_I-FCNTL_NEW, "Expecting fcntl.h to be configured instead!" -$ write sys$output - +$ write sys$output - "-CONFIG_H_I-FCNTL_CHK, "Unable to verify at this time!" -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-REVIEW, Manual Code review required!" $! -$ if update_config_vms -$ then -$ open/append tfcv sys$disk:[]config_vms.h -$ write tfcv "" -$ write tfcv - - "/* Check config.h for use of fcntl.h instead of file.h */" -$ write tfcv "" -$ close tfcv -$ endif -$ endif -$! -$! Now look it up in the DEC C RTL +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of fcntl.h instead of file.h */" +$ write tfcv "" +$ close tfcv +$ endif +$ endif +$! +$! Now look it up in the DEC C RTL $!--------------------------------------------- -$ define/user sys$output nl: -$ define/user sys$error nl: -$ search/output=nl: 'dchfile' |'headf'|/exact -$ if '$severity' .eq. 1 -$ then -$ if key64 then write tf "#ifndef __VAX" -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/output=nl: 'dchfile' |'headf'|/exact +$ if '$severity' .eq. 1 +$ then +$ if key64 then write tf "#ifndef __VAX" +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" $if p2 .nes. "" then write sys$output "''dchfile' - #define ''key2' 1" -$ write tf "#endif" -$ if key64 then write tf "#endif" +$ write tf "#endif" +$ if key64 then write tf "#endif" $set nover -$ goto cfgh_in_loop1 -$ endif +$ goto cfgh_in_loop1 +$ endif $! $! -$! Now look it up in the DEC C STARLET_C +$! Now look it up in the DEC C STARLET_C $!--------------------------------------------- -$ define/user sys$output nl: -$ define/user sys$error nl: -$ search/output=nl: 'starhfile' |'headf'|/exact -$ if '$severity' .eq. 1 -$ then -$ if key64 then write tf "#ifndef __VAX" -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/output=nl: 'starhfile' |'headf'|/exact +$ if '$severity' .eq. 1 +$ then +$ if key64 then write tf "#ifndef __VAX" +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" $if p2 .nes. "" then write sys$output "''starfile' - #define ''key2' 1" -$ write tf "#endif" -$ if key64 then write tf "#endif" +$ write tf "#endif" +$ if key64 then write tf "#endif" $set nover -$ goto cfgh_in_loop1 -$ endif +$ goto cfgh_in_loop1 +$ endif $! -$! Now look for OPENSSL headers +$! Now look for OPENSSL headers $!--------------------------------------------------------- -$ if key2b .eqs. "OPENSSL" -$ then -$ headf = headf - "OPENSSL_" -$ header = f$search("''ssl_header_dir'''headf'.h") -$ if header .nes. "" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" +$ if key2b .eqs. "OPENSSL" +$ then +$ headf = headf - "OPENSSL_" +$ header = f$search("''ssl_header_dir'''headf'.h") +$ if header .nes. "" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" $set nover -$ goto cfgh_in_loop1 -$ endif -$ endif +$ goto cfgh_in_loop1 +$ endif +$ endif $! -$! Now look for Kerberos +$! Now look for Kerberos $!------------------------------------------------------------ -$ if key2b .eqs. "GSSAPI" -$ then -$ header_dir = "sys$sysroot:[kerberos.include]" -$ headf = headf - "GSSAPI_" -$ header = f$search("''header_dir'''headf'.h") -$ if header .nes. "" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" +$ if key2b .eqs. "GSSAPI" +$ then +$ header_dir = "sys$sysroot:[kerberos.include]" +$ headf = headf - "GSSAPI_" +$ header = f$search("''header_dir'''headf'.h") +$ if header .nes. "" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" $set nover -$ goto cfgh_in_loop1 -$ endif -$ endif +$ goto cfgh_in_loop1 +$ endif +$ endif $! $set nover -$ else +$ else $! -$! Looking for a routine or a symbol +$! Looking for a routine or a symbol $!------------------------------------------------ -$ if key2c .eqs. "MACRO" -$ then -$ if (key2b .eqs. "FILE") .or. (key2b .eqs. "DATE") - - .or. (key2b .eqs. "LINE") .or. (key2b .eqs. "TIME") -$ then -$ write tf "#ifndef HAVE_''key2b'" -$ write tf "#define HAVE_''key2b' 1" -$ write tf "#endif" -$ endif -$ goto cfgh_in_loop1 -$ endif -$! -$! Special false tests +$ if key2c .eqs. "MACRO" +$ then +$ if (key2b .eqs. "FILE") .or. (key2b .eqs. "DATE") - + .or. (key2b .eqs. "LINE") .or. (key2b .eqs. "TIME") +$ then +$ write tf "#ifndef HAVE_''key2b'" +$ write tf "#define HAVE_''key2b' 1" +$ write tf "#endif" +$ endif +$ goto cfgh_in_loop1 +$ endif +$! +$! Special false tests $!------------------------------------- -$ if double_under -$ then -$ if key2b .eqs. "_FCNTL" .or. key2b .eqs. "__FCNTL" -$ then -$ write tf "/* #undef HAVE_''key2b' */" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2b .eqs. "_STAT" .or. key2b .eqs. "__STAT" -$ then -$ write tf "/* #undef HAVE_''key2b' */" -$ goto cfgh_in_loop1 -$ endif -$! -$ if key2b .eqs. "_READ" .or. key2b .eqs. "__READ" -$ then -$ write tf "/* #undef HAVE_''key2b' */" -$ goto cfgh_in_loop1 -$ endif -$ endif -$! -$ keysym = key2b -$ if key2c .nes. "" then keysym = keysym + "_" + key2c -$ if key2d .nes. "" then keysym = keysym + "_" + key2d -$ if key2e .nes. "" then keysym = keysym + "_" + key2e -$! -$! -$! Stat structure members +$ if double_under +$ then +$ if key2b .eqs. "_FCNTL" .or. key2b .eqs. "__FCNTL" +$ then +$ write tf "/* #undef HAVE_''key2b' */" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2b .eqs. "_STAT" .or. key2b .eqs. "__STAT" +$ then +$ write tf "/* #undef HAVE_''key2b' */" +$ goto cfgh_in_loop1 +$ endif +$! +$ if key2b .eqs. "_READ" .or. key2b .eqs. "__READ" +$ then +$ write tf "/* #undef HAVE_''key2b' */" +$ goto cfgh_in_loop1 +$ endif +$ endif +$! +$ keysym = key2b +$ if key2c .nes. "" then keysym = keysym + "_" + key2c +$ if key2d .nes. "" then keysym = keysym + "_" + key2d +$ if key2e .nes. "" then keysym = keysym + "_" + key2e +$! +$! +$! Stat structure members $!------------------------------------- -$ if key2b .eqs. "STRUCT" -$ then -$ if key2c .eqs. "STAT" .and (key2d .nes. "") -$ then -$ key2b = key2b + "_" + key2c + "_" + key2d -$ key2c = key2e -$ key2d = "" -$ key2e = "" -$ endif -$ endif -$ if (key2b .eqs. "ST") .or. (key2b .eqs. "STRUCT_STAT_ST") -$ then -$ keysym = "ST" + "_" + key2c -$ keysym = f$edit(keysym,"LOWERCASE") -$ endif -$ if key2a .eqs. "STAT" -$ then -$ if (f$locate("STATVFS", key2b) .eq. 0) .and. key2c .eqs. "" -$ then -$ keysym = f$edit(key2b, "LOWERCASE") -$ endif -$!$ if (key2b .eqs. "STATVFS" .or. key2b .eqs. "STATFS2" - -$! .or. key2b .eqs. "STATFS3") .and. key2c .nes. "" -$! -$ if (key2b .eqs. "STATVFS") .and. key2c .nes. "" -$ then -$! Should really verify that the structure -$! named by key2b actually exists first. +$ if key2b .eqs. "STRUCT" +$ then +$ if key2c .eqs. "STAT" .and (key2d .nes. "") +$ then +$ key2b = key2b + "_" + key2c + "_" + key2d +$ key2c = key2e +$ key2d = "" +$ key2e = "" +$ endif +$ endif +$ if (key2b .eqs. "ST") .or. (key2b .eqs. "STRUCT_STAT_ST") +$ then +$ keysym = "ST" + "_" + key2c +$ keysym = f$edit(keysym,"LOWERCASE") +$ endif +$ if key2a .eqs. "STAT" +$ then +$ if (f$locate("STATVFS", key2b) .eq. 0) .and. key2c .eqs. "" +$ then +$ keysym = f$edit(key2b, "LOWERCASE") +$ endif +$!$ if (key2b .eqs. "STATVFS" .or. key2b .eqs. "STATFS2" - +$! .or. key2b .eqs. "STATFS3") .and. key2c .nes. "" +$! +$ if (key2b .eqs. "STATVFS") .and. key2c .nes. "" +$ then +$! Should really verify that the structure +$! named by key2b actually exists first. $!------------------------------------------------------------ $! -$! Statvfs structure members +$! Statvfs structure members $!------------------------------------------------- -$ keysym = "f_" + f$edit(key2c,"LOWERCASE") -$ endif -$ endif +$ keysym = "f_" + f$edit(key2c,"LOWERCASE") +$ endif +$ endif $! -$! UTMPX structure members +$! UTMPX structure members $!-------------------------------------- -$ if key2b .eqs. "UT" .and. key2c .eqs. "UT" -$ then -$ keysym = "ut_" + f$edit(key2d,"LOWERCASE") -$ endif -$! -$ if f$locate("MMAP",key2) .lt. key2_len -$ then -$ write sys$output "" -$ write sys$output - +$ if key2b .eqs. "UT" .and. key2c .eqs. "UT" +$ then +$ keysym = "ut_" + f$edit(key2d,"LOWERCASE") +$ endif +$! +$ if f$locate("MMAP",key2) .lt. key2_len +$ then +$ write sys$output "" +$ write sys$output - "%CONFIG_H-I-NONPORT, ''key2' being asked for!" -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-MMAP, MMAP operations only work on STREAM and BINARY files!" -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-REVIEW, Manual Code review required!" -$ if update_config_vms -$ then -$ open/append tfcv sys$disk:[]config_vms.h -$ write tfcv "" -$ write tfcv - - "/* Check config.h for use of ''key2' settings */" -$ write tfcv "" -$ close tfcv -$ endif -$ endif -$! -$! -$ if keysym .eqs. "CRYPT" -$ then -$ write sys$output "" -$ write sys$output - +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of ''key2' settings */" +$ write tfcv "" +$ close tfcv +$ endif +$ endif +$! +$! +$ if keysym .eqs. "CRYPT" +$ then +$ write sys$output "" +$ write sys$output - "%CONFIG_H-I-NONPORT, ''key2' being asked for!" -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-CRYPT, CRYPT operations on the VMS SYSUAF may not work!" -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-REVIEW, Manual Code review required!" -$ if update_config_vms -$ then -$ open/append tfcv sys$disk:[]config_vms.h -$ write tfcv "" -$ write tfcv - - "/* Check config.h for use of ''keysym' */" -$ write tfcv "" -$ close tfcv -$ endif -$ endif -$! -$! -$ if keysym .eqs. "EXECL" -$ then -$ write sys$output "" -$ write sys$output - +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of ''keysym' */" +$ write tfcv "" +$ close tfcv +$ endif +$ endif +$! +$! +$ if keysym .eqs. "EXECL" +$ then +$ write sys$output "" +$ write sys$output - "%CONFIG_H-I-NONPORT, ''key2' being asked for!" -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-EXCEL, EXECL configured, Will probably not work." -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-REVIEW, Manual Code review required!" -$ if update_config_vms -$ then -$ open/append tfcv sys$disk:[]config_vms.h -$ write tfcv "" -$ write tfcv - - "/* Check config.h for use of ''keysym' */" -$ write tfcv "" -$ close tfcv -$ endif -$ endif -$! -$! -$! Process if cpp supports ANSI-C stringizing '#' operator +$ if update_config_vms +$ then +$ open/append tfcv sys$disk:[]config_vms.h +$ write tfcv "" +$ write tfcv - + "/* Check config.h for use of ''keysym' */" +$ write tfcv "" +$ close tfcv +$ endif +$ endif +$! +$! +$! Process if cpp supports ANSI-C stringizing '#' operator $!----------------------------------------------------------------------- -$ if keysym .eqs. "STRINGIZE" -$ then -$ write tf "#ifndef HAVE_STRINGIZE" -$ write tf "#define HAVE_STRINGSIZE 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if keysym .eqs. "VOLATILE" -$ then -$ write tf "#ifndef HAVE_VOLATILE" -$ write tf "#define HAVE_VOLATILE 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if keysym .eqs. "ALLOCA" -$ then -$ write tf "#ifndef HAVE_ALLOCA" -$ write tf "#define HAVE_ALLOCA 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if keysym .eqs. "ERRNO_DECL" -$ then -$ write tf "#ifndef HAVE_ERRNO_DECL" -$ write tf "#define HAVE_ERRNO_DECL 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if keysym .eqs. "LONGLONG" -$ then -$ write tf "#ifndef __VAX" -$ write tf "#pragma message disable longlongtype" -$ write tf "#ifndef HAVE_LONGLONG" -$ write tf "#define HAVE_LONGLONG 1" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! May need to test compiler version +$ if keysym .eqs. "STRINGIZE" +$ then +$ write tf "#ifndef HAVE_STRINGIZE" +$ write tf "#define HAVE_STRINGSIZE 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "VOLATILE" +$ then +$ write tf "#ifndef HAVE_VOLATILE" +$ write tf "#define HAVE_VOLATILE 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "ALLOCA" +$ then +$ write tf "#ifndef HAVE_ALLOCA" +$ write tf "#define HAVE_ALLOCA 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "ERRNO_DECL" +$ then +$ write tf "#ifndef HAVE_ERRNO_DECL" +$ write tf "#define HAVE_ERRNO_DECL 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "LONGLONG" +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_LONGLONG" +$ write tf "#define HAVE_LONGLONG 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! May need to test compiler version $!----------------------------------------------- -$ if keysym .eqs. "LONG_LONG" -$ then -$ write tf "#ifndef __VAX" -$ write tf "#pragma message disable longlongtype" -$ write tf "#ifndef HAVE_LONG_LONG" -$ write tf "#define HAVE_LONG_LONG 1" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! May need to test compiler version +$ if keysym .eqs. "LONG_LONG" +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_LONG_LONG" +$ write tf "#define HAVE_LONG_LONG 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! May need to test compiler version $!----------------------------------------------- -$ if keysym .eqs. "UNSIGNED_LONG_LONG" -$ then -$ write tf "#ifndef __VAX" -$ write tf "#pragma message disable longlongtype" -$ write tf "#ifndef HAVE_UNSIGNED_LONG_LONG" -$ write tf "#define HAVE_UNSIGNED_LONG_LONG 1" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! May need to test compiler version +$ if keysym .eqs. "UNSIGNED_LONG_LONG" +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_UNSIGNED_LONG_LONG" +$ write tf "#define HAVE_UNSIGNED_LONG_LONG 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! May need to test compiler version $!----------------------------------------------- -$ if keysym .eqs. "UNSIGNED_LONG_LONG_INT" -$ then -$ write tf "#ifndef __VAX" -$ write tf "#pragma message disable longlongtype" -$ write tf "#ifndef HAVE_UNSIGNED_LONG_LONG_INT" -$ write tf "#define HAVE_UNSIGNED_LONG_LONG_INT 1" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! May need to test compiler version +$ if keysym .eqs. "UNSIGNED_LONG_LONG_INT" +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_UNSIGNED_LONG_LONG_INT" +$ write tf "#define HAVE_UNSIGNED_LONG_LONG_INT 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! May need to test compiler version $!----------------------------------------------- -$ if keysym .eqs. "LONG_DOUBLE" -$ then -$ write tf "#ifndef __VAX" -$ write tf "#pragma message disable longlongtype" -$ write tf "#ifndef HAVE_LONG_DOUBLE" -$ write tf "#define HAVE_LONG_DOUBLE 1" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$ if keysym .eqs. "FCNTL_LOCK" -$ then -$ write sys$output - +$ if keysym .eqs. "LONG_DOUBLE" +$ then +$ write tf "#ifndef __VAX" +$ write tf "#pragma message disable longlongtype" +$ write tf "#ifndef HAVE_LONG_DOUBLE" +$ write tf "#define HAVE_LONG_DOUBLE 1" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "FCNTL_LOCK" +$ then +$ write sys$output - "%CONFIG_H-I-NONPORT, ''key2' being asked for! -$ write sys$output - +$ write sys$output - "-CONFIG_H-I-REVIEW, Manual Code review required!" -$ goto cfgh_in_loop1 -$ endif +$ goto cfgh_in_loop1 +$ endif $! $! -$! These libraries are provided by the DEC C RTL +$! These libraries are provided by the DEC C RTL $!------------------------------------------------------------- -$ if keysym .eqs. "LIBINET" .or. keysym .eqs. "LIBSOCKET" -$ then -$ write tf "#ifndef HAVE_''keysym'" -$ write tf "#define HAVE_''keysym' 1" +$ if keysym .eqs. "LIBINET" .or. keysym .eqs. "LIBSOCKET" +$ then +$ write tf "#ifndef HAVE_''keysym'" +$ write tf "#define HAVE_''keysym' 1" $if p2 .nes. "" then write sys$output "''decc_shr' #define ''keysym' 1" -$ write tf "#endif -$ goto cfgh_in_loop1 -$ endif -$! -$ if keysym .eqs. "HERRNO" then keysym = "h_errno" -$ if keysym .eqs. "UTIMBUF" then keysym = "utimbuf" -$ if key2c .eqs. "STRUCT" -$ then -$ keysym = f$edit(key2d,"LOWERCASE") -$ else -$ if key2_h .eqs. "_T" -$ then -$ if key2_t .eqs. "_TYPE" -$ then -$ keysym = f$extract(0, key2_len - 5, key2) - "HAVE_" -$ endif -$ keysym = f$edit(keysym,"LOWERCASE") -$ endif -$ endif -$! -$! Check the DEC C RTL shared image first +$ write tf "#endif +$ goto cfgh_in_loop1 +$ endif +$! +$ if keysym .eqs. "HERRNO" then keysym = "h_errno" +$ if keysym .eqs. "UTIMBUF" then keysym = "utimbuf" +$ if key2c .eqs. "STRUCT" +$ then +$ keysym = f$edit(key2d,"LOWERCASE") +$ else +$ if key2_h .eqs. "_T" +$ then +$ if key2_t .eqs. "_TYPE" +$ then +$ keysym = f$extract(0, key2_len - 5, key2) - "HAVE_" +$ endif +$ keysym = f$edit(keysym,"LOWERCASE") +$ endif +$ endif +$! +$! Check the DEC C RTL shared image first $!------------------------------------------------------ -$ if f$search(tfile1) .nes. "" then delete 'tfile1';* -$ define/user sys$output nl: -$ define/user sys$error nl: -$ search/format=nonull/out='tfile1' 'decc_shr' 'keysym' -$ if '$severity' .eq. 1 -$ then -$! -$! Not documented, but from observation +$ if f$search(tfile1) .nes. "" then delete 'tfile1';* +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/format=nonull/out='tfile1' 'decc_shr' 'keysym' +$ if '$severity' .eq. 1 +$ then +$! +$! Not documented, but from observation $!------------------------------------------------------ -$ define/user sys$output nl: -$ define/user sys$error nl: -$ if arch_type .eq. 3 -$ then -$ keyterm = "''keysym'" -$ else -$ if arch_type .eq. 2 -$ then -$ keyterm = "''keysym'" -$ else -$ keyterm = "''keysym'" -$ endif -$ endif -$ search/out=nl: 'tfile1' - +$ define/user sys$output nl: +$ define/user sys$error nl: +$ if arch_type .eq. 3 +$ then +$ keyterm = "''keysym'" +$ else +$ if arch_type .eq. 2 +$ then +$ keyterm = "''keysym'" +$ else +$ keyterm = "''keysym'" +$ endif +$ endif +$ search/out=nl: 'tfile1' - "$''keyterm'","$g''keyterm'","$__utc_''keyterm'",- "$__utctz_''keyterm'","$__bsd44_''keyterm'","$bsd_''keyterm'",- "$''keysym'decc$","$G''keysym'decc$","$GX''keyterm'" -$ severity = '$severity' +$ severity = '$severity' $! $! -$! Of course the 64 bit stuff is different +$! Of course the 64 bit stuff is different $!--------------------------------------------------------- -$ if severity .ne. 1 .and. key64 -$ then -$ define/user sys$output nl: -$ define/user sys$error nl: -$ search/out=nl: 'tfile1' "$_''keyterm'" -$! search/out 'tfile1' "$_''keyterm'" -$ severity = '$severity' -$ endif -$! -$! Unix compatibility routines +$ if severity .ne. 1 .and. key64 +$ then +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/out=nl: 'tfile1' "$_''keyterm'" +$! search/out 'tfile1' "$_''keyterm'" +$ severity = '$severity' +$ endif +$! +$! Unix compatibility routines $!--------------------------------------------- -$ if severity .ne. 1 -$ then -$ define/user sys$output nl: -$ define/user sys$error nl: -$ search/out=nl: 'tfile1' - +$ if severity .ne. 1 +$ then +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/out=nl: 'tfile1' - "$__unix_''keyterm'","$__vms_''keyterm'","$_posix_''keyterm'" -$ severity = '$severity' -$ endif +$ severity = '$severity' +$ endif $! -$! Show the result of the search +$! Show the result of the search $!------------------------------------------------ -$ if 'severity' .eq. 1 -$ then -$ if key64 then write tf "#ifndef __VAX" -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" +$ if 'severity' .eq. 1 +$ then +$ if key64 then write tf "#ifndef __VAX" +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" $if p2 .nes. "" then write sys$output "''decc_shr' #define ''key2' 1" -$ write tf "#endif" -$ if key64 then write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ endif -$ if f$search(tfile1) .nes. "" then delete 'tfile1';* -$! -$! Check the DECC Header files next +$ write tf "#endif" +$ if key64 then write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ endif +$ if f$search(tfile1) .nes. "" then delete 'tfile1';* +$! +$! Check the DECC Header files next $!---------------------------------------------- -$ define/user sys$output nl: -$ define/user sys$error nl: -$ search/out=nl: 'decc_rtldef' - - "''keysym';", "''keysym'[", "struct ''keysym'"/exact -$ severity = '$severity' -$ if severity .eq. 1 -$ then -$ if key64 then write tf "#ifndef __VAX" -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" +$ define/user sys$output nl: +$ define/user sys$error nl: +$ search/out=nl: 'decc_rtldef' - + "''keysym';", "''keysym'[", "struct ''keysym'"/exact +$ severity = '$severity' +$ if severity .eq. 1 +$ then +$ if key64 then write tf "#ifndef __VAX" +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" $if p2 .nes. "" then write sys$output "''decc_rtldef' #define ''key2' 1" -$ write tf "#endif" -$ if key64 then write tf "#endif" -$ goto cfgh_in_loop1 -$ endif +$ write tf "#endif" +$ if key64 then write tf "#endif" +$ goto cfgh_in_loop1 +$ endif $! -$! Check kerberos +$! Check kerberos $!-------------------------------------------- -$ if f$search("SYS$SYSROOT:[kerberos]include.dir") .nes. "" -$ then -$ test_mit = "SYS$SYSROOT:[kerberos.include]gssapi_krb5.h" -$ if (key2 .eqs. "HAVE_GSSAPI") -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ endif -$! -$ endif -$ write tf "/* ", xline, " */" -$ goto cfgh_in_loop1 -$ endif -$! -$! -$! Process SIZEOF directives found in SAMBA and others +$ if f$search("SYS$SYSROOT:[kerberos]include.dir") .nes. "" +$ then +$ test_mit = "SYS$SYSROOT:[kerberos.include]gssapi_krb5.h" +$ if (key2 .eqs. "HAVE_GSSAPI") +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ endif +$! +$ endif +$ write tf "/* ", xline, " */" +$ goto cfgh_in_loop1 +$ endif +$! +$! +$! Process SIZEOF directives found in SAMBA and others $!---------------------------------------------------------- -$ if key2a .eqs. "SIZEOF" -$ then -$ if key2b .eqs. "INO" .and. key2_h .eqs. "_T" -$ then -$ write tf "#ifndef SIZEOF_INO_T" -$ write tf "#if !__USING_STD_STAT -$ write tf "#define SIZEOF_INO_T 6" -$ write tf "#else -$ write tf "#define SIZEOF_INO_T 8" -$ write tf "#endif -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2b .eqs. "INTMAX" .and. key2_h .eqs. "_T" -$ then -$ write tf "#ifndef SIZEOF_INTMAX_T" -$ write tf "#ifdef __VAX" -$ write tf "#define SIZEOF_INTMAX_T 4" -$ write tf "#else" -$ write tf "#define SIZEOF_INTMAX_T 8" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2b .eqs. "OFF" .and. key2_h .eqs. "_T" -$ then -$ write tf "#ifndef SIZEOF_OFF_T" -$ write tf "#if __USE_OFF64_T" -$ write tf "#define SIZEOF_OFF_T 8" -$ write tf "#else" -$ write tf "#define SIZEOF_OFF_T 4" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2b .eqs. "CHAR" .and. key2_h .eqs. "_P" -$ then -$ write tf "#ifndef SIZEOF_CHAR_P" -$ write tf "#if __INITIAL_POINTER_SIZE == 64" -$ write tf "#define SIZEOF_CHAR_P 8" -$ write tf "#else" -$ write tf "#define SIZEOF_CHAR_P 4" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2b .eqs. "VOIDP" -$ then -$ write tf "#ifndef SIZEOF_VOIDP" -$ write tf "#if __INITIAL_POINTER_SIZE == 64" -$ write tf "#define SIZEOF_VOIDP 8" -$ write tf "#else" -$ write tf "#define SIZEOF_VOIDP 4" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2b .eqs. "INT" -$ then -$ write tf "#ifndef SIZEOF_INT" -$ write tf "#define SIZEOF_INT 4" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2b .eqs. "SIZE" .and. key2_h .eqs. "_T" -$ then -$ write tf "#ifndef SIZEOF_SIZE_T" -$ write tf "#define SIZEOF_SIZE_T 4" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2b .eqs. "TIME" .and. key2_h .eqs. "_T" -$ then -$ write tf "#ifndef SIZEOF_TIME_T" -$ write tf "#define SIZEOF_TIME_T 4" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2b .eqs. "DOUBLE" -$ then -$ write tf "#ifndef SIZEOF_DOUBLE" -$ write tf "#define SIZEOF_DOUBLE 8" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2b .eqs. "LONG" -$ then -$ if key2c .eqs. "" -$ then -$ write tf "#ifndef SIZEOF_LONG" -$ write tf "#define SIZEOF_LONG 4" -$ write tf "#endif" -$ else -$ write tf "#ifndef SIZEOF_LONG_LONG" -$ write tf "#ifndef __VAX" -$ write tf "#define SIZEOF_LONG_LONG 8" -$ write tf "#endif" -$ write tf "#endif" -$ endif -$ goto cfgh_in_loop1 -$ endif -$ write tf "/* ", xline, " */" -$ goto cfgh_in_loop1 -$ endif -$! -$! Process NEED directives +$ if key2a .eqs. "SIZEOF" +$ then +$ if key2b .eqs. "INO" .and. key2_h .eqs. "_T" +$ then +$ write tf "#ifndef SIZEOF_INO_T" +$ write tf "#if !__USING_STD_STAT +$ write tf "#define SIZEOF_INO_T 6" +$ write tf "#else +$ write tf "#define SIZEOF_INO_T 8" +$ write tf "#endif +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "INTMAX" .and. key2_h .eqs. "_T" +$ then +$ write tf "#ifndef SIZEOF_INTMAX_T" +$ write tf "#ifdef __VAX" +$ write tf "#define SIZEOF_INTMAX_T 4" +$ write tf "#else" +$ write tf "#define SIZEOF_INTMAX_T 8" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "OFF" .and. key2_h .eqs. "_T" +$ then +$ write tf "#ifndef SIZEOF_OFF_T" +$ write tf "#if __USE_OFF64_T" +$ write tf "#define SIZEOF_OFF_T 8" +$ write tf "#else" +$ write tf "#define SIZEOF_OFF_T 4" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "CHAR" .and. key2_h .eqs. "_P" +$ then +$ write tf "#ifndef SIZEOF_CHAR_P" +$ write tf "#if __INITIAL_POINTER_SIZE == 64" +$ write tf "#define SIZEOF_CHAR_P 8" +$ write tf "#else" +$ write tf "#define SIZEOF_CHAR_P 4" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "VOIDP" +$ then +$ write tf "#ifndef SIZEOF_VOIDP" +$ write tf "#if __INITIAL_POINTER_SIZE == 64" +$ write tf "#define SIZEOF_VOIDP 8" +$ write tf "#else" +$ write tf "#define SIZEOF_VOIDP 4" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "INT" +$ then +$ write tf "#ifndef SIZEOF_INT" +$ write tf "#define SIZEOF_INT 4" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "SIZE" .and. key2_h .eqs. "_T" +$ then +$ write tf "#ifndef SIZEOF_SIZE_T" +$ write tf "#define SIZEOF_SIZE_T 4" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "TIME" .and. key2_h .eqs. "_T" +$ then +$ write tf "#ifndef SIZEOF_TIME_T" +$ write tf "#define SIZEOF_TIME_T 4" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "DOUBLE" +$ then +$ write tf "#ifndef SIZEOF_DOUBLE" +$ write tf "#define SIZEOF_DOUBLE 8" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2b .eqs. "LONG" +$ then +$ if key2c .eqs. "" +$ then +$ write tf "#ifndef SIZEOF_LONG" +$ write tf "#define SIZEOF_LONG 4" +$ write tf "#endif" +$ else +$ write tf "#ifndef SIZEOF_LONG_LONG" +$ write tf "#ifndef __VAX" +$ write tf "#define SIZEOF_LONG_LONG 8" +$ write tf "#endif" +$ write tf "#endif" +$ endif +$ goto cfgh_in_loop1 +$ endif +$ write tf "/* ", xline, " */" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process NEED directives $!------------------------------- -$ if key2a .eqs. "NEED" -$ then -$ if key2b .eqs. "STRINGS" .and. key2_h .eqs. "_H" -$ then -$ write tf "#ifndef NEED_STRINGS_H" -$ write tf "#define NEED_STRINGS_H 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ write tf "/* ", xline, " */" -$ goto cfgh_in_loop1 -$ endif -$! -$! Process GETHOSTNAME directives +$ if key2a .eqs. "NEED" +$ then +$ if key2b .eqs. "STRINGS" .and. key2_h .eqs. "_H" +$ then +$ write tf "#ifndef NEED_STRINGS_H" +$ write tf "#define NEED_STRINGS_H 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ write tf "/* ", xline, " */" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process GETHOSTNAME directives $!------------------------------------- -$ if key2 .eqs. "GETHOSTNAME_TYPE_ARG2" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#ifdef _DECC_V4_SOURCE" -$ write tf "#define ''key2' int" -$ write tf "#else" -$ write tf "#define ''key2' size_t" -$ write tf "#endif" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! Process GETNAMEINFO directives +$ if key2 .eqs. "GETHOSTNAME_TYPE_ARG2" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#ifdef _DECC_V4_SOURCE" +$ write tf "#define ''key2' int" +$ write tf "#else" +$ write tf "#define ''key2' size_t" +$ write tf "#endif" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process GETNAMEINFO directives $!------------------------------------- -$ if key2a .eqs. "GETNAMEINFO" -$ then -$ if key2 .eqs. "GETNAMEINFO_QUAL_ARG1" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' const" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG1" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' struct sockaddr *" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG2" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' size_t" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG46" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' size_t" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG7" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ endif -$! -$! Process RECV directives +$ if key2a .eqs. "GETNAMEINFO" +$ then +$ if key2 .eqs. "GETNAMEINFO_QUAL_ARG1" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' const" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG1" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' struct sockaddr *" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG2" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' size_t" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG46" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' size_t" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "GETNAMEINFO_TYPE_ARG7" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ endif +$! +$! Process RECV directives $!------------------------------------- -$ if key2a .eqs. "RECV" -$ then -$ if key2 .eqs. "RECV_TYPE_ARG1" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "RECV_TYPE_ARG2" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' void *" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "RECV_TYPE_ARG3" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' size_t" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "RECV_TYPE_ARG4" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "RECV_TYPE_RETV" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ endif -$! -$! Process SEND directives +$ if key2a .eqs. "RECV" +$ then +$ if key2 .eqs. "RECV_TYPE_ARG1" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "RECV_TYPE_ARG2" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' void *" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "RECV_TYPE_ARG3" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' size_t" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "RECV_TYPE_ARG4" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "RECV_TYPE_RETV" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ endif +$! +$! Process SEND directives $!------------------------------------- -$ if key2a .eqs. "SEND" -$ then -$ if key2 .eqs. "SEND_QUAL_ARG2" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' const" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "SEND_TYPE_ARG1" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "SEND_TYPE_ARG2" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' void *" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "SEND_TYPE_ARG3" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' size_t" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "SEND_TYPE_ARG4" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ if key2 .eqs. "SEND_TYPE_RETV" -$ then -$ write tf "#ifndef ''key2'" -$ write tf "#define ''key2' int" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$ endif -$! -$! -$! Process STATFS directives +$ if key2a .eqs. "SEND" +$ then +$ if key2 .eqs. "SEND_QUAL_ARG2" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' const" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "SEND_TYPE_ARG1" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "SEND_TYPE_ARG2" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' void *" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "SEND_TYPE_ARG3" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' size_t" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "SEND_TYPE_ARG4" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ if key2 .eqs. "SEND_TYPE_RETV" +$ then +$ write tf "#ifndef ''key2'" +$ write tf "#define ''key2' int" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$ endif +$! +$! +$! Process STATFS directives $!------------------------------- -$! if key2a .eqs. "STATFS" -$! then -$! write tf "/* ", xline, " */" -$! goto cfgh_in_loop1 -$! endif +$! if key2a .eqs. "STATFS" +$! then +$! write tf "/* ", xline, " */" +$! goto cfgh_in_loop1 +$! endif $! -$! Process inline directive +$! Process inline directive $!------------------------------ -$ if key2 .eqs. "inline" -$ then -$ write tf "#ifndef inline" -$ write tf "#define inline __inline" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! Process restrict directive +$ if key2 .eqs. "inline" +$ then +$ write tf "#ifndef inline" +$ write tf "#define inline __inline" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process restrict directive $!-------------------------------- -$ if key2 .eqs. "restrict" -$ then -$ write tf "#ifndef restrict" -$ write tf "#define restrict __restrict" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! Process STDC_HEADERS (SAMBA!) +$ if key2 .eqs. "restrict" +$ then +$ write tf "#ifndef restrict" +$ write tf "#define restrict __restrict" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process STDC_HEADERS (SAMBA!) $!--------------------------- -$ if key2 .eqs. "STDC_HEADERS" -$ then -$ write tf "#ifndef STDC_HEADERS" -$ write tf "#define STDC_HEADERS 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! Process PROTOTYPES directive +$ if key2 .eqs. "STDC_HEADERS" +$ then +$ write tf "#ifndef STDC_HEADERS" +$ write tf "#define STDC_HEADERS 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Process PROTOTYPES directive $!------------------------------------- -$ if key2 .eqs. "PROTOTYPES" -$ then -$ write tf "#ifndef PROTOTYPES" -$ write tf "#define PROTOTYPES 1" -$ write tf "#endif" -$ goto cfgh_in_loop1 -$ endif -$! -$! Special for SEEKDIR_RETURNS_VOID +$ if key2 .eqs. "PROTOTYPES" +$ then +$ write tf "#ifndef PROTOTYPES" +$ write tf "#define PROTOTYPES 1" +$ write tf "#endif" +$ goto cfgh_in_loop1 +$ endif +$! +$! Special for SEEKDIR_RETURNS_VOID $!--------------------------------------- -$ if key2 .eqs. "SEEKDIR_RETURNS_VOID" -$ then -$ write tf "#ifndef SEEKDIR_RETURNS_VOID" -$ write tf "#define SEEKDIR_RETURNS_VOID 1" -$ write tf "#endif" -$ endif -$! -$! Unknown - See if CONFIGURE can give a clue for this +$ if key2 .eqs. "SEEKDIR_RETURNS_VOID" +$ then +$ write tf "#ifndef SEEKDIR_RETURNS_VOID" +$ write tf "#define SEEKDIR_RETURNS_VOID 1" +$ write tf "#endif" +$ endif +$! +$! Unknown - See if CONFIGURE can give a clue for this $!---------------------------------------------------------- -$ pflag = 0 -$ set_flag = 0 -$! gproj_name = proj_name - "_VMS" - "-VMS" -$ if f$search(tfile1) .nes. "" then delete 'tfile1';* -$ define/user sys$output nl: -$ define/user sys$error nl: -$! if f$locate("FILE", key2) .lt. key2_len then pflag = 1 -$! if f$locate("DIR", key2) .eq. key2_len - 3 then pflag = 1 -$! if f$locate("PATH", key2) .eq. key2_len - 4 then pflag = 1 -$! -$ search/out='tfile1' 'configure_script' "''key2'="/exact -$ search_sev = '$severity' -$ if 'search_sev' .eq. 1 -$ then -$ open/read/err=unknown_cf_rd_error sf 'tfile1' +$ pflag = 0 +$ set_flag = 0 +$! gproj_name = proj_name - "_VMS" - "-VMS" +$ if f$search(tfile1) .nes. "" then delete 'tfile1';* +$ define/user sys$output nl: +$ define/user sys$error nl: +$! if f$locate("FILE", key2) .lt. key2_len then pflag = 1 +$! if f$locate("DIR", key2) .eq. key2_len - 3 then pflag = 1 +$! if f$locate("PATH", key2) .eq. key2_len - 4 then pflag = 1 +$! +$ search/out='tfile1' 'configure_script' "''key2'="/exact +$ search_sev = '$severity' +$ if 'search_sev' .eq. 1 +$ then +$ open/read/err=unknown_cf_rd_error sf 'tfile1' $search_file_rd_loop: -$ read/end=unknown_cf_rd_err sf line_in -$ line_in = f$edit(line_in, "TRIM") -$ skey1 = f$element(0,"=",line_in) -$ if skey1 .eqs. key2 -$ then -$ skey2 = f$element(1,"=",line_in) -$ skey2a = f$extract(0,2,skey2) +$ read/end=unknown_cf_rd_err sf line_in +$ line_in = f$edit(line_in, "TRIM") +$ skey1 = f$element(0,"=",line_in) +$ if skey1 .eqs. key2 +$ then +$ skey2 = f$element(1,"=",line_in) +$ skey2a = f$extract(0,2,skey2) $! $! -$! We can not handle assignment to shell symbols. -$! For now skip them. +$! We can not handle assignment to shell symbols. +$! For now skip them. $!------------------------------------------------------------ -$ if f$locate("$", skey2) .lt. f$length(skey2) -$ then -$ write tf "/* ", xline, " */" -$ set_flag = 1 -$ goto found_in_configure -$ endif -$! -$! Keep these two cases separate to make it easier to add -$! more future intelligence to this routine +$ if f$locate("$", skey2) .lt. f$length(skey2) +$ then +$ write tf "/* ", xline, " */" +$ set_flag = 1 +$ goto found_in_configure +$ endif +$! +$! Keep these two cases separate to make it easier to add +$! more future intelligence to this routine $!---------------------------------------------------------------------- -$ if skey2a .eqs. """`" -$ then -$! if pflag .eq. 1 -$! then -$! write tf "#ifndef ''key2'" -$! write tf "#define ",key2," """,gproj_name,"_",key2,"""" -$! write tf "#endif" -$! else -$! Ignore this for now +$ if skey2a .eqs. """`" +$ then +$! if pflag .eq. 1 +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ",key2," """,gproj_name,"_",key2,"""" +$! write tf "#endif" +$! else +$! Ignore this for now $!------------------------------------------ -$ write tf "/* ", xline, " */" -$! endif -$ set_flag = 1 -$ goto found_in_configure -$ endif -$ if skey2a .eqs. """$" -$ then -$! if pflag .eq. 1 -$! then -$! write tf "#ifndef ''key2'" -$! write tf "#define ",key2," """,gproj_name,"_",key2,"""" -$! write tf "#endif" -$! else -$! Ignore this for now +$ write tf "/* ", xline, " */" +$! endif +$ set_flag = 1 +$ goto found_in_configure +$ endif +$ if skey2a .eqs. """$" +$ then +$! if pflag .eq. 1 +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ",key2," """,gproj_name,"_",key2,"""" +$! write tf "#endif" +$! else +$! Ignore this for now $!------------------------------------------- -$ write tf "/* ", xline, " */" -$! endif -$ set_flag = 1 -$ goto found_in_configure -$ endif +$ write tf "/* ", xline, " */" +$! endif +$ set_flag = 1 +$ goto found_in_configure +$ endif $! -$! Remove multiple layers of quotes if present +$! Remove multiple layers of quotes if present $!---------------------------------------------------------- -$ if f$extract(0, 1, skey2) .eqs. "'" -$ then -$ skey2 = skey2 - "'" - "'" - "'" - "'" -$ endif -$ if f$extract(0, 1, skey2) .eqs. """" -$ then -$ skey2 = skey2 - """" - """" - """" - """" -$ endif -$ write tf "#ifndef ''key2'" -$ if skey2 .eqs. "" -$ then -$ write tf "#define ",key2 -$ else -$! Only quote non-numbers +$ if f$extract(0, 1, skey2) .eqs. "'" +$ then +$ skey2 = skey2 - "'" - "'" - "'" - "'" +$ endif +$ if f$extract(0, 1, skey2) .eqs. """" +$ then +$ skey2 = skey2 - """" - """" - """" - """" +$ endif +$ write tf "#ifndef ''key2'" +$ if skey2 .eqs. "" +$ then +$ write tf "#define ",key2 +$ else +$! Only quote non-numbers $!---------------------------------------- -$ if f$string(skey2+0) .eqs. skey2 -$ then -$ write tf "#define ",key2," ",skey2 -$ else -$ write tf "#define ",key2," """,skey2,"""" -$ endif -$ endif -$ write tf "#endif" -$ set_flag = 1 -$ else -$ goto search_file_rd_loop -$! if pflag .eq. 1 -$! then -$! write tf "#ifndef ''key2'" -$! write tf "#define ",key2," """,gproj_name,"_",key2,"""" -$! write tf "#endif" -$! set_flag = 1 -$! endif -$ endif +$ if f$string(skey2+0) .eqs. skey2 +$ then +$ write tf "#define ",key2," ",skey2 +$ else +$ write tf "#define ",key2," """,skey2,"""" +$ endif +$ endif +$ write tf "#endif" +$ set_flag = 1 +$ else +$ goto search_file_rd_loop +$! if pflag .eq. 1 +$! then +$! write tf "#ifndef ''key2'" +$! write tf "#define ",key2," """,gproj_name,"_",key2,"""" +$! write tf "#endif" +$! set_flag = 1 +$! endif +$ endif $found_in_configure: $unknown_cf_rd_err: -$ if f$trnlnm("sf","lnm$process",,"SUPERVISOR") .nes. "" -$ then -$ close sf -$ endif -$ if f$search(tfile1) .nes. "" then delete 'tfile1';* -$ if set_flag .eq. 1 then goto cfgh_in_loop1 -$ endif +$ if f$trnlnm("sf","lnm$process",,"SUPERVISOR") .nes. "" +$ then +$ close sf +$ endif +$ if f$search(tfile1) .nes. "" then delete 'tfile1';* +$ if set_flag .eq. 1 then goto cfgh_in_loop1 +$ endif $ endif $! $! diff --git a/packages/vms/curlmsg.msg b/packages/vms/curlmsg.msg index ac2d508e3..8d428e88b 100644 --- a/packages/vms/curlmsg.msg +++ b/packages/vms/curlmsg.msg @@ -39,96 +39,96 @@ ! ! If you update this file also update curlmsg_vms.h so that they are in sync ! -.TITLE CURLMSG Message files -.FACILITY CURL,1793 /PREFIX=CURL_ -.BASE 1 -.SEVERITY SUCCESS -OK +.TITLE CURLMSG Message files +.FACILITY CURL,1793 /PREFIX=CURL_ +.BASE 1 +.SEVERITY SUCCESS +OK -.SEVERITY ERROR -UNSUPPORTED_PROTOCOL -FAILED_INIT -URL_MALFORMAT -OBSOLETE4 -COULDNT_RESOLVE_PROXY -COULDNT_RESOLVE_HOST -COULDNT_CONNECT -WEIRD_SERVER_REPLY -FTP_ACCESS_DENIED -OBSOLETE10 -FTP_WEIRD_PASS_REPLY -OBSOLETE12 -FTP_WEIRD_PASV_REPLY -FTP_WEIRD_227_FORMAT -FTP_CANT_GET_HOST -OBSOLETE16 -FTP_COULDNT_SET_TYPE -PARTIAL_FILE -FTP_COULDNT_RETR_FILE -OBSOLETE20 -QUOTE_ERROR -HTTP_RETURNED_ERROR -WRITE_ERROR -OBSOLETE24 -UPLOAD_FAILED -READ_ERROR -OUT_OF_MEMORY -OPERATION_TIMEOUTED -OBSOLETE29 -FTP_PORT_FAILED -FTP_COULDNT_USE_REST -OBSOLETE32 -RANGE_ERROR -HTTP_POST_ERROR -SSL_CONNECT_ERROR -BAD_DOWNLOAD_RESUME -FILE_COULDNT_READ_FILE -LDAP_CANNOT_BIND -LDAP_SEARCH_FAILED -OBSOLETE40 -FUNCTION_NOT_FOUND -ABORTED_BY_CALLBACK -BAD_FUNCTION_ARGUMENT -OBSOLETE44 -INTERFACE_FAILED -OBSOLETE46 -TOO_MANY_REDIRECTS -UNKNOWN_TELNET_OPTION -TELNET_OPTION_SYNTAX -OBSOLETE50 -PEER_FAILED_VERIF -GOT_NOTHING -SSL_ENGINE_NOTFOUND -SSL_ENGINE_SETFAILED -SEND_ERROR -RECV_ERROR -OBSOLETE57 -SSL_CERTPROBLEM +.SEVERITY ERROR +UNSUPPORTED_PROTOCOL +FAILED_INIT +URL_MALFORMAT +OBSOLETE4 +COULDNT_RESOLVE_PROXY +COULDNT_RESOLVE_HOST +COULDNT_CONNECT +WEIRD_SERVER_REPLY +FTP_ACCESS_DENIED +OBSOLETE10 +FTP_WEIRD_PASS_REPLY +OBSOLETE12 +FTP_WEIRD_PASV_REPLY +FTP_WEIRD_227_FORMAT +FTP_CANT_GET_HOST +OBSOLETE16 +FTP_COULDNT_SET_TYPE +PARTIAL_FILE +FTP_COULDNT_RETR_FILE +OBSOLETE20 +QUOTE_ERROR +HTTP_RETURNED_ERROR +WRITE_ERROR +OBSOLETE24 +UPLOAD_FAILED +READ_ERROR +OUT_OF_MEMORY +OPERATION_TIMEOUTED +OBSOLETE29 +FTP_PORT_FAILED +FTP_COULDNT_USE_REST +OBSOLETE32 +RANGE_ERROR +HTTP_POST_ERROR +SSL_CONNECT_ERROR +BAD_DOWNLOAD_RESUME +FILE_COULDNT_READ_FILE +LDAP_CANNOT_BIND +LDAP_SEARCH_FAILED +OBSOLETE40 +FUNCTION_NOT_FOUND +ABORTED_BY_CALLBACK +BAD_FUNCTION_ARGUMENT +OBSOLETE44 +INTERFACE_FAILED +OBSOLETE46 +TOO_MANY_REDIRECTS +UNKNOWN_TELNET_OPTION +TELNET_OPTION_SYNTAX +OBSOLETE50 +PEER_FAILED_VERIF +GOT_NOTHING +SSL_ENGINE_NOTFOUND +SSL_ENGINE_SETFAILED +SEND_ERROR +RECV_ERROR +OBSOLETE57 +SSL_CERTPROBLEM SSL_CIPHER -SSL_CACERT -BAD_CONTENT_ENCODING -LDAP_INVALID_URL -FILESIZE_EXCEEDED -USE_SSL_FAILED -SEND_FAIL_REWIND -SSL_ENGINE_INITFAILED -LOGIN_DENIED -TFTP_NOTFOUND -TFTP_PERM -REMOTE_DISK_FULL -TFTP_ILLEGAL -TFTP_UNKNOWNID -REMOTE_FILE_EXISTS -TFTP_NOSUCHUSER -CONV_FAILED -CONV_REQD -SSL_CACERT_BADFILE -REMOTE_FILE_NOT_FOUND -SSH -SSL_SHUTDOWN_FAILED -AGAIN -SSL_CRL_BADFILE -SSL_ISSUER_ERROR -CURL_LAST +SSL_CACERT +BAD_CONTENT_ENCODING +LDAP_INVALID_URL +FILESIZE_EXCEEDED +USE_SSL_FAILED +SEND_FAIL_REWIND +SSL_ENGINE_INITFAILED +LOGIN_DENIED +TFTP_NOTFOUND +TFTP_PERM +REMOTE_DISK_FULL +TFTP_ILLEGAL +TFTP_UNKNOWNID +REMOTE_FILE_EXISTS +TFTP_NOSUCHUSER +CONV_FAILED +CONV_REQD +SSL_CACERT_BADFILE +REMOTE_FILE_NOT_FOUND +SSH +SSL_SHUTDOWN_FAILED +AGAIN +SSL_CRL_BADFILE +SSL_ISSUER_ERROR +CURL_LAST .END diff --git a/packages/vms/curlmsg_vms.h b/packages/vms/curlmsg_vms.h index bb6470221..29a38db49 100644 --- a/packages/vms/curlmsg_vms.h +++ b/packages/vms/curlmsg_vms.h @@ -52,92 +52,92 @@ */ static const long vms_cond[] = - { - CURL_OK, - CURL_UNSUPPORTED_PROTOCOL, - CURL_FAILED_INIT, - CURL_URL_MALFORMAT, - CURL_OBSOLETE4, - CURL_COULDNT_RESOLVE_PROXY, - CURL_COULDNT_RESOLVE_HOST, - CURL_COULDNT_CONNECT, - CURL_WEIRD_SERVER_REPLY, - CURL_FTP_ACCESS_DENIED, - CURL_OBSOLETE10, - CURL_FTP_WEIRD_PASS_REPLY, - CURL_OBSOLETE12, - CURL_FTP_WEIRD_PASV_REPLY, - CURL_FTP_WEIRD_227_FORMAT, - CURL_FTP_CANT_GET_HOST, - CURL_OBSOLETE16, - CURL_FTP_COULDNT_SET_TYPE, - CURL_PARTIAL_FILE, - CURL_FTP_COULDNT_RETR_FILE, - CURL_OBSOLETE20, - CURL_QUOTE_ERROR, - CURL_HTTP_RETURNED_ERROR, - CURL_WRITE_ERROR, - CURL_OBSOLETE24, - CURL_UPLOAD_FAILED, - CURL_READ_ERROR, - CURL_OUT_OF_MEMORY, - CURL_OPERATION_TIMEOUTED, - CURL_OBSOLETE29, - CURL_FTP_PORT_FAILED, - CURL_FTP_COULDNT_USE_REST, - CURL_OBSOLETE32, - CURL_RANGE_ERROR, - CURL_HTTP_POST_ERROR, - CURL_SSL_CONNECT_ERROR, - CURL_BAD_DOWNLOAD_RESUME, - CURL_FILE_COULDNT_READ_FILE, - CURL_LDAP_CANNOT_BIND, - CURL_LDAP_SEARCH_FAILED, - CURL_OBSOLETE40, - CURL_FUNCTION_NOT_FOUND, - CURL_ABORTED_BY_CALLBACK, - CURL_BAD_FUNCTION_ARGUMENT, - CURL_OBSOLETE44, - CURL_INTERFACE_FAILED, - CURL_OBSOLETE46, - CURL_TOO_MANY_REDIRECTS, - CURL_UNKNOWN_TELNET_OPTION, - CURL_TELNET_OPTION_SYNTAX, - CURL_OBSOLETE50, - CURL_PEER_FAILED_VERIF, - CURL_GOT_NOTHING, - CURL_SSL_ENGINE_NOTFOUND, - CURL_SSL_ENGINE_SETFAILED, - CURL_SEND_ERROR, - CURL_RECV_ERROR, - CURL_OBSOLETE57, - CURL_SSL_CERTPROBLEM, - CURL_SSL_CIPHER, - CURL_SSL_CACERT, - CURL_BAD_CONTENT_ENCODING, - CURL_LDAP_INVALID_URL, - CURL_FILESIZE_EXCEEDED, - CURL_USE_SSL_FAILED, - CURL_SEND_FAIL_REWIND, - CURL_SSL_ENGINE_INITFAILED, - CURL_LOGIN_DENIED, - CURL_TFTP_NOTFOUND, - CURL_TFTP_PERM, - CURL_REMOTE_DISK_FULL, - CURL_TFTP_ILLEGAL, - CURL_TFTP_UNKNOWNID, - CURL_REMOTE_FILE_EXISTS, - CURL_TFTP_NOSUCHUSER, - CURL_CONV_FAILED, - CURL_CONV_REQD, - CURL_SSL_CACERT_BADFILE, - CURL_REMOTE_FILE_NOT_FOUND, - CURL_SSH, - CURL_SSL_SHUTDOWN_FAILED, - CURL_AGAIN, - CURLE_SSL_CRL_BADFILE, - CURLE_SSL_ISSUER_ERROR, - CURL_CURL_LAST - }; +{ + CURL_OK, + CURL_UNSUPPORTED_PROTOCOL, + CURL_FAILED_INIT, + CURL_URL_MALFORMAT, + CURL_OBSOLETE4, + CURL_COULDNT_RESOLVE_PROXY, + CURL_COULDNT_RESOLVE_HOST, + CURL_COULDNT_CONNECT, + CURL_WEIRD_SERVER_REPLY, + CURL_FTP_ACCESS_DENIED, + CURL_OBSOLETE10, + CURL_FTP_WEIRD_PASS_REPLY, + CURL_OBSOLETE12, + CURL_FTP_WEIRD_PASV_REPLY, + CURL_FTP_WEIRD_227_FORMAT, + CURL_FTP_CANT_GET_HOST, + CURL_OBSOLETE16, + CURL_FTP_COULDNT_SET_TYPE, + CURL_PARTIAL_FILE, + CURL_FTP_COULDNT_RETR_FILE, + CURL_OBSOLETE20, + CURL_QUOTE_ERROR, + CURL_HTTP_RETURNED_ERROR, + CURL_WRITE_ERROR, + CURL_OBSOLETE24, + CURL_UPLOAD_FAILED, + CURL_READ_ERROR, + CURL_OUT_OF_MEMORY, + CURL_OPERATION_TIMEOUTED, + CURL_OBSOLETE29, + CURL_FTP_PORT_FAILED, + CURL_FTP_COULDNT_USE_REST, + CURL_OBSOLETE32, + CURL_RANGE_ERROR, + CURL_HTTP_POST_ERROR, + CURL_SSL_CONNECT_ERROR, + CURL_BAD_DOWNLOAD_RESUME, + CURL_FILE_COULDNT_READ_FILE, + CURL_LDAP_CANNOT_BIND, + CURL_LDAP_SEARCH_FAILED, + CURL_OBSOLETE40, + CURL_FUNCTION_NOT_FOUND, + CURL_ABORTED_BY_CALLBACK, + CURL_BAD_FUNCTION_ARGUMENT, + CURL_OBSOLETE44, + CURL_INTERFACE_FAILED, + CURL_OBSOLETE46, + CURL_TOO_MANY_REDIRECTS, + CURL_UNKNOWN_TELNET_OPTION, + CURL_TELNET_OPTION_SYNTAX, + CURL_OBSOLETE50, + CURL_PEER_FAILED_VERIF, + CURL_GOT_NOTHING, + CURL_SSL_ENGINE_NOTFOUND, + CURL_SSL_ENGINE_SETFAILED, + CURL_SEND_ERROR, + CURL_RECV_ERROR, + CURL_OBSOLETE57, + CURL_SSL_CERTPROBLEM, + CURL_SSL_CIPHER, + CURL_SSL_CACERT, + CURL_BAD_CONTENT_ENCODING, + CURL_LDAP_INVALID_URL, + CURL_FILESIZE_EXCEEDED, + CURL_USE_SSL_FAILED, + CURL_SEND_FAIL_REWIND, + CURL_SSL_ENGINE_INITFAILED, + CURL_LOGIN_DENIED, + CURL_TFTP_NOTFOUND, + CURL_TFTP_PERM, + CURL_REMOTE_DISK_FULL, + CURL_TFTP_ILLEGAL, + CURL_TFTP_UNKNOWNID, + CURL_REMOTE_FILE_EXISTS, + CURL_TFTP_NOSUCHUSER, + CURL_CONV_FAILED, + CURL_CONV_REQD, + CURL_SSL_CACERT_BADFILE, + CURL_REMOTE_FILE_NOT_FOUND, + CURL_SSH, + CURL_SSL_SHUTDOWN_FAILED, + CURL_AGAIN, + CURLE_SSL_CRL_BADFILE, + CURLE_SSL_ISSUER_ERROR, + 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 99a39c844..623cd5fe7 100644 --- a/packages/vms/generate_config_vms_h_curl.com +++ b/packages/vms/generate_config_vms_h_curl.com @@ -71,8 +71,8 @@ $! ssl$* logicals means HP ssl is present $!---------------------------------------- $ if f$trnlnm("ssl$root") .nes. "" $ then -$ nohpssl = 0 -$ hpssl = 1 +$ nohpssl = 0 +$ hpssl = 1 $ endif $! $! HP defines OPENSSL as SSL$INCLUDE as a convenience for linking. @@ -83,25 +83,25 @@ $!------------------------------------ $ openssl_lnm = f$trnlnm("OPENSSL") $ if (openssl_lnm .nes. "SYS$INCLUDE") $ then -$! Non HP SSL is installed, default to use it. -$ nohpssl = 1 -$ hpssl = 0 +$! Non HP SSL is installed, default to use it. +$ nohpssl = 1 +$ hpssl = 0 $ endif $! $! Now check to see if hpssl has been specifically disabled $!---------------------------------------------------------- $ if f$locate(",nohpssl,", args_lower) .lt. args_len $ then -$ nohpssl = 1 -$ hpssl = 0 +$ nohpssl = 1 +$ hpssl = 0 $ endif $! $! Finally check to see if hp ssl has been specifically included. $!---------------------------------------------------------------- $ if f$locate(",nohpssl,", args_lower) .lt. args_len $ then -$ nohpssl = 1 -$ hpssl = 0 +$ nohpssl = 1 +$ hpssl = 0 $ endif $endif $! @@ -113,14 +113,14 @@ $ write sys$output "NOTICE: A LIBIDN port has been detected." $ write sys$output " This port of curl for VMS has not been tested with it." $ if f$locate(",libidn,", args_lower) .lt. args_len $ then -$ libidn = 1 +$ libidn = 1 $ endif $ if .not. libidn $ then -$ write sys$output " LIBIDN support is not enabled." -$ write sys$output "Run with the ""libidn"" parameter to attempt to use." +$ write sys$output " LIBIDN support is not enabled." +$ write sys$output "Run with the ""libidn"" parameter to attempt to use." $ else -$ write sys$output " Untested LIBIDN support requested." +$ write sys$output " Untested LIBIDN support requested." $ endif $endif $! @@ -132,14 +132,14 @@ $ write sys$output "NOTICE: A LIBSSH2 port has been detected." $ write sys$output " This port of curl for VMS has not been tested with it." $ if f$locate(",libssh2,", args_lower) .lt. args_len $ then -$ libssh2 = 1 +$ libssh2 = 1 $ endif $ if .not. libssh2 $ then -$ write sys$output " LIBSSH2 support is not enabled." -$ write sys$output "Run with the ""libssh2"" parameter to attempt to use." +$ write sys$output " LIBSSH2 support is not enabled." +$ write sys$output "Run with the ""libssh2"" parameter to attempt to use." $ else -$ write sys$output " Untested LIBSSH2 support requested." +$ write sys$output " Untested LIBSSH2 support requested." $ endif $endif $! @@ -159,7 +159,7 @@ $then $! If kerberos is installed: sys$share:gss$rtl.exe exists. $ if f$search("sys$shsare:gss$rtl.exe") .eqs. "" $ then -$ nokerberos = 1 +$ nokerberos = 1 $ endif $endif $! @@ -170,13 +170,13 @@ $if f$trnlnm("GNV$LIBZSHR") .nes. "" $then $ if f$locate(",nozlib,", args_lower) .lt. args_len $ then -$ nozlib = 1 +$ nozlib = 1 $ endif $! if .not. nozlib $! then -$! write sys$output " GNV$LIBZSHR support is enabled." +$! write sys$output " GNV$LIBZSHR support is enabled." $! else -$! write sys$output " GNV$LIBZSHR support is disabled by nozlib." +$! write sys$output " GNV$LIBZSHR support is disabled by nozlib." $! endif $else $ nozlib = 1 @@ -262,9 +262,9 @@ $ write cvh "#undef CURL_DISABLE_LDAP" $ write cvh "#endif" $ if .not. nossl $ then -$ write cvh "#ifdef CURL_DISABLE_LDAPS" -$ write cvh "#undef CURL_DISABLE_LDAPS" -$ write cvh "#endif" +$ write cvh "#ifdef CURL_DISABLE_LDAPS" +$ write cvh "#undef CURL_DISABLE_LDAPS" +$ write cvh "#endif" $ endif $endif $write cvh "#ifdef CURL_DISABLE_LIBCURL_OPTION" @@ -394,7 +394,7 @@ $ endif $endif $! $! -$! LibIDN not ported to VMS at this time. +$! libidn not ported to VMS at this time. $! This is for international domain name support. $! Allow explicit experimentation. $if libidn @@ -410,7 +410,7 @@ $ write cvh "#endif" $endif $! $! -$! LibSSH2 not ported to VMS at this time. +$! libssh2 not ported to VMS at this time. $! Allow explicit experimentation. $if libssh2 $then diff --git a/packages/vms/gnv_link_curl.com b/packages/vms/gnv_link_curl.com index 247987ae8..552d7d45d 100644 --- a/packages/vms/gnv_link_curl.com +++ b/packages/vms/gnv_link_curl.com @@ -400,6 +400,7 @@ $ link'ldebug'/exe=[.src]curl.exe/dsf=[.src]curl.dsf - [.src]curl-tool_bname.o, [.src]curl-tool_cb_dbg.o, - [.src]curl-tool_cb_hdr.o, [.src]curl-tool_cb_prg.o, - [.src]curl-tool_cb_rea.o, [.src]curl-tool_cb_see.o, - + [.src]curl-tool_cb_soc.o, - [.src]curl-tool_cb_wrt.o, [.src]curl-tool_cfgable.o, - [.src]curl-tool_convert.o, [.src]curl-tool_dirhie.o, - [.src]curl-tool_doswin.o, [.src]curl-tool_easysrc.o, - diff --git a/packages/vms/readme b/packages/vms/readme index 0bb61663c..eaf23e942 100644 --- a/packages/vms/readme +++ b/packages/vms/readme @@ -138,7 +138,7 @@ pcsi_product_gnv_curl.com readme. This file. report_openssl_version.c - Program to check that the openssl version is new + Program to check that the OpenSSL version is new enough for building a shared libcurl image. setup_gnv_curl_build.com diff --git a/packages/vms/report_openssl_version.c b/packages/vms/report_openssl_version.c index 64e1ee052..158303011 100644 --- a/packages/vms/report_openssl_version.c +++ b/packages/vms/report_openssl_version.c @@ -1,6 +1,6 @@ /* File: report_openssl_version.c * - * This file dynamically loads the openssl shared image to report the + * This file dynamically loads the OpenSSL shared image to report the * version string. * * It will optionally place that version string in a DCL symbol. diff --git a/packages/vms/setup_gnv_curl_build.com b/packages/vms/setup_gnv_curl_build.com index 8404ec3c0..1685b6a2f 100644 --- a/packages/vms/setup_gnv_curl_build.com +++ b/packages/vms/setup_gnv_curl_build.com @@ -102,7 +102,7 @@ $ define/job decc$system_include prj_root:[.include.curl],- gnv$zlib_include:,- sys$sysroot:[kerberos.include] $! -$! Set up a include list for the compiler to find all the header files +$! Set up an include list for the compiler to find all the header files $! that they need. $! $ define/job decc$user_include src_root:[.include.curl] diff --git a/projects/README.md b/projects/README.md index 9b18ccd33..0e77f50ef 100644 --- a/projects/README.md +++ b/projects/README.md @@ -8,10 +8,17 @@ Building via IDE Project Files ============================== This document describes how to compile, build and install curl and libcurl -from sources using an IDE based development tool such as Visual Studio. +from sources using legacy versions of Visual Studio 2010 - 2013. -Project files are available for several different Visual C++ versions. The -following directory structure has been used to cater for this: +You will need to generate the project files before using them. Please run +"generate -help" for usage details. + +To generate project files for recent versions of Visual Studio instead, use +cmake. Refer to INSTALL-CMAKE in the docs directory. + +## Directory Structure + +The following directory structure is used for the legacy project files: somedirectory\ |_curl @@ -78,55 +85,52 @@ has a default version of Visual C++. We offer these versions: - VC10 (Visual Studio 2010 Version 10.0) - VC11 (Visual Studio 2012 Version 11.0) - VC12 (Visual Studio 2013 Version 12.0) - - VC14 (Visual Studio 2015 Version 14.0) - - VC14.10 (Visual Studio 2017 Version 15.0) - - VC14.30 (Visual Studio 2022 Version 17.0) Separate solutions are provided for both libcurl and the curl command line tool as well as a solution that includes both projects. libcurl.sln, curl.sln and curl-all.sln, respectively. We recommend using curl-all.sln to build both projects. -For example, if you are using Visual Studio 2022 then you should be able to -use `VC14.30\curl-all.sln` to build curl and libcurl. +For example, if you are using Visual Studio 2010 then you should be able to +use `VC10\curl-all.sln` to build curl and libcurl. ## Running DLL based configurations If you are a developer and plan to run the curl tool from Visual Studio with -any third-party libraries (such as OpenSSL, wolfSSL or LibSSH2) then you will +any third-party libraries (such as OpenSSL, wolfSSL or libssh2) then you will need to add the search path of these DLLs to the configuration's PATH environment. To do that: 1. Open the 'curl-all.sln' or 'curl.sln' solutions 2. Right-click on the 'curl' project and select Properties 3. Navigate to 'Configuration Properties > Debugging > Environment' - 4. Add `PATH='Path to DLL';C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem` + 4. Add `PATH='Path to DLL';C:\Windows\System32;C:\Windows;C:\Windows\System32\Wbem` ... where 'Path to DLL` is the configuration specific path. For example the following configurations in Visual Studio 2010 might be: DLL Debug - DLL OpenSSL (Win32): - PATH=..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;C:\Windows\system32; + PATH=..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;C:\Windows\System32; C:\Windows;C:\Windows\System32\Wbem DLL Debug - DLL OpenSSL (x64): - PATH=..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;C:\Windows\system32; + PATH=..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;C:\Windows\System32; C:\Windows;C:\Windows\System32\Wbem DLL Debug - DLL wolfSSL (Win32): - PATH=..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Debug;C:\Windows\system32; + PATH=..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Debug;C:\Windows\System32; C:\Windows;C:\Windows\System32\Wbem DLL Debug - DLL wolfSSL (x64): - PATH=..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Debug;C:\Windows\system32; + PATH=..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Debug;C:\Windows\System32; C:\Windows;C:\Windows\System32\Wbem If you are using a configuration that uses multiple third-party library DLLs -(such as DLL Debug - DLL OpenSSL - DLL LibSSH2) then 'Path to DLL' will need +(such as DLL Debug - DLL OpenSSL - DLL libssh2) then 'Path to DLL' will need to contain the path to both of these. ## Notes @@ -139,10 +143,6 @@ The following keywords have been used in the directory hierarchy: - `` - The target configuration (For example: DLL Debug, LIB Release - LIB OpenSSL) -If you are using the source code from the git repository, rather than a -release archive or nightly build, you will need to generate the project -files. Please run "generate -help" for usage details. - Should you wish to help out with some of the items on the TODO list, or find bugs in the project files that need correcting, and would like to submit updated files back then please note that, whilst the solution files can be diff --git a/projects/Windows/.gitattributes b/projects/Windows/.gitattributes deleted file mode 100644 index e6cf93574..000000000 --- a/projects/Windows/.gitattributes +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -*.sln eol=crlf diff --git a/projects/Windows/.gitignore b/projects/Windows/.gitignore deleted file mode 100644 index 257839afe..000000000 --- a/projects/Windows/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -VC*/src/*curl.vcproj.dist -VC*/lib/*curl.vcproj.dist -VC*/src/*curl.vcxproj.dist -VC*/lib/*curl.vcxproj.dist diff --git a/projects/Windows/VC10/.gitignore b/projects/Windows/VC10/.gitignore deleted file mode 100644 index 53e3845a5..000000000 --- a/projects/Windows/VC10/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.ncb -/*.opensdf -/*.sdf -/*.suo diff --git a/projects/Windows/VC10/curl-all.sln b/projects/Windows/VC10/curl-all.sln deleted file mode 100644 index 7bd131c35..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/.gitignore b/projects/Windows/VC10/lib/.gitignore deleted file mode 100644 index 853b57dbc..000000000 --- a/projects/Windows/VC10/lib/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.ncb -/*.opensdf -/*.sdf -/*.suo -/*.user -/*.vcxproj diff --git a/projects/Windows/VC10/lib/libcurl.sln b/projects/Windows/VC10/lib/libcurl.sln deleted file mode 100644 index 15461ef9a..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.tmpl b/projects/Windows/VC10/lib/libcurl.tmpl deleted file mode 100644 index 7a37c270f..000000000 --- a/projects/Windows/VC10/lib/libcurl.tmpl +++ /dev/null @@ -1,2353 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - -CURL_LIB_C_FILES -CURL_LIB_VAUTH_C_FILES -CURL_LIB_VQUIC_C_FILES -CURL_LIB_VSSH_C_FILES -CURL_LIB_VTLS_C_FILES - - -CURL_LIB_H_FILES -CURL_LIB_VAUTH_H_FILES -CURL_LIB_VQUIC_H_FILES -CURL_LIB_VSSH_H_FILES -CURL_LIB_VTLS_H_FILES - - -CURL_LIB_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC10/lib/libcurl.vcxproj b/projects/Windows/VC10/lib/libcurl.vcxproj deleted file mode 100644 index b2b552339..000000000 --- a/projects/Windows/VC10/lib/libcurl.vcxproj +++ /dev/null @@ -1,2651 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - StaticLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - DynamicLibrary - false - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/Windows/VC10/lib/libcurl.vcxproj.filters b/projects/Windows/VC10/lib/libcurl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC10/lib/libcurl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC10/src/.gitignore b/projects/Windows/VC10/src/.gitignore deleted file mode 100644 index 853b57dbc..000000000 --- a/projects/Windows/VC10/src/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.ncb -/*.opensdf -/*.sdf -/*.suo -/*.user -/*.vcxproj diff --git a/projects/Windows/VC10/src/curl.sln b/projects/Windows/VC10/src/curl.sln deleted file mode 100644 index 131f27b7a..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.tmpl b/projects/Windows/VC10/src/curl.tmpl deleted file mode 100644 index 5e24977a4..000000000 --- a/projects/Windows/VC10/src/curl.tmpl +++ /dev/null @@ -1,2643 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - -CURL_SRC_X_C_FILES -CURL_SRC_C_FILES - - -CURL_SRC_X_H_FILES -CURL_SRC_H_FILES - - -CURL_SRC_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC10/src/curl.vcxproj b/projects/Windows/VC10/src/curl.vcxproj deleted file mode 100644 index 61abb6631..000000000 --- a/projects/Windows/VC10/src/curl.vcxproj +++ /dev/null @@ -1,2736 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - Application - false - Unicode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - ..\..\..\..\build\Win32\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - ..\..\..\..\build\Win64\VC10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/Windows/VC10/src/curl.vcxproj.filters b/projects/Windows/VC10/src/curl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC10/src/curl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC11/.gitignore b/projects/Windows/VC11/.gitignore deleted file mode 100644 index 53e3845a5..000000000 --- a/projects/Windows/VC11/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.ncb -/*.opensdf -/*.sdf -/*.suo diff --git a/projects/Windows/VC11/curl-all.sln b/projects/Windows/VC11/curl-all.sln deleted file mode 100644 index bec0ad84c..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/.gitignore b/projects/Windows/VC11/lib/.gitignore deleted file mode 100644 index 853b57dbc..000000000 --- a/projects/Windows/VC11/lib/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.ncb -/*.opensdf -/*.sdf -/*.suo -/*.user -/*.vcxproj diff --git a/projects/Windows/VC11/lib/libcurl.sln b/projects/Windows/VC11/lib/libcurl.sln deleted file mode 100644 index 780dc91a2..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.tmpl b/projects/Windows/VC11/lib/libcurl.tmpl deleted file mode 100644 index 95cc9f6ca..000000000 --- a/projects/Windows/VC11/lib/libcurl.tmpl +++ /dev/null @@ -1,2409 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - -CURL_LIB_C_FILES -CURL_LIB_VAUTH_C_FILES -CURL_LIB_VQUIC_C_FILES -CURL_LIB_VSSH_C_FILES -CURL_LIB_VTLS_C_FILES - - -CURL_LIB_H_FILES -CURL_LIB_VAUTH_H_FILES -CURL_LIB_VQUIC_H_FILES -CURL_LIB_VSSH_H_FILES -CURL_LIB_VTLS_H_FILES - - -CURL_LIB_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC11/lib/libcurl.vcxproj b/projects/Windows/VC11/lib/libcurl.vcxproj deleted file mode 100644 index 31ba79097..000000000 --- a/projects/Windows/VC11/lib/libcurl.vcxproj +++ /dev/null @@ -1,2707 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - StaticLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - DynamicLibrary - false - Unicode - v110 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC11\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC11\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC11/src/.gitignore b/projects/Windows/VC11/src/.gitignore deleted file mode 100644 index 853b57dbc..000000000 --- a/projects/Windows/VC11/src/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.ncb -/*.opensdf -/*.sdf -/*.suo -/*.user -/*.vcxproj diff --git a/projects/Windows/VC11/src/curl.sln b/projects/Windows/VC11/src/curl.sln deleted file mode 100644 index e12253e9b..000000000 --- a/projects/Windows/VC11/src/curl.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}") = "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/VC11/src/curl.tmpl b/projects/Windows/VC11/src/curl.tmpl deleted file mode 100644 index 31df7d640..000000000 --- a/projects/Windows/VC11/src/curl.tmpl +++ /dev/null @@ -1,2699 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - -CURL_SRC_X_C_FILES -CURL_SRC_C_FILES - - -CURL_SRC_X_H_FILES -CURL_SRC_H_FILES - - -CURL_SRC_RC_FILES - - - - - \ 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 4e1434f72..000000000 --- a/projects/Windows/VC11/src/curl.vcxproj +++ /dev/null @@ -1,2792 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - Application - false - Unicode - v110 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - ..\..\..\..\build\Win32\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - ..\..\..\..\build\Win64\VC11\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC12/.gitignore b/projects/Windows/VC12/.gitignore deleted file mode 100644 index 53e3845a5..000000000 --- a/projects/Windows/VC12/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.ncb -/*.opensdf -/*.sdf -/*.suo diff --git a/projects/Windows/VC12/curl-all.sln b/projects/Windows/VC12/curl-all.sln deleted file mode 100644 index 38b33e6f5..000000000 --- a/projects/Windows/VC12/curl-all.sln +++ /dev/null @@ -1,298 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -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/VC12/lib/.gitignore b/projects/Windows/VC12/lib/.gitignore deleted file mode 100644 index 853b57dbc..000000000 --- a/projects/Windows/VC12/lib/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.ncb -/*.opensdf -/*.sdf -/*.suo -/*.user -/*.vcxproj diff --git a/projects/Windows/VC12/lib/libcurl.sln b/projects/Windows/VC12/lib/libcurl.sln deleted file mode 100644 index 860a06028..000000000 --- a/projects/Windows/VC12/lib/libcurl.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}") = "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/VC12/lib/libcurl.tmpl b/projects/Windows/VC12/lib/libcurl.tmpl deleted file mode 100644 index a2d666c25..000000000 --- a/projects/Windows/VC12/lib/libcurl.tmpl +++ /dev/null @@ -1,2409 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - -CURL_LIB_C_FILES -CURL_LIB_VAUTH_C_FILES -CURL_LIB_VQUIC_C_FILES -CURL_LIB_VSSH_C_FILES -CURL_LIB_VTLS_C_FILES - - -CURL_LIB_H_FILES -CURL_LIB_VAUTH_H_FILES -CURL_LIB_VQUIC_H_FILES -CURL_LIB_VSSH_H_FILES -CURL_LIB_VTLS_H_FILES - - -CURL_LIB_RC_FILES - - - - - \ 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 c3c4cbe24..000000000 --- a/projects/Windows/VC12/lib/libcurl.vcxproj +++ /dev/null @@ -1,2707 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - StaticLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - DynamicLibrary - false - Unicode - v120 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC12\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC12\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC12/src/.gitignore b/projects/Windows/VC12/src/.gitignore deleted file mode 100644 index 853b57dbc..000000000 --- a/projects/Windows/VC12/src/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.ncb -/*.opensdf -/*.sdf -/*.suo -/*.user -/*.vcxproj diff --git a/projects/Windows/VC12/src/curl.sln b/projects/Windows/VC12/src/curl.sln deleted file mode 100644 index 7b5244c1f..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.tmpl b/projects/Windows/VC12/src/curl.tmpl deleted file mode 100644 index 77c244e40..000000000 --- a/projects/Windows/VC12/src/curl.tmpl +++ /dev/null @@ -1,2699 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - -CURL_SRC_X_C_FILES -CURL_SRC_C_FILES - - -CURL_SRC_X_H_FILES -CURL_SRC_H_FILES - - -CURL_SRC_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC12/src/curl.vcxproj b/projects/Windows/VC12/src/curl.vcxproj deleted file mode 100644 index 13d5203d1..000000000 --- a/projects/Windows/VC12/src/curl.vcxproj +++ /dev/null @@ -1,2792 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - Application - false - Unicode - v120 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - ..\..\..\..\build\Win32\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - ..\..\..\..\build\Win64\VC12\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC14.10/.gitignore b/projects/Windows/VC14.10/.gitignore deleted file mode 100644 index 11504d2c1..000000000 --- a/projects/Windows/VC14.10/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opendb -/*.opensdf -/*.sdf -/*.vc.db -/.vs diff --git a/projects/Windows/VC14.10/curl-all.sln b/projects/Windows/VC14.10/curl-all.sln deleted file mode 100644 index e563caeea..000000000 --- a/projects/Windows/VC14.10/curl-all.sln +++ /dev/null @@ -1,298 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -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/VC14.10/lib/.gitignore b/projects/Windows/VC14.10/lib/.gitignore deleted file mode 100644 index 5baee8342..000000000 --- a/projects/Windows/VC14.10/lib/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opensdf -/*.sdf -/*.user -/*.vc.db -/*.vcxproj -/.vs diff --git a/projects/Windows/VC14.10/lib/libcurl.sln b/projects/Windows/VC14.10/lib/libcurl.sln deleted file mode 100644 index 595bdb209..000000000 --- a/projects/Windows/VC14.10/lib/libcurl.sln +++ /dev/null @@ -1,181 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -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/VC14.10/lib/libcurl.tmpl b/projects/Windows/VC14.10/lib/libcurl.tmpl deleted file mode 100644 index 5560ad6a2..000000000 --- a/projects/Windows/VC14.10/lib/libcurl.tmpl +++ /dev/null @@ -1,2381 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - -CURL_LIB_C_FILES -CURL_LIB_VAUTH_C_FILES -CURL_LIB_VQUIC_C_FILES -CURL_LIB_VSSH_C_FILES -CURL_LIB_VTLS_C_FILES - - -CURL_LIB_H_FILES -CURL_LIB_VAUTH_H_FILES -CURL_LIB_VQUIC_H_FILES -CURL_LIB_VSSH_H_FILES -CURL_LIB_VTLS_H_FILES - - -CURL_LIB_RC_FILES - - - - - \ 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 e72a75258..000000000 --- a/projects/Windows/VC14.10/lib/libcurl.vcxproj +++ /dev/null @@ -1,2679 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - StaticLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - DynamicLibrary - false - Unicode - v141 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.10\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/Windows/VC14.10/lib/libcurl.vcxproj.filters b/projects/Windows/VC14.10/lib/libcurl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC14.10/lib/libcurl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC14.10/src/.gitignore b/projects/Windows/VC14.10/src/.gitignore deleted file mode 100644 index 5baee8342..000000000 --- a/projects/Windows/VC14.10/src/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opensdf -/*.sdf -/*.user -/*.vc.db -/*.vcxproj -/.vs diff --git a/projects/Windows/VC14.10/src/curl.sln b/projects/Windows/VC14.10/src/curl.sln deleted file mode 100644 index 2af095916..000000000 --- a/projects/Windows/VC14.10/src/curl.sln +++ /dev/null @@ -1,181 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -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/VC14.10/src/curl.tmpl b/projects/Windows/VC14.10/src/curl.tmpl deleted file mode 100644 index 307b4b167..000000000 --- a/projects/Windows/VC14.10/src/curl.tmpl +++ /dev/null @@ -1,2671 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - -CURL_SRC_X_C_FILES -CURL_SRC_C_FILES - - -CURL_SRC_X_H_FILES -CURL_SRC_H_FILES - - -CURL_SRC_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC14.10/src/curl.vcxproj b/projects/Windows/VC14.10/src/curl.vcxproj deleted file mode 100644 index 95e21edf7..000000000 --- a/projects/Windows/VC14.10/src/curl.vcxproj +++ /dev/null @@ -1,2764 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - Application - false - Unicode - v141 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.10\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14.10\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14.10\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.10\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.10\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/Windows/VC14.10/src/curl.vcxproj.filters b/projects/Windows/VC14.10/src/curl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC14.10/src/curl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC14.20/.gitignore b/projects/Windows/VC14.20/.gitignore deleted file mode 100644 index 11504d2c1..000000000 --- a/projects/Windows/VC14.20/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opendb -/*.opensdf -/*.sdf -/*.vc.db -/.vs diff --git a/projects/Windows/VC14.20/curl-all.sln b/projects/Windows/VC14.20/curl-all.sln deleted file mode 100644 index 992310090..000000000 --- a/projects/Windows/VC14.20/curl-all.sln +++ /dev/null @@ -1,298 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# 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} - 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/VC14.20/lib/.gitignore b/projects/Windows/VC14.20/lib/.gitignore deleted file mode 100644 index 5baee8342..000000000 --- a/projects/Windows/VC14.20/lib/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opensdf -/*.sdf -/*.user -/*.vc.db -/*.vcxproj -/.vs diff --git a/projects/Windows/VC14.20/lib/libcurl.sln b/projects/Windows/VC14.20/lib/libcurl.sln deleted file mode 100644 index e34b5eb5d..000000000 --- a/projects/Windows/VC14.20/lib/libcurl.sln +++ /dev/null @@ -1,181 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 17 -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/VC14.20/lib/libcurl.tmpl b/projects/Windows/VC14.20/lib/libcurl.tmpl deleted file mode 100644 index ff88b4220..000000000 --- a/projects/Windows/VC14.20/lib/libcurl.tmpl +++ /dev/null @@ -1,2381 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - StaticLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - DynamicLibrary - false - Unicode - v142 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.20\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.20\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.20\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.20\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.20\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.20\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - -CURL_LIB_C_FILES -CURL_LIB_VAUTH_C_FILES -CURL_LIB_VQUIC_C_FILES -CURL_LIB_VSSH_C_FILES -CURL_LIB_VTLS_C_FILES - - -CURL_LIB_H_FILES -CURL_LIB_VAUTH_H_FILES -CURL_LIB_VQUIC_H_FILES -CURL_LIB_VSSH_H_FILES -CURL_LIB_VTLS_H_FILES - - -CURL_LIB_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC14.20/lib/libcurl.vcxproj.filters b/projects/Windows/VC14.20/lib/libcurl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC14.20/lib/libcurl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC14.20/src/.gitignore b/projects/Windows/VC14.20/src/.gitignore deleted file mode 100644 index 5baee8342..000000000 --- a/projects/Windows/VC14.20/src/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opensdf -/*.sdf -/*.user -/*.vc.db -/*.vcxproj -/.vs diff --git a/projects/Windows/VC14.20/src/curl.sln b/projects/Windows/VC14.20/src/curl.sln deleted file mode 100644 index 5cfa4ce24..000000000 --- a/projects/Windows/VC14.20/src/curl.sln +++ /dev/null @@ -1,181 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 16 -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/VC14.20/src/curl.tmpl b/projects/Windows/VC14.20/src/curl.tmpl deleted file mode 100644 index 85c71768b..000000000 --- a/projects/Windows/VC14.20/src/curl.tmpl +++ /dev/null @@ -1,2671 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - Application - false - Unicode - v142 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.20\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.20\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.20\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.20\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.20\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.20\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.20\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.20\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.20\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.20\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14.20\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.20\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14.20\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.20\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14.20\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.20\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14.20\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.20\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.20\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.20\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.20\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.20\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.20\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.20\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - -CURL_SRC_X_C_FILES -CURL_SRC_C_FILES - - -CURL_SRC_X_H_FILES -CURL_SRC_H_FILES - - -CURL_SRC_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC14.20/src/curl.vcxproj.filters b/projects/Windows/VC14.20/src/curl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC14.20/src/curl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC14.30/.gitignore b/projects/Windows/VC14.30/.gitignore deleted file mode 100644 index 11504d2c1..000000000 --- a/projects/Windows/VC14.30/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opendb -/*.opensdf -/*.sdf -/*.vc.db -/.vs diff --git a/projects/Windows/VC14.30/curl-all.sln b/projects/Windows/VC14.30/curl-all.sln deleted file mode 100644 index fc56613f9..000000000 --- a/projects/Windows/VC14.30/curl-all.sln +++ /dev/null @@ -1,298 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 17 -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/VC14.30/lib/.gitignore b/projects/Windows/VC14.30/lib/.gitignore deleted file mode 100644 index 5baee8342..000000000 --- a/projects/Windows/VC14.30/lib/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opensdf -/*.sdf -/*.user -/*.vc.db -/*.vcxproj -/.vs diff --git a/projects/Windows/VC14.30/lib/libcurl.sln b/projects/Windows/VC14.30/lib/libcurl.sln deleted file mode 100644 index e34b5eb5d..000000000 --- a/projects/Windows/VC14.30/lib/libcurl.sln +++ /dev/null @@ -1,181 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 17 -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/VC14.30/lib/libcurl.tmpl b/projects/Windows/VC14.30/lib/libcurl.tmpl deleted file mode 100644 index a7afb4f23..000000000 --- a/projects/Windows/VC14.30/lib/libcurl.tmpl +++ /dev/null @@ -1,2381 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - -CURL_LIB_C_FILES -CURL_LIB_VAUTH_C_FILES -CURL_LIB_VQUIC_C_FILES -CURL_LIB_VSSH_C_FILES -CURL_LIB_VTLS_C_FILES - - -CURL_LIB_H_FILES -CURL_LIB_VAUTH_H_FILES -CURL_LIB_VQUIC_H_FILES -CURL_LIB_VSSH_H_FILES -CURL_LIB_VTLS_H_FILES - - -CURL_LIB_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC14.30/lib/libcurl.vcxproj b/projects/Windows/VC14.30/lib/libcurl.vcxproj deleted file mode 100644 index a1ffcb591..000000000 --- a/projects/Windows/VC14.30/lib/libcurl.vcxproj +++ /dev/null @@ -1,2679 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - StaticLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - DynamicLibrary - false - Unicode - v143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14.30\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/Windows/VC14.30/lib/libcurl.vcxproj.filters b/projects/Windows/VC14.30/lib/libcurl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC14.30/lib/libcurl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC14.30/src/.gitignore b/projects/Windows/VC14.30/src/.gitignore deleted file mode 100644 index 5baee8342..000000000 --- a/projects/Windows/VC14.30/src/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opensdf -/*.sdf -/*.user -/*.vc.db -/*.vcxproj -/.vs diff --git a/projects/Windows/VC14.30/src/curl.sln b/projects/Windows/VC14.30/src/curl.sln deleted file mode 100644 index 2c16858fd..000000000 --- a/projects/Windows/VC14.30/src/curl.sln +++ /dev/null @@ -1,181 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 17 -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/VC14.30/src/curl.tmpl b/projects/Windows/VC14.30/src/curl.tmpl deleted file mode 100644 index 2d8772ef7..000000000 --- a/projects/Windows/VC14.30/src/curl.tmpl +++ /dev/null @@ -1,2671 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - -CURL_SRC_X_C_FILES -CURL_SRC_C_FILES - - -CURL_SRC_X_H_FILES -CURL_SRC_H_FILES - - -CURL_SRC_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC14.30/src/curl.vcxproj b/projects/Windows/VC14.30/src/curl.vcxproj deleted file mode 100644 index 3f4cf7439..000000000 --- a/projects/Windows/VC14.30/src/curl.vcxproj +++ /dev/null @@ -1,2764 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - Application - false - Unicode - v143 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win32\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - ..\..\..\..\build\Win64\VC14.30\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14.30\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14.30\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14.30\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14.30\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14.30\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/Windows/VC14.30/src/curl.vcxproj.filters b/projects/Windows/VC14.30/src/curl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC14.30/src/curl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC14/.gitignore b/projects/Windows/VC14/.gitignore deleted file mode 100644 index 11504d2c1..000000000 --- a/projects/Windows/VC14/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opendb -/*.opensdf -/*.sdf -/*.vc.db -/.vs diff --git a/projects/Windows/VC14/curl-all.sln b/projects/Windows/VC14/curl-all.sln deleted file mode 100644 index 05820e1f4..000000000 --- a/projects/Windows/VC14/curl-all.sln +++ /dev/null @@ -1,298 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2015 -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/VC14/lib/.gitignore b/projects/Windows/VC14/lib/.gitignore deleted file mode 100644 index 5baee8342..000000000 --- a/projects/Windows/VC14/lib/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opensdf -/*.sdf -/*.user -/*.vc.db -/*.vcxproj -/.vs diff --git a/projects/Windows/VC14/lib/libcurl.sln b/projects/Windows/VC14/lib/libcurl.sln deleted file mode 100644 index cd8afe248..000000000 --- a/projects/Windows/VC14/lib/libcurl.sln +++ /dev/null @@ -1,181 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2015 -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/VC14/lib/libcurl.tmpl b/projects/Windows/VC14/lib/libcurl.tmpl deleted file mode 100644 index 07823b293..000000000 --- a/projects/Windows/VC14/lib/libcurl.tmpl +++ /dev/null @@ -1,2409 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - -CURL_LIB_C_FILES -CURL_LIB_VAUTH_C_FILES -CURL_LIB_VQUIC_C_FILES -CURL_LIB_VSSH_C_FILES -CURL_LIB_VTLS_C_FILES - - -CURL_LIB_H_FILES -CURL_LIB_VAUTH_H_FILES -CURL_LIB_VQUIC_H_FILES -CURL_LIB_VSSH_H_FILES -CURL_LIB_VTLS_H_FILES - - -CURL_LIB_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC14/lib/libcurl.vcxproj b/projects/Windows/VC14/lib/libcurl.vcxproj deleted file mode 100644 index b0cc5dcf7..000000000 --- a/projects/Windows/VC14/lib/libcurl.vcxproj +++ /dev/null @@ -1,2707 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} - libcurl - - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - StaticLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - DynamicLibrary - false - Unicode - v140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)lib\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)lib\ - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WOLFSSL;USE_IPV6;WOLFSSL_DLL;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\wolfssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - 4214 - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;..\..\..\..\..\wolfssl\wolfssl;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WOLFSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - 4214 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - %(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - _DEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - Win32 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(IntDir)$(TargetFileName).intermediate.manifest - $(TargetDir)$(TargetName).lib - MachineX86 - - - - - NDEBUG;%(PreprocessorDefinitions) - true - X64 - $(OutDir)$(ProjectName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - $(TargetDir)$(TargetName).lib - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Debug\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - _DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\DLL Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Release\include;..\..\..\..\..\openssl\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win32\VC14\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX86 - - - - - X64 - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\include\..\build\Win64\VC14\LIB Release\include;..\..\..\..\..\openssl\include;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories) - NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;USE_IPV6;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - - - $(OutDir)$(TargetName)$(TargetExt) - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/Windows/VC14/lib/libcurl.vcxproj.filters b/projects/Windows/VC14/lib/libcurl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC14/lib/libcurl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/Windows/VC14/src/.gitignore b/projects/Windows/VC14/src/.gitignore deleted file mode 100644 index 5baee8342..000000000 --- a/projects/Windows/VC14/src/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -/*.opensdf -/*.sdf -/*.user -/*.vc.db -/*.vcxproj -/.vs diff --git a/projects/Windows/VC14/src/curl.sln b/projects/Windows/VC14/src/curl.sln deleted file mode 100644 index b40c18bed..000000000 --- a/projects/Windows/VC14/src/curl.sln +++ /dev/null @@ -1,181 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2015 -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/VC14/src/curl.tmpl b/projects/Windows/VC14/src/curl.tmpl deleted file mode 100644 index 9f0e54b4c..000000000 --- a/projects/Windows/VC14/src/curl.tmpl +++ /dev/null @@ -1,2699 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - -CURL_SRC_X_C_FILES -CURL_SRC_C_FILES - - -CURL_SRC_X_H_FILES -CURL_SRC_H_FILES - - -CURL_SRC_RC_FILES - - - - - \ No newline at end of file diff --git a/projects/Windows/VC14/src/curl.vcxproj b/projects/Windows/VC14/src/curl.vcxproj deleted file mode 100644 index 40655d54e..000000000 --- a/projects/Windows/VC14/src/curl.vcxproj +++ /dev/null @@ -1,2792 +0,0 @@ - - - - - DLL Debug - DLL wolfSSL - Win32 - - - DLL Debug - DLL wolfSSL - x64 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Debug - DLL OpenSSL - Win32 - - - DLL Debug - DLL OpenSSL - x64 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Debug - DLL Windows SSPI - Win32 - - - DLL Debug - DLL Windows SSPI - x64 - - - DLL Debug - Win32 - - - DLL Debug - x64 - - - DLL Release - DLL wolfSSL - Win32 - - - DLL Release - DLL wolfSSL - x64 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - DLL Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - DLL Release - DLL OpenSSL - Win32 - - - DLL Release - DLL OpenSSL - x64 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - DLL Release - DLL Windows SSPI - DLL WinIDN - x64 - - - DLL Release - DLL Windows SSPI - Win32 - - - DLL Release - DLL Windows SSPI - x64 - - - DLL Release - Win32 - - - DLL Release - x64 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Debug - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Debug - DLL OpenSSL - Win32 - - - LIB Debug - DLL OpenSSL - x64 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Debug - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Debug - DLL Windows SSPI - Win32 - - - LIB Debug - DLL Windows SSPI - x64 - - - LIB Debug - LIB wolfSSL - Win32 - - - LIB Debug - LIB wolfSSL - x64 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Debug - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Debug - LIB OpenSSL - Win32 - - - LIB Debug - LIB OpenSSL - x64 - - - LIB Debug - Win32 - - - LIB Debug - x64 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - Win32 - - - LIB Release - DLL OpenSSL - DLL LibSSH2 - x64 - - - LIB Release - DLL OpenSSL - Win32 - - - LIB Release - DLL OpenSSL - x64 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - Win32 - - - LIB Release - DLL Windows SSPI - DLL WinIDN - x64 - - - LIB Release - DLL Windows SSPI - Win32 - - - LIB Release - DLL Windows SSPI - x64 - - - LIB Release - LIB wolfSSL - Win32 - - - LIB Release - LIB wolfSSL - x64 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - Win32 - - - LIB Release - LIB OpenSSL - LIB LibSSH2 - x64 - - - LIB Release - LIB OpenSSL - Win32 - - - LIB Release - LIB OpenSSL - x64 - - - LIB Release - Win32 - - - LIB Release - x64 - - - - {5228E9CE-A216-422F-A5E6-58E95E2DD71D} - curl - - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - Application - false - Unicode - v140 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - ..\..\..\..\build\Win32\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - ..\..\..\..\build\Win64\VC14\$(Configuration)\ - $(OutDir)src\ - $(OutDir)src\ - false - false - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName)d - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - $(ProjectName) - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - true - $(TargetDir)$(TargetName).pdb - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - true - $(TargetDir)$(TargetName).pdb - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libcrypto.lib;libssl.lib;libssh2d.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libcrypto.lib;libssl.lib;libssh2.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libcrypto.lib;libssl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - Disabled - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - _DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Level4 - ProgramDatabase - - - _DEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - true - $(TargetDir)$(TargetName).pdb - Console - MachineX64 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX86 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - X64 - $(TargetDir)$(TargetName).tlb - - - - - MaxSpeed - OnlyExplicitInline - ..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories) - NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions) - true - MultiThreadedDLL - true - Level4 - - - NDEBUG;%(PreprocessorDefinitions) - 0x0409 - ..\..\..\..\include;%(AdditionalIncludeDirectories) - - - ws2_32.lib;wldap32.lib;crypt32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies) - $(OutDir)$(TargetName)$(TargetExt) - ..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories) - Console - MachineX64 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/projects/Windows/VC14/src/curl.vcxproj.filters b/projects/Windows/VC14/src/curl.vcxproj.filters deleted file mode 100644 index 4d6341d74..000000000 --- a/projects/Windows/VC14/src/curl.vcxproj.filters +++ /dev/null @@ -1,17 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - \ No newline at end of file diff --git a/projects/build-openssl.bat b/projects/build-openssl.bat index 0ded764c5..486727377 100644 --- a/projects/build-openssl.bat +++ b/projects/build-openssl.bat @@ -241,7 +241,7 @@ rem *************************************************************************** echo. cd /d "%START_DIR%" || (echo Error: Failed cd start & exit /B 1) - rem Save the full path of the openssl source dir + rem Save the full path of the OpenSSL source dir set "SOURCE_PATH=%CD%" rem Set temporary paths for building and installing OpenSSL. If a temporary diff --git a/projects/generate.bat b/projects/generate.bat index b3bb5806b..7022eed04 100644 --- a/projects/generate.bat +++ b/projects/generate.bat @@ -52,22 +52,18 @@ rem *************************************************************************** set VERSION=VC11 ) else if /i "%~1" == "vc12" ( set VERSION=VC12 - ) else if /i "%~1" == "vc14" ( - set VERSION=VC14 - ) else if /i "%~1" == "vc14.10" ( - set VERSION=VC14.10 - ) 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 ) else if /i "%~1" == "-?" ( goto syntax + ) else if /i "%~1" == "/?" ( + goto syntax ) else if /i "%~1" == "-h" ( goto syntax ) else if /i "%~1" == "-help" ( goto syntax + ) else if /i "%~1" == "--help" ( + goto syntax ) else ( goto unknown ) @@ -88,10 +84,6 @@ rem *************************************************************************** if "%VERSION%" == "VC10" goto vc10 if "%VERSION%" == "VC11" goto vc11 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 echo. @@ -136,66 +128,6 @@ rem *************************************************************************** call :clean Windows\VC12\lib\libcurl.vcxproj ) - if not "%VERSION%" == "ALL" goto success - -:vc14 - echo. - - if "%MODE%" == "GENERATE" ( - echo Generating VC14 project files - call :generate vcxproj Windows\VC14\src\curl.tmpl Windows\VC14\src\curl.vcxproj - call :generate vcxproj Windows\VC14\lib\libcurl.tmpl Windows\VC14\lib\libcurl.vcxproj - ) else ( - echo Removing VC14 project files - call :clean Windows\VC14\src\curl.vcxproj - call :clean Windows\VC14\lib\libcurl.vcxproj - ) - - if not "%VERSION%" == "ALL" goto success - -:vc14.10 - echo. - - if "%MODE%" == "GENERATE" ( - echo Generating VC14.10 project files - call :generate vcxproj Windows\VC14.10\src\curl.tmpl Windows\VC14.10\src\curl.vcxproj - call :generate vcxproj Windows\VC14.10\lib\libcurl.tmpl Windows\VC14.10\lib\libcurl.vcxproj - ) else ( - echo Removing VC14.10 project files - call :clean Windows\VC14.10\src\curl.vcxproj - call :clean Windows\VC14.10\lib\libcurl.vcxproj - ) - - 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. - - if "%MODE%" == "GENERATE" ( - echo Generating VC14.30 project files - call :generate vcxproj Windows\VC14.30\src\curl.tmpl Windows\VC14.30\src\curl.vcxproj - call :generate vcxproj Windows\VC14.30\lib\libcurl.tmpl Windows\VC14.30\lib\libcurl.vcxproj - ) else ( - echo Removing VC14.30 project files - call :clean Windows\VC14.30\src\curl.vcxproj - call :clean Windows\VC14.30\lib\libcurl.vcxproj - ) - goto success rem Main generate function. @@ -375,10 +307,11 @@ rem echo vc10 - Use Visual Studio 2010 echo vc11 - Use Visual Studio 2012 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 Only legacy Visual Studio project files can be generated. + echo. + echo To generate recent versions of Visual Studio project files use cmake. + echo Refer to INSTALL-CMAKE in the docs directory. echo. echo -clean - Removes the project files goto error diff --git a/scripts/Makefile.am b/scripts/Makefile.am index ad4877194..772c7bd8d 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -23,7 +23,8 @@ ########################################################################### EXTRA_DIST = coverage.sh completion.pl firefox-db2pem.sh checksrc.pl \ - mk-ca-bundle.pl schemetable.c cd2nroff nroff2cd cdall cd2cd managen + mk-ca-bundle.pl schemetable.c cd2nroff nroff2cd cdall cd2cd managen \ + dmaketgz ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ FISH_FUNCTIONS_DIR = @FISH_FUNCTIONS_DIR@ diff --git a/scripts/Makefile.in b/scripts/Makefile.in index 0fab183e4..a89ada3d2 100644 --- a/scripts/Makefile.in +++ b/scripts/Makefile.in @@ -21,7 +21,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -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 \ @@ -133,7 +133,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.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 \ @@ -171,6 +170,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 +180,7 @@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@ +CADDY = @CADDY@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -211,7 +213,6 @@ 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@ @@ -237,9 +238,12 @@ HAVE_BROTLI = @HAVE_BROTLI@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_OPENSSL_QUIC = @HAVE_OPENSSL_QUIC@ 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@ @@ -252,6 +256,8 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCURL_LIBS = @LIBCURL_LIBS@ LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ @@ -262,12 +268,9 @@ 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@ -NSS_LIBS = @NSS_LIBS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ @@ -303,6 +306,7 @@ USE_ARES = @USE_ARES@ USE_BEARSSL = @USE_BEARSSL@ USE_GNUTLS = @USE_GNUTLS@ USE_HYPER = @USE_HYPER@ +USE_LIBPSL = @USE_LIBPSL@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ @@ -311,11 +315,14 @@ USE_MSH3 = @USE_MSH3@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ +USE_NGTCP2_CRYPTO_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ 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_NGTCP2_H3 = @USE_NGTCP2_H3@ USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ USE_QUICHE = @USE_QUICHE@ USE_RUSTLS = @USE_RUSTLS@ USE_SCHANNEL = @USE_SCHANNEL@ @@ -329,6 +336,7 @@ USE_WOLFSSH = @USE_WOLFSSH@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ +VSFTPD = @VSFTPD@ ZLIB_LIBS = @ZLIB_LIBS@ ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ abs_builddir = @abs_builddir@ @@ -385,11 +393,12 @@ target_alias = @target_alias@ 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 +EXTRA_DIST = coverage.sh completion.pl firefox-db2pem.sh checksrc.pl \ + mk-ca-bundle.pl schemetable.c cd2nroff nroff2cd cdall cd2cd managen \ + dmaketgz -ZSH_COMPLETION_FUNCTION_FILENAME = _curl -FISH_COMPLETION_FUNCTION_FILENAME = curl.fish +@USE_ZSH_COMPLETION_TRUE@ZSH_COMPLETION_FUNCTION_FILENAME = _curl +@USE_FISH_COMPLETION_TRUE@FISH_COMPLETION_FUNCTION_FILENAME = curl.fish CLEANFILES = $(ZSH_COMPLETION_FUNCTION_FILENAME) $(FISH_COMPLETION_FUNCTION_FILENAME) all: all-am @@ -507,8 +516,6 @@ clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am -distclean: distclean-am - -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am @@ -589,22 +596,29 @@ uninstall-am: all-local: $(ZSH_COMPLETION_FUNCTION_FILENAME) $(FISH_COMPLETION_FUNCTION_FILENAME) -$(ZSH_COMPLETION_FUNCTION_FILENAME): completion.pl -@CROSSCOMPILING_TRUE@ @echo "NOTICE: we can't generate zsh completion when cross-compiling!" -@CROSSCOMPILING_FALSE@ @if ! test -x "$(PERL)"; then echo "No perl: can't install completion.pl"; exit 0; fi -@CROSSCOMPILING_FALSE@ $(PERL) $(srcdir)/completion.pl --curl $(top_builddir)/src/curl$(EXEEXT) --shell zsh > $@ +@USE_ZSH_COMPLETION_TRUE@$(ZSH_COMPLETION_FUNCTION_FILENAME): completion.pl +@CROSSCOMPILING_TRUE@@USE_ZSH_COMPLETION_TRUE@ @echo "NOTICE: we can't generate zsh completion when cross-compiling!" +@CROSSCOMPILING_FALSE@@USE_ZSH_COMPLETION_TRUE@ if test -z "$(PERL)"; then echo "No perl: can't install completion script"; else \ +@CROSSCOMPILING_FALSE@@USE_ZSH_COMPLETION_TRUE@ $(PERL) $(srcdir)/completion.pl --curl $(top_builddir)/src/curl$(EXEEXT) --shell zsh > $@ ; fi -$(FISH_COMPLETION_FUNCTION_FILENAME): completion.pl -@CROSSCOMPILING_TRUE@ @echo "NOTICE: we can't generate fish completion when cross-compiling!" -@CROSSCOMPILING_FALSE@ @if ! test -x "$(PERL)"; then echo "No perl: can't install completion.pl"; exit 0; fi -@CROSSCOMPILING_FALSE@ $(PERL) $(srcdir)/completion.pl --curl $(top_builddir)/src/curl$(EXEEXT) --shell fish > $@ +@USE_FISH_COMPLETION_TRUE@$(FISH_COMPLETION_FUNCTION_FILENAME): completion.pl +@CROSSCOMPILING_TRUE@@USE_FISH_COMPLETION_TRUE@ @echo "NOTICE: we can't generate fish completion when cross-compiling!" +@CROSSCOMPILING_FALSE@@USE_FISH_COMPLETION_TRUE@ if test -z "$(PERL)"; then echo "No perl: can't install completion script"; else \ +@CROSSCOMPILING_FALSE@@USE_FISH_COMPLETION_TRUE@ $(PERL) $(srcdir)/completion.pl --curl $(top_builddir)/src/curl$(EXEEXT) --shell fish > $@ ; fi install-data-local: -@CROSSCOMPILING_TRUE@ @echo "NOTICE: we can't install zsh completion when cross-compiling!" -@CROSSCOMPILING_FALSE@ $(MKDIR_P) $(DESTDIR)$(ZSH_FUNCTIONS_DIR) -@CROSSCOMPILING_FALSE@ $(MKDIR_P) $(DESTDIR)$(FISH_FUNCTIONS_DIR) -@CROSSCOMPILING_FALSE@ $(INSTALL_DATA) $(ZSH_COMPLETION_FUNCTION_FILENAME) $(DESTDIR)$(ZSH_FUNCTIONS_DIR)/$(ZSH_COMPLETION_FUNCTION_FILENAME) -@CROSSCOMPILING_FALSE@ $(INSTALL_DATA) $(FISH_COMPLETION_FUNCTION_FILENAME) $(DESTDIR)$(FISH_FUNCTIONS_DIR)/$(FISH_COMPLETION_FUNCTION_FILENAME) +@CROSSCOMPILING_TRUE@ @echo "NOTICE: we can't install completion scripts when cross-compiling!" +@CROSSCOMPILING_FALSE@@USE_ZSH_COMPLETION_TRUE@ if test -n "$(PERL)"; then \ +@CROSSCOMPILING_FALSE@@USE_ZSH_COMPLETION_TRUE@ $(MKDIR_P) $(DESTDIR)$(ZSH_FUNCTIONS_DIR); \ +@CROSSCOMPILING_FALSE@@USE_ZSH_COMPLETION_TRUE@ $(INSTALL_DATA) $(ZSH_COMPLETION_FUNCTION_FILENAME) $(DESTDIR)$(ZSH_FUNCTIONS_DIR)/$(ZSH_COMPLETION_FUNCTION_FILENAME) ; \ +@CROSSCOMPILING_FALSE@@USE_ZSH_COMPLETION_TRUE@ fi +@CROSSCOMPILING_FALSE@@USE_FISH_COMPLETION_TRUE@ if test -n "$(PERL)"; then \ +@CROSSCOMPILING_FALSE@@USE_FISH_COMPLETION_TRUE@ $(MKDIR_P) $(DESTDIR)$(FISH_FUNCTIONS_DIR); \ +@CROSSCOMPILING_FALSE@@USE_FISH_COMPLETION_TRUE@ $(INSTALL_DATA) $(FISH_COMPLETION_FUNCTION_FILENAME) $(DESTDIR)$(FISH_FUNCTIONS_DIR)/$(FISH_COMPLETION_FUNCTION_FILENAME) ; \ +@CROSSCOMPILING_FALSE@@USE_FISH_COMPLETION_TRUE@ fi + +distclean: + rm -f $(CLEANFILES) # 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/scripts/cd2nroff b/scripts/cd2nroff index b0e702a47..00b2cc05e 100755 --- a/scripts/cd2nroff +++ b/scripts/cd2nroff @@ -25,7 +25,7 @@ =begin comment -Converts a curldown file to nroff (man page). +Converts a curldown file to nroff (manpage). =end comment =cut @@ -77,11 +77,11 @@ HELP use POSIX qw(strftime); my @ts; if (defined($ENV{SOURCE_DATE_EPOCH})) { - @ts = localtime($ENV{SOURCE_DATE_EPOCH}); + @ts = gmtime($ENV{SOURCE_DATE_EPOCH}); } else { @ts = localtime; } -my $date = strftime "%B %d %Y", @ts; +my $date = strftime "%Y-%m-%d", @ts; sub outseealso { my (@sa) = @_; @@ -103,15 +103,25 @@ sub outprotocols { push @o, ".SH PROTOCOLS\n"; if($p[0] eq "TLS") { - push @o, "All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc."; + push @o, "This functionality affects all TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc."; } else { my @s = sort @p; + push @o, "This functionality affects "; for my $e (sort @s) { - push @o, sprintf "%s$e", - $comma ? (($e eq $s[-1]) ? " and " : ", "): ""; + push @o, sprintf "%s%s", + $comma ? (($e eq $s[-1]) ? " and " : ", "): "", + lc($e); $comma = 1; } + if($#s == 0) { + if($s[0] eq "All") { + push @o, " supported protocols"; + } + else { + push @o, " only"; + } + } } push @o, "\n"; return @o; @@ -197,6 +207,7 @@ sub single { my $tlslist; my $section; my $source; + my $addedin; my $spdx; my $start = 0; my $title; @@ -247,6 +258,14 @@ sub single { elsif(/^TLS-backend:/i) { $list = 3; # 3 for TLS backend } + elsif(/^Added-in: *(.*)/i) { + $addedin=$1; + if(($addedin !~ /^[0-9.]+[0-9]\z/) && + ($addedin ne "n/a")) { + print STDERR "$f:$line:1:ERROR: invalid version number in Added-in line: $addedin\n"; + return 2; + } + } elsif(/^ +- (.*)/i) { # the only lists we support are see-also and protocol if($list == 1) { @@ -274,11 +293,19 @@ sub single { elsif(/^---/) { # end of the header section if(!$title) { - print STDERR "ERROR: no 'Title:' in $f\n"; + print STDERR "$f:$line:1:ERROR: no 'Title:' in $f\n"; return 1; } if(!$section) { - print STDERR "ERROR: no 'Section:' in $f\n"; + print STDERR "$f:$line:1:ERROR: no 'Section:' in $f\n"; + return 2; + } + if(!$source) { + print STDERR "$f:$line:1:ERROR: no 'Source:' in $f\n"; + return 2; + } + if(!$addedin) { + print STDERR "$f:$line:1:ERROR: no 'Added-in:' in $f\n"; return 2; } if(!$seealso[0]) { @@ -326,7 +353,8 @@ sub single { } else { chomp; - print STDERR "WARN: unrecognized line in $f, ignoring:\n:'$_';" + print STDERR "$f:$line:1:ERROR: unrecognized header keyword: '$_'\n"; + $errors++; } } @@ -387,12 +415,13 @@ sub single { $d =~ s/\*(\S.*?)\*/\\fI$1\\fP/g; if($d =~ /[^\\][\<\>]/) { - print STDERR "$f:$line:1:WARN: un-escaped < or > used\n"; + print STDERR "$f:$line:1:ERROR: un-escaped < or > used\n"; + $errors++; } # convert backslash-'<' or '> to just the second character $d =~ s/\\([<>])/$1/g; - # mentions of curl symbols with man pages use italics by default + # mentions of curl symbols with manpages use italics by default $d =~ s/((lib|)curl([^ ]*\(3\)))/\\fI$1\\fP/gi; # backticked becomes italics @@ -412,6 +441,11 @@ sub single { } $header = 1; } + elsif(/^##/) { + # end of IP sequence + push @desc, ".PP\n"; + $header = 1; + } elsif(/^# (.*)/) { my $word = $1; # if there are enclosing quotes, remove them first @@ -420,13 +454,27 @@ sub single { if($word eq "PROTOCOLS") { print STDERR "$f:$line:1:WARN: PROTOCOLS section in source file\n"; } - elsif($word eq "EXAMPLE") { - # insert the generated PROTOCOLS section before EXAMPLE + elsif($word eq "AVAILABILITY") { + print STDERR "$f:$line:1:WARN: AVAILABILITY section in source file\n"; + } + elsif($word eq "%PROTOCOLS%") { + # insert the generated PROTOCOLS section push @desc, outprotocols(@proto); if($proto[0] eq "TLS") { push @desc, outtls(@tls); } + $header = 1; + next; + } + elsif($word eq "%AVAILABILITY%") { + if($addedin ne "n/a") { + # insert the generated AVAILABILITY section + push @desc, ".SH AVAILABILITY\n"; + push @desc, "Added in curl $addedin\n"; + } + $header = 1; + next; } push @desc, ".SH $word\n"; $header = 1; diff --git a/scripts/checksrc.pl b/scripts/checksrc.pl index be085e061..75f68fbaa 100755 --- a/scripts/checksrc.pl +++ b/scripts/checksrc.pl @@ -720,7 +720,8 @@ sub scanfile { strtok| v?sprintf| (str|_mbs|_tcs|_wcs)n?cat| - LoadLibrary(Ex)?(A|W)?) + LoadLibrary(Ex)?(A|W)?| + _?w?access) \s*\( /x) { checkwarn("BANNEDFUNC", @@ -923,7 +924,7 @@ sub scanfile { checkwarn("COPYRIGHT", 1, 0, $file, "", "Missing copyright statement", 1); } - # COPYRIGHTYEAR is a extended warning so we must first see if it has been + # COPYRIGHTYEAR is an extended warning so we must first see if it has been # enabled in .checksrc if(defined($warnings{"COPYRIGHTYEAR"})) { # The check for updated copyrightyear is overly complicated in order to diff --git a/scripts/ciconfig.pl b/scripts/ciconfig.pl deleted file mode 100755 index e232e3e5e..000000000 --- a/scripts/ciconfig.pl +++ /dev/null @@ -1,190 +0,0 @@ -#!/usr/bin/perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -# these options are enabled by default in the sense that they will attempt to -# check for and use this feature without the configure flag -my %defaulton = ( - # --enable- - 'shared' => 1, - 'static' => 1, - 'fast-install' => 1, - 'silent-rules' => 1, - 'optimize' => 1, - 'http' => 1, - 'ftp' => 1, - 'file' => 1, - 'ldap' => 1, - 'ldaps' => 1, - 'rtsp' => 1, - 'proxy' => 1, - 'dict' => 1, - 'telnet' => 1, - 'tftp' => 1, - 'pop3' => 1, - 'imap' => 1, - 'smb' => 1, - 'smtp' => 1, - 'gopher' => 1, - 'mqtt' => 1, - 'manual' => 1, - 'libcurl-option' => 1, - 'libgcc' => 1, - 'ipv6' => 1, - 'openssl-auto-load-config' => 1, - 'versioned-symbols' => 1, - 'symbol-hiding' => 1, - 'threaded-resolver' => 1, - 'pthreads' => 1, - 'verbose' => 1, - 'basic-auth' => 1, - 'bearer-auth' => 1, - 'digest-auth' => 1, - 'kerberos-auth' => 1, - 'negotiate-auth' => 1, - 'aws' => 1, - 'ntlm' => 1, - 'ntlm-wb' => 1, - 'tls-srp' => 1, - 'unix-sockets' => 1, - 'cookies' => 1, - 'socketpair' => 1, - 'http-auth' => 1, - 'doh' => 1, - 'mime' => 1, - 'dateparse' => 1, - 'netrc' => 1, - 'progress-meter' => 1, - 'dnsshuffle' => 1, - 'get-easy-options' => 1, - 'alt-svc' => 1, - 'hsts' => 1, - - # --with- - 'aix-soname' => 1, - 'pic' => 1, - 'zlib' => 1, - 'zstd' => 1, - 'brotli' => 1, - 'random' => 1, - 'ca-bundle' => 1, - 'ca-path' => 1, - 'libssh2' => 1, - 'nghttp2' => 1, - 'librtmp' => 1, - 'libidn2' => 1, - 'sysroot' => 1, - 'lber-lib' => 1, - 'ldap-lib' => 1, - - ); - - -sub configureopts { - my ($opts)=@_; - my %thisin; - my %thisout; - - while($opts =~ s/--with-([^ =]*)//) { - $with{$1}++; - $used{$1}++; - $thisin{$1}++; - } - while($opts =~ s/--enable-([^ =]*)//) { - $with{$1}++; - $used{$1}++; - $thisin{$1}++; - } - - while($opts =~ s/--without-([^ =]*)//) { - $without{$1}++; - $used{$1}++; - $thisout{$1}++; - } - while($opts =~ s/--disable-([^ =]*)//) { - $without{$1}++; - $used{$1}++; - $thisout{$1}++; - } - return join(" ", sort(keys %thisin), "/", sort(keys %thisout)); -} - -# run configure --help and check what available WITH/ENABLE options that exist -sub configurehelp { - open(C, "./configure --help|"); - while() { - if($_ =~ /^ --(with|enable)-([a-z0-9-]+)/) { - $avail{$2}++; - } - } - close(C); -} - -sub scanjobs { - - my $jobs; - open(CI, "./scripts/cijobs.pl|"); - while() { - if($_ =~ /^\#\#\#/) { - $jobs++; - } - if($_ =~ /^configure: (.*)/) { - my $c= configureopts($1); - #print "C: $c\n"; - } - } - close(CI); -} - -configurehelp(); -scanjobs(); - -print "Used configure options (with / without)\n"; -for my $w (sort keys %used) { - printf " %s: %d %d%s\n", $w, $with{$w}, $without{$w}, - $defaulton{$w} ? " (auto)":""; -} - -print "Never used configure options\n"; -for my $w (sort keys %avail) { - if(!$used{$w}) { - printf " %s%s\n", $w, - $defaulton{$w} ? " (auto)":""; - } -} - -print "Never ENABLED configure options that aren't on by default\n"; -for my $w (sort keys %avail) { - if(!$with{$w} && !$defaulton{$w}) { - printf " %s\n", $w; - } -} - - -print "ENABLED configure options that aren't available\n"; -for my $w (sort keys %with) { - if(!$avail{$w}) { - printf " %s\n", $w; - } -} diff --git a/scripts/cijobs.pl b/scripts/cijobs.pl deleted file mode 100755 index 150e2cb8f..000000000 --- a/scripts/cijobs.pl +++ /dev/null @@ -1,510 +0,0 @@ -#!/usr/bin/perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -my %filelevel= ('file' => 1, - 'service' => 1); - -my $jobid = 1; - -sub submit { - my ($jref)=@_; - my %job = %$jref; - - printf "\n##### job %u \n", $jobid++; - for my $k (sort keys %job) { - printf "%s: %s\n", $k, $job{$k} if($job{$k}); - undef $$jref{$k} if(!$filelevel{$k}); - } -} - -sub githubactions { - my ($tag)=@_; - my @files= `git ls-tree -r --name-only $tag .github/workflows 2>/dev/null`; - my $c = 0; - foreach my $f (sort @files) { - my $j = 0; - my $m = -1; - my $done = 0; - chomp $f; - open(G, "git show $tag:$f 2>/dev/null|"); - # start counting file jobs - undef %job; - $job{'file'} = $f; - $job{'service'} = "gha"; - my @cc; - my $os; - my $topname; - my $line = 1; - while() { - $job{'line'} = $line; - if($_ =~ /^name: (.*)/) { - $topname=$1; - } - elsif($_ =~ /runs-on: (.*)/) { - my $r = $1; - #print "runs-on: $r\n"; - if($r =~ /ubuntu/) { - $os = "linux"; - } - elsif($r =~ /macos/) { - $os = "macos"; - } - elsif($r =~ /windows/) { - $os = "windows"; - } - - # commit previously counted jobs - $c += $j; - # non-matrix job - $j = 1; - } - elsif($_ =~ /^\s*matrix:/) { - # switch to matrix mode - $m = 0; - $j = 0; - } - elsif($_ =~ /^ - run: .* apt-get install (.*)/) { - $job{'install'} = $1; - } - elsif($m >= 0) { - if($_ =~ /^ - name: (.*)/) { - # matrix job - #print "name: $1\n"; - $job{'name'} = $1; - $j += ($m?$m:1); - } - elsif($_ =~ /install: (.*)/) { - $job{'install'} = $1; - } - elsif($_ =~ /( |curl-)configure: (.*)/) { - $job{'configure'} = $2; - $job{'os'}=$os; - submit(\%job); - $done++; - } - elsif($_ =~ /generate: (.*)/) { - $job{'cmake'} = $1; - if($m) { - # matrix mode, multiple copies - my %dupe = %job; - for my $cc (@cc) { - %job = %dupe; - $job{'cc'} = $cc; - $job{'os'}=$os; - submit(\%job); - $done++; - } - } - else { - $job{'os'}=$os; - submit(\%job); - $done++; - } - } - elsif($_ =~ /- CC: (.*)/) { - # matrix multiplier - push @cc, $1; - $m++; - } - elsif($_ =~ /^\s*steps:/) { - # disable matrix mode - $m = -1; - } - } - $line++; - } - close(G); - # commit final counted jobs - $c += $j; - - if(!$done) { - $job{'name'} = $topname? $topname : '[unnamed]'; - $job{'os'}=$os; - submit(\%job); - $done++; - } - # reset internal job counter - $j = 0; - } - #print "Jobs: $c\n"; - return $c; -} - -sub azurepipelines { - my ($tag)=@_; - open(G, "git show $tag:.azure-pipelines.yml 2>/dev/null|"); - my $c = 0; - my $j = 0; - my $m = -1; - my $image; - my %job; - my $line = 1; - my $os; - $job{'file'} = ".azure-pipelines.yml"; - $job{'service'} = "azure"; - while() { - if($_ =~ /^ vmImage: (.*)/) { - my $i = $1; - if($i =~ /ubuntu/) { - $os = "linux"; - } - elsif($i =~ /windows/) { - $os = "windows"; - } - } - elsif($_ =~ /^ - stage: (.*)/) { - my $topname = $1; - if($topname !~ /(windows|linux)/) { - $job{'name'} = $topname; - $job{'line'}=$line; - submit(\%job); - } - } - elsif($_ =~ /job:/) { - # commit previously counted jobs - $c += $j; - # initial value for non-matrix job - $j = 1; - } - elsif($_ =~ /matrix:/) { - # start of new matrix list(!) - $m = 0; - $j = 0; - } - elsif($m >= 0) { - if($_ =~ /^ name: (.*)/) { - # single matrix list entry job - $j++; - $job{'name'} = $1; - } - # azure matrix is a simple list, - # therefore no multiplier needed - elsif($_ =~ /steps:/) { - # disable matrix mode - $m = -1; - } - elsif($_ =~ /^ configure: (.*)/) { - $job{'configure'} = $1; - $job{'line'}=$line; - $job{'os'}=$os; - submit(\%job); - } - } - $line++; - } - close(G); - # commit final counted jobs - $c += $j; - - return $c; -} - -sub appveyor { - my ($tag)=@_; - open(G, "git show $tag:appveyor.yml 2>/dev/null|"); - my $c = 0; - my %job; - my $line=0; - $job{'file'} = "appveyor.yml"; - $job{'service'} = "appveyor"; - - while() { - $line++; - if($_ =~ /^( - |install)/) { - if($job{'image'}) { - $job{'os'} = "windows"; - submit(\%job); - $c++; - } - } - $job{'line'} = $line; - if($_ =~ /^ APPVEYOR_BUILD_WORKER_IMAGE: \'(.*)\'/) { - $job{'image'}= $1; - } - elsif($_ =~ /^ BUILD_SYSTEM: (.*)/) { - $job{'build'} = lc($1); - } - elsif($_ =~ /^ PRJ_GEN: \'(.*)\'/) { - $job{'compiler'} = $1; - } - elsif($_ =~ /^ PRJ_CFG: (.*)/) { - $job{'config'} = $1; - } - elsif($_ =~ /^ OPENSSL: \'(.*)\'/) { - $job{'openssl'} = $1 eq "ON" ? "true": "false"; - } - elsif($_ =~ /^ SCHANNEL: \'(.*)\'/) { - $job{'schannel'} = $1 eq "ON" ? "true": "false"; - } - elsif($_ =~ /^ ENABLE_UNICODE: \'(.*)\'/) { - $job{'unicode'} = $1 eq "ON" ? "true": "false"; - } - elsif($_ =~ /^ HTTP_ONLY: \'(.*)\'/) { - $job{'http-only'} = $1 eq "ON" ? "true": "false"; - } - elsif($_ =~ /^ TESTING: \'(.*)\'/) { - $job{'testing'} = $1 eq "ON" ? "true": "false"; - } - elsif($_ =~ /^ SHARED: \'(.*)\'/) { - $job{'shared'} = $1 eq "ON" ? "true": "false"; - } - elsif($_ =~ /^ TARGET: \'-A (.*)\'/) { - $job{'target'} = $1; - } - } - close(G); - - return $c; -} - -sub cirrus { - my ($tag)=@_; - open(G, "git show $tag:.cirrus.yml 2>/dev/null|"); - my $c = 0; - my %job; - my $line=0; - my $name = 0; - my $os; - $job{'file'} = ".cirrus.yml"; - $job{'service'} = "cirrus"; - while() { - $line++; - if($_ =~ /^ ( |-) (name|image_family|image):/) { - $c++; - } - if($_ =~ /^ - name:/) { - if($name) { - $job{'os'} = $os; - $job{'line'} = $line; - submit(\%job); - $name = 0; - } - } - if($_ =~ /^ - name: (.*)/) { - $job{'name'} = $1; - $name = 1; - } - elsif($_ =~ /^ image_family: (.*)/) { - $os = "freebsd"; - } - elsif($_ =~ /^windows_task:/) { - $os = "windows"; - } - elsif($_ =~ /^ prepare: pacman -S --needed --noconfirm --noprogressbar (.*)/) { - $job{'install'} = $1; - } - elsif($_ =~ /^ configure: (.*)/) { - $job{'configure'} = $1; - } - } - close(G); - if($name) { - $job{'os'} = $os; - $job{'line'} = $line; - submit(\%job); - } - return $c; -} - -sub circle { - my ($tag)=@_; - open(G, "git show $tag:.circleci/config.yml 2>/dev/null|"); - my $c = 0; - my $wf = 0; - my %job; - my %cmd; - my %configure; - my %target; - my $line=0; - my $cmds; - my $jobs; - my $workflow; - $job{'file'} = ".circleci/config.yml"; - $job{'service'} = "circleci"; - while() { - $line++; - if($_ =~ /^commands:/) { - # we record configure lines in this state - $cmds = 1; - } - elsif($cmds) { - if($_ =~ /^ ([^ ]*):/) { - $cmdname = $1; - } - elsif($_ =~ /^ .*.\/configure (.*)/) { - $cmd{$cmdname}=$1; - } - } - if($_ =~ /^jobs:/) { - # we record which job runs with configure here - $jobs = 1; - $cmds = 0; - } - elsif($jobs) { - if($_ =~ /^ ([^ ]*):/) { - $jobname = $1; - } - elsif($_ =~ /^ - (configure.*)/) { - $configure{$jobname}=$1; - } - elsif($_ =~ /^ resource_class: arm.medium/) { - $target{$jobname}="arm"; - } - } - if($_ =~ /^workflows:/) { - $wf = 1; - $cmds = 0; - } - elsif($wf) { - if($_ =~ /^ ([^ ]+):/) { - $workflow = $1; - } - elsif($_ =~ /^ - (.*)\n/) { - my $jb = $1; - my $cnfgure = $configure{$jb}; - my $trgt = $target{$jb}; - $job{'configure'} = $cmd{$cnfgure}; - $job{'name' }=$workflow; - $job{'os'} = "linux"; - $job{'line'} = $line; - $job{'target'} = $trgt if($trgt); - submit(\%job); - } - if($_ =~ / *jobs:/) { - $c++; - } - } - } - close(G); - return $c; -} - -sub zuul { - my ($tag)=@_; - open(G, "git show $tag:zuul.d/jobs.yaml 2>/dev/null|"); - my $c = 0; - my %job; - my $line=0; - my $type; - $job{'file'} = "zuul.d/jobs.yaml"; - $job{'service'} = "zuul"; - while() { - $line++; - #print "L: ($jobmode / $env) $_"; - if($_ =~ /^- job:/) { - $jobmode = 1; # start a new - $type="configure"; - } - if($jobmode) { - if($apt) { - if($_ =~ /^ - (.*)/) { - my $value = $1; - $job{'install'} .= "$value "; - } - else { - $apt = 0; # end of curl_apt_packages - } - } - if($env) { - if($envcont) { - if($_ =~ /^ (.*)/) { - $job{$envcont} .= "$1 "; - } - else { - $envcont = ""; - } - } - if($_ =~ /^ ([^:]+): (.*)/) { - my ($var, $value) = ($1, $2); - - if($var eq "C") { - $var = $type; - } - elsif($var eq "T") { - $var = "tests"; - if($value eq "cmake") { - # otherwise it remains configure - $type = "cmake"; - } - } - elsif($var eq "CC") { - $var = "compiler"; - } - elsif($var eq "CHECKSRC") { - $job{'checksrc'} = $value ? "true": "false"; - $var = ""; - } - else { - $var = ""; - } - if($value eq ">-") { - $envcont = $var; - } - elsif($var) { - $job{$var} = $value; - } - } - elsif($_ !~ /^ /) { - # end of envs - $env = 0; - } - } - if($_ =~ /^ curl_env:/) { - $env = 1; # start of envs - } - elsif($_ =~ /^ curl_apt_packages:/) { - $apt = 1; # start of apt packages - } - elsif($_ =~ /^ name: (.*)/) { - my $n = $1; - if($n eq "curl-base") { - # not counted - $jobmode = 0; - next; - } - $job{'name'} = $n; - } - elsif($_ =~ /^\n\z/) { - # a job is complete - $job{'line'}=$line; - $job{'os'}="linux"; - submit(\%job); - $jobmode = 0; - $c++; - } - } - } - close(G); - return $c; -} - -my $tag = `git rev-parse --abbrev-ref HEAD 2>/dev/null` || "master"; -chomp $tag; -githubactions($tag); -azurepipelines($tag); -appveyor($tag); -zuul($tag); -cirrus($tag); -circle($tag); diff --git a/scripts/cmp-config.pl b/scripts/cmp-config.pl deleted file mode 100755 index ebd7c2fb2..000000000 --- a/scripts/cmp-config.pl +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/env perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -my $autotools = $ARGV[0]; -my $cmake = $ARGV[1]; - -if(!$cmake) { - print "Usage: cmp-config \n"; - exit; -} - -# this lists complete lines that will be removed from the output if -# matching -my %remove = ( - '#define _FILE_OFFSET_BITS 64' => 1, - '#define CURL_EXTERN_SYMBOL' => 1, - '#define CURL_SA_FAMILY_T sa_family_t' => 1, - '#define GETHOSTNAME_TYPE_ARG2 size_t' => 1, - '#define HAVE_BROTLI 1' => 1, - '#define HAVE_BROTLI_DECODE_H 1' => 1, - '#define HAVE_DECL_GETPWUID_R 1' => 1, - '#define HAVE_DLFCN_H 1' => 1, - '#define HAVE_GETHOSTBYNAME 1' => 1, - '#define HAVE_INTTYPES_H 1' => 1, - '#define HAVE_IOCTL 1' => 1, - '#define HAVE_LDAP_SSL 1' => 1, - '#define HAVE_LIBBROTLIDEC 1' => 1, - '#define HAVE_LIBSSL 1' => 1, - '#define HAVE_LIBZSTD 1' => 1, - '#define HAVE_OPENSSL3 1' => 1, - '#define HAVE_OPENSSL_CRYPTO_H 1' => 1, - '#define HAVE_OPENSSL_ERR_H 1' => 1, - '#define HAVE_OPENSSL_PEM_H 1' => 1, - '#define HAVE_OPENSSL_RSA_H 1' => 1, - '#define HAVE_OPENSSL_SSL_H 1' => 1, - '#define HAVE_OPENSSL_X509_H 1' => 1, - '#define HAVE_SA_FAMILY_T 1' => 1, - '#define HAVE_SETJMP_H 1' => 1, - '#define HAVE_STDINT_H 1' => 1, - '#define HAVE_STDIO_H 1' => 1, - '#define HAVE_STDLIB_H 1' => 1, - '#define HAVE_STRING_H 1' => 1, - '#define HAVE_SYS_XATTR_H 1' => 1, - '#define HAVE_ZSTD 1' => 1, - '#define HAVE_ZSTD_H 1' => 1, - '#define LT_OBJDIR ".libs/"' => 1, - '#define OS "Linux"' => 1, - '#define OS "x86_64-pc-linux-gnu"' => 1, - '#define PACKAGE "curl"' => 1, - '#define PACKAGE_BUGREPORT "a suitable curl mailing list: https://curl.se/mail/"' => 1, - '#define PACKAGE_NAME "curl"' => 1, - '#define PACKAGE_STRING "curl -"' => 1, - '#define PACKAGE_TARNAME "curl"' => 1, - '#define PACKAGE_URL ""' => 1, - '#define PACKAGE_VERSION "-"' => 1, - '#define SIZEOF_LONG_LONG 8' => 1, - '#define USE_MANUAL 1' => 1, - '#define VERSION "-"' => 1, - ); - -sub filter { - my ($line) = @_; - if(!$remove{$line}) { - return "$line\n"; - } - $remove{$line}++; - return ""; -} - -sub grepit { - my ($input, $output) = @_; - my @defines; - # first get all the #define lines - open(F, "<$input"); - while() { - if($_ =~ /^#def/) { - chomp; - push @defines, $_; - } - } - close(F); - - open(O, ">$output"); - - # output the sorted list through the filter - foreach my $d(sort @defines) { - print O filter($d); - } - close(O); -} - -grepit($autotools, "/tmp/autotools"); -grepit($cmake, "/tmp/cmake"); - -foreach my $v (keys %remove) { - if($remove{$v} == 1) { - print "Ignored, never matched line: $v\n"; - } -} - - -# return the exit code from diff -exit system("diff -u /tmp/autotools /tmp/cmake") >> 8; diff --git a/scripts/contributors.sh b/scripts/contributors.sh deleted file mode 100755 index 90ea5c94d..000000000 --- a/scripts/contributors.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/sh -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -# -# This script shows all mentioned contributors from the given / -# until HEAD and adds the contributors already mentioned in the existing -# RELEASE-NOTES. -# - -start=$1 - -if test "$start" = "-h"; then - echo "Usage: $0 [--releasenotes]" - exit -fi -if test -z "$start"; then - start=`git tag --sort=taggerdate | grep "^curl-" | tail -1`; - echo "Since $start:" -fi - -# We also include curl-www if possible. Override by setting CURLWWW -if [ -z "$CURLWWW" ] ; then - CURLWWW=../curl-www -fi - -# filter out Author:, Commit: and *by: lines -# cut off the email parts -# split list of names at comma -# split list of names at " and " -# cut off spaces first and last on the line -# filter alternatives through THANKS-filter -# only count names with a space (ie more than one word) -# sort all unique names -# awk them into RELEASE-NOTES format - -( - ( - git log --pretty=full --use-mailmap $start..HEAD - if [ -d "$CURLWWW" ] - then - git -C "$CURLWWW" log --pretty=full --use-mailmap $start..HEAD - fi - ) | \ -grep -Eai '(^Author|^Commit|by):' | \ -cut -d: -f2- | \ -cut '-d(' -f1 | \ -cut '-d<' -f1 | \ -tr , '\012' | \ -sed 's/ at github/ on github/' | \ -sed 's/ and /\n/' | \ -sed -e 's/^ *//' -e 's/ $//g' -e 's/@users.noreply.github.com$/ on github/' - -grep -a "^ [^ \(]" RELEASE-NOTES| \ -sed 's/, */\n/g'| \ -sed 's/^ *//' - -)| \ -sed -f ./docs/THANKS-filter | \ -sort -fu | \ -awk '{ - if(length($0)) { - num++; - n = sprintf("%s%s%s,", n, length(n)?" ":"", $0); - #print n; - if(length(n) > 77) { - printf(" %s\n", p); - n=sprintf("%s,", $0); - } - p=n; - } -} - - END { - pp=substr(p,1,length(p)-1); - printf(" %s\n", pp); - printf(" (%d contributors)\n", num); - } - -' diff --git a/scripts/contrithanks.sh b/scripts/contrithanks.sh deleted file mode 100755 index b18842288..000000000 --- a/scripts/contrithanks.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -# -# This script shows all mentioned contributors from until HEAD and -# puts them at the end of the THANKS document on stdout -# - -start=$1 - -if test "$start" = "-h"; then - echo "Usage: $0 " - exit -fi -if test -z "$start"; then - start=`git tag --sort=taggerdate | grep "^curl-" | tail -1`; -fi - - -# We also include curl-www if possible. Override by setting CURLWWW -if [ -z "$CURLWWW" ] ; then - CURLWWW=../curl-www -fi - -cat ./docs/THANKS - -( - ( - git log --use-mailmap $start..HEAD - if [ -d "$CURLWWW" ] - then - git -C ../curl-www log --use-mailmap $start..HEAD - fi - ) | \ - -grep -Eai '(^Author|^Commit|by):' | \ -cut -d: -f2- | \ -cut '-d(' -f1 | \ -cut '-d<' -f1 | \ -tr , '\012' | \ -sed 's/ at github/ on github/' | \ -sed 's/ and /\n/' | \ -sed -e 's/^ //' -e 's/ $//g' -e 's/@users.noreply.github.com$/ on github/' - -# grep out the list of names from RELEASE-NOTES -# split on ", " -# remove leading whitespace -grep -a "^ [^ (]" RELEASE-NOTES| \ -sed 's/, */\n/g'| \ -sed 's/^ *//' - -)| \ -sed -f ./docs/THANKS-filter | \ -sort -fu | \ -grep -aixvf ./docs/THANKS diff --git a/scripts/copyright.pl b/scripts/copyright.pl deleted file mode 100755 index c83b7ebbd..000000000 --- a/scripts/copyright.pl +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/env perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### -# -# Invoke script in the root of the git checkout. Scans all files in git unless -# given a specific single file. -# -# Usage: copyright.pl [file] -# - -my %skips; - -# file names -my %skiplist = ( - # REUSE-specific file - ".reuse/dep5" => "", - - # License texts - "LICENSES/BSD-3-Clause.txt" => "", - "LICENSES/BSD-4-Clause-UC.txt" => "", - "LICENSES/ISC.txt" => "", - "LICENSES/curl.txt" => "", - "COPYING" => "", - - ); - -sub scanfile { - my ($f) = @_; - my $line=1; - my $found = 0; - open(F, "<$f") || return -1; - while () { - chomp; - my $l = $_; - # check for a copyright statement and save the years - if($l =~ /.* ?copyright .* (\d\d\d\d|)/i) { - my $count = 0; - while($l =~ /([\d]{4})/g) { - push @copyright, { - year => $1, - line => $line, - col => index($l, $1), - code => $l - }; - $count++; - } - if(!$count) { - # year-less - push @copyright, { - year => -1, - line => $line, - col => index($l, $1), - code => $l - }; - $count++; - } - $found = $count; - } - if($l =~ /SPDX-License-Identifier:/) { - $spdx = 1; - } - # allow within the first 100 lines - if(++$line > 100) { - last; - } - } - close(F); - return $found; -} - -sub checkfile { - my ($file, $skipped, $pattern) = @_; - $spdx = 0; - my $found = scanfile($file); - - if($found < 1) { - if($skipped) { - # just move on - $skips{$pattern}++; - return 0; - } - if(!$found) { - print "$file:1: missing copyright range\n"; - return 2; - } - # this means the file couldn't open - it might not exist, consider - # that fine - return 1; - } - if(!$spdx) { - if($skipped) { - # move on - $skips{$pattern}++; - return 0; - } - print "$file:1: missing SPDX-License-Identifier\n"; - return 2; - } - - if($skipped) { - print "$file:1: ignored superfluously by $pattern\n" if($verbose); - $superf{$pattern}++; - } - - return 1; -} - -sub dep5 { - my ($file) = @_; - my @files; - my $copy; - open(F, "<$file") || die "can't open $file"; - my $line = 0; - while() { - $line++; - if(/^Files: (.*)/i) { - push @files, `git ls-files $1`; - } - elsif(/^Copyright: (.*)/i) { - $copy = $1; - } - elsif(/^License: (.*)/i) { - my $license = $1; - for my $f (@files) { - chomp $f; - if($f =~ /\.gitignore\z/) { - # ignore .gitignore - } - else { - if($skiplist{$f}) { - print STDERR "$f already skipped at $skiplist{$f}\n"; - } - $skiplist{$f} = "dep5:$line"; - } - } - undef @files; - } - } - close(F); -} - -dep5(".reuse/dep5"); - -my $checkall = 0; -my @all; -my $verbose; -if($ARGV[0] eq "-v") { - $verbose = 1; - shift @ARGV; -} -if($ARGV[0]) { - push @all, @ARGV; -} -else { - @all = `git ls-files`; - $checkall = 1; -} - -for my $f (@all) { - chomp $f; - my $skipped = 0; - my $miss; - my $wro; - my $pattern; - if($skiplist{$f}) { - $pattern = $skip; - $skiplisted++; - $skipped = 1; - $skip{$f}++; - } - - my $r = checkfile($f, $skipped, $pattern); - $mis=1 if($r == 2); - $wro=1 if(!$r); - - if(!$skipped) { - $missing += $mis; - $wrong += $wro; - } -} - -if($verbose) { - print STDERR "$missing files have no copyright\n" if($missing); - print STDERR "$wrong files have wrong copyright year\n" if ($wrong); - print STDERR "$skiplisted files are skipped\n" if ($skiplisted); - - for my $s (@skiplist) { - if(!$skips{$s}) { - printf ("Never skipped pattern: %s\n", $s); - } - if($superf{$s}) { - printf ("%s was skipped superfluously %u times and legitimately %u times\n", - $s, $superf{$s}, $skips{$s}); - } - } -} - -if($checkall) { - for(keys %skiplist) { - if(!$skip{$_}) { - printf STDERR "$_ is marked for SKIP but is missing!\n"; - } - } -} - -exit 1 if($missing || $wrong); diff --git a/scripts/coverage.sh b/scripts/coverage.sh index 0a7c7824a..b5540568f 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -23,6 +23,8 @@ # ########################################################################### +set -eu + autoreconf -fi mkdir -p cvr cd cvr diff --git a/scripts/delta b/scripts/delta deleted file mode 100755 index a294f5a5a..000000000 --- a/scripts/delta +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -# Display changes done in the repository from [tag] until now. -# -# Uses git for repo data. -# Uses docs/THANKS and RELEASE-NOTES for current status. -# -# In the git clone root, invoke 'scripts/delta [release tag]' - -$start = $ARGV[0]; - -if($start eq "-h") { - print "Usage: summary [tag]\n"; - exit; -} -elsif($start eq "") { - $start = `git tag --sort=taggerdate | grep "^curl-" | tail -1`; - chomp $start; -} - -$commits = `git log --oneline $start.. | wc -l`; -$committers = `git shortlog -s $start.. | wc -l`; -$bcommitters = `git shortlog -s $start | wc -l`; - -$acommits = `git log --oneline | wc -l`; -$acommitters = `git shortlog -s | wc -l`; - -# delta from now compared to before -$ncommitters = $acommitters - $bcommitters; - -# number of contributors right now -$acontribs = `./scripts/contrithanks.sh | grep -c '^[^ ]'`; -# number when the tag was set -$bcontribs = `git show $start:docs/THANKS | grep -c '^[^ ]'`; -# delta -$contribs = $acontribs - $bcontribs; - -# number of setops: -sub setopts { - my ($f)=@_; - open(H, "$f"); - my $opts; - while() { - if(/^ CURLOPT(|DEPRECATED)\(/ && ($_ !~ /OBSOLETE/)) { - $opts++; - } - } - close(H); - return $opts; -} -$asetopts = setopts("/dev/null | grep -c '{"....--'`; -$noptions=$aoptions - $boptions; - -# current local branch -$branch=`git rev-parse --abbrev-ref HEAD 2>/dev/null`; -chomp $branch; -# Number of files in git -$afiles=`git ls-files | wc -l`; -$deletes=`git diff-tree --diff-filter=A -r --summary origin/$branch $start 2>/dev/null | wc -l`; -$creates=`git diff-tree --diff-filter=D -r --summary origin/$branch $start 2>/dev/null| wc -l`; - -# Time since that tag -$tagged=`git for-each-ref --format="%(refname:short) | %(taggerdate:unix)" refs/tags/* | grep ^$start | cut "-d|" -f2`; # unix timestamp -$taggednice=`git for-each-ref --format="%(refname:short) | %(creatordate)" refs/tags/* | grep ^$start | cut '-d|' -f2`; # human readable time -chomp $taggednice; -$now=`date +%s`; -$elapsed=$now - $tagged; # number of seconds since tag -$total=$now - `date -d 19980320 +%s`; - -# Number of public functions in libcurl -$apublic=`git grep ^CURL_EXTERN -- include/curl | wc -l`; -$bpublic=`git grep ^CURL_EXTERN $start -- include/curl | wc -l`; -$public = $apublic - $bpublic; - -# diffstat -$diffstat=`git diff --stat $start.. | tail -1`; -if($diffstat =~ /^ *(\d+) files changed, (\d+) insertions\(\+\), (\d+)/) { - ($fileschanged, $insertions, $deletions)=($1, $2, $3); -} - -# Changes/bug-fixes currently logged -open(F, ") { - if($_ =~ /following changes:/) { - $mode=1; - } - elsif($_ =~ /following bugfixes:/) { - $mode=2; - } - elsif($_ =~ /known bugs:/) { - $mode=3; - } - elsif($_ =~ /like these:/) { - $mode=4; - } - if($_ =~ /^ o /) { - if($mode == 1) { - $numchanges++; - } - elsif($mode == 2) { - $numbugfixes++; - } - } - if(($mode == 4) && ($_ =~ /^ \((\d+) contributors/)) { - $numcontributors = $1; - } -} -close(F); - -######################################################################## -# Produce the summary - -print "== Since $start $taggednice ==\n"; -printf "Elapsed time: %.1f days (total %d)\n", - $elapsed / 3600 / 24, - $total / 3600 / 24; -printf "Commits: %d (total %d)\n", - $commits, $acommits; -printf "Commit authors: %d, %d new (total %d)\n", - $committers, $ncommitters, $acommitters; -printf "Contributors: %d, %d new (total %d)\n", - $numcontributors, $contribs, $acontribs; -printf "New public functions: %d (total %d)\n", - $public, $apublic; -printf "New curl_easy_setopt() options: %d (total %d)\n", - $nsetopts, $asetopts; -printf "New command line options: %d (total %d)\n", - $noptions, $aoptions; -printf "Changes logged: %d\n", $numchanges; -printf "Bugfixes logged: %d\n", $numbugfixes; -printf "Added files: %d (total %d)\n", - $creates, $afiles; -printf "Deleted files: %d (delta: %d)\n", $deletes, - $creates - $deletes; -print "Diffstat:$diffstat" if(!$fileschanged); -printf "Files changed: %d (%.2f%%)\n", $fileschanged, $fileschanged*100/$afiles; -printf "Lines inserted: %d\n", $insertions; -printf "Lines deleted: %d (delta: %d)\n", $deletions, - $insertions - $deletions; diff --git a/scripts/installcheck.sh b/scripts/dmaketgz old mode 100755 new mode 100644 similarity index 58% rename from scripts/installcheck.sh rename to scripts/dmaketgz index 433420e03..25874793b --- a/scripts/installcheck.sh +++ b/scripts/dmaketgz @@ -1,4 +1,6 @@ -#!/bin/bash +#!/bin/sh +# docker-maketgz +# #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | @@ -23,28 +25,28 @@ # ########################################################################### -PREFIX=$1 - -# Run this script in the root of the git clone. Point out the install prefix -# where 'make install' has already installed curl. - -if test -z "$1"; then - echo "scripts/installcheck.sh [PREFIX]" - exit -fi - -diff -u <(find docs/libcurl/ -name "*.3" -printf "%f\n" | grep -v template| sort) <(find $PREFIX/share/man/ -name "*.3" -printf "%f\n" | sort) - -if test "$?" -ne "0"; then - echo "ERROR: installed libcurl docs mismatch" - exit 2 -fi +set -eu -diff -u <(find include/ -name "*.h" -printf "%f\n" | sort) <(find $PREFIX/include/ -name "*.h" -printf "%f\n" | sort) +version="${1:-}" -if test "$?" -ne "0"; then - echo "ERROR: installed include files mismatch" - exit 1 +if [ -z "$version" ]; then + echo "Specify a version number!" + exit fi -echo "installcheck: installed libcurl docs and include files look good" +timestamp="${2:-$(date -u +%s)}" + +make distclean +docker build \ + --build-arg SOURCE_DATE_EPOCH="$timestamp" \ + --build-arg UID="$(id -u)" \ + --build-arg GID="$(id -g)" \ + -t curl/curl . + +docker run --rm -it -u "$(id -u):$(id -g)" \ + -v "$(pwd):/usr/src" -w /usr/src curl/curl sh -c " + set -e + autoreconf -fi + ./configure --without-ssl --without-libpsl + make -sj8 + ./maketgz $version" diff --git a/scripts/firefox-db2pem.sh b/scripts/firefox-db2pem.sh index f78f41523..a45a881db 100755 --- a/scripts/firefox-db2pem.sh +++ b/scripts/firefox-db2pem.sh @@ -26,8 +26,11 @@ # It extracts all ca certs it finds in the local Firefox database and converts # them all into PEM format. # -db=$(ls -1d $HOME/.mozilla/firefox/*default*) -out=$1 + +set -eu + +db=$(ls -1d "$HOME"/.mozilla/firefox/*default*) +out="${1:-}" if test -z "$out"; then out="ca-bundle.crt" # use a sensible default @@ -35,7 +38,7 @@ fi currentdate=$(date) -cat >$out < "$out" <> $out +done >> "$out" diff --git a/scripts/log2changes.pl b/scripts/log2changes.pl deleted file mode 100755 index 355418368..000000000 --- a/scripts/log2changes.pl +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -# git log --pretty=fuller --no-color --date=short --decorate=full - -my @mname = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ); - -sub nicedate { - my ($date)=$_; - - if($date =~ /(\d\d\d\d)-(\d\d)-(\d\d)/) { - return sprintf("%d %s %4d", $3, $mname[$2-1], $1); - } - return $date; -} - -sub printmsg { - my ($p, $msg)=@_; - while(length($msg) > 77) { - print $p.substr($msg, 0, 77, "")."\n"; - $p=" "; - } - if($msg eq "") { - $p = ""; - } - print "$p$msg\n"; -} - -print -' _ _ ____ _ - ___| | | | _ \| | - / __| | | | |_) | | - | (__| |_| | _ <| |___ - \___|\___/|_| \_\_____| - - Changelog -'; - -my $tag; -while() { - my $l = $_; - - if($l =~/^commit ([[:xdigit:]]*) ?(.*)/) { - $co = $1; - my $ref = $2; - if ($ref =~ /refs\/tags\/curl-([0-9_]*)/) { - $tag = $1; - $tag =~ tr/_/./; - } - } - elsif($l =~ /^Author: *(.*) +) { - if($_ =~ /^#define LIBCURL_VERSION \"([0-9.]*)/) { - $version = $1; - last; - } -} -close(INC); +my $indent = 4; -# get the long name version, return the man page string +# get the long name version, return the manpage string sub manpageify { my ($k)=@_; my $l; @@ -94,13 +87,19 @@ sub manpageify { } -my $colwidth=78; # max number of columns +my $colwidth=79; # max number of columns + +sub prefixline { + my ($num) = @_; + print "\t" x ($num/8); + print ' ' x ($num%8); +} sub justline { my ($lvl, @line) = @_; my $w = -1; my $spaces = -1; - my $width = $colwidth - ($lvl * 4); + my $width = $colwidth - ($lvl * $indent); for(@line) { $w += length($_); $w++; @@ -112,7 +111,7 @@ sub justline { $ratio = $inject / $spaces; } my $spare = 0; - print ' ' x ($lvl * 4); + prefixline($lvl * $indent); my $prev; for(@line) { while($spare >= 0.90) { @@ -128,7 +127,7 @@ sub justline { sub lastline { my ($lvl, @line) = @_; - print ' ' x ($lvl * 4); + prefixline($lvl * $indent); my $prev = 0; for(@line) { printf "%s%s", $prev?" ":"", $_; @@ -143,7 +142,7 @@ sub outputpara { my $w = 0; my @words = split(/ */, $f); - my $width = $colwidth - ($lvl * 4); + my $width = $colwidth - ($lvl * $indent); my @line; for my $e (@words) { @@ -246,8 +245,8 @@ sub too_old { elsif($version =~ /^(\d+)\.(\d+)/) { $a = $1 * 1000 + $2 * 10; } - if($a < 7500) { - # we consider everything before 7.50.0 to be too old to mention + if($a < 7600) { + # we consider everything before 7.60.0 to be too old to mention # specific changes for return 1; } @@ -277,11 +276,13 @@ sub render { my $top = ($line == 1); my $quote; my $level; + my $finalblank; $start = 0; while(<$fh>) { my $d = $_; $line++; + $finalblank = ($d eq "\n"); if($d =~ /^\.(SH|BR|IP|B)/) { print STDERR "$f:$line:1:ERROR: nroff instruction in input: \".$1\"\n"; return 4; @@ -316,9 +317,9 @@ sub render { $word =~ s/[\"\'](.*)[\"\']\z/$1/; # remove backticks from headers - $words =~ s/\`//g; + $word =~ s/\`//g; - # if there is a space, it needs quotes for man page + # if there is a space, it needs quotes for manpage if(($word =~ / /) && $manpage) { $word = "\"$word\""; } @@ -347,7 +348,7 @@ sub render { } if($tablemode) { # end of table - push @desc, ".RE\n.IP\n"; + push @desc, ".RE\n.IP\n" if($manpage); $tablemode = 0; } $header = 1; @@ -384,10 +385,19 @@ sub render { # convert backticks to double quotes $d =~ s/\`/\"/g; + if($d =~ /\(added in(.*)/i) { + if(length($1) < 2) { + print STDERR "$f:$line:1:ERROR: broken up added-in line:\n"; + print STDERR "$f:$line:1:ERROR: $d"; + return 3; + } + } + again: if($d =~ /\(Added in ([0-9.]+)\)/i) { my $ver = $1; if(too_old($ver)) { $d =~ s/ *\(Added in $ver\)//gi; + goto again; } } @@ -440,6 +450,14 @@ sub render { $header = 0; } + if($finalblank) { + print STDERR "$f:$line:1:ERROR: trailing blank line\n"; + exit 3; + } + if($quote) { + # don't leave the quote "hanging" + push @desc, ".fi\n" if($manpage); + } if($tablemode) { # end of table push @desc, ".RE\n.IP\n" if($manpage); @@ -448,10 +466,10 @@ sub render { } sub single { - my ($manpage, $f, $standalone)=@_; + my ($dir, $manpage, $f, $standalone)=@_; my $fh; - open($fh, "<:crlf", "$f") || - return 1; + open($fh, "<:crlf", "$dir/$f") || + die "could not find $dir/$f"; my $short; my $long; my $tags; @@ -649,6 +667,10 @@ sub single { my $pre = $manpage ? "\n": "[1]"; if($scope) { + if($category !~ /global/) { + print STDERR "$f:$line:1:ERROR: global scope option does not have global category\n"; + return 2; + } if($scope eq "global") { push @desc, "\n" if(!$manpage); push @desc, "${pre}This option is global and does not need to be specified for each use of --next.\n"; @@ -659,9 +681,6 @@ sub single { } } - printdesc($manpage, 2, (@leading, @desc)); - undef @desc; - my @extra; if($multi eq "single") { push @extra, "${pre}If --$long is provided several times, the last set ". @@ -690,12 +709,18 @@ sub single { elsif($multi eq "custom") { ; # left for the text to describe } + elsif($multi eq "per-URL") { + push @extra, + "${pre}--$long is associated with a single URL. Use it once per URL ". + "when you use several URLs in a command line.\n"; + } else { print STDERR "$f:$line:1:ERROR: unrecognized Multi: '$multi'\n"; return 2; } - printdesc($manpage, 2, @extra); + printdesc($manpage, 2, (@leading, @desc, @extra)); + undef @desc; my @foot; @@ -719,25 +744,31 @@ sub single { $mstr .= sprintf "%s$l", $mstr?"$sep ":""; $i++; } - push @foot, seealso($standalone, $mstr); if($requires) { my $l = $manpage ? manpageify($long) : "--$long"; - push @foot, "$l requires that the underlying libcurl". - " was built to support $requires. "; + push @foot, "$l requires that libcurl". + " is built to support $requires.\n"; } if($mutexed) { my @m=split(/ /, $mutexed); my $mstr; + my $num = scalar(@m); + my $count; for my $k (@m) { if(!$helplong{$k}) { print STDERR "WARN: $f mutexes a non-existing option: $k\n"; } my $l = $manpage ? manpageify($k) : "--$k"; - $mstr .= sprintf "%s$l", $mstr?" and ":""; + my $sep = ", "; + if($count == ($num -1)) { + $sep = " and "; + } + $mstr .= sprintf "%s$l", $mstr?$sep:""; + $count++; } push @foot, overrides($standalone, - "This option is mutually exclusive to $mstr. "); + "This option is mutually exclusive with $mstr.\n"); } if($examples[0]) { my $s =""; @@ -766,23 +797,25 @@ sub single { if($added) { push @foot, added($standalone, $added); } - if($foot[0]) { - print "\n"; - my $f = join("", @foot); - if($manpage) { - $f =~ s/ +\z//; # remove trailing space - print "$f\n"; - } - else { - printdesc($manpage, 2, "[1]$f"); - } + push @foot, seealso($standalone, $mstr); + + print "\n"; + my $f = join("", @foot); + if($manpage) { + $f =~ s/ +\z//; # remove trailing space + print "$f\n"; + } + else { + printdesc($manpage, 2, "[1]$f"); } return 0; } sub getshortlong { - my ($f)=@_; - open(F, "<:crlf", "$f"); + my ($dir, $f)=@_; + $f =~ s/^.*\///; + open(F, "<:crlf", "$dir/$f") || + die "could not find $dir/$f"; my $short; my $long; my $help; @@ -790,7 +823,9 @@ sub getshortlong { my $protocols; my $category; my $start = 0; + my $line = 0; while() { + $line++; if(!$start) { if(/^---/) { $start = 1; @@ -805,6 +840,11 @@ sub getshortlong { } elsif(/^Help: (.*)/i) { $help=$1; + my $len = length($help); + if($len >= 49) { + printf STDERR "$f:$line:1:WARN: oversized help text: %d characters\n", + $len; + } } elsif(/^Arg: (.*)/i) { $arg=$1; @@ -833,22 +873,41 @@ sub getshortlong { } sub indexoptions { - my (@files) = @_; + my ($dir, @files) = @_; foreach my $f (@files) { - getshortlong($f); + getshortlong($dir, $f); } } sub header { - my ($manpage, $f)=@_; + my ($dir, $manpage, $f)=@_; my $fh; - open($fh, "<:crlf", "$f"); + open($fh, "<:crlf", "$dir/$f") || + die "could not find $dir/$f"; my @d = render($manpage, $fh, $f, 1); close($fh); printdesc($manpage, 0, @d); } + +sub sourcecategories { + my ($dir) = @_; + my %cats; + open(H, "<$dir/../../src/tool_help.h") || + die "can't find the header file"; + while() { + if(/^\#define CURLHELP_([A-Z0-9]*)/) { + $cats{lc($1)}++; + } + } + close(H); + return %cats; +} + sub listhelp { + my ($dir) = @_; + my %cats = sourcecategories($dir); + print <) { @@ -990,7 +1055,7 @@ sub listglobals { sub noext { my $in = $_[0]; - $in =~ s/\.d//; + $in =~ s/\.md//; return $in; } @@ -999,12 +1064,12 @@ sub sortnames { } sub mainpage { - my ($manpage, @files) = @_; + my ($dir, $manpage, @files) = @_; # $manpage is 1 for nroff, 0 for ASCII my $ret; my $fh; - open($fh, "<:crlf", "mainpage.idx") || - return 1; + open($fh, "<:crlf", "$dir/mainpage.idx") || + die "no $dir/mainpage.idx file"; print <
[files]\n"; + print "Usage: managen ". + "[-d dir] [files]\n"; } #------------------------------------------------------------------------ +my $dir = "."; +my $include = "../../include"; my $cmd = shift @ARGV; + + check: +if($cmd eq "-d") { + # specifies source directory + $dir = shift @ARGV; + $cmd = shift @ARGV; + goto check; +} +elsif($cmd eq "-I") { + # include path root + $include = shift @ARGV; + $cmd = shift @ARGV; + goto check; +} +elsif($cmd eq "-c") { + # Column width + $colwidth = 0 + shift @ARGV; + $cmd = shift @ARGV; + goto check; +} + my @files = @ARGV; # the rest are the files +open(INC, "<$include/curl/curlver.h"); +while() { + if($_ =~ /^#define LIBCURL_VERSION \"([0-9.]*)/) { + $version = $1; + last; + } +} +close(INC); + # learn all existing options -indexoptions(@files); +indexoptions($dir, @files); -getargs($cmd, @files); +getargs($dir, $cmd, @files); diff --git a/scripts/mk-ca-bundle.pl b/scripts/mk-ca-bundle.pl index 83027a489..097171059 100755 --- a/scripts/mk-ca-bundle.pl +++ b/scripts/mk-ca-bundle.pl @@ -136,8 +136,6 @@ $url = $opt_d; } -my $curl = `curl -V`; - if ($opt_i) { print ("=" x 78 . "\n"); print "Script Version : $version\n"; @@ -314,6 +312,7 @@ (%) # If we have an HTTPS URL then use curl if($url =~ /^https:\/\//i) { + my $curl = `curl -V`; if($curl) { if($curl =~ /^Protocols:.* https( |$)/m) { report "Get certdata with curl!"; diff --git a/scripts/release-notes.pl b/scripts/release-notes.pl deleted file mode 100755 index 136b48f0a..000000000 --- a/scripts/release-notes.pl +++ /dev/null @@ -1,243 +0,0 @@ -#!/usr/bin/env perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### - -############################################### -# -# ==== How to use this script ==== -# -# 1. Get recent commits added to RELEASE-NOTES: -# -# $ ./scripts/release-notes.pl -# -# 2. Edit RELEASE-NOTES and remove all entries that don't belong. Unused -# references below will be cleaned up in the next step. Make sure to move -# "changes" up to the changes section. All entries will by default be listed -# under bug-fixes as this script can't know where to put them. -# -# 3. Run the cleanup script and let it sort the entries and remove unused -# references from lines you removed in step (2): -# -# $ ./scripts/release-notes.pl cleanup -# -# 4. Reload RELEASE-NOTES and verify that things look okay. The cleanup -# procedure can and should be re-run when lines are removed or rephrased. -# -# 5. Run ./scripts/contributors.sh and update the contributor list of names -# The list can also be extended or edited manually. -# -# 6. Run ./scripts/delta and update the contributor count at the top, and -# double-check/update the other counters. -# -# 7. Commit the file using "RELEASE-NOTES: synced" as commit message. -# -################################################ - -my $cleanup = ($ARGV[0] eq "cleanup"); -my @gitlog=`git log @^{/RELEASE-NOTES:.synced}..` if(!$cleanup); -my @releasenotes=`cat RELEASE-NOTES`; - -my @o; # the entire new RELEASE-NOTES -my @refused; # [num] = [2 bits of use info] -my @refs; # [number] = [URL] -for my $l (@releasenotes) { - if($l =~ /^ o .*\[(\d+)\]/) { - # referenced, set bit 0 - $refused[$1]=1; - } - elsif($l =~ /^ \[(\d+)\] = (.*)/) { - # listed in a reference, set bit 1 - $refused[$1] |= 2; - $refs[$1] = $2; - } -} - -# Return a new fresh reference number -sub getref { - for my $r (1 .. $#refs) { - if(!$refused[$r] & 1) { - return $r; - } - } - # add at the end - return $#refs + 1; -} - -# '#num' -# 'num' -# 'https://github.com/curl/curl/issues/6939' -# 'https://github.com/curl/curl-www/issues/69' -# 'https://elsewhere.example.com/discussion' - -sub extract { - my ($ref)=@_; - if($ref =~ /^(\#|)(\d+)/) { - # return the plain number - return $2; - } - elsif($ref =~ /^https:\/\/github.com\/curl\/curl\/.*\/(\d+)/) { - # return the plain number - return $1; - } - elsif($ref =~ /:\/\//) { - # contains a '://', return the URL - return $ref; - } - # false alarm, not a valid line -} - -my $short; -my $first; -for my $l (@gitlog) { - chomp $l; - if($l =~ /^commit/) { - if($first) { - onecommit($short); - } - # starts a new commit - undef @fixes; - undef @closes; - undef @bug; - $short = ""; - $first = 0; - } - elsif(($l =~ /^ (.*)/) && !$first) { - # first line - $short = $1; - $short =~ s/ ?\[(ci skip|skip ci)\]//g; - $first = 1; - push @line, $short; - } - elsif(($l =~ /^ (.*)/) && $first) { - # not the first - my $line = $1; - - if($line =~ /^Fixes(:|) *(.*)/i) { - my $ref = extract($2); - push @fixes, $ref if($ref); - } - elsif($line =~ /^Clo(s|)es(:|) *(.*)/i) { - my $ref = extract($3); - push @closes, $ref if($ref); - } - elsif($line =~ /^Bug: (.*)/i) { - my $ref = extract($1); - push @bug, $ref if($ref); - } - } -} -if($first) { - onecommit($short); -} - -# call at the end of a parsed commit -sub onecommit { - my ($short)=@_; - my $ref; - - if($bug[0]) { - $ref = $bug[0]; - } - elsif($fixes[0]) { - $ref = $fixes[0]; - } - elsif($closes[0]) { - $ref = $closes[0]; - } - - if($ref =~ /^#?(\d+)/) { - $ref = "https://curl.se/bug/?i=$1" - } - if($ref) { - my $r = getref(); - $refs[$r] = $ref; - $moreinfo{$short}=$r; - $refused[$r] |= 1; - } -} - -#### Output the new RELEASE-NOTES - -my @bullets; -for my $l (@releasenotes) { - if(($l =~ /^This release includes the following bugfixes:/) && !$cleanup) { - push @o, $l; - push @o, "\n"; - for my $f (@line) { - push @o, sprintf " o %s%s\n", $f, - $moreinfo{$f}? sprintf(" [%d]", $moreinfo{$f}): ""; - $refused[$moreinfo{$f}]=3; - } - push @o, " --- new entries are listed above this ---"; - next; - } - elsif($cleanup) { - if($l =~ /^ --- new entries are listed/) { - # ignore this if still around - next; - } - elsif($l =~ /^ o .*/) { - push @bullets, $l; - next; - } - elsif($bullets[0]) { - # output them case insensitively - for my $b (sort { "\L$a" cmp "\L$b" } @bullets) { - push @o, $b; - } - undef @bullets; - } - } - if($l =~ /^ \[(\d+)\] = /) { - # stop now - last; - } - else { - push @o, $l; - } -} - -my @srefs; -my $ln; -for my $n (1 .. $#refs) { - my $r = $refs[$n]; - if($r && ($refused[$n] & 1)) { - push @o, sprintf " [%d] = %s\n", $n, $r; - } -} - -open(O, ">RELEASE-NOTES"); -for my $l (@o) { - print O $l; -} -close(O); - -exit; - -# Debug: show unused references -for my $r (1 .. $#refs) { - if($refused[$r] != 3) { - printf "%s is %d!\n", $r, $refused[$r]; - } -} diff --git a/scripts/singleuse.pl b/scripts/singleuse.pl deleted file mode 100755 index 064990226..000000000 --- a/scripts/singleuse.pl +++ /dev/null @@ -1,239 +0,0 @@ -#!/usr/bin/env perl -#*************************************************************************** -# _ _ ____ _ -# Project ___| | | | _ \| | -# / __| | | | |_) | | -# | (__| |_| | _ <| |___ -# \___|\___/|_| \_\_____| -# -# Copyright (C) Daniel Stenberg, , et al. -# -# This software is licensed as described in the file COPYING, which -# you should have received as part of this distribution. The terms -# are also available at https://curl.se/docs/copyright.html. -# -# You may opt to use, copy, modify, merge, publish, distribute and/or sell -# copies of the Software, and permit persons to whom the Software is -# furnished to do so, under the terms of the COPYING file. -# -# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY -# KIND, either express or implied. -# -# SPDX-License-Identifier: curl -# -########################################################################### -# -# This script is aimed to help scan for and detect globally declared functions -# that are not used from other source files. -# -# Use it like this: -# -# $ ./scripts/singleuse.pl [--unit] lib/.libs/libcurl.a -# -# --unit : built to support unit tests -# - -my $unittests; -if($ARGV[0] eq "--unit") { - $unittests = "tests/unit "; - shift @ARGV; -} - -my $file = $ARGV[0]; - -my %wl = ( - 'curlx_uztoso' => 'cmdline tool use', - 'Curl_xfer_write_resp' => 'internal api', - 'Curl_creader_def_init' => 'internal api', - 'Curl_creader_def_close' => 'internal api', - 'Curl_creader_def_read' => 'internal api', - 'Curl_creader_def_total_length' => 'internal api', -); - -my %api = ( - 'curl_easy_cleanup' => 'API', - 'curl_easy_duphandle' => 'API', - 'curl_easy_escape' => 'API', - 'curl_easy_getinfo' => 'API', - 'curl_easy_init' => 'API', - 'curl_easy_pause' => 'API', - 'curl_easy_perform' => 'API', - 'curl_easy_recv' => 'API', - 'curl_easy_reset' => 'API', - 'curl_easy_send' => 'API', - 'curl_easy_setopt' => 'API', - 'curl_easy_strerror' => 'API', - 'curl_easy_unescape' => 'API', - 'curl_easy_upkeep' => 'API', - 'curl_easy_option_by_id' => 'API', - 'curl_easy_option_by_name' => 'API', - 'curl_easy_option_next' => 'API', - 'curl_escape' => 'API', - 'curl_formadd' => 'API', - 'curl_formfree' => 'API', - 'curl_formget' => 'API', - 'curl_free' => 'API', - 'curl_getdate' => 'API', - 'curl_getenv' => 'API', - 'curl_global_cleanup' => 'API', - 'curl_global_init' => 'API', - 'curl_global_init_mem' => 'API', - 'curl_global_sslset' => 'API', - 'curl_global_trace' => 'API', - 'curl_maprintf' => 'API', - 'curl_mfprintf' => 'API', - 'curl_mime_addpart' => 'API', - 'curl_mime_data' => 'API', - 'curl_mime_data_cb' => 'API', - 'curl_mime_encoder' => 'API', - 'curl_mime_filedata' => 'API', - 'curl_mime_filename' => 'API', - 'curl_mime_free' => 'API', - 'curl_mime_headers' => 'API', - 'curl_mime_init' => 'API', - 'curl_mime_name' => 'API', - 'curl_mime_subparts' => 'API', - 'curl_mime_type' => 'API', - 'curl_mprintf' => 'API', - 'curl_msnprintf' => 'API', - 'curl_msprintf' => 'API', - 'curl_multi_add_handle' => 'API', - 'curl_multi_assign' => 'API', - 'curl_multi_cleanup' => 'API', - 'curl_multi_fdset' => 'API', - 'curl_multi_get_handles' => 'API', - 'curl_multi_info_read' => 'API', - 'curl_multi_init' => 'API', - 'curl_multi_perform' => 'API', - 'curl_multi_remove_handle' => 'API', - 'curl_multi_setopt' => 'API', - 'curl_multi_socket' => 'API', - 'curl_multi_socket_action' => 'API', - 'curl_multi_socket_all' => 'API', - 'curl_multi_poll' => 'API', - 'curl_multi_strerror' => 'API', - 'curl_multi_timeout' => 'API', - 'curl_multi_wait' => 'API', - 'curl_multi_wakeup' => 'API', - 'curl_mvaprintf' => 'API', - 'curl_mvfprintf' => 'API', - 'curl_mvprintf' => 'API', - 'curl_mvsnprintf' => 'API', - 'curl_mvsprintf' => 'API', - 'curl_pushheader_byname' => 'API', - 'curl_pushheader_bynum' => 'API', - 'curl_share_cleanup' => 'API', - 'curl_share_init' => 'API', - 'curl_share_setopt' => 'API', - 'curl_share_strerror' => 'API', - 'curl_slist_append' => 'API', - 'curl_slist_free_all' => 'API', - 'curl_strequal' => 'API', - 'curl_strnequal' => 'API', - 'curl_unescape' => 'API', - 'curl_url' => 'API', - 'curl_url_cleanup' => 'API', - 'curl_url_dup' => 'API', - 'curl_url_get' => 'API', - 'curl_url_set' => 'API', - 'curl_url_strerror' => 'API', - 'curl_version' => 'API', - 'curl_version_info' => 'API', - 'curl_easy_header' => 'API', - 'curl_easy_nextheader' => 'API', - 'curl_ws_meta' => 'API', - 'curl_ws_recv' => 'API', - 'curl_ws_send' => 'API', - - # the following functions are provided globally in debug builds - 'curl_easy_perform_ev' => 'debug-build', - ); - -sub doublecheck { - my ($f, $used) = @_; - open(F, "git grep -le '$f\\W' -- lib ${unittests}packages|"); - my @also; - while() { - my $e = $_; - chomp $e; - if($e =~ /\.[c]$/) { - if($e !~ /^lib\/${used}\.c/) { - push @also, $e; - } - } - } - close(F); - return @also; -} - -open(N, "nm $file|") || - die; - -my %exist; -my %uses; -my $file; -while () { - my $l = $_; - chomp $l; - - if($l =~ /^([0-9a-z_-]+)\.o:/) { - $file = $1; - } - if($l =~ /^([0-9a-f]+) T (.*)/) { - my ($name)=($2); - #print "Define $name in $file\n"; - $file =~ s/^libcurl_la-//; - $exist{$name} = $file; - } - elsif($l =~ /^ U (.*)/) { - my ($name)=($1); - #print "Uses $name in $file\n"; - $uses{$name} .= "$file, "; - } -} -close(N); - -my $err; -for(sort keys %exist) { - #printf "%s is defined in %s, used by: %s\n", $_, $exist{$_}, $uses{$_}; - if(!$uses{$_}) { - # this is a symbol with no "global" user - if($_ =~ /^curl_dbg_/) { - # we ignore the memdebug symbols - } - elsif($_ =~ /^curl_/) { - if(!$api{$_}) { - # not present in the API, or for debug-builds - print STDERR "Bad curl-prefix: $_\n"; - $err++; - } - } - elsif($wl{$_}) { - #print "$_ is WL\n"; - } - else { - my $c = $_; - my @also = doublecheck($c, $exist{$c}); - if(!scalar(@also)) { - printf "%s in %s\n", $c, $exist{$c}; - $err++; - } - # foreach my $a (@also) { - # print " $a\n"; - # } - } - } - elsif($_ =~ /^curl_/) { - # global prefix, make sure it is "blessed" - if(!$api{$_}) { - # not present in the API, or for debug-builds - if($_ !~ /^curl_dbg_/) { - # ignore the memdebug symbols - print STDERR "Bad curl-prefix $_\n"; - $err++; - } - } - } -} - -exit $err; diff --git a/src/.gitignore b/src/.gitignore deleted file mode 100644 index c132010c4..000000000 --- a/src/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (C) Daniel Stenberg, , et al. -# -# SPDX-License-Identifier: curl - -*.a -*.nlm -*.res -config-win32.h -curl -curl_config.h -curl_config.h.in -stamp-h2 -tool_hugehelp.c -tool_version.h.dist diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cd1e9be44..4f3019c7b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -81,7 +81,7 @@ add_executable( ) add_library( - curltool # special libcurltool library just for unittests + curltool # special libcurltool library just for unittests STATIC EXCLUDE_FROM_ALL ${CURL_CFILES} ${CURLTOOL_LIBCURL_CFILES} ${CURL_HFILES} @@ -104,23 +104,23 @@ source_group("curl source files" FILES ${CURL_CFILES}) source_group("curl header files" FILES ${CURL_HFILES}) include_directories( - ${CURL_SOURCE_DIR}/lib # To be able to reach "curl_setup_once.h" - ${CURL_BINARY_DIR}/lib # To be able to reach "curl_config.h" - ${CURL_BINARY_DIR}/include # To be able to reach "curl/curl.h" + ${CURL_SOURCE_DIR}/lib # for "curl_setup_once.h" + ${CURL_BINARY_DIR}/lib # for "curl_config.h" + ${CURL_BINARY_DIR}/include # for "curl/curl.h" # This is needed as tool_hugehelp.c is generated in the binary dir - ${CURL_SOURCE_DIR}/src # To be able to reach "tool_hugehelp.h" + ${CURL_SOURCE_DIR}/src # for "tool_hugehelp.h" ) -#Build curl executable +# Build curl executable target_link_libraries(${EXE_NAME} ${LIB_SELECTED_FOR_EXE} ${CURL_LIBS}) ################################################################################ -#SET_TARGET_PROPERTIES(${EXE_NAME} ARCHIVE_OUTPUT_DIRECTORY "blah blah blah") -#SET_TARGET_PROPERTIES(${EXE_NAME} RUNTIME_OUTPUT_DIRECTORY "blah blah blah") -#SET_TARGET_PROPERTIES(${EXE_NAME} LIBRARY_OUTPUT_DIRECTORY "blah blah blah") +#set_target_properties(${EXE_NAME} ARCHIVE_OUTPUT_DIRECTORY "blah blah blah") +#set_target_properties(${EXE_NAME} RUNTIME_OUTPUT_DIRECTORY "blah blah blah") +#set_target_properties(${EXE_NAME} LIBRARY_OUTPUT_DIRECTORY "blah blah blah") -#INCLUDE(ModuleInstall OPTIONAL) +#include(ModuleInstall OPTIONAL) install(TARGETS ${EXE_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR}) export(TARGETS ${EXE_NAME} diff --git a/src/Makefile.am b/src/Makefile.am index fcc9cfdf9..4ce83c923 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -45,10 +45,6 @@ AM_CPPFLAGS = -I$(top_srcdir)/include \ bin_PROGRAMS = curl -if BUILD_DOCS -SUBDIRS = ../docs -endif - if USE_CPPFLAG_CURL_STATICLIB AM_CPPFLAGS += -DCURL_STATICLIB endif @@ -96,7 +92,7 @@ EXTRA_DIST = mkhelp.pl \ Makefile.mk curl.rc Makefile.inc CMakeLists.txt .checksrc # Use absolute directory to disable VPATH -ASCIIPAGE=$(abs_top_builddir)/docs/cmdline-opts/curl.txt +ASCIIPAGE=$(top_builddir)/docs/cmdline-opts/curl.txt MKHELP=$(top_srcdir)/src/mkhelp.pl HUGE=tool_hugehelp.c @@ -145,7 +141,7 @@ checksrc: $(CHECKSRC)(@PERL@ $(top_srcdir)/scripts/checksrc.pl -D$(srcdir) \ -W$(srcdir)/tool_hugehelp.c $(srcdir)/*.[ch]) -if CURLDEBUG +if DEBUGBUILD # for debug builds, we scan the sources on all regular make invokes all-local: checksrc endif diff --git a/src/Makefile.in b/src/Makefile.in index 1a76e9062..921927077 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -21,7 +21,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -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 \ @@ -145,7 +145,6 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-amissl.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 \ @@ -162,61 +161,66 @@ am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) LTLIBRARIES = $(noinst_LTLIBRARIES) libcurltool_la_LIBADD = -am__libcurltool_la_SOURCES_DIST = slist_wc.c tool_binmode.c \ +am__libcurltool_la_SOURCES_DIST = slist_wc.c terminal.c tool_binmode.c \ tool_bname.c tool_cb_dbg.c tool_cb_hdr.c tool_cb_prg.c \ - tool_cb_rea.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_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_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_cb_rea.c tool_cb_see.c tool_cb_soc.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_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 terminal.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_soc.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 -am__objects_1 = libcurltool_la-slist_wc.lo \ + tool_writeout_json.h tool_xattr.h var.h +am__objects_1 = libcurltool_la-slist_wc.lo libcurltool_la-terminal.lo \ libcurltool_la-tool_binmode.lo libcurltool_la-tool_bname.lo \ libcurltool_la-tool_cb_dbg.lo libcurltool_la-tool_cb_hdr.lo \ libcurltool_la-tool_cb_prg.lo libcurltool_la-tool_cb_rea.lo \ - libcurltool_la-tool_cb_see.lo libcurltool_la-tool_cb_wrt.lo \ - libcurltool_la-tool_cfgable.lo libcurltool_la-tool_dirhie.lo \ - libcurltool_la-tool_doswin.lo libcurltool_la-tool_easysrc.lo \ - libcurltool_la-tool_filetime.lo \ + libcurltool_la-tool_cb_see.lo libcurltool_la-tool_cb_soc.lo \ + libcurltool_la-tool_cb_wrt.lo libcurltool_la-tool_cfgable.lo \ + libcurltool_la-tool_dirhie.lo libcurltool_la-tool_doswin.lo \ + libcurltool_la-tool_easysrc.lo libcurltool_la-tool_filetime.lo \ libcurltool_la-tool_findfile.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_paramhlp.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) @@ -230,53 +234,58 @@ libcurltool_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(libcurltool_la_CFLAGS) $(CFLAGS) $(libcurltool_la_LDFLAGS) \ $(LDFLAGS) -o $@ @BUILD_UNITTESTS_TRUE@am_libcurltool_la_rpath = -am__curl_SOURCES_DIST = slist_wc.c tool_binmode.c tool_bname.c \ - tool_cb_dbg.c tool_cb_hdr.c tool_cb_prg.c tool_cb_rea.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 \ +am__curl_SOURCES_DIST = slist_wc.c terminal.c tool_binmode.c \ + tool_bname.c tool_cb_dbg.c tool_cb_hdr.c tool_cb_prg.c \ + tool_cb_rea.c tool_cb_see.c tool_cb_soc.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_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_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_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 terminal.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_soc.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_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 -am__objects_5 = slist_wc.$(OBJEXT) tool_binmode.$(OBJEXT) \ - tool_bname.$(OBJEXT) tool_cb_dbg.$(OBJEXT) \ - tool_cb_hdr.$(OBJEXT) tool_cb_prg.$(OBJEXT) \ - tool_cb_rea.$(OBJEXT) tool_cb_see.$(OBJEXT) \ + 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) terminal.$(OBJEXT) \ + tool_binmode.$(OBJEXT) tool_bname.$(OBJEXT) \ + tool_cb_dbg.$(OBJEXT) tool_cb_hdr.$(OBJEXT) \ + tool_cb_prg.$(OBJEXT) tool_cb_rea.$(OBJEXT) \ + tool_cb_see.$(OBJEXT) tool_cb_soc.$(OBJEXT) \ tool_cb_wrt.$(OBJEXT) tool_cfgable.$(OBJEXT) \ tool_dirhie.$(OBJEXT) tool_doswin.$(OBJEXT) \ tool_easysrc.$(OBJEXT) tool_filetime.$(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_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_strdup.$(OBJEXT) tool_setopt.$(OBJEXT) \ - tool_sleep.$(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_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) 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) @HAVE_WINDRES_TRUE@am__objects_9 = $(am__objects_8) @@ -286,6 +295,9 @@ curl_OBJECTS = $(am_curl_OBJECTS) @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 @@ -301,8 +313,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 \ @@ -314,6 +327,7 @@ am__depfiles_remade = ../lib/$(DEPDIR)/curl_multibyte.Po \ ../lib/$(DEPDIR)/timediff.Po ../lib/$(DEPDIR)/version_win32.Po \ ../lib/$(DEPDIR)/warnless.Po \ ./$(DEPDIR)/libcurltool_la-slist_wc.Plo \ + ./$(DEPDIR)/libcurltool_la-terminal.Plo \ ./$(DEPDIR)/libcurltool_la-tool_binmode.Plo \ ./$(DEPDIR)/libcurltool_la-tool_bname.Plo \ ./$(DEPDIR)/libcurltool_la-tool_cb_dbg.Plo \ @@ -321,6 +335,7 @@ am__depfiles_remade = ../lib/$(DEPDIR)/curl_multibyte.Po \ ./$(DEPDIR)/libcurltool_la-tool_cb_prg.Plo \ ./$(DEPDIR)/libcurltool_la-tool_cb_rea.Plo \ ./$(DEPDIR)/libcurltool_la-tool_cb_see.Plo \ + ./$(DEPDIR)/libcurltool_la-tool_cb_soc.Plo \ ./$(DEPDIR)/libcurltool_la-tool_cb_wrt.Plo \ ./$(DEPDIR)/libcurltool_la-tool_cfgable.Plo \ ./$(DEPDIR)/libcurltool_la-tool_dirhie.Plo \ @@ -334,6 +349,7 @@ 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 \ @@ -345,6 +361,7 @@ am__depfiles_remade = ../lib/$(DEPDIR)/curl_multibyte.Po \ ./$(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 \ @@ -352,26 +369,29 @@ 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)/libcurltool_la-var.Plo ./$(DEPDIR)/slist_wc.Po \ + ./$(DEPDIR)/terminal.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)/tool_cb_soc.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_paramhlp.Po \ ./$(DEPDIR)/tool_parsecfg.Po ./$(DEPDIR)/tool_progress.Po \ ./$(DEPDIR)/tool_setopt.Po ./$(DEPDIR)/tool_sleep.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_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)/var.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -394,27 +414,11 @@ am__v_CCLD_1 = SOURCES = $(libcurltool_la_SOURCES) $(curl_SOURCES) DIST_SOURCES = $(am__libcurltool_la_SOURCES_DIST) \ $(am__curl_SOURCES_DIST) -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 @@ -432,38 +436,14 @@ 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)` -DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \ $(top_srcdir)/depcomp 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@ @@ -472,6 +452,7 @@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@ +CADDY = @CADDY@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ @@ -506,7 +487,6 @@ 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@ @@ -532,9 +512,12 @@ HAVE_BROTLI = @HAVE_BROTLI@ HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_OPENSSL_QUIC = @HAVE_OPENSSL_QUIC@ 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@ @@ -547,6 +530,8 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBCURL_LIBS = @LIBCURL_LIBS@ LIBCURL_NO_SHARED = @LIBCURL_NO_SHARED@ +LIBCURL_PC_REQUIRES = @LIBCURL_PC_REQUIRES@ +LIBCURL_PC_REQUIRES_PRIVATE = @LIBCURL_PC_REQUIRES_PRIVATE@ LIBOBJS = @LIBOBJS@ # Prevent LIBS from being used for all link targets @@ -559,14 +544,9 @@ 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@ -# 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@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ @@ -602,6 +582,7 @@ USE_ARES = @USE_ARES@ USE_BEARSSL = @USE_BEARSSL@ USE_GNUTLS = @USE_GNUTLS@ USE_HYPER = @USE_HYPER@ +USE_LIBPSL = @USE_LIBPSL@ USE_LIBRTMP = @USE_LIBRTMP@ USE_LIBSSH = @USE_LIBSSH@ USE_LIBSSH2 = @USE_LIBSSH2@ @@ -610,11 +591,14 @@ USE_MSH3 = @USE_MSH3@ USE_NGHTTP2 = @USE_NGHTTP2@ USE_NGHTTP3 = @USE_NGHTTP3@ USE_NGTCP2 = @USE_NGTCP2@ +USE_NGTCP2_CRYPTO_BORINGSSL = @USE_NGTCP2_CRYPTO_BORINGSSL@ 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_NGTCP2_H3 = @USE_NGTCP2_H3@ USE_OPENLDAP = @USE_OPENLDAP@ +USE_OPENSSL_H3 = @USE_OPENSSL_H3@ +USE_OPENSSL_QUIC = @USE_OPENSSL_QUIC@ USE_QUICHE = @USE_QUICHE@ USE_RUSTLS = @USE_RUSTLS@ USE_SCHANNEL = @USE_SCHANNEL@ @@ -628,6 +612,7 @@ USE_WOLFSSH = @USE_WOLFSSH@ USE_WOLFSSL = @USE_WOLFSSL@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ +VSFTPD = @VSFTPD@ ZLIB_LIBS = @ZLIB_LIBS@ ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ abs_builddir = @abs_builddir@ @@ -692,7 +677,7 @@ top_srcdir = @top_srcdir@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# Copyright (C) Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -722,33 +707,40 @@ 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) -SUBDIRS = ../docs + $(am__append_1) -DBUILDING_CURL -# 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. +# 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 are not part of +# 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 \ + terminal.c \ tool_binmode.c \ tool_bname.c \ tool_cb_dbg.c \ @@ -756,6 +748,7 @@ CURL_CFILES = \ tool_cb_prg.c \ tool_cb_rea.c \ tool_cb_see.c \ + tool_cb_soc.c \ tool_cb_wrt.c \ tool_cfgable.c \ tool_dirhie.c \ @@ -769,6 +762,7 @@ CURL_CFILES = \ tool_help.c \ tool_helpers.c \ tool_hugehelp.c \ + tool_ipfs.c \ tool_libinfo.c \ tool_listhelp.c \ tool_main.c \ @@ -778,18 +772,21 @@ CURL_CFILES = \ 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 \ + terminal.h \ tool_binmode.h \ tool_bname.h \ tool_cb_dbg.h \ @@ -797,6 +794,7 @@ CURL_HFILES = \ tool_cb_prg.h \ tool_cb_rea.h \ tool_cb_see.h \ + tool_cb_soc.h \ tool_cb_wrt.h \ tool_cfgable.h \ tool_dirhie.h \ @@ -810,6 +808,7 @@ CURL_HFILES = \ tool_help.h \ tool_helpers.h \ tool_hugehelp.h \ + tool_ipfs.h \ tool_libinfo.h \ tool_main.h \ tool_msgs.h \ @@ -822,6 +821,7 @@ CURL_HFILES = \ tool_setopt.h \ tool_setup.h \ tool_sleep.h \ + tool_stderr.h \ tool_strdup.h \ tool_urlglob.h \ tool_util.h \ @@ -829,7 +829,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 @@ -838,7 +839,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 @@ -850,12 +852,15 @@ 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 +# Use the C locale to ensure that only ASCII characters appear in the +# embedded text. +NROFF = env LC_ALL=C @NROFF@ @MANOPT@ 2>/dev/null # figured out by the configure script EXTRA_DIST = mkhelp.pl \ - Makefile.mk curl.rc Makefile.inc CMakeLists.txt + Makefile.mk curl.rc Makefile.inc CMakeLists.txt .checksrc # Use absolute directory to disable VPATH -MANPAGE = $(abs_top_builddir)/docs/curl.1 +ASCIIPAGE = $(top_builddir)/docs/cmdline-opts/curl.txt MKHELP = $(top_srcdir)/src/mkhelp.pl HUGE = tool_hugehelp.c HUGECMD = $(HUGEIT_$(V)) @@ -870,7 +875,7 @@ CS_ = $(CS_0) # disable the tests that are mostly causing false positives TIDYFLAGS = -checks=-clang-analyzer-security.insecureAPI.strcpy,-clang-analyzer-optin.performance.Padding,-clang-analyzer-valist.Uninitialized,-clang-analyzer-core.NonNullParamChecker,-clang-analyzer-core.NullDereference TIDY := clang-tidy -all: all-recursive +all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj .rc @@ -970,41 +975,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) @@ -1014,8 +1023,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 @@ -1029,6 +1040,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/version_win32.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)/libcurltool_la-slist_wc.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-terminal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_binmode.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_bname.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_cb_dbg.Plo@am__quote@ # am--include-marker @@ -1036,6 +1048,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_cb_prg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_cb_rea.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_cb_see.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_cb_soc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_cb_wrt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_cfgable.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_dirhie.Plo@am__quote@ # am--include-marker @@ -1049,6 +1062,7 @@ 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 @@ -1060,6 +1074,7 @@ distclean-compile: @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 @@ -1067,7 +1082,9 @@ 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)/terminal.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 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_cb_dbg.Po@am__quote@ # am--include-marker @@ -1075,6 +1092,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_cb_prg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_cb_rea.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_cb_see.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_cb_soc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_cb_wrt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_cfgable.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tool_dirhie.Po@am__quote@ # am--include-marker @@ -1088,6 +1106,7 @@ 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 @@ -1099,6 +1118,7 @@ distclean-compile: @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 @@ -1106,6 +1126,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) @@ -1144,6 +1165,13 @@ libcurltool_la-slist_wc.lo: slist_wc.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-slist_wc.lo `test -f 'slist_wc.c' || echo '$(srcdir)/'`slist_wc.c +libcurltool_la-terminal.lo: terminal.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-terminal.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-terminal.Tpo -c -o libcurltool_la-terminal.lo `test -f 'terminal.c' || echo '$(srcdir)/'`terminal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-terminal.Tpo $(DEPDIR)/libcurltool_la-terminal.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='terminal.c' object='libcurltool_la-terminal.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-terminal.lo `test -f 'terminal.c' || echo '$(srcdir)/'`terminal.c + libcurltool_la-tool_binmode.lo: tool_binmode.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_binmode.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_binmode.Tpo -c -o libcurltool_la-tool_binmode.lo `test -f 'tool_binmode.c' || echo '$(srcdir)/'`tool_binmode.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_binmode.Tpo $(DEPDIR)/libcurltool_la-tool_binmode.Plo @@ -1193,6 +1221,13 @@ libcurltool_la-tool_cb_see.lo: tool_cb_see.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_cb_see.lo `test -f 'tool_cb_see.c' || echo '$(srcdir)/'`tool_cb_see.c +libcurltool_la-tool_cb_soc.lo: tool_cb_soc.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_cb_soc.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_cb_soc.Tpo -c -o libcurltool_la-tool_cb_soc.lo `test -f 'tool_cb_soc.c' || echo '$(srcdir)/'`tool_cb_soc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_cb_soc.Tpo $(DEPDIR)/libcurltool_la-tool_cb_soc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool_cb_soc.c' object='libcurltool_la-tool_cb_soc.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_cb_soc.lo `test -f 'tool_cb_soc.c' || echo '$(srcdir)/'`tool_cb_soc.c + libcurltool_la-tool_cb_wrt.lo: tool_cb_wrt.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_cb_wrt.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_cb_wrt.Tpo -c -o libcurltool_la-tool_cb_wrt.lo `test -f 'tool_cb_wrt.c' || echo '$(srcdir)/'`tool_cb_wrt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_cb_wrt.Tpo $(DEPDIR)/libcurltool_la-tool_cb_wrt.Plo @@ -1284,6 +1319,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 @@ -1347,13 +1389,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 @@ -1368,6 +1403,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 @@ -1410,19 +1459,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 @@ -1431,19 +1494,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 @@ -1452,12 +1515,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 @@ -1466,61 +1529,14 @@ clean-libtool: -rm -rf .libs _libs -rm -rf ../lib/.libs ../lib/_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-am 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 \ @@ -1533,7 +1549,7 @@ tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $$unique; \ fi; \ fi -ctags: ctags-recursive +ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) @@ -1546,7 +1562,7 @@ GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" -cscopelist: cscopelist-recursive +cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ @@ -1597,49 +1613,23 @@ distdir-am: $(DISTFILES) || 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 -@CURLDEBUG_FALSE@all-local: +check: check-am +@DEBUGBUILD_FALSE@all-local: all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) all-local -installdirs: installdirs-recursive -installdirs-am: +installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive +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-recursive +installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ @@ -1664,14 +1654,16 @@ distclean-generic: 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: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES mostlyclean-am -distclean: distclean-recursive - -rm -f ../lib/$(DEPDIR)/curl_multibyte.Po +distclean: distclean-am + -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 @@ -1685,6 +1677,7 @@ distclean: distclean-recursive -rm -f ../lib/$(DEPDIR)/version_win32.Po -rm -f ../lib/$(DEPDIR)/warnless.Po -rm -f ./$(DEPDIR)/libcurltool_la-slist_wc.Plo + -rm -f ./$(DEPDIR)/libcurltool_la-terminal.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_binmode.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_bname.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_dbg.Plo @@ -1692,6 +1685,7 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_prg.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_rea.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_see.Plo + -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_soc.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_wrt.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cfgable.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_dirhie.Plo @@ -1705,6 +1699,7 @@ 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 @@ -1716,6 +1711,7 @@ distclean: distclean-recursive -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 @@ -1723,7 +1719,9 @@ 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)/terminal.Po -rm -f ./$(DEPDIR)/tool_binmode.Po -rm -f ./$(DEPDIR)/tool_bname.Po -rm -f ./$(DEPDIR)/tool_cb_dbg.Po @@ -1731,6 +1729,7 @@ distclean: distclean-recursive -rm -f ./$(DEPDIR)/tool_cb_prg.Po -rm -f ./$(DEPDIR)/tool_cb_rea.Po -rm -f ./$(DEPDIR)/tool_cb_see.Po + -rm -f ./$(DEPDIR)/tool_cb_soc.Po -rm -f ./$(DEPDIR)/tool_cb_wrt.Po -rm -f ./$(DEPDIR)/tool_cfgable.Po -rm -f ./$(DEPDIR)/tool_dirhie.Po @@ -1744,6 +1743,7 @@ 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 @@ -1755,6 +1755,7 @@ distclean: distclean-recursive -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 @@ -1762,53 +1763,56 @@ 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 -dvi: dvi-recursive +dvi: dvi-am dvi-am: -html: html-recursive +html: html-am html-am: -info: info-recursive +info: info-am info-am: install-data-am: -install-dvi: install-dvi-recursive +install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS -install-html: install-html-recursive +install-html: install-html-am install-html-am: -install-info: install-info-recursive +install-info: install-info-am install-info-am: install-man: -install-pdf: install-pdf-recursive +install-pdf: install-pdf-am install-pdf-am: -install-ps: install-ps-recursive +install-ps: install-ps-am install-ps-am: installcheck-am: -maintainer-clean: maintainer-clean-recursive - -rm -f ../lib/$(DEPDIR)/curl_multibyte.Po +maintainer-clean: maintainer-clean-am + -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 @@ -1822,6 +1826,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f ../lib/$(DEPDIR)/version_win32.Po -rm -f ../lib/$(DEPDIR)/warnless.Po -rm -f ./$(DEPDIR)/libcurltool_la-slist_wc.Plo + -rm -f ./$(DEPDIR)/libcurltool_la-terminal.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_binmode.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_bname.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_dbg.Plo @@ -1829,6 +1834,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_prg.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_rea.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_see.Plo + -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_soc.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cb_wrt.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_cfgable.Plo -rm -f ./$(DEPDIR)/libcurltool_la-tool_dirhie.Plo @@ -1842,6 +1848,7 @@ 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 @@ -1853,6 +1860,7 @@ maintainer-clean: maintainer-clean-recursive -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 @@ -1860,7 +1868,9 @@ 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)/terminal.Po -rm -f ./$(DEPDIR)/tool_binmode.Po -rm -f ./$(DEPDIR)/tool_bname.Po -rm -f ./$(DEPDIR)/tool_cb_dbg.Po @@ -1868,6 +1878,7 @@ maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/tool_cb_prg.Po -rm -f ./$(DEPDIR)/tool_cb_rea.Po -rm -f ./$(DEPDIR)/tool_cb_see.Po + -rm -f ./$(DEPDIR)/tool_cb_soc.Po -rm -f ./$(DEPDIR)/tool_cb_wrt.Po -rm -f ./$(DEPDIR)/tool_cfgable.Po -rm -f ./$(DEPDIR)/tool_dirhie.Po @@ -1881,6 +1892,7 @@ 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 @@ -1892,6 +1904,7 @@ maintainer-clean: maintainer-clean-recursive -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 @@ -1899,41 +1912,41 @@ 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 -mostlyclean: mostlyclean-recursive +mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool -pdf: pdf-recursive +pdf: pdf-am pdf-am: -ps: ps-recursive +ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS -.MAKE: $(am__recursive_targets) install-am install-strip - -.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ - am--depfiles check check-am clean clean-binPROGRAMS \ - clean-generic clean-libtool clean-noinstLTLIBRARIES \ - 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-binPROGRAMS 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-compile mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-binPROGRAMS +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am all-local am--depfiles check \ + check-am clean clean-binPROGRAMS clean-generic clean-libtool \ + clean-noinstLTLIBRARIES 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-binPROGRAMS 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 uninstall-binPROGRAMS .PRECIOUS: Makefile @@ -1944,22 +1957,22 @@ uninstall-am: uninstall-binPROGRAMS # Here are the stuff to create a built-in manual -@USE_MANUAL_TRUE@$(MANPAGE): +@USE_MANUAL_TRUE@$(ASCIIPAGE): @USE_MANUAL_TRUE@ cd $(top_builddir)/docs && $(MAKE) # This generates the tool_hugehelp.c file in both uncompressed and # compressed formats. -@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@$(HUGE): $(MANPAGE) $(MKHELP) +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@$(HUGE): $(ASCIIPAGE) $(MKHELP) @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(HUGECMD) (echo '#include "tool_setup.h"' > $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#ifndef HAVE_LIBZ' >> $(HUGE); \ -@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) >> $(HUGE); \ +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(PERL) $(MKHELP) < $(ASCIIPAGE) >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#else' >> $(HUGE); \ -@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c >> $(HUGE); \ +@HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(PERL) $(MKHELP) -c < $(ASCIIPAGE) >> $(HUGE); \ @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#endif /* HAVE_LIBZ */' >> $(HUGE) ) # This generates the tool_hugehelp.c file uncompressed only -@HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@$(HUGE): $(MANPAGE) $(MKHELP) +@HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@$(HUGE): $(ASCIIPAGE) $(MKHELP) @HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@ $(HUGECMD)(echo '#include "tool_setup.h"' > $(HUGE); \ -@HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) >> $(HUGE) ) +@HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@ $(PERL) $(MKHELP) < $(ASCIIPAGE) >> $(HUGE) ) # built-in manual has been disabled, make a blank file @USE_MANUAL_FALSE@$(HUGE): @@ -1972,13 +1985,13 @@ checksrc: -W$(srcdir)/tool_hugehelp.c $(srcdir)/*.[ch]) # for debug builds, we scan the sources on all regular make invokes -@CURLDEBUG_TRUE@all-local: checksrc +@DEBUGBUILD_TRUE@all-local: checksrc tidy: $(TIDY) $(CURL_CFILES) $(TIDYFLAGS) -- $(curl_CPPFLAGS) $(CPPFLAGS) -DHAVE_CONFIG_H listhelp: - (cd $(top_srcdir)/docs/cmdline-opts && ./gen.pl listhelp *.d) > tool_listhelp.c + (cd $(top_srcdir)/docs/cmdline-opts && make listhelp) @HAVE_WINDRES_TRUE@.rc.o: @HAVE_WINDRES_TRUE@ $(RC) -I$(top_srcdir)/include -DCURL_EMBED_MANIFEST $(RCFLAGS) -i $< -o $@ diff --git a/src/Makefile.inc b/src/Makefile.inc index c1d202a06..93bef122c 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -34,7 +34,7 @@ CURLTOOL_LIBCURL_CFILES = \ ../lib/base64.c \ ../lib/dynbuf.c -# libcurl has sources that provide functions named curlx_* that aren't part of +# libcurl has sources that provide functions named curlx_* that are not part of # the official API, but we reuse the code here to avoid duplication. CURLX_CFILES = \ ../lib/base64.c \ @@ -59,6 +59,7 @@ CURLX_HFILES = \ CURL_CFILES = \ slist_wc.c \ + terminal.c \ tool_binmode.c \ tool_bname.c \ tool_cb_dbg.c \ @@ -66,6 +67,7 @@ CURL_CFILES = \ tool_cb_prg.c \ tool_cb_rea.c \ tool_cb_see.c \ + tool_cb_soc.c \ tool_cb_wrt.c \ tool_cfgable.c \ tool_dirhie.c \ @@ -103,6 +105,7 @@ CURL_CFILES = \ CURL_HFILES = \ slist_wc.h \ + terminal.h \ tool_binmode.h \ tool_bname.h \ tool_cb_dbg.h \ @@ -110,6 +113,7 @@ CURL_HFILES = \ tool_cb_prg.h \ tool_cb_rea.h \ tool_cb_see.h \ + tool_cb_soc.h \ tool_cb_wrt.h \ tool_cfgable.h \ tool_dirhie.h \ diff --git a/src/curl.rc b/src/curl.rc index 6fcaf353e..475dfbe89 100644 --- a/src/curl.rc +++ b/src/curl.rc @@ -32,7 +32,7 @@ VS_VERSION_INFO VERSIONINFO FILEVERSION RC_VERSION PRODUCTVERSION RC_VERSION FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#if defined(DEBUGBUILD) || defined(_DEBUG) +#if defined(DEBUGBUILD) || defined(UNITTESTS) || defined(CURLDEBUG) || defined(_DEBUG) FILEFLAGS VS_FF_DEBUG #else FILEFLAGS 0L diff --git a/src/mkhelp.pl b/src/mkhelp.pl index 52b6e13e3..96c2b4192 100755 --- a/src/mkhelp.pl +++ b/src/mkhelp.pl @@ -167,6 +167,7 @@ chomp $n; $n =~ s/\\/\\\\/g; $n =~ s/\"/\\\"/g; + $n =~ s/\t/\\t/g; if(!$n) { $blank++; diff --git a/src/terminal.c b/src/terminal.c new file mode 100644 index 000000000..7ba991d3e --- /dev/null +++ b/src/terminal.c @@ -0,0 +1,91 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#include "tool_setup.h" + +#ifdef HAVE_SYS_IOCTL_H +#include +#endif + +#include "terminal.h" + +#include "memdebug.h" /* keep this as LAST include */ + +#ifdef HAVE_TERMIOS_H +# include +#elif defined(HAVE_TERMIO_H) +# include +#endif + +/* + * get_terminal_columns() returns the number of columns in the current + * terminal. It will return 79 on failure. Also, the number can be very big. + */ + +unsigned int get_terminal_columns(void) +{ + unsigned int width = 0; + char *colp = curl_getenv("COLUMNS"); + if(colp) { + char *endptr; + long num = strtol(colp, &endptr, 10); + if((endptr != colp) && (endptr == colp + strlen(colp)) && (num > 20) && + (num < 10000)) + width = (unsigned int)num; + curl_free(colp); + } + + if(!width) { + int cols = 0; + +#ifdef TIOCGSIZE + struct ttysize ts; + if(!ioctl(STDIN_FILENO, TIOCGSIZE, &ts)) + cols = ts.ts_cols; +#elif defined(TIOCGWINSZ) + struct winsize ts; + if(!ioctl(STDIN_FILENO, TIOCGWINSZ, &ts)) + cols = (int)ts.ws_col; +#elif defined(_WIN32) && !defined(CURL_WINDOWS_APP) + { + HANDLE stderr_hnd = GetStdHandle(STD_ERROR_HANDLE); + CONSOLE_SCREEN_BUFFER_INFO console_info; + + if((stderr_hnd != INVALID_HANDLE_VALUE) && + GetConsoleScreenBufferInfo(stderr_hnd, &console_info)) { + /* + * Do not use +1 to get the true screen-width since writing a + * character at the right edge will cause a line wrap. + */ + cols = (int) + (console_info.srWindow.Right - console_info.srWindow.Left); + } + } +#endif /* TIOCGSIZE */ + if(cols >= 0 && cols < 10000) + width = (unsigned int)cols; + } + if(!width) + width = 79; + return width; /* 79 for unknown, might also be very small or very big */ +} diff --git a/src/tool_hugehelp.c.cvs b/src/terminal.h similarity index 88% rename from src/tool_hugehelp.c.cvs rename to src/terminal.h index 06b132fbc..dbd4abe28 100644 --- a/src/tool_hugehelp.c.cvs +++ b/src/terminal.h @@ -1,3 +1,5 @@ +#ifndef HEADER_CURL_TERMINAL_H +#define HEADER_CURL_TERMINAL_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | @@ -21,11 +23,8 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ - #include "tool_setup.h" -#include "tool_hugehelp.h" -void hugehelp(void) -{ - puts("This is a silly replacement for the actual file."); -} +unsigned int get_terminal_columns(void); + +#endif /* HEADER_CURL_TERMINAL_H */ diff --git a/src/tool_cb_dbg.c b/src/tool_cb_dbg.c index cbf57f057..dd2a124ad 100644 --- a/src/tool_cb_dbg.c +++ b/src/tool_cb_dbg.c @@ -59,7 +59,7 @@ static const char *hms_for_sec(time_t tv_sec) } secs = epoch_offset + tv_sec; /* !checksrc! disable BANNEDFUNC 1 */ - now = localtime(&secs); /* not thread safe but we don't care */ + now = localtime(&secs); /* not thread safe but we do not care */ msnprintf(hms_buf, sizeof(hms_buf), "%02d:%02d:%02d", now->tm_hour, now->tm_min, now->tm_sec); cached_tv_sec = tv_sec; @@ -99,7 +99,7 @@ int tool_debug_cb(CURL *handle, curl_infotype type, const char *text; struct timeval tv; char timebuf[20]; - /* largest signed 64bit is: 9,223,372,036,854,775,807 + /* largest signed 64-bit 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 @@ -191,8 +191,8 @@ int tool_debug_cb(CURL *handle, curl_infotype type, case CURLINFO_SSL_DATA_IN: case CURLINFO_SSL_DATA_OUT: if(!traced_data) { - /* if the data is output to a tty and we're sending this debug trace - to stderr or stdout, we don't display the alert about the data not + /* if the data is output to a tty and we are sending this debug trace + to stderr or stdout, we do not display the alert about the data not being shown as the data _is_ shown then just not via this function */ if(!config->isatty || @@ -286,7 +286,7 @@ static void dump(const char *timebuf, const char *idsbuf, const char *text, (void)infotype; fprintf(stream, "%c", ((ptr[i + c] >= 0x20) && (ptr[i + c] < 0x7F)) ? ptr[i + c] : UNPRINTABLE_CHAR); - /* check again for 0D0A, to avoid an extra \n if it's at width */ + /* check again for 0D0A, to avoid an extra \n if it is at width */ if((tracetype == TRACE_ASCII) && (i + c + 2 < size) && (ptr[i + c + 1] == 0x0D) && (ptr[i + c + 2] == 0x0A)) { diff --git a/src/tool_cb_hdr.c b/src/tool_cb_hdr.c index 13fb76d6a..96b6fabb7 100644 --- a/src/tool_cb_hdr.c +++ b/src/tool_cb_hdr.c @@ -24,6 +24,9 @@ #include "tool_setup.h" #include "strcase.h" +#ifdef HAVE_UNISTD_H +#include +#endif #define ENABLE_CURLX_PRINTF /* use our own printf() functions */ @@ -47,7 +50,7 @@ static char *parse_filename(const char *ptr, size_t len); #else #define BOLD "\x1b[1m" /* Switch off bold by setting "all attributes off" since the explicit - bold-off code (21) isn't supported everywhere - like in the mac + bold-off code (21) is not supported everywhere - like in the mac Terminal. */ #define BOLDOFF "\x1b[0m" /* OSC 8 hyperlink escape sequence */ @@ -102,7 +105,11 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata) if(rc != cb) return rc; /* flush the stream to send off what we got earlier */ - (void)fflush(heads->stream); + if(fflush(heads->stream)) { + errorf(per->config->global, "Failed writing headers to %s", + per->config->headerfile); + return CURL_WRITEFUNC_ERROR; + } } curl_easy_getinfo(per->curl, CURLINFO_SCHEME, &scheme); @@ -111,8 +118,9 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata) long response = 0; curl_easy_getinfo(per->curl, CURLINFO_RESPONSE_CODE, &response); - if(response/100 != 2) - /* only care about these headers in 2xx responses */ + if((response/100 != 2) && (response/100 != 3)) + /* only care about etag and content-disposition headers in 2xx and 3xx + responses */ ; /* * Write etag to file when --etag-save option is given. @@ -130,6 +138,19 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata) if(eot >= etag_h) { size_t etag_length = eot - etag_h + 1; + /* + * Truncate the etag save stream, it can have an existing etag value. + */ +#ifdef HAVE_FTRUNCATE + if(ftruncate(fileno(etag_save->stream), 0)) { + return CURL_WRITEFUNC_ERROR; + } +#else + if(fseek(etag_save->stream, 0, SEEK_SET)) { + return CURL_WRITEFUNC_ERROR; + } +#endif + fwrite(etag_h, size, etag_length, etag_save->stream); /* terminate with newline */ fputc('\n', etag_save->stream); @@ -171,10 +192,7 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata) } p += 9; - /* this expression below typecasts 'cb' only to avoid - warning: signed and unsigned type in conditional expression - */ - len = (ssize_t)cb - (p - str); + len = cb - (size_t)(p - str); filename = parse_filename(p, len); if(filename) { if(outs->stream) { @@ -255,7 +273,7 @@ size_t tool_header_cb(char *ptr, size_t size, size_t nmemb, void *userdata) } /* - * Copies a file name part and returns an ALLOCATED data buffer. + * Copies a filename part and returns an ALLOCATED data buffer. */ static char *parse_filename(const char *ptr, size_t len) { @@ -296,7 +314,7 @@ static char *parse_filename(const char *ptr, size_t len) } /* If the filename contains a backslash, only use filename portion. The idea - is that even systems that don't handle backslashes as path separators + is that even systems that do not handle backslashes as path separators probably want the path removed for convenience. */ q = strrchr(p, '\\'); if(q) { @@ -307,7 +325,7 @@ static char *parse_filename(const char *ptr, size_t len) } } - /* make sure the file name doesn't end in \r or \n */ + /* make sure the filename does not end in \r or \n */ q = strchr(p, '\r'); if(q) *q = '\0'; @@ -331,17 +349,17 @@ static char *parse_filename(const char *ptr, size_t len) #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 + * named CURL_TESTDIR to prefix the given filename to put it into a * specific directory */ #ifdef DEBUGBUILD { - char *tdir = curlx_getenv("CURL_TESTDIR"); + char *tdir = curl_getenv("CURL_TESTDIR"); if(tdir) { char buffer[512]; /* suitably large */ msnprintf(buffer, sizeof(buffer), "%s/%s", tdir, copy); Curl_safefree(copy); - copy = strdup(buffer); /* clone the buffer, we don't use the libcurl + copy = strdup(buffer); /* clone the buffer, we do not use the libcurl aprintf() or similar since we want to use the same memory code as the "real" parse_filename function */ @@ -358,9 +376,9 @@ static char *parse_filename(const char *ptr, size_t len) * Treat the Location: header specially, by writing a special escape * sequence that adds a hyperlink to the displayed text. This makes * the absolute URL of the redirect clickable in supported terminals, - * which couldn't happen otherwise for relative URLs. The Location: + * which could not happen otherwise for relative URLs. The Location: * header is supposed to always be absolute so this theoretically - * shouldn't be needed but the real world returns plenty of relative + * should not be needed but the real world returns plenty of relative * URLs here. */ static @@ -432,7 +450,7 @@ void write_linked_location(CURL *curl, const char *location, size_t loclen, goto locdone; } - /* Not a "safe" URL: don't linkify it */ + /* Not a "safe" URL: do not linkify it */ locout: /* Write the normal output in case of error or unsafe */ diff --git a/src/tool_cb_prg.c b/src/tool_cb_prg.c index 86b6fa605..4c3d3cdb5 100644 --- a/src/tool_cb_prg.c +++ b/src/tool_cb_prg.c @@ -23,10 +23,6 @@ ***************************************************************************/ #include "tool_setup.h" -#ifdef HAVE_SYS_IOCTL_H -#include -#endif - #define ENABLE_CURLX_PRINTF /* use our own printf() functions */ #include "curlx.h" @@ -35,17 +31,12 @@ #include "tool_cb_prg.h" #include "tool_util.h" #include "tool_operate.h" +#include "terminal.h" #include "memdebug.h" /* keep this as LAST include */ #define MAX_BARLENGTH 256 -#ifdef HAVE_TERMIOS_H -# include -#elif defined(HAVE_TERMIO_H) -# include -#endif - /* 200 values generated by this perl code: my $pi = 3.1415; @@ -53,7 +44,7 @@ printf "%d, ", sin($i/200 * 2 * $pi) * 500000 + 500000; } */ -static const unsigned int sinus[] = { +static const int sinus[] = { 515704, 531394, 547052, 562664, 578214, 593687, 609068, 624341, 639491, 654504, 669364, 684057, 698568, 712883, 726989, 740870, 754513, 767906, 781034, 793885, 806445, 818704, 830647, 842265, 853545, 864476, 875047, @@ -86,19 +77,19 @@ static void fly(struct ProgressData *bar, bool moved) /* bar->width is range checked when assigned */ DEBUGASSERT(bar->width <= MAX_BARLENGTH); - memset(buf, ' ', bar->width); - buf[bar->width] = '\r'; + buf[0] = '\r'; + memset(&buf[1], ' ', bar->width); buf[bar->width + 1] = '\0'; - memcpy(&buf[bar->bar], "-=O=-", 5); + memcpy(&buf[bar->bar + 1], "-=O=-", 5); - pos = sinus[bar->tick%200] / (1000000 / check); + pos = sinus[bar->tick%200] / (1000000 / check) + 1; buf[pos] = '#'; - pos = sinus[(bar->tick + 5)%200] / (1000000 / check); + pos = sinus[(bar->tick + 5)%200] / (1000000 / check) + 1; buf[pos] = '#'; - pos = sinus[(bar->tick + 10)%200] / (1000000 / check); + pos = sinus[(bar->tick + 10)%200] / (1000000 / check) + 1; buf[pos] = '#'; - pos = sinus[(bar->tick + 15)%200] / (1000000 / check); + pos = sinus[(bar->tick + 15)%200] / (1000000 / check) + 1; buf[pos] = '#'; fputs(buf, bar->out); @@ -170,10 +161,10 @@ int tool_progress_cb(void *clientp, if(total) { /* we know the total data to get... */ if(bar->prev == point) - /* progress didn't change since last invoke */ + /* progress did not change since last invoke */ return 0; else if((tvdiff(now, bar->prevtime) < 100L) && point < total) - /* limit progress-bar updating to 10 Hz except when we're at 100% */ + /* limit progress-bar updating to 10 Hz except when we are at 100% */ return 0; } else { @@ -194,7 +185,7 @@ int tool_progress_cb(void *clientp, double frac; double percent; int barwidth; - int num; + size_t num; if(point > total) /* we have got more than the expected total! */ total = point; @@ -202,7 +193,7 @@ int tool_progress_cb(void *clientp, frac = (double)point / (double)total; percent = frac * 100.0; barwidth = bar->width - 7; - num = (int) (((double)barwidth) * frac); + num = (size_t) (((double)barwidth) * frac); if(num > MAX_BARLENGTH) num = MAX_BARLENGTH; memset(line, '#', num); @@ -232,59 +223,19 @@ int tool_progress_cb(void *clientp, void progressbarinit(struct ProgressData *bar, struct OperationConfig *config) { - char *colp; + unsigned int cols; memset(bar, 0, sizeof(struct ProgressData)); /* pass the resume from value through to the progress function so it can - * display progress towards total file not just the part that's left. */ + * display progress towards total file not just the part that is left. */ if(config->use_resume) bar->initial_size = config->resume_from; - colp = curlx_getenv("COLUMNS"); - if(colp) { - char *endptr; - long num = strtol(colp, &endptr, 10); - if((endptr != colp) && (endptr == colp + strlen(colp)) && (num > 20) && - (num < 10000)) - bar->width = (int)num; - curl_free(colp); - } - - if(!bar->width) { - int cols = 0; - -#ifdef TIOCGSIZE - struct ttysize ts; - if(!ioctl(STDIN_FILENO, TIOCGSIZE, &ts)) - cols = ts.ts_cols; -#elif defined(TIOCGWINSZ) - struct winsize ts; - if(!ioctl(STDIN_FILENO, TIOCGWINSZ, &ts)) - cols = ts.ws_col; -#elif defined(_WIN32) - { - HANDLE stderr_hnd = GetStdHandle(STD_ERROR_HANDLE); - CONSOLE_SCREEN_BUFFER_INFO console_info; - - if((stderr_hnd != INVALID_HANDLE_VALUE) && - GetConsoleScreenBufferInfo(stderr_hnd, &console_info)) { - /* - * Do not use +1 to get the true screen-width since writing a - * character at the right edge will cause a line wrap. - */ - cols = (int) - (console_info.srWindow.Right - console_info.srWindow.Left); - } - } -#endif /* TIOCGSIZE */ - if(cols > 20) - bar->width = cols; - } - - if(!bar->width) - bar->width = 79; - else if(bar->width > MAX_BARLENGTH) + cols = get_terminal_columns(); + if(cols > MAX_BARLENGTH) bar->width = MAX_BARLENGTH; + else if(cols > 20) + bar->width = (int)cols; bar->out = tool_stderr; bar->tick = 150; diff --git a/src/tool_cb_prg.h b/src/tool_cb_prg.h index 565ad565a..dc10f2a5c 100644 --- a/src/tool_cb_prg.h +++ b/src/tool_cb_prg.h @@ -40,6 +40,8 @@ struct ProgressData { int barmove; }; +struct OperationConfig; + void progressbarinit(struct ProgressData *bar, struct OperationConfig *config); diff --git a/src/tool_cb_rea.c b/src/tool_cb_rea.c index 8cb5bbe8a..1e23895ca 100644 --- a/src/tool_cb_rea.c +++ b/src/tool_cb_rea.c @@ -36,6 +36,7 @@ #include "tool_operate.h" #include "tool_util.h" #include "tool_msgs.h" +#include "tool_sleep.h" #include "memdebug.h" /* keep this as LAST include */ @@ -89,7 +90,7 @@ size_t tool_read_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) config->readbusy = TRUE; return CURL_READFUNC_PAUSE; } - /* since size_t is unsigned we can't return negative values fine */ + /* since size_t is unsigned we cannot return negative values fine */ rc = 0; } if((per->uploadfilesize != -1) && @@ -124,8 +125,33 @@ int tool_readbusy_cb(void *clientp, (void)ulnow; /* unused */ if(config->readbusy) { - config->readbusy = FALSE; - curl_easy_pause(per->curl, CURLPAUSE_CONT); + /* lame code to keep the rate down because the input might not deliver + anything, get paused again and come back here immediately */ + static long rate = 500; + static struct timeval prev; + static curl_off_t ulprev; + + if(ulprev == ulnow) { + /* it did not upload anything since last call */ + struct timeval now = tvnow(); + if(prev.tv_sec) + /* get a rolling average rate */ + /* rate = rate - rate/4 + tvdiff(now, prev)/4; */ + rate -= rate/4 - tvdiff(now, prev)/4; + prev = now; + } + else { + rate = 50; + ulprev = ulnow; + } + if(rate >= 50) { + /* keeps the looping down to 20 times per second in the crazy case */ + config->readbusy = FALSE; + curl_easy_pause(per->curl, CURLPAUSE_CONT); + } + else + /* sleep half a period */ + tool_go_sleep(25); } return per->noprogress? 0 : CURL_PROGRESSFUNC_CONTINUE; diff --git a/src/tool_cb_see.c b/src/tool_cb_see.c index bce57bb28..7ce678aab 100644 --- a/src/tool_cb_see.c +++ b/src/tool_cb_see.c @@ -64,17 +64,17 @@ int tool_seek_cb(void *userdata, curl_off_t offset, int whence) curl_off_t left = offset; if(whence != SEEK_SET) - /* this code path doesn't support other types */ + /* this code path does not support other types */ return CURL_SEEKFUNC_FAIL; if(LSEEK_ERROR == lseek(per->infd, 0, SEEK_SET)) - /* couldn't rewind to beginning */ + /* could not 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(per->infd, step, SEEK_CUR)) - /* couldn't seek forwards the desired amount */ + /* could not seek forwards the desired amount */ return CURL_SEEKFUNC_FAIL; left -= step; } @@ -83,39 +83,10 @@ int tool_seek_cb(void *userdata, curl_off_t offset, int whence) #endif 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 + /* could not rewind, the reason is in errno but errno is just not portable + enough and we do not actually care that much why we failed. We will let libcurl know that it may try other means if it wants to. */ return CURL_SEEKFUNC_CANTSEEK; return CURL_SEEKFUNC_OK; } - -#ifdef USE_TOOL_FTRUNCATE - -#ifdef _WIN32_WCE -/* 64-bit lseek-like function unavailable */ -# undef _lseeki64 -# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence) -# undef _get_osfhandle -# define _get_osfhandle(fd) (fd) -#endif - -/* - * Truncate a file handle at a 64-bit position 'where'. - */ - -int tool_ftruncate64(int fd, curl_off_t where) -{ - intptr_t handle = _get_osfhandle(fd); - - if(_lseeki64(fd, where, SEEK_SET) < 0) - return -1; - - if(!SetEndOfFile((HANDLE)handle)) - return -1; - - return 0; -} - -#endif /* USE_TOOL_FTRUNCATE */ diff --git a/src/tool_cb_see.h b/src/tool_cb_see.h index b5d7bf985..e7b30a765 100644 --- a/src/tool_cb_see.h +++ b/src/tool_cb_see.h @@ -25,18 +25,6 @@ ***************************************************************************/ #include "tool_setup.h" -#if defined(_WIN32) && !defined(HAVE_FTRUNCATE) - -int tool_ftruncate64(int fd, curl_off_t where); - -#undef ftruncate -#define ftruncate(fd,where) tool_ftruncate64(fd,where) - -#define HAVE_FTRUNCATE 1 -#define USE_TOOL_FTRUNCATE 1 - -#endif /* _WIN32 && ! HAVE_FTRUNCATE */ - /* ** callback for CURLOPT_SEEKFUNCTION */ diff --git a/src/tool_cb_soc.c b/src/tool_cb_soc.c new file mode 100644 index 000000000..22048ee6b --- /dev/null +++ b/src/tool_cb_soc.c @@ -0,0 +1,58 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#include "tool_setup.h" + +#ifdef HAVE_NETINET_IN_H +#include /* IPPROTO_TCP */ +#endif + +#include "tool_cb_soc.h" + +/* +** callback for CURLOPT_OPENSOCKETFUNCTION +** +** Notice that only Linux is supported for the moment. +*/ + +curl_socket_t tool_socket_open_mptcp_cb(void *clientp, + curlsocktype purpose, + struct curl_sockaddr *addr) +{ + int protocol = addr->protocol; + + (void)clientp; + (void)purpose; + + if(protocol == IPPROTO_TCP) +#if defined(__linux__) +# ifndef IPPROTO_MPTCP +# define IPPROTO_MPTCP 262 +# endif + protocol = IPPROTO_MPTCP; +#else + return CURL_SOCKET_BAD; +#endif + + return socket(addr->family, addr->socktype, protocol); +} diff --git a/src/tool_cb_soc.h b/src/tool_cb_soc.h new file mode 100644 index 000000000..f02150aa8 --- /dev/null +++ b/src/tool_cb_soc.h @@ -0,0 +1,36 @@ +#ifndef HEADER_CURL_TOOL_CB_SOC_H +#define HEADER_CURL_TOOL_CB_SOC_H +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#include "tool_setup.h" + +/* +** callback for CURLOPT_OPENSOCKETFUNCTION +*/ + +curl_socket_t tool_socket_open_mptcp_cb(void *clientp, + curlsocktype purpose, + struct curl_sockaddr *addr); + +#endif /* HEADER_CURL_TOOL_CB_SOC_H */ diff --git a/src/tool_cb_wrt.c b/src/tool_cb_wrt.c index 143cba255..ccc010917 100644 --- a/src/tool_cb_wrt.c +++ b/src/tool_cb_wrt.c @@ -75,7 +75,7 @@ bool tool_create_output_file(struct OutStruct *outs, int fd; do { fd = open(fname, O_CREAT | O_WRONLY | O_EXCL | O_BINARY, OPENMODE); - /* Keep retrying in the hope that it isn't interrupted sometime */ + /* Keep retrying in the hope that it is not interrupted sometime */ } while(fd == -1 && errno == EINTR); if(config->file_clobber_mode == CLOBBER_NEVER && fd == -1) { int next_num = 1; @@ -94,15 +94,15 @@ bool tool_create_output_file(struct OutStruct *outs, } memcpy(newname, fname, len); newname[len] = '.'; - while(fd == -1 && /* haven't successfully opened a file */ + while(fd == -1 && /* have not successfully opened a file */ (errno == EEXIST || errno == EISDIR) && /* because we keep having files that already exist */ - next_num < 100 /* and we haven't reached the retry limit */ ) { + next_num < 100 /* and we have not reached the retry limit */ ) { curlx_msnprintf(newname + len + 1, 12, "%d", next_num); next_num++; do { fd = open(newname, O_CREAT | O_WRONLY | O_EXCL | O_BINARY, OPENMODE); - /* Keep retrying in the hope that it isn't interrupted sometime */ + /* Keep retrying in the hope that it is not interrupted sometime */ } while(fd == -1 && errno == EINTR); } outs->filename = newname; /* remember the new one */ @@ -152,7 +152,7 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) #ifdef DEBUGBUILD { - char *tty = curlx_getenv("CURL_ISATTY"); + char *tty = curl_getenv("CURL_ISATTY"); if(tty) { is_tty = TRUE; curl_free(tty); @@ -318,7 +318,8 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) if(rlen) { /* calculate buffer size for wide characters */ - wc_len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)rbuf, rlen, NULL, 0); + wc_len = (DWORD)MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)rbuf, (int)rlen, + NULL, 0); if(!wc_len) return CURL_WRITEFUNC_ERROR; @@ -326,8 +327,8 @@ size_t tool_write_cb(char *buffer, size_t sz, size_t nmemb, void *userdata) if(!wc_buf) return CURL_WRITEFUNC_ERROR; - wc_len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)rbuf, rlen, wc_buf, - wc_len); + wc_len = (DWORD)MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)rbuf, (int)rlen, + wc_buf, (int)wc_len); if(!wc_len) { free(wc_buf); return CURL_WRITEFUNC_ERROR; diff --git a/src/tool_cfgable.c b/src/tool_cfgable.c index 3259bc7a5..5564e250d 100644 --- a/src/tool_cfgable.c +++ b/src/tool_cfgable.c @@ -114,6 +114,8 @@ static void free_config_fields(struct OperationConfig *config) Curl_safefree(config->doh_url); Curl_safefree(config->cipher_list); Curl_safefree(config->proxy_cipher_list); + Curl_safefree(config->cipher13_list); + Curl_safefree(config->proxy_cipher13_list); Curl_safefree(config->cert); Curl_safefree(config->proxy_cert); Curl_safefree(config->cert_type); @@ -176,6 +178,14 @@ static void free_config_fields(struct OperationConfig *config) Curl_safefree(config->aws_sigv4); Curl_safefree(config->proto_str); Curl_safefree(config->proto_redir_str); +#ifdef USE_ECH + Curl_safefree(config->ech); + config->ech = NULL; + Curl_safefree(config->ech_config); + config->ech_config = NULL; + Curl_safefree(config->ech_public); + config->ech_public = NULL; +#endif } void config_free(struct OperationConfig *config) diff --git a/src/tool_cfgable.h b/src/tool_cfgable.h index dfa74d81f..a887881da 100644 --- a/src/tool_cfgable.h +++ b/src/tool_cfgable.h @@ -50,8 +50,8 @@ struct OperationConfig { struct curl_slist *cookies; /* cookies to serialize into a single line */ char *cookiejar; /* write to this file */ struct curl_slist *cookiefiles; /* file(s) to load cookies from */ - char *altsvc; /* alt-svc cache file name */ - char *hsts; /* HSTS cache file name */ + char *altsvc; /* alt-svc cache filename */ + char *hsts; /* HSTS cache filename */ bool cookiesession; /* new session? */ bool encoding; /* Accept-Encoding please */ bool tr_encoding; /* Transfer-Encoding please */ @@ -85,6 +85,8 @@ struct OperationConfig { char *range; long low_speed_limit; long low_speed_time; + long ip_tos; /* IP Type of Service */ + long vlan_priority; /* VLAN priority */ char *dns_servers; /* dot notation: 1.1.1.1;2.2.2.2 */ char *dns_interface; /* interface name */ char *dns_ipv4_addr; /* dot notation */ @@ -114,7 +116,7 @@ struct OperationConfig { bool failonerror; /* fail on (HTTP) errors */ bool failwithbody; /* fail on (HTTP) errors but still store body */ bool show_headers; /* show headers to data output */ - bool no_body; /* don't get the body */ + bool no_body; /* do not get the body */ bool dirlistonly; /* only get the FTP dir list */ bool followlocation; /* follow http redirects */ bool unrestricted_auth; /* Continue to send authentication (user+password) @@ -247,7 +249,8 @@ struct OperationConfig { bool post302; bool post303; bool nokeepalive; /* for keepalive needs */ - long alivetime; + long alivetime; /* keepalive-time */ + long alivecnt; /* keepalive-cnt */ bool content_disposition; /* use Content-disposition filename */ int default_node_flags; /* default flags to search for each 'node', which @@ -292,18 +295,25 @@ struct OperationConfig { CLOBBER_NEVER, /* If the file exists, always fail */ CLOBBER_ALWAYS /* If the file exists, always overwrite it */ } file_clobber_mode; + bool mptcp; /* enable MPTCP support */ struct GlobalConfig *global; struct OperationConfig *prev; struct OperationConfig *next; /* Always last in the struct */ struct State state; /* for create_transfer() */ bool rm_partial; /* on error, remove partially written output files */ +#ifdef USE_ECH + char *ech; /* Config set by --ech keywords */ + char *ech_config; /* Config set by "--ech esl:" option */ + char *ech_public; /* Config set by "--ech pn:" option */ +#endif + }; struct GlobalConfig { bool showerror; /* show errors when silent */ - bool silent; /* don't show messages, --silent given */ - bool noprogress; /* don't show progress bar */ + bool silent; /* do not show messages, --silent given */ + bool noprogress; /* do not show progress bar */ bool isatty; /* Updated internally if output is a tty */ char *trace_dump; /* file to dump the network trace to */ FILE *trace_stream; @@ -312,12 +322,12 @@ struct GlobalConfig { 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 */ + char *libcurl; /* Output libcurl code to this filename */ bool fail_early; /* exit on first transfer error */ bool styled_output; /* enable fancy output style detection */ long ms_per_transfer; /* start next transfer after (at least) this many milliseconds */ -#ifdef CURLDEBUG +#ifdef DEBUGBUILD bool test_event_based; #endif bool parallel; diff --git a/src/tool_dirhie.c b/src/tool_dirhie.c index 1cadbd0be..0efdc398c 100644 --- a/src/tool_dirhie.c +++ b/src/tool_dirhie.c @@ -50,7 +50,7 @@ static void show_dir_errno(struct GlobalConfig *global, const char *name) switch(errno) { #ifdef EACCES case EACCES: - errorf(global, "You don't have permission to create %s", name); + errorf(global, "You do not have permission to create %s", name); break; #endif #ifdef ENAMETOOLONG @@ -117,7 +117,7 @@ CURLcode create_dir_hierarchy(const char *outfile, struct GlobalConfig *global) } dirbuildup[0] = '\0'; - /* Allow strtok() here since this isn't used threaded */ + /* Allow strtok() here since this is not used threaded */ /* !checksrc! disable BANNEDFUNC 2 */ tempdir = strtok(outdup, PATH_DELIMITERS); @@ -137,13 +137,13 @@ CURLcode create_dir_hierarchy(const char *outfile, struct GlobalConfig *global) 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 erroneously. - eg if outfile is X:\foo\bar\filename then don't mkdir X: + eg if outfile is X:\foo\bar\filename then do not mkdir X: This logic takes into account unsupported drives !:, 1:, etc. */ char *p = strchr(tempdir, ':'); if(p && !p[1]) skip = true; #endif - /* the output string doesn't start with a separator */ + /* the output string does not start with a separator */ strcpy(dirbuildup, tempdir); } else diff --git a/src/tool_doswin.c b/src/tool_doswin.c index db2b8b78a..38ef0a01e 100644 --- a/src/tool_doswin.c +++ b/src/tool_doswin.c @@ -56,9 +56,9 @@ #endif #ifdef _WIN32 -# define _use_lfn(f) (1) /* long file names always available */ +# define _use_lfn(f) (1) /* long filenames always available */ #elif !defined(__DJGPP__) || (__DJGPP__ < 2) /* DJGPP 2.0 has _use_lfn() */ -# define _use_lfn(f) (0) /* long file names never available */ +# define _use_lfn(f) (0) /* long filenames never available */ #elif defined(__DJGPP__) # include /* _use_lfn(f) prototype */ #endif @@ -98,8 +98,8 @@ SANITIZE_ALLOW_PATH: Allow path separators and colons. Without this flag path separators and colons are sanitized. SANITIZE_ALLOW_RESERVED: Allow reserved device names. -Without this flag a reserved device name is renamed (COM1 => _COM1) unless it's -in a UNC prefixed path. +Without this flag a reserved device name is renamed (COM1 => _COM1) unless it +is in a UNC prefixed path. SANITIZE_ALLOW_TRUNCATE: Allow truncating a long filename. Without this flag if the sanitized filename or path will be too long an error @@ -136,9 +136,9 @@ SANITIZEcode sanitize_file_name(char **const sanitized, const char *file_name, max_sanitized_len = PATH_MAX-1; } else - /* The maximum length of a filename. - FILENAME_MAX is often the same as PATH_MAX, in other words it is 260 and - does not discount the path information therefore we shouldn't use it. */ + /* The maximum length of a filename. FILENAME_MAX is often the same as + PATH_MAX, in other words it is 260 and does not discount the path + information therefore we should not use it. */ max_sanitized_len = (PATH_MAX-1 > 255) ? 255 : PATH_MAX-1; len = strlen(file_name); @@ -237,7 +237,7 @@ SANITIZEcode sanitize_file_name(char **const sanitized, const char *file_name, /* Test if truncating a path to a file will leave at least a single character in -the filename. Filenames suffixed by an alternate data stream can't be +the filename. Filenames suffixed by an alternate data stream cannot be truncated. This performs a dry run, nothing is modified. Good truncate_pos 9: C:\foo\bar => C:\foo\ba @@ -253,7 +253,7 @@ Error truncate_pos 7: C:\foo => (pos out of range) Bad truncate_pos 1: C:\foo\ => C * C:foo is ambiguous, C could end up being a drive or file therefore something - like C:superlongfilename can't be truncated. + like C:superlongfilename cannot be truncated. Returns SANITIZE_ERR_OK: Good -- 'path' can be truncated @@ -278,7 +278,7 @@ SANITIZEcode truncate_dryrun(const char *path, const size_t truncate_pos) if(strpbrk(&path[truncate_pos - 1], "\\/:")) return SANITIZE_ERR_INVALID_PATH; - /* C:\foo can be truncated but C:\foo:ads can't */ + /* C:\foo can be truncated but C:\foo:ads cannot */ if(truncate_pos > 1) { const char *p = &path[truncate_pos - 1]; do { @@ -357,8 +357,8 @@ SANITIZEcode msdosify(char **const sanitized, const char *file_name, *d = ':'; else if((flags & SANITIZE_ALLOW_PATH) && (*s == '/' || *s == '\\')) *d = *s; - /* Dots are special: DOS doesn't allow them as the leading character, - and a file name cannot have more than a single dot. We leave the + /* Dots are special: DOS does not allow them as the leading character, + and a filename cannot have more than a single dot. We leave the first non-leading dot alone, unless it comes too close to the beginning of the name: we want sh.lex.c to become sh_lex.c, not sh.lex-c. */ @@ -445,7 +445,7 @@ SANITIZEcode msdosify(char **const sanitized, const char *file_name, #endif /* MSDOS || UNITTESTS */ /* -Rename file_name if it's a reserved dos device name. +Rename file_name if it is a reserved dos device name. This is a supporting function for sanitize_file_name. @@ -461,8 +461,8 @@ SANITIZEcode rename_if_reserved_dos_device_name(char **const sanitized, const char *file_name, int flags) { - /* We could have a file whose name is a device on MS-DOS. Trying to - * retrieve such a file would fail at best and wedge us at worst. We need + /* We could have a file whose name is a device on MS-DOS. Trying to + * retrieve such a file would fail at best and wedge us at worst. We need * to rename such files. */ char *p, *base; char fname[PATH_MAX]; @@ -560,9 +560,10 @@ SANITIZEcode rename_if_reserved_dos_device_name(char **const sanitized, /* This is the legacy portion from rename_if_dos_device_name that checks for reserved device names. It only works on MSDOS. On Windows XP the stat check errors with EINVAL if the device name is reserved. On Windows - Vista/7/8 it sets mode S_IFREG (regular file or device). According to MSDN - stat doc the latter behavior is correct, but that doesn't help us identify - whether it's a reserved device name and not a regular file name. */ + Vista/7/8 it sets mode S_IFREG (regular file or device). According to + MSDN stat doc the latter behavior is correct, but that does not help us + identify whether it is a reserved device name and not a regular + filename. */ #ifdef MSDOS if(base && ((stat(base, &st_buf)) == 0) && (S_ISCHR(st_buf.st_mode))) { /* Prepend a '_' */ @@ -606,8 +607,8 @@ char **__crt0_glob_function(char *arg) * The order of the directories it searches is: * 1. application's directory * 2. current working directory - * 3. Windows System directory (e.g. C:\windows\system32) - * 4. Windows Directory (e.g. C:\windows) + * 3. Windows System directory (e.g. C:\Windows\System32) + * 4. Windows Directory (e.g. C:\Windows) * 5. all directories along %PATH% * * For WinXP and later search order actually depends on registry value: @@ -620,6 +621,11 @@ CURLcode FindWin32CACert(struct OperationConfig *config, { CURLcode result = CURLE_OK; +#ifdef CURL_WINDOWS_APP + (void)config; + (void)backend; + (void)bundle_file; +#else /* Search and set cert file only if libcurl supports SSL. * * If Schannel is the selected SSL backend then these locations are @@ -645,6 +651,7 @@ CURLcode FindWin32CACert(struct OperationConfig *config, result = CURLE_OUT_OF_MEMORY; } } +#endif return result; } @@ -677,7 +684,7 @@ struct curl_slist *GetLoadedModulePaths(void) #ifdef UNICODE /* sizeof(mod.szExePath) is the max total bytes of wchars. the max total - bytes of multibyte chars won't be more than twice that. */ + bytes of multibyte chars will not be more than twice that. */ char buffer[sizeof(mod.szExePath) * 2]; if(!WideCharToMultiByte(CP_ACP, 0, mod.szExePath, -1, buffer, sizeof(buffer), NULL, NULL)) @@ -703,6 +710,9 @@ struct curl_slist *GetLoadedModulePaths(void) return slist; } +bool tool_term_has_bold; + +#ifndef CURL_WINDOWS_APP /* The terminal settings to restore on exit */ static struct TerminalSettings { HANDLE hStdOut; @@ -714,8 +724,6 @@ 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)) @@ -770,6 +778,7 @@ static void init_terminal(void) } } } +#endif LARGE_INTEGER tool_freq; bool tool_isVistaOrGreater; @@ -786,7 +795,9 @@ CURLcode win32_init(void) QueryPerformanceFrequency(&tool_freq); +#ifndef CURL_WINDOWS_APP init_terminal(); +#endif return CURLE_OK; } diff --git a/src/tool_filetime.c b/src/tool_filetime.c index 13113886e..549b8bea5 100644 --- a/src/tool_filetime.c +++ b/src/tool_filetime.c @@ -39,9 +39,9 @@ int getfiletime(const char *filename, struct GlobalConfig *global, 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 + saving time offset and since it is 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) +#if defined(_WIN32) && !defined(CURL_WINDOWS_APP) HANDLE hfile; TCHAR *tchar_filename = curlx_convert_UTF8_to_tchar((char *)filename); @@ -93,9 +93,9 @@ void setfiletime(curl_off_t filetime, const char *filename, { if(filetime >= 0) { /* 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 + saving time offset and since it is 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) +#if defined(_WIN32) && !defined(CURL_WINDOWS_APP) HANDLE hfile; TCHAR *tchar_filename = curlx_convert_UTF8_to_tchar((char *)filename); diff --git a/src/tool_formparse.c b/src/tool_formparse.c index 875ce78d6..61f88396c 100644 --- a/src/tool_formparse.c +++ b/src/tool_formparse.c @@ -637,7 +637,7 @@ static int get_param_part(struct OperationConfig *config, char endchar, *pfilename = filename; else if(filename) warnf(config->global, - "Field file name not allowed here: %s", filename); + "Field filename not allowed here: %s", filename); if(pencoder) *pencoder = encoder; @@ -693,7 +693,7 @@ static int get_param_part(struct OperationConfig *config, char endchar, * 'name=foo;headers=@headerfile' or why not * 'name=@filemame;headers=@headerfile' * - * To upload a file, but to fake the file name that will be included in the + * To upload a file, but to fake the filename that will be included in the * formpost, do like this: * * 'name=@filename;filename=/dev/null' or quote the faked filename like: @@ -720,7 +720,7 @@ int formparse(struct OperationConfig *config, struct tool_mime **mimecurrent, bool literal_value) { - /* input MUST be a string in the format 'name=contents' and we'll + /* input MUST be a string in the format 'name=contents' and we will build a linked list with the info */ char *name = NULL; char *contents = NULL; @@ -779,7 +779,7 @@ int formparse(struct OperationConfig *config, } else if('@' == contp[0] && !literal_value) { - /* we use the @-letter to indicate file name(s) */ + /* we use the @-letter to indicate filename(s) */ struct tool_mime *subparts = NULL; @@ -831,7 +831,7 @@ int formparse(struct OperationConfig *config, SET_TOOL_MIME_PTR(part, encoder); /* *contp could be '\0', so we just check with the delimiter */ - } while(sep); /* loop if there's another file name */ + } while(sep); /* loop if there is another filename */ part = (*mimecurrent)->subparts; /* Set name on group. */ } else { diff --git a/src/tool_getparam.c b/src/tool_getparam.c index c6a9c9358..4c9392cc6 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -123,6 +123,7 @@ typedef enum { C_DOH_INSECURE, C_DOH_URL, C_DUMP_HEADER, + C_ECH, C_EGD_FILE, C_ENGINE, C_EPRT, @@ -178,6 +179,7 @@ typedef enum { C_JSON, C_JUNK_SESSION_COOKIES, C_KEEPALIVE, + C_KEEPALIVE_CNT, C_KEEPALIVE_TIME, C_KEY, C_KEY_TYPE, @@ -199,6 +201,7 @@ typedef enum { C_MAX_REDIRS, C_MAX_TIME, C_METALINK, + C_MPTCP, C_NEGOTIATE, C_NETRC, C_NETRC_FILE, @@ -327,6 +330,7 @@ typedef enum { C_TRACE_CONFIG, C_TRACE_IDS, C_TRACE_TIME, + C_IP_TOS, C_UNIX_SOCKET, C_UPLOAD_FILE, C_URL, @@ -337,6 +341,7 @@ typedef enum { C_VARIABLE, C_VERBOSE, C_VERSION, + C_VLAN_PRIORITY, C_WDEBUG, C_WRITE_OUT, C_XATTR @@ -348,7 +353,7 @@ struct LongShort { ARG_NONE, /* stand-alone but not a boolean */ ARG_BOOL, /* accepts a --no-[name] prefix */ ARG_STRG, /* requires an argument */ - ARG_FILE /* requires an argument, usually a file name */ + ARG_FILE /* requires an argument, usually a filename */ } desc; char letter; /* short name option or ' ' */ cmdline_t cmd; @@ -404,6 +409,7 @@ static const struct LongShort aliases[]= { {"doh-insecure", ARG_BOOL, ' ', C_DOH_INSECURE}, {"doh-url" , ARG_STRG, ' ', C_DOH_URL}, {"dump-header", ARG_FILE, 'D', C_DUMP_HEADER}, + {"ech", ARG_STRG, ' ', C_ECH}, {"egd-file", ARG_STRG, ' ', C_EGD_FILE}, {"engine", ARG_STRG, ' ', C_ENGINE}, {"eprt", ARG_BOOL, ' ', C_EPRT}, @@ -453,12 +459,14 @@ static const struct LongShort aliases[]= { {"include", ARG_BOOL, 'i', C_INCLUDE}, {"insecure", ARG_BOOL, 'k', C_INSECURE}, {"interface", ARG_STRG, ' ', C_INTERFACE}, + {"ip-tos", ARG_STRG, ' ', C_IP_TOS}, {"ipfs-gateway", ARG_STRG, ' ', C_IPFS_GATEWAY}, {"ipv4", ARG_NONE, '4', C_IPV4}, {"ipv6", ARG_NONE, '6', C_IPV6}, {"json", ARG_STRG, ' ', C_JSON}, {"junk-session-cookies", ARG_BOOL, 'j', C_JUNK_SESSION_COOKIES}, {"keepalive", ARG_BOOL, ' ', C_KEEPALIVE}, + {"keepalive-cnt", ARG_STRG, ' ', C_KEEPALIVE_CNT}, {"keepalive-time", ARG_STRG, ' ', C_KEEPALIVE_TIME}, {"key", ARG_FILE, ' ', C_KEY}, {"key-type", ARG_STRG, ' ', C_KEY_TYPE}, @@ -480,6 +488,7 @@ static const struct LongShort aliases[]= { {"max-redirs", ARG_STRG, ' ', C_MAX_REDIRS}, {"max-time", ARG_STRG, 'm', C_MAX_TIME}, {"metalink", ARG_BOOL, ' ', C_METALINK}, + {"mptcp", ARG_BOOL, ' ', C_MPTCP}, {"negotiate", ARG_BOOL, ' ', C_NEGOTIATE}, {"netrc", ARG_BOOL, 'n', C_NETRC}, {"netrc-file", ARG_FILE, ' ', C_NETRC_FILE}, @@ -618,6 +627,7 @@ static const struct LongShort aliases[]= { {"variable", ARG_STRG, ' ', C_VARIABLE}, {"verbose", ARG_BOOL, 'v', C_VERBOSE}, {"version", ARG_BOOL, 'V', C_VERSION}, + {"vlan-priority", ARG_STRG, ' ', C_VLAN_PRIORITY}, #ifdef USE_WATT32 {"wdebug", ARG_BOOL, ' ', C_WDEBUG}, #endif @@ -627,7 +637,7 @@ static const struct LongShort aliases[]= { /* Split the argument of -E to 'certname' and 'passphrase' separated by colon. * We allow ':' and '\' to be escaped by '\' so that we can use certificate - * nicknames containing ':'. See + * nicknames containing ':'. See * for details. */ #ifndef UNITTESTS static @@ -668,7 +678,7 @@ void parse_cert_parameter(const char *cert_parameter, strncpy(certname_place, param_place, span); param_place += span; certname_place += span; - /* we just ate all the non-special chars. now we're on either a special + /* we just ate all the non-special chars. now we are on either a special * char or the end of the string. */ switch(*param_place) { case '\0': @@ -698,7 +708,7 @@ void parse_cert_parameter(const char *cert_parameter, /* Since we live in a world of weirdness and confusion, the win32 dudes can use : when using drive letters and thus c:\file:password 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 + separator, but we try to detect when it is used for a filename! On windows. */ #ifdef _WIN32 if((param_place == &cert_parameter[1]) && @@ -714,7 +724,7 @@ void parse_cert_parameter(const char *cert_parameter, } #endif /* escaped colons and Windows drive letter colons were handled - * above; if we're still here, this is a separating colon */ + * above; if we are still here, this is a separating colon */ param_place++; if(*param_place) { *passphrase = strdup(param_place); @@ -825,7 +835,7 @@ static ParameterError GetSizeParameter(struct GlobalConfig *global, static void cleanarg(argv_item_t str) { /* now that getstr has copied the contents of nextarg, wipe the next - * argument out so that the username:password isn't displayed in the + * argument out so that the username:password is not displayed in the * system process list */ if(str) { size_t len = strlen(str); @@ -843,7 +853,7 @@ static ParameterError data_urlencode(struct GlobalConfig *global, size_t *lenp) { /* [name]=[content], we encode the content part only - * [name]@[file name] + * [name]@[filename] * * Case 2: we first load the file using that name and then encode * the content. @@ -862,13 +872,14 @@ static ParameterError data_urlencode(struct GlobalConfig *global, is_file = *p++; /* pass the separator */ } else { - /* neither @ nor =, so no name and it isn't a file */ - nlen = is_file = 0; + /* neither @ nor =, so no name and it is not a file */ + nlen = 0; + is_file = 0; p = nextarg; } if('@' == is_file) { FILE *file; - /* a '@' letter, it means that a file name or - (stdin) follows */ + /* a '@' letter, it means that a filename or - (stdin) follows */ if(!strcmp("-", p)) { file = stdin; set_binmode(stdin); @@ -892,8 +903,7 @@ static ParameterError data_urlencode(struct GlobalConfig *global, err = getstr(&postdata, p, ALLOW_BLANK); if(err) goto error; - if(postdata) - size = strlen(postdata); + size = strlen(postdata); } if(!postdata) { @@ -954,7 +964,7 @@ static CURLcode set_trace_config(struct GlobalConfig *global, if(!tmp) return CURLE_OUT_OF_MEMORY; - /* Allow strtok() here since this isn't used threaded */ + /* Allow strtok() here since this is not used threaded */ /* !checksrc! disable BANNEDFUNC 2 */ token = strtok(tmp, ", "); while(token) { @@ -1016,7 +1026,7 @@ static const struct LongShort *single(char letter) unsigned int j; for(j = 0; j < sizeof(aliases)/sizeof(aliases[0]); j++) { if(aliases[j].letter != ' ') { - unsigned char l = aliases[j].letter; + unsigned char l = (unsigned char)aliases[j].letter; singles[l - ' '] = &aliases[j]; } } @@ -1025,6 +1035,52 @@ static const struct LongShort *single(char letter) return singles[letter - ' ']; } +struct TOSEntry { + const char *name; + unsigned char value; +}; + +static const struct TOSEntry tos_entries[] = { + {"AF11", 0x28}, + {"AF12", 0x30}, + {"AF13", 0x38}, + {"AF21", 0x48}, + {"AF22", 0x50}, + {"AF23", 0x58}, + {"AF31", 0x68}, + {"AF32", 0x70}, + {"AF33", 0x78}, + {"AF41", 0x88}, + {"AF42", 0x90}, + {"AF43", 0x98}, + {"CE", 0x03}, + {"CS0", 0x00}, + {"CS1", 0x20}, + {"CS2", 0x40}, + {"CS3", 0x60}, + {"CS4", 0x80}, + {"CS5", 0xa0}, + {"CS6", 0xc0}, + {"CS7", 0xe0}, + {"ECT0", 0x02}, + {"ECT1", 0x01}, + {"EF", 0xb8}, + {"LE", 0x04}, + {"LOWCOST", 0x02}, + {"LOWDELAY", 0x10}, + {"MINCOST", 0x02}, + {"RELIABILITY", 0x04}, + {"THROUGHPUT", 0x08}, + {"VOICE-ADMIT", 0xb0} +}; + +static int find_tos(const void *a, const void *b) +{ + const struct TOSEntry *aa = a; + const struct TOSEntry *bb = b; + return strcmp(aa->name, bb->name); +} + #define MAX_QUERY_LEN 100000 /* larger is not likely to ever work */ static ParameterError url_query(char *nextarg, struct GlobalConfig *global, @@ -1078,7 +1134,7 @@ static ParameterError set_data(cmdline_t cmd, return err; } else if('@' == *nextarg && (cmd != C_DATA_RAW)) { - /* the data begins with a '@' letter, it means that a file name + /* the data begins with a '@' letter, it means that a filename or - (stdin) follows */ nextarg++; /* pass the @ */ @@ -1122,8 +1178,7 @@ static ParameterError set_data(cmdline_t cmd, err = getstr(&postdata, nextarg, ALLOW_BLANK); if(err) return err; - if(postdata) - size = strlen(postdata); + size = strlen(postdata); } if(cmd == C_JSON) config->jsoned = TRUE; @@ -1238,7 +1293,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ (void)cleararg; #endif - *usedarg = FALSE; /* default is that we don't use the arg */ + *usedarg = FALSE; /* default is that we do not use the arg */ if(('-' != flag[0]) || ('-' == flag[1])) { /* this should be a long name */ @@ -1270,7 +1325,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ goto error; } if(noflagged && (a->desc != ARG_BOOL)) { - /* --no- prefixed an option that isn't boolean! */ + /* --no- prefixed an option that is not boolean! */ err = PARAM_NO_NOT_BOOLEAN; goto error; } @@ -1280,7 +1335,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ if((a->desc != ARG_STRG) && (a->desc != ARG_FILE)) { - /* --expand on an option that isn't a string or a filename */ + /* --expand on an option that is not a string or a filename */ err = PARAM_EXPAND_ERROR; goto error; } @@ -1318,7 +1373,7 @@ 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 */ - singleopt = TRUE; /* don't loop anymore after this */ + singleopt = TRUE; /* do not loop anymore after this */ } else if(!nextarg) { err = PARAM_REQUIRES_PARAMETER; @@ -1333,8 +1388,13 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ if((a->desc == ARG_FILE) && (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.", + /* if the filename looks like a command line option */ + warnf(global, "The filename argument '%s' looks like a flag.", + nextarg); + } + else if(!strncmp("\xe2\x80\x9c", nextarg, 3)) { + warnf(global, "The argument '%s' starts with a unicode quote where " + "maybe an ASCII \" was intended?", nextarg); } } @@ -1351,6 +1411,12 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ nextarg = (char *)""; switch(cmd) { + case C_RANDOM_FILE: /* --random-file */ + case C_EGD_FILE: /* --egd-file */ + case C_NTLM_WB: /* --ntlm-wb */ + warnf(global, "--%s is deprecated and has no function anymore", + a->lname); + break; case C_DNS_IPV4_ADDR: /* --dns-ipv4-addr */ if(!curlinfo->ares_num) /* c-ares is needed for this */ err = PARAM_LIBCURL_DOESNT_SUPPORT; @@ -1365,10 +1431,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ /* addr in dot notation */ err = getstr(&config->dns_ipv6_addr, nextarg, DENY_BLANK); break; - case C_RANDOM_FILE: /* --random-file */ - break; - case C_EGD_FILE: /* --egd-file */ - break; case C_OAUTH2_BEARER: /* --oauth2-bearer */ err = getstr(&config->oauth_bearer, nextarg, DENY_BLANK); if(!err) { @@ -1475,14 +1537,6 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ else err = PARAM_LIBCURL_DOESNT_SUPPORT; break; - case C_NTLM_WB: /* --ntlm-wb */ - if(!toggle) - config->authtype &= ~CURLAUTH_NTLM_WB; - else if(feature_ntlm_wb) - config->authtype |= CURLAUTH_NTLM_WB; - else - err = PARAM_LIBCURL_DOESNT_SUPPORT; - break; case C_BASIC: /* --basic */ if(toggle) config->authtype |= CURLAUTH_BASIC; @@ -1492,7 +1546,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ case C_ANYAUTH: /* --anyauth */ if(toggle) config->authtype = CURLAUTH_ANY; - /* --no-anyauth simply doesn't touch it */ + /* --no-anyauth simply does not touch it */ break; #ifdef USE_WATT32 case C_WDEBUG: /* --wdebug */ @@ -1571,7 +1625,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ config->url_get = config->url_list; if(config->url_get) { - /* there's a node here, if it already is filled-in continue to find + /* there is a node here, if it already is filled-in continue to find an "empty" node */ while(config->url_get && (config->url_get->flags & GETOUT_URL)) config->url_get = config->url_get->next; @@ -1630,6 +1684,22 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ case C_TCP_NODELAY: /* --tcp-nodelay */ config->tcp_nodelay = toggle; break; + case C_IP_TOS: { /* --ip-tos */ + struct TOSEntry find; + const struct TOSEntry *entry; + find.name = nextarg; + entry = bsearch(&find, tos_entries, + sizeof(tos_entries)/sizeof(*tos_entries), + sizeof(*tos_entries), find_tos); + if(entry) + config->ip_tos = entry->value; + else /* numeric tos value */ + err = str2unummax(&config->ip_tos, nextarg, 0xFF); + break; + } + case C_VLAN_PRIORITY: /* --vlan-priority */ + err = str2unummax(&config->vlan_priority, nextarg, 7); + break; case C_PROXY_DIGEST: /* --proxy-digest */ config->proxydigest = toggle; break; @@ -1688,7 +1758,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ while(ISDIGIT(*p)) p++; if(*p) { - /* if there's anything more than a plain decimal number */ + /* if there is anything more than a plain decimal number */ rc = sscanf(p, " - %6s", lrange); *p = 0; /* null-terminate to make str2unum() work below */ } @@ -1761,6 +1831,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ case C_KEEPALIVE_TIME: /* --keepalive-time */ err = str2unum(&config->alivetime, nextarg); break; + case C_KEEPALIVE_CNT: /* --keepalive-cnt */ + err = str2unum(&config->alivecnt, nextarg); + break; case C_POST301: /* --post301 */ config->post301 = toggle; break; @@ -1825,7 +1898,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ config->sasl_ir = toggle; break; case C_TEST_EVENT: /* --test-event */ -#ifdef CURLDEBUG +#ifdef DEBUGBUILD global->test_event_based = toggle; #else warnf(global, "--test-event is ignored unless a debug build"); @@ -1888,7 +1961,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ case C_PROGRESS_BAR: /* --progress-bar */ global->progressmode = toggle ? CURL_PROGRESS_BAR : CURL_PROGRESS_STATS; break; - case C_VARIABLE: /* --Variable */ + case C_VARIABLE: /* --variable */ err = setvariable(global, nextarg); break; case C_NEXT: /* --next */ @@ -2080,6 +2153,57 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ err = PARAM_ENGINES_REQUESTED; } break; +#ifndef USE_ECH + case C_ECH: /* --ech, not implemented by default */ + err = PARAM_LIBCURL_DOESNT_SUPPORT; + break; +#else + case C_ECH: /* --ech */ + if(strlen(nextarg) > 4 && strncasecompare("pn:", nextarg, 3)) { + /* a public_name */ + err = getstr(&config->ech_public, nextarg, DENY_BLANK); + } + else if(strlen(nextarg) > 5 && strncasecompare("ecl:", nextarg, 4)) { + /* an ECHConfigList */ + if('@' != *(nextarg + 4)) { + err = getstr(&config->ech_config, nextarg, DENY_BLANK); + } + else { + /* Indirect case: @filename or @- for stdin */ + char *tmpcfg = NULL; + FILE *file; + + nextarg++; /* skip over '@' */ + if(!strcmp("-", nextarg)) { + file = stdin; + } + else { + file = fopen(nextarg, FOPEN_READTEXT); + } + if(!file) { + warnf(global, + "Couldn't read file \"%s\" " + "specified for \"--ech ecl:\" option", + nextarg); + return PARAM_BAD_USE; /* */ + } + err = file2string(&tmpcfg, file); + if(file != stdin) + fclose(file); + if(err) + return err; + config->ech_config = aprintf("ecl:%s",tmpcfg); + if(!config->ech_config) + return PARAM_NO_MEM; + free(tmpcfg); + } /* file done */ + } + else { + /* Simple case: just a string, with a keyword */ + err = getstr(&config->ech, nextarg, DENY_BLANK); + } + break; +#endif case C_CAPATH: /* --capath */ err = getstr(&config->capath, nextarg, DENY_BLANK); break; @@ -2327,7 +2451,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ else { err = file2memory(&string, &len, file); if(!err && string) { - /* Allow strtok() here since this isn't used threaded */ + /* Allow strtok() here since this is not used threaded */ /* !checksrc! disable BANNEDFUNC 2 */ char *h = strtok(string, "\r\n"); while(h) { @@ -2437,7 +2561,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ if(!config->url_out) config->url_out = config->url_list; if(config->url_out) { - /* there's a node here, if it already is filled-in continue to find + /* there is a node here, if it already is filled-in continue to find an "empty" node */ while(config->url_out && (config->url_out->flags & GETOUT_OUTFILE)) config->url_out = config->url_out->next; @@ -2488,7 +2612,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ break; case C_DISABLE: /* --disable */ - /* if used first, already taken care of, we do it like this so we don't + /* if used first, already taken care of, we do it like this so we do not cause an error! */ break; case C_QUOTE: /* --quote */ @@ -2511,9 +2635,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ break; case C_RANGE: /* --range */ /* Specifying a range WITHOUT A DASH will create an illegal HTTP range - (and won't actually be range by definition). The man page previously - claimed that to be a good way, why this code is added to work-around - it. */ + (and will not actually be range by definition). The manpage + previously claimed that to be a good way, why this code is added to + work-around it. */ if(ISDIGIT(*nextarg) && !strchr(nextarg, '-')) { char buffer[32]; if(curlx_strtoofft(nextarg, NULL, 10, &value)) { @@ -2567,7 +2691,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ if(!config->url_ul) config->url_ul = config->url_list; if(config->url_ul) { - /* there's a node here, if it already is filled-in continue to find + /* there is a node here, if it already is filled-in continue to find an "empty" node */ while(config->url_ul && (config->url_ul->flags & GETOUT_UPLOAD)) config->url_ul = config->url_ul->next; @@ -2630,7 +2754,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ case C_WRITE_OUT: /* --write-out */ /* get the output string */ if('@' == *nextarg) { - /* the data begins with a '@' letter, it means that a file name + /* the data begins with a '@' letter, it means that a filename or - (stdin) follows */ FILE *file; const char *fname; @@ -2727,7 +2851,7 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ now = time(NULL); 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! */ + /* now let's see if it is a filename to get the time from instead! */ rc = getfiletime(nextarg, global, &value); if(!rc) /* pull the time out from the file */ @@ -2737,11 +2861,14 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ config->timecond = CURL_TIMECOND_NONE; warnf(global, "Illegal date format for -z, --time-cond (and not " - "a file name). Disabling time condition. " + "a filename). Disabling time condition. " "See curl_getdate(3) for valid date syntax."); } } break; + case C_MPTCP: /* --mptcp */ + config->mptcp = TRUE; + break; default: /* unknown flag */ err = PARAM_OPTION_UNKNOWN; break; @@ -2823,7 +2950,7 @@ ParameterError parse_args(struct GlobalConfig *global, int argc, } } else if(!result && passarg) - i++; /* we're supposed to skip this */ + i++; /* we are supposed to skip this */ } } else { diff --git a/src/tool_getpass.c b/src/tool_getpass.c index 8ccccdfb8..412c50a11 100644 --- a/src/tool_getpass.c +++ b/src/tool_getpass.c @@ -64,8 +64,8 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen) long sts; short chan; - /* MSK, 23-JAN-2004, iosbdef.h wasn't in VAX V7.2 or CC 6.4 */ - /* distribution so I created this. May revert back later to */ + /* MSK, 23-JAN-2004, iosbdef.h was not in VAX V7.2 or CC 6.4 */ + /* distribution so I created this. May revert back later to */ /* struct _iosb iosb; */ struct _iosb { @@ -115,7 +115,7 @@ char *getpass_r(const char *prompt, char *buffer, size_t buflen) } /* since echo is disabled, print a newline */ fputs("\n", tool_stderr); - /* if user didn't hit ENTER, terminate buffer */ + /* if user did not hit ENTER, terminate buffer */ if(i == buflen) buffer[buflen-1] = '\0'; @@ -146,15 +146,15 @@ static bool ttyecho(bool enable, int fd) #ifdef HAVE_TERMIOS_H tcgetattr(fd, &withecho); noecho = withecho; - noecho.c_lflag &= ~ECHO; + noecho.c_lflag &= ~(tcflag_t)ECHO; tcsetattr(fd, TCSANOW, &noecho); #elif defined(HAVE_TERMIO_H) ioctl(fd, TCGETA, &withecho); noecho = withecho; - noecho.c_lflag &= ~ECHO; + noecho.c_lflag &= ~(tcflag_t)ECHO; ioctl(fd, TCSETA, &noecho); #else - /* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H, we can't disable echo! */ + /* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H, we cannot disable echo! */ (void)fd; return FALSE; /* not disabled */ #endif @@ -180,7 +180,7 @@ char *getpass_r(const char *prompt, /* prompt to display */ bool disabled; int fd = open("/dev/tty", O_RDONLY); if(-1 == fd) - fd = STDIN_FILENO; /* use stdin if the tty couldn't be used */ + fd = STDIN_FILENO; /* use stdin if the tty could not be used */ disabled = ttyecho(FALSE, fd); /* disable terminal echo */ diff --git a/src/tool_getpass.h b/src/tool_getpass.h index b93585d94..0a4d6d5a8 100644 --- a/src/tool_getpass.h +++ b/src/tool_getpass.h @@ -26,7 +26,7 @@ #include "tool_setup.h" #ifndef HAVE_GETPASS_R -/* If there's a system-provided function named like this, we trust it is +/* If there is a system-provided function named like this, we trust it is also found in one of the standard headers. */ /* diff --git a/src/tool_help.c b/src/tool_help.c index 26ceea3dd..a12626eff 100644 --- a/src/tool_help.c +++ b/src/tool_help.c @@ -30,6 +30,8 @@ #include "tool_libinfo.h" #include "tool_util.h" #include "tool_version.h" +#include "tool_cb_prg.h" +#include "terminal.h" #include "memdebug.h" /* keep this as LAST include */ @@ -37,49 +39,46 @@ # define USE_WATT32 #endif +#ifndef ARRAYSIZE +#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0])) +#endif + struct category_descriptors { const char *opt; const char *desc; - curlhelp_t category; + unsigned int category; }; static const struct category_descriptors categories[] = { - {"auth", "Different types of authentication methods", CURLHELP_AUTH}, - {"connection", "Low level networking operations", - CURLHELP_CONNECTION}, - {"curl", "The command line tool itself", CURLHELP_CURL}, - {"dns", "General DNS options", CURLHELP_DNS}, - {"file", "FILE protocol options", CURLHELP_FILE}, - {"ftp", "FTP protocol options", CURLHELP_FTP}, - {"http", "HTTP and HTTPS protocol options", CURLHELP_HTTP}, - {"imap", "IMAP protocol options", CURLHELP_IMAP}, /* important is left out because it is the default help page */ - {"misc", "Options that don't fit into any other category", CURLHELP_MISC}, + {"auth", "Authentication methods", CURLHELP_AUTH}, + {"connection", "Manage connections", CURLHELP_CONNECTION}, + {"curl", "The command line tool itself", CURLHELP_CURL}, + {"deprecated", "Legacy", CURLHELP_DEPRECATED}, + {"dns", "Names and resolving", CURLHELP_DNS}, + {"file", "FILE protocol", CURLHELP_FILE}, + {"ftp", "FTP protocol", CURLHELP_FTP}, + {"global", "Global options", CURLHELP_GLOBAL}, + {"http", "HTTP and HTTPS protocol", CURLHELP_HTTP}, + {"imap", "IMAP protocol", CURLHELP_IMAP}, + {"ldap", "LDAP protocol", CURLHELP_LDAP}, {"output", "Filesystem output", CURLHELP_OUTPUT}, - {"pop3", "POP3 protocol options", CURLHELP_POP3}, - {"post", "HTTP Post specific options", CURLHELP_POST}, - {"proxy", "All options related to proxies", CURLHELP_PROXY}, - {"scp", "SCP protocol options", CURLHELP_SCP}, - {"sftp", "SFTP protocol options", CURLHELP_SFTP}, - {"smtp", "SMTP protocol options", CURLHELP_SMTP}, - {"ssh", "SSH protocol options", CURLHELP_SSH}, - {"telnet", "TELNET protocol options", CURLHELP_TELNET}, - {"tftp", "TFTP protocol options", CURLHELP_TFTP}, - {"tls", "All TLS/SSL related options", CURLHELP_TLS}, - {"upload", "All options for uploads", - CURLHELP_UPLOAD}, - {"verbose", "Options related to any kind of command line output of curl", - CURLHELP_VERBOSE}, - {NULL, NULL, CURLHELP_HIDDEN} + {"pop3", "POP3 protocol", CURLHELP_POP3}, + {"post", "HTTP POST specific", CURLHELP_POST}, + {"proxy", "Options for proxies", CURLHELP_PROXY}, + {"scp", "SCP protocol", CURLHELP_SCP}, + {"sftp", "SFTP protocol", CURLHELP_SFTP}, + {"smtp", "SMTP protocol", CURLHELP_SMTP}, + {"ssh", "SSH protocol", CURLHELP_SSH}, + {"telnet", "TELNET protocol", CURLHELP_TELNET}, + {"tftp", "TFTP protocol", CURLHELP_TFTP}, + {"timeout", "Timeouts and delays", CURLHELP_TIMEOUT}, + {"tls", "TLS/SSL related", CURLHELP_TLS}, + {"upload", "Upload, sending data", CURLHELP_UPLOAD}, + {"verbose", "Tracing, logging etc", CURLHELP_VERBOSE} }; -#ifdef _WIN32 -#define BORDER 78 -#else -#define BORDER 79 -#endif - -static void print_category(curlhelp_t category) +static void print_category(unsigned int category, unsigned int cols) { unsigned int i; size_t longopt = 5; @@ -96,32 +95,31 @@ static void print_category(curlhelp_t category) if(len > longdesc) longdesc = len; } - if(longopt + longdesc >= BORDER) { - longdesc -= 3; - longopt = BORDER -1 - longdesc; - } + if(longopt + longdesc > cols) + longopt = cols - longdesc; + for(i = 0; helptext[i].opt; ++i) if(helptext[i].categories & category) { - int opt = (int)longopt; + size_t opt = longopt; size_t desclen = strlen(helptext[i].desc); - if(opt + desclen >= (BORDER -1)) { - if(desclen < (BORDER -1)) - opt = (BORDER -2) - (int)desclen; + if(opt + desclen >= (cols - 2)) { + if(desclen < (cols - 2)) + opt = (cols - 3) - desclen; else opt = 0; } - printf(" %-*s %s\n", opt, helptext[i].opt, helptext[i].desc); + printf(" %-*s %s\n", (int)opt, helptext[i].opt, helptext[i].desc); } } /* Prints category if found. If not, it returns 1 */ -static int get_category_content(const char *category) +static int get_category_content(const char *category, unsigned int cols) { unsigned int i; - for(i = 0; categories[i].opt; ++i) + for(i = 0; i < ARRAYSIZE(categories); ++i) if(curl_strequal(categories[i].opt, category)) { printf("%s: %s\n", categories[i].opt, categories[i].desc); - print_category(categories[i].category); + print_category(categories[i].category, cols); return 0; } return 1; @@ -131,33 +129,64 @@ static int get_category_content(const char *category) static void get_categories(void) { unsigned int i; - for(i = 0; categories[i].opt; ++i) + for(i = 0; i < ARRAYSIZE(categories); ++i) printf(" %-11s %s\n", categories[i].opt, categories[i].desc); } +/* Prints all categories as a comma-separated list of given width */ +static void get_categories_list(unsigned int width) +{ + unsigned int i; + size_t col = 0; + for(i = 0; i < ARRAYSIZE(categories); ++i) { + size_t len = strlen(categories[i].opt); + if(i == ARRAYSIZE(categories) - 1) { + /* final category */ + if(col + len + 1 < width) + printf("%s.\n", categories[i].opt); + else + /* start a new line first */ + printf("\n%s.\n", categories[i].opt); + } + else if(col + len + 2 < width) { + printf("%s, ", categories[i].opt); + col += len + 2; + } + else { + /* start a new line first */ + printf("\n%s, ", categories[i].opt); + col = len + 2; + } + } +} + void tool_help(char *category) { + unsigned int cols = get_terminal_columns(); puts("Usage: curl [options...] "); /* If no category was provided */ if(!category) { - const char *category_note = "\nThis is not the full help, this " - "menu is stripped into categories.\nUse \"--help category\" to get " - "an overview of all categories.\nFor all options use the manual" + const char *category_note = "\nThis is not the full help; this " + "menu is split into categories.\nUse \"--help category\" to get " + "an overview of all categories, which are:"; + const char *category_note2 = "For all options use the manual" " or \"--help all\"."; - print_category(CURLHELP_IMPORTANT); + print_category(CURLHELP_IMPORTANT, cols); puts(category_note); + get_categories_list(cols); + puts(category_note2); } /* Lets print everything if "all" was provided */ else if(curl_strequal(category, "all")) - /* Print everything except hidden */ - print_category(~(CURLHELP_HIDDEN)); + /* Print everything */ + print_category(CURLHELP_ALL, cols); /* Lets handle the string "category" differently to not print an errormsg */ else if(curl_strequal(category, "category")) get_categories(); /* Otherwise print category and handle the case if the cat was not found */ - else if(get_category_content(category)) { - puts("Invalid category provided, here is a list of all categories:\n"); + else if(get_category_content(category, cols)) { + puts("Unknown category provided, here is a list of all categories:\n"); get_categories(); } free(category); diff --git a/src/tool_help.h b/src/tool_help.h index a05cd8458..299da1db8 100644 --- a/src/tool_help.h +++ b/src/tool_help.h @@ -29,12 +29,10 @@ void tool_help(char *category); void tool_list_engines(void); void tool_version_info(void); -typedef unsigned int curlhelp_t; - struct helptxt { const char *opt; const char *desc; - curlhelp_t categories; + unsigned int categories; }; /* @@ -43,31 +41,34 @@ struct helptxt { make -C docs/cmdline-opts listcats */ -#define CURLHELP_HIDDEN 1u << 0u -#define CURLHELP_AUTH 1u << 1u -#define CURLHELP_CONNECTION 1u << 2u -#define CURLHELP_CURL 1u << 3u -#define CURLHELP_DNS 1u << 4u -#define CURLHELP_FILE 1u << 5u -#define CURLHELP_FTP 1u << 6u -#define CURLHELP_HTTP 1u << 7u -#define CURLHELP_IMAP 1u << 8u -#define CURLHELP_IMPORTANT 1u << 9u -#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 +#define CURLHELP_AUTH (1u << 0u) +#define CURLHELP_CONNECTION (1u << 1u) +#define CURLHELP_CURL (1u << 2u) +#define CURLHELP_DEPRECATED (1u << 3u) +#define CURLHELP_DNS (1u << 4u) +#define CURLHELP_FILE (1u << 5u) +#define CURLHELP_FTP (1u << 6u) +#define CURLHELP_GLOBAL (1u << 7u) +#define CURLHELP_HTTP (1u << 8u) +#define CURLHELP_IMAP (1u << 9u) +#define CURLHELP_IMPORTANT (1u << 10u) +#define CURLHELP_LDAP (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_TIMEOUT (1u << 22u) +#define CURLHELP_TLS (1u << 23u) +#define CURLHELP_UPLOAD (1u << 24u) +#define CURLHELP_VERBOSE (1u << 25u) + +#define CURLHELP_ALL (0xfffffffu) extern const struct helptxt helptext[]; diff --git a/src/tool_helpers.c b/src/tool_helpers.c index 67924a26e..0f9ac45a8 100644 --- a/src/tool_helpers.c +++ b/src/tool_helpers.c @@ -40,9 +40,8 @@ ** Helper functions that are used from more than one source file. */ -const char *param2text(int res) +const char *param2text(ParameterError error) { - ParameterError error = (ParameterError)res; switch(error) { case PARAM_GOT_EXTRA_PARAMETER: return "had unsupported trailing garbage"; @@ -59,17 +58,17 @@ const char *param2text(int res) case PARAM_NEGATIVE_NUMERIC: return "expected a positive numerical parameter"; case PARAM_LIBCURL_DOESNT_SUPPORT: - return "the installed libcurl version doesn't support this"; + return "the installed libcurl version does not support this"; case PARAM_LIBCURL_UNSUPPORTED_PROTOCOL: return "a specified protocol is unsupported by libcurl"; case PARAM_NO_MEM: return "out of memory"; case PARAM_NO_PREFIX: - return "the given option can't be reversed with a --no- prefix"; + return "the given option cannot be reversed with a --no- prefix"; case PARAM_NUMBER_TOO_LARGE: return "too large number"; case PARAM_NO_NOT_BOOLEAN: - return "used '--no-' for option that isn't a boolean"; + return "used '--no-' for option that is not a boolean"; case PARAM_CONTDISP_SHOW_HEADER: return "showing headers and --remote-header-name cannot be combined"; case PARAM_CONTDISP_RESUME_FROM: diff --git a/src/tool_helpers.h b/src/tool_helpers.h index 2cfbad21a..dd085e2cc 100644 --- a/src/tool_helpers.h +++ b/src/tool_helpers.h @@ -25,7 +25,7 @@ ***************************************************************************/ #include "tool_setup.h" -const char *param2text(int res); +const char *param2text(ParameterError error); int SetHTTPrequest(struct OperationConfig *config, HttpReq req, HttpReq *store); diff --git a/src/tool_hugehelp.c b/src/tool_hugehelp.c index d829defaf..13ebe95ad 100644 --- a/src/tool_hugehelp.c +++ b/src/tool_hugehelp.c @@ -5,6999 +5,4779 @@ */ #ifdef USE_MANUAL #include "tool_hugehelp.h" +static const char * const curlman[] = { + "\t _ _ ____ _", + " ___| | | | _ \\| |", + " / __| | | | |_) | |", + " | (__| |_| | _ <| |___", + " \\___|\\___/|_| \\_\\_____|", + "NAME", + "\n curl - transfer a URL", + "\nSYNOPSIS", + "\n curl [options / URLs]", + "\nDESCRIPTION", + "\n 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.", + "\n curl is powered by libcurl for all transfer-related features. See", + " libcurl(3) for details.", + "\nURL", + "\n The URL syntax is protocol-dependent. You find a detailed description in", + " RFC 3986.", + "\n 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 hostname prefixes. For example, for hostnames starting with", + " \"ftp.\" curl assumes you want FTP.", + "\n 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.", + "\n 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.", + "\n Provide an IPv6 zone id in the URL with an escaped percentage sign. Like", + " in", + "\n\t\"http://[fe80::3%25eth0]/\"", + "\n 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.", + "\nGLOBBING", + "\n You can specify multiple URLs or parts of URLs by writing lists within", + " braces or ranges within brackets. We call this \"globbing\".", + "\n Provide a list with three different names like this:", + "\n\t\"http://site.{one,two,three}.com\"", + "\n Do sequences of alphanumeric series by using [] as in:", + "\n\t\"ftp://ftp.example.com/file[1-100].txt\"", + "\n With leading zeroes:", + "\n\t\"ftp://ftp.example.com/file[001-100].txt\"", + "\n With letters through the alphabet:", + "\n\t\"ftp://ftp.example.com/file[a-z].txt\"", + "\n Nested sequences are not supported, but you can use several ones next to", + " each other:", + "\n\t\"http://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html\"", + "\n You can specify a step counter for the ranges to get every Nth number or", + " letter:", + "\n\t\"http://example.com/file[1-100:10].txt\"", + "\n\t\"http://example.com/file[a-z:2].txt\"", + "\n 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 '*'.", + "\n Switch off globbing with --globoff.", + "\nVARIABLES", + "\n 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 (-)).", + "\n Variable contents can be expanded in option parameters using \"{{name}}\" 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 \"\\{{\".", + "\n 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.", + "\n Example. Get the USER environment variable into the URL, fail if USER is", + " not set:", + "\n\t--variable '%USER'", + "\t--expand-url = \"https://example.com/api/{{USER}}/method\"", + "\n 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\". To apply functions 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.", + "\n 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", + " when sent as POST data:", + "\n\t--variable %HOME", + "\t--expand-variable fix@{{HOME}}/.secret", + "\t--expand-data \"{{fix:trim:url}}\"", + "\thttps://example.com/", + "\n Command line variables and expansions were added in 8.3.0.", + "\nOUTPUT", + "\n If not told otherwise, curl writes the received data to stdout. It can be", + " instructed to instead save that data into a local file, using the --output", + " or --remote-name options. If curl is given multiple URLs to transfer on", + " the command line, it similarly needs multiple options for where to save", + " them.", + "\n curl does not parse or otherwise \"understand\" the content it gets or", + " writes as output. It does no encoding or decoding, unless explicitly asked", + " to with dedicated command line options.", + "\nPROTOCOLS", + "\n curl supports numerous protocols, or put in URL terms: schemes. Your", + " particular build may not support them all.", + "\n DICT", + "\n\tLets you lookup words using online dictionaries.", + "\n FILE", + "\n\tRead or write local files. curl does not support accessing file:// URL", + "\tremotely, but when running on Microsoft Windows using the native UNC", + "\tapproach works.", + "\n FTP(S)", + "\n\tcurl supports the File Transfer Protocol with a lot of tweaks and", + "\tlevers. With or without using TLS.", + "\n GOPHER(S)", + "\n\tRetrieve files.", + "\n HTTP(S)", + "\n\tcurl supports HTTP with numerous options and variations. It can speak", + "\tHTTP version 0.9, 1.0, 1.1, 2 and 3 depending on build options and the", + "\tcorrect command line options.", + "\n IMAP(S)", + "\n\tUsing the mail reading protocol, curl can download emails for you.", + "\tWith or without using TLS.", + "\n LDAP(S)", + "\n\tcurl can do directory lookups for you, with or without TLS.", + "\n MQTT", + "\n\tcurl supports MQTT version 3. Downloading over MQTT equals subscribe", + "\tto a topic while uploading/posting equals publish on a topic. MQTT", + "\tover TLS is not supported (yet).", + "\n POP3(S)", + "\n\tDownloading from a pop3 server means getting a mail. With or without", + "\tusing TLS.", + "\n RTMP(S)", + "\n\tThe Realtime Messaging Protocol is primarily used to serve streaming", + "\tmedia and curl can download it.", + "\n RTSP", + "\n\tcurl supports RTSP 1.0 downloads.", + "\n SCP", + "\n\tcurl supports SSH version 2 scp transfers.", + "\n SFTP", + "\n\tcurl supports SFTP (draft 5) done over SSH version 2.", + "\n SMB(S)", + "\n\tcurl supports SMB version 1 for upload and download.", + "\n SMTP(S)", + "\n\tUploading contents to an SMTP server means sending an email. With or", + "\twithout TLS.", + "\n TELNET", + "\n\tFetching a telnet URL starts an interactive session where it sends", + "\twhat it reads on stdin and outputs what the server sends it.", + "\n TFTP", + "\n\tcurl can do TFTP downloads and uploads.", + "\n WS(S)", + "\n\tWebSocket done over HTTP/1. WSS implies that it works over HTTPS.", + "\nPROGRESS METER", + "\n curl normally displays a progress meter during operations, indicating the", + " amount of transferred data, transfer speeds and estimated time left, etc.", + " The progress meter displays the transfer rate in bytes per second. The", + " suffixes (k, M, G, T, P) are 1024 based. For example 1k is 1024 bytes. 1M", + " is 1048576 bytes.", + "\n curl displays this data to the terminal by default, so if you invoke curl", + " to do an operation and it is about to write data to the terminal, it", + " disables the progress meter as otherwise it would mess up the output", + " mixing progress meter and response data.", + "\n If you want a progress meter for HTTP POST or PUT requests, you need to", + " redirect the response output to a file, using shell redirect (>), --output", + " or similar.", + "\n This does not apply to FTP upload as that operation does not spit out any", + " response data to the terminal.", + "\n 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.", + "\nVERSION", + "\n This man page describes curl 8.9.1. 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.", + "\n You can always learn which the latest curl version is by running", + "\n\tcurl https://curl.se/info", + "\n The online version of this man page is always showing the latest", + " incarnation: https://curl.se/docs/manpage.html", + "\nOPTIONS", + "\n Options start with one or two dashes. Many of the options require an", + " additional value next to them. If provided text does not start with a", + " dash, it is presumed to be and treated as a URL.", + "\n The short \"single-dash\" form of the options, -d for example, may be used", + " with or without a space between it and its value, although a space is a", + " recommended separator. The long double-dash form, --data for example,", + " requires a space between it and its value.", + "\n 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.", + "\n 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.", + "\n 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.", + "\n The following options are global: --fail-early, --libcurl,", + " --parallel-immediate, --parallel-max, --parallel, --progress-bar, --rate,", + " --show-error, --stderr, --styled-output, --trace-ascii, --trace-config,", + " --trace-ids, --trace-time, --trace and --verbose.", + "\n --abstract-unix-socket ", + "\t (HTTP) Connect through an abstract Unix domain socket, instead of", + "\t using the network. Note: netstat shows the path of an abstract", + "\t socket prefixed with \"@\", however the argument should not", + "\t have this leading character. If --abstract-unix-socket is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --abstract-unix-socket socketpath https://example.com", + "\n\t See also --unix-socket.", + "\n --alt-svc ", + "\t (HTTPS) Enable the alt-svc parser. If the filename points to an", + "\t existing alt-svc cache file, that gets used. After a completed", + "\t transfer, the cache is saved to the filename again if it has been", + "\t modified.", + "\n\t Specify a \"\" filename (zero length) to avoid loading/saving and", + "\t make curl just handle the cache in memory.", + "\n\t If this option is used several times, curl loads contents from all", + "\t the files but the last one is used for saving. --alt-svc can be", + "\t used several times in a command line", + "\n\t Example:", + "\t curl --alt-svc svc.txt https://example.com", + "\n\t Added in 7.64.1. See also --resolve and --connect-to.", + "\n --anyauth", + "\t (HTTP) Figure out authentication method automatically, and use the", + "\t most secure one the remote site claims to support. This is done by", + "\t first doing a request and checking the response-headers, thus", + "\t possibly inducing an extra network round-trip. This option is used", + "\t instead of setting a specific authentication method, which you can", + "\t do with --basic, --digest, --ntlm, and --negotiate.", + "\n\t Using --anyauth is not recommended if you do uploads from stdin,", + "\t since it may require data to be sent twice and then the client", + "\t must be able to rewind. If the need should arise when uploading", + "\t from stdin, the upload operation fails.", + "\n\t Used together with --user. Providing --anyauth multiple times has", + "\t no extra effect.", + "\n\t Example:", + "\t curl --anyauth --user me:pwd https://example.com", + "\n\t See also --proxy-anyauth, --basic and --digest.", + "\n -a, --append", + "\t (FTP SFTP) When used in an upload, this option makes curl append", + "\t to the target file instead of overwriting it. If the remote file", + "\t does not exist, it is created. Note that this flag is ignored by", + "\t some SFTP servers (including OpenSSH). Providing --append multiple", + "\t times has no extra effect. Disable it again with --no-append.", + "\n\t Example:", + "\t curl --upload-file local --append ftp://example.com/", + "\n\t See also --range and --continue-at.", + "\n --aws-sigv4 ", + "\t (HTTP) Use AWS V4 signature authentication in the transfer.", + "\n\t The provider argument is a string that is used by the algorithm", + "\t when creating outgoing authentication headers.", + "\n\t The region argument is a string that points to a geographic area", + "\t of a resources collection (region-code) when the region name is", + "\t omitted from the endpoint.", + "\n\t The service argument is a string that points to a function", + "\t provided by a cloud (service-code) when the service name is", + "\t omitted from the endpoint. If --aws-sigv4 is provided several", + "\t times, the last set value is used.", + "\n\t Example:", + "\t curl --aws-sigv4 \"aws:amz:us-east-2:es\" --user \"key:secret\" https://example.com", + "\n\t Added in 7.75.0. See also --basic and --user.", + "\n --basic", + "\t (HTTP) Use HTTP Basic authentication with the remote host. This", + "\t method is the default and this option is usually pointless, unless", + "\t you use it to override a previously set option that sets a", + "\t different authentication method (such as --ntlm, --digest, or", + "\t --negotiate).", + "\n\t Used together with --user. Providing --basic multiple times has no", + "\t extra effect.", + "\n\t Example:", + "\t curl -u name:password --basic https://example.com", + "\n\t See also --proxy-basic.", + "\n --ca-native", + "\t (TLS) Use the CA store from the native operating system to verify", + "\t the peer. By default, curl otherwise uses a CA store provided in a", + "\t single file or directory, but when using this option it interfaces", + "\t the operating system's own vault.", + "\n\t This option works for curl on Windows when built to use OpenSSL,", + "\t wolfSSL (added in 8.3.0) or GnuTLS (added in 8.5.0). When curl on", + "\t Windows is built to use Schannel, this feature is implied and curl", + "\t then only uses the native CA store. Providing --ca-native multiple", + "\t times has no extra effect. Disable it again with --no-ca-native.", + "\n\t Example:", + "\t curl --ca-native https://example.com", + "\n\t Added in 8.2.0. See also --cacert, --capath and --insecure.", + "\n --cacert ", + "\t (TLS) Use the specified certificate file to verify the peer. The", + "\t file may contain multiple CA certificates. The certificate(s) must", + "\t be in PEM format. Normally curl is built to use a default file for", + "\t this, so this option is typically used to alter that default file.", + "\n\t curl recognizes the environment variable named 'CURL_CA_BUNDLE' if", + "\t it is set and the TLS backend is not Schannel, and uses the given", + "\t path as a path to a CA cert bundle. This option overrides that", + "\t variable.", + "\n\t The windows version of curl automatically looks for a CA certs", + "\t file named 'curl-ca-bundle.crt', either in the same directory as", + "\t curl.exe, or in the Current Working Directory, or in any folder", + "\t along your PATH.", + "\n\t (iOS and macOS only) If curl is built against Secure Transport,", + "\t then this option is supported for backward compatibility with", + "\t other SSL engines, but it should not be set. If the option is not", + "\t set, then curl uses the certificates in the system and user", + "\t Keychain to verify the peer, which is the preferred method of", + "\t verifying the peer's certificate chain.", + "\n\t (Schannel only) This option is supported for Schannel in Windows 7", + "\t or later (added in 7.60.0). This option is supported for backward", + "\t compatibility with other SSL engines; instead it is recommended to", + "\t use Windows' store of root certificates (the default for", + "\t Schannel). If --cacert is provided several times, the last set", + "\t value is used.", + "\n\t Example:", + "\t curl --cacert CA-file.txt https://example.com", + "\n\t See also --capath and --insecure.", + "\n --capath ", + "\t (TLS) Use the specified certificate directory to verify the peer.", + "\t Multiple paths can be provided by separated with colon (\":\") (e.g.", + "\t \"path1:path2:path3\"). The certificates must be in PEM format, and", + "\t if curl is built against OpenSSL, the directory must have been", + "\t processed using the c_rehash utility supplied with OpenSSL. Using", + "\t --capath can allow OpenSSL-powered curl to make SSL-connections", + "\t much more efficiently than using --cacert if the --cacert file", + "\t contains many CA certificates.", + "\n\t If this option is set, the default capath value is ignored. If", + "\t --capath is provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --capath /local/directory https://example.com", + "\n\t See also --cacert and --insecure.", + "\n -E, --cert ", + "\t (TLS) Use the specified client certificate file when getting a", + "\t file with HTTPS, FTPS or another SSL-based protocol. The", + "\t certificate must be in PKCS#12 format if using Secure Transport,", + "\t or PEM format if using any other engine. If the optional password", + "\t is not specified, it is queried for on the terminal. Note that", + "\t this option assumes a certificate file that is the private key and", + "\t the client certificate concatenated. See --cert and --key to", + "\t specify them independently.", + "\n\t In the portion of the argument, you must escape the", + "\t character \":\" as \"\\:\" so that it is not recognized as the password", + "\t delimiter. Similarly, you must escape the double quote character", + "\t as \\\" so that it is not recognized as an escape character.", + "\n\t If curl is built against OpenSSL library, and the engine pkcs11 is", + "\t available, then a PKCS#11 URI (RFC 7512) can be used to specify a", + "\t certificate located in a PKCS#11 device. A string beginning with", + "\t \"pkcs11:\" is interpreted as a PKCS#11 URI. If a PKCS#11 URI is", + "\t provided, then the --engine option is set as \"pkcs11\" if none was", + "\t provided and the --cert-type option is set as \"ENG\" if none was", + "\t provided.", + "\n\t (iOS and macOS only) If curl is built against Secure Transport,", + "\t then the certificate string can either be the name of a", + "\t certificate/private key in the system or user keychain, or the", + "\t path to a PKCS#12-encoded certificate and private key. If you want", + "\t to use a file from the current directory, please precede it with", + "\t \"./\" prefix, in order to avoid confusion with a nickname.", + "\n\t (Schannel only) Client certificates must be specified by a path", + "\t expression to a certificate store. (Loading PFX is not supported;", + "\t you can import it to a store first). You can use \"\\\\\" to refer to a certificate in", + "\t the system certificates store, for example,", + "\t \"CurrentUser\\MY\\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a\".", + "\t Thumbprint is usually a SHA-1 hex string which you can see in", + "\t certificate details. Following store locations are supported:", + "\t CurrentUser, LocalMachine, CurrentService, Services,", + "\t CurrentUserGroupPolicy,\t LocalMachineGroupPolicy\t and", + "\t LocalMachineEnterprise. If --cert is provided several times, the", + "\t last set value is used.", + "\n\t Example:", + "\t curl --cert certfile --key keyfile https://example.com", + "\n\t See also --cert-type, --key and --key-type.", + "\n --cert-status", + "\t (TLS) Verify the status of the server certificate by using the", + "\t Certificate Status Request (aka. OCSP stapling) TLS extension.", + "\n\t If this option is enabled and the server sends an invalid (e.g.", + "\t expired) response, if the response suggests that the server", + "\t certificate has been revoked, or no response at all is received,", + "\t the verification fails.", + "\n\t This support is currently only implemented in the OpenSSL and", + "\t GnuTLS backends. Providing --cert-status multiple times has no", + "\t extra effect. Disable it again with --no-cert-status.", + "\n\t Example:", + "\t curl --cert-status https://example.com", + "\n\t See also --pinnedpubkey.", + "\n --cert-type ", + "\t (TLS) Set type of the provided client certificate. PEM, DER, ENG", + "\t and P12 are recognized types.", + "\n\t The default type depends on the TLS backend and is usually PEM,", + "\t however for Secure Transport and Schannel it is P12. If --cert is", + "\t a pkcs11: URI then ENG is the default type. If --cert-type is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --cert-type PEM --cert file https://example.com", + "\n\t See also --cert, --key and --key-type.", + "\n --ciphers ", + "\t (TLS) Specifies which ciphers to use in the connection. The list", + "\t of ciphers must specify valid ciphers. Read up on SSL cipher list", + "\t details on this URL:", + "\n\t https://curl.se/docs/ssl-ciphers.html If --ciphers is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --ciphers ECDHE-ECDSA-AES256-CCM8 https://example.com", + "\n\t See also --tlsv1.3, --tls13-ciphers and --proxy-ciphers.", + "\n --compressed", + "\t (HTTP) Request a compressed response using one of the algorithms", + "\t curl supports, and automatically decompress the content.", + "\n\t Response headers are not modified when saved, so if they are", + "\t \"interpreted\" separately again at a later point they might appear", + "\t to be saying that the content is (still) compressed; while in fact", + "\t it has already been decompressed.", + "\n\t If this option is used and the server sends an unsupported", + "\t encoding, curl reports an error. This is a request, not an order;", + "\t the server may or may not deliver data compressed. Providing", + "\t --compressed multiple times has no extra effect. Disable it again", + "\t with --no-compressed.", + "\n\t Example:", + "\t curl --compressed https://example.com", + "\n\t See also --compressed-ssh.", + "\n --compressed-ssh", + "\t (SCP SFTP) Enables built-in SSH compression. This is a request,", + "\t not an order; the server may or may not do it. Providing", + "\t --compressed-ssh multiple times has no extra effect. Disable it", + "\t again with --no-compressed-ssh.", + "\n\t Example:", + "\t curl --compressed-ssh sftp://example.com/", + "\n\t See also --compressed.", + "\n -K, --config ", + "\t Specify a text file to read curl arguments from. The command line", + "\t arguments found in the text file are used as if they were provided", + "\t on the command line.", + "\n\t Options and their parameters must be specified on the same line in", + "\t the file, separated by whitespace, colon, or the equals sign. Long", + "\t option names can optionally be given in the config file without", + "\t the initial double dashes and if so, the colon or equals", + "\t characters can be used as separators. If the option is specified", + "\t with one or two dashes, there can be no colon or equals character", + "\t between the option and its parameter.", + "\n\t If the parameter contains whitespace or starts with a colon (:) or", + "\t equals sign (=), it must be specified enclosed within double", + "\t quotes (\"like this\"). Within double quotes the following escape", + "\t sequences are available: \\\\, \\\", \\t, \\n, \\r and \\v. A backslash", + "\t preceding any other letter is ignored.", + "\n\t If the first non-blank column of a config line is a '#' character,", + "\t that line is treated as a comment.", + "\n\t Only write one option per physical line in the config file. A", + "\t single line is required to be no more than 10 megabytes (since", + "\t 8.2.0).", + "\n\t Specify the filename to --config as minus \"-\" to make curl read", + "\t the file from stdin.", + "\n\t Note that to be able to specify a URL in the config file, you need", + "\t to specify it using the --url option, and not by simply writing", + "\t the URL on its own line. So, it could look similar to this:", + "\n\t\turl = \"https://curl.se/docs/\"", + "\n\t\t# --- Example file ---", + "\t\t# this is a comment", + "\t\turl = \"example.com\"", + "\t\toutput = \"curlhere.html\"", + "\t\tuser-agent = \"superagent/1.0\"", + "\n\t\t# and fetch another URL too", + "\t\turl = \"example.com/docs/manpage.html\"", + "\t\t-O", + "\t\treferer = \"http://nowhereatall.example.com/\"", + "\t\t# --- End of example file ---", + "\n\t When curl is invoked, it (unless --disable is used) checks for a", + "\t default config file and uses it if found, even when --config is", + "\t used. The default config file is checked for in the following", + "\t places in this order:", + "\n\t 1) \"$CURL_HOME/.curlrc\"", + "\n\t 2) \"$XDG_CONFIG_HOME/curlrc\" (Added in 7.73.0)", + "\n\t 3) \"$HOME/.curlrc\"", + "\n\t 4) Windows: \"%USERPROFILE%\\.curlrc\"", + "\n\t 5) Windows: \"%APPDATA%\\.curlrc\"", + "\n\t 6) Windows: \"%USERPROFILE%\\Application Data\\.curlrc\"", + "\n\t 7) Non-Windows: use getpwuid to find the home directory", + "\n\t 8) On Windows, if it finds no .curlrc file in the sequence", + "\t described above, it checks for one in the same directory the curl", + "\t executable is placed.", + "\n\t On Windows two filenames are checked per location: .curlrc and", + "\t _curlrc, preferring the former. Older versions on Windows checked", + "\t for _curlrc only. --config can be used several times in a command", + "\t line", + "\n\t Example:", + "\t curl --config file.txt https://example.com", + "\n\t See also --disable.", + "\n --connect-timeout ", + "\t Maximum time in seconds that you allow curl's connection to take.", + "\t This only limits the connection phase, so if curl connects within", + "\t the given period it continues - if not it exits.", + "\n\t This option accepts decimal values. The decimal value needs to be", + "\t provided using a dot (.) as decimal separator - not the local", + "\t version even if it might be using another separator.", + "\n\t The connection phase is considered complete when the DNS lookup", + "\t and requested TCP, TLS or QUIC handshakes are done. If", + "\t --connect-timeout is provided several times, the last set value is", + "\t used.", + "\n\t Examples:", + "\t curl --connect-timeout 20 https://example.com", + "\t curl --connect-timeout 3.14 https://example.com", + "\n\t See also --max-time.", + "\n --connect-to ", + "\t For a request intended for the \"HOST1:PORT1\" pair, connect to", + "\t \"HOST2:PORT2\" instead. This option is only used to establish the", + "\t network connection. It does NOT affect the hostname/port number", + "\t that is used for TLS/SSL (e.g. SNI, certificate verification) or", + "\t for the application protocols.", + "\n\t \"HOST1\" and \"PORT1\" may be empty strings, meaning any host or any", + "\t port number. \"HOST2\" and \"PORT2\" may also be empty strings,", + "\t meaning use the request's original hostname and port number.", + "\n\t A hostname specified to this option is compared as a string, so it", + "\t needs to match the name used in request URL. It can be either", + "\t numerical such as \"127.0.0.1\" or the full host name such as", + "\t \"example.org\".", + "\n\t Example: redirect connects from the example.com hostname to", + "\t 127.0.0.1 independently of port number:", + "\n\t\tcurl --connect-to example.com::127.0.0.1: https://example.com/", + "\n\t Example: redirect connects from all hostnames to 127.0.0.1", + "\t independently of port number:", + "\n\t\tcurl --connect-to ::127.0.0.1: http://example.com/", + "\n\t --connect-to can be used several times in a command line", + "\n\t Example:", + "\t curl --connect-to example.com:443:example.net:8443 https://example.com", + "\n\t See also --resolve and --header.", + "\n -C, --continue-at ", + "\t Resume a previous transfer from the given byte offset. The given", + "\t offset is the exact number of bytes that are skipped, counting", + "\t from the beginning of the source file before it is transferred to", + "\t the destination. If used with uploads, the FTP server command SIZE", + "\t is not used by curl.", + "\n\t Use \"-C -\" to instruct curl to automatically find out where/how to", + "\t resume the transfer. It then uses the given output/input files to", + "\t figure that out. If --continue-at is provided several times, the", + "\t last set value is used.", + "\n\t Examples:", + "\t curl -C - https://example.com", + "\t curl -C 400 https://example.com", + "\n\t See also --range.", + "\n -b, --cookie ", + "\t (HTTP) Pass the data to the HTTP server in the Cookie header. It", + "\t is supposedly the data previously received from the server in a", + "\t \"Set-Cookie:\" line. The data should be in the format", + "\t \"NAME1=VALUE1; NAME2=VALUE2\" or as a single filename.", + "\n\t When given a set of specific cookies and not a filename, it makes", + "\t curl use the cookie header with this content explicitly in all", + "\t outgoing request(s). If multiple requests are done due to", + "\t authentication, followed redirects or similar, they all get this", + "\t cookie header passed on.", + "\n\t If no \"=\" symbol is used in the argument, it is instead treated as", + "\t a filename to read previously stored cookie from. This option also", + "\t activates the cookie engine which makes curl record incoming", + "\t cookies, which may be handy if you are using this in combination", + "\t with the --location option or do multiple URL transfers on the", + "\t same invoke.", + "\n\t If the filename is a single minus (\"-\"), curl reads the contents", + "\t from stdin. If the filename is an empty string (\"\") and is the", + "\t only cookie input, curl activates the cookie engine without any", + "\t cookies.", + "\n\t The file format of the file to read cookies from should be plain", + "\t HTTP headers (Set-Cookie style) or the Netscape/Mozilla cookie", + "\t file format.", + "\n\t The file specified with --cookie is only used as input. No cookies", + "\t are written to that file. To store cookies, use the --cookie-jar", + "\t option.", + "\n\t If you use the Set-Cookie file format and do not specify a domain", + "\t then the cookie is not sent since the domain never matches. To", + "\t address this, set a domain in Set-Cookie line (doing that includes", + "\t subdomains) or preferably: use the Netscape format.", + "\n\t Users often want to both read cookies from a file and write", + "\t updated cookies back to a file, so using both --cookie and", + "\t --cookie-jar in the same command line is common.", + "\n\t If curl is built with PSL (Public Suffix List) support, it detects", + "\t and discards cookies that are specified for such suffix domains", + "\t that should not be allowed to have cookies. If curl is not built", + "\t with PSL support, it has no ability to stop super cookies.", + "\t --cookie can be used several times in a command line", + "\n\t Examples:", + "\t curl -b \"\" https://example.com", + "\t curl -b cookiefile https://example.com", + "\t curl -b cookiefile -c cookiefile https://example.com", + "\t curl -b name=Jane https://example.com", + "\n\t See also --cookie-jar and --junk-session-cookies.", + "\n -c, --cookie-jar ", + "\t (HTTP) Specify to which file you want curl to write all cookies", + "\t after a completed operation. Curl writes all cookies from its", + "\t in-memory cookie storage to the given file at the end of", + "\t operations. Even if no cookies are known, a file is created so", + "\t that it removes any formerly existing cookies from the file. The", + "\t file uses the Netscape cookie file format. If you set the filename", + "\t to a single minus, \"-\", the cookies are written to stdout.", + "\n\t The file specified with --cookie-jar is only used for output. No", + "\t cookies are read from the file. To read cookies, use the --cookie", + "\t option. Both options can specify the same file.", + "\n\t This command line option activates the cookie engine that makes", + "\t curl record and use cookies. The --cookie option also activates", + "\t it.", + "\n\t If the cookie jar cannot be created or written to, the whole curl", + "\t operation does not fail or even report an error clearly. Using", + "\t --verbose gets a warning displayed, but that is the only visible", + "\t feedback you get about this possibly lethal situation. If", + "\t --cookie-jar is provided several times, the last set value is", + "\t used.", + "\n\t Examples:", + "\t curl -c store-here.txt https://example.com", + "\t curl -c store-here.txt -b read-these https://example.com", + "\n\t See also --cookie and --junk-session-cookies.", + "\n --create-dirs", + "\t When used in conjunction with the --output option, curl creates", + "\t the necessary local directory hierarchy as needed. This option", + "\t creates the directories mentioned with the --output option", + "\t combined with the path possibly set with --output-dir. If the", + "\t combined output filename uses no directory, or if the directories", + "\t it mentions already exist, no directories are created.", + "\n\t Created directories are made with mode 0750 on unix style file", + "\t systems.", + "\n\t To create remote directories when using FTP or SFTP, try", + "\t --ftp-create-dirs. Providing --create-dirs multiple times has no", + "\t extra effect. Disable it again with --no-create-dirs.", + "\n\t Example:", + "\t curl --create-dirs --output local/dir/file https://example.com", + "\n\t See also --ftp-create-dirs and --output-dir.", + "\n --create-file-mode ", + "\t (SFTP SCP FILE) When curl is used to create files remotely using", + "\t one of the supported protocols, this option allows the user to set", + "\t which 'mode' to set on the file at creation time, instead of the", + "\t default 0644.", + "\n\t This option takes an octal number as argument. If", + "\t --create-file-mode is provided several times, the last set value", + "\t is used.", + "\n\t Example:", + "\t curl --create-file-mode 0777 -T localfile sftp://example.com/new", + "\n\t Added in 7.75.0. See also --ftp-create-dirs.", + "\n --crlf", + "\t (FTP SMTP) Convert line feeds to carriage return plus line feeds", + "\t in upload. Useful for MVS (OS/390). Providing --crlf multiple", + "\t times has no extra effect. Disable it again with --no-crlf.", + "\n\t Example:", + "\t curl --crlf -T file ftp://example.com/", + "\n\t See also --use-ascii.", + "\n --crlfile ", + "\t (TLS) Provide a file using PEM format with a Certificate", + "\t Revocation List that may specify peer certificates that are to be", + "\t considered revoked. If --crlfile is provided several times, the", + "\t last set value is used.", + "\n\t Example:", + "\t curl --crlfile rejects.txt https://example.com", + "\n\t See also --cacert and --capath.", + "\n --curves ", + "\t (TLS) Set specific curves to use during SSL session establishment", + "\t according to RFC 8422, 5.1. Multiple algorithms can be provided by", + "\t separating them with \":\" (e.g. \"X25519:P-521\"). The parameter is", + "\t available identically in the OpenSSL \"s_client\" and \"s_server\"", + "\t utilities.", + "\n\t --curves allows a OpenSSL powered curl to make SSL-connections", + "\t with exactly the (EC) curve requested by the client, avoiding", + "\t nontransparent client/server negotiations.", + "\n\t If this option is set, the default curves list built into OpenSSL", + "\t are ignored. If --curves is provided several times, the last set", + "\t value is used.", + "\n\t Example:", + "\t curl --curves X25519 https://example.com", + "\n\t Added in 7.73.0. See also --ciphers.", + "\n -d, --data ", + "\t (HTTP MQTT) Sends the specified data in a POST request to the HTTP", + "\t server, in the same way that a browser does when a user has filled", + "\t in an HTML form and presses the submit button. This option makes", + "\t curl pass the data to the server using the content-type", + "\t application/x-www-form-urlencoded. Compare to --form.", + "\n\t --data-raw is almost the same but does not have a special", + "\t interpretation of the @ character. To post data purely binary, you", + "\t should instead use the --data-binary option. To URL-encode the", + "\t value of a form field you may use --data-urlencode.", + "\n\t If any of these options is used more than once on the same command", + "\t line, the data pieces specified are merged with a separating", + "\t &-symbol. Thus, using '-d name=daniel -d skill=lousy' would", + "\t generate a post chunk that looks like 'name=daniel&skill=lousy'.", + "\n\t If you start the data with the letter @, the rest should be a", + "\t filename to read the data from, or - if you want curl to read the", + "\t data from stdin. Posting data from a file named 'foobar' would", + "\t thus be done with --data @foobar. When --data is told to read from", + "\t a file like that, carriage returns, newlines and null bytes are", + "\t stripped out. If you do not want the @ character to have a special", + "\t interpretation use --data-raw instead.", + "\n\t The data for this option is passed on to the server exactly as", + "\t provided on the command line. curl does not convert, change or", + "\t improve it. It is up to the user to provide the data in the", + "\t correct form. --data can be used several times in a command line", + "\n\t Examples:", + "\t curl -d \"name=curl\" https://example.com", + "\t curl -d \"name=curl\" -d \"tool=cmdline\" https://example.com", + "\t curl -d @filename https://example.com", + "\n\t This option is mutually exclusive with --form, --head and", + "\t --upload-file. See also --data-binary, --data-urlencode and", + "\t --data-raw.", + "\n --data-ascii ", + "\t (HTTP) This option is just an alias for --data. --data-ascii can", + "\t be used several times in a command line", + "\n\t Example:", + "\t curl --data-ascii @file https://example.com", + "\n\t See also --data-binary, --data-raw and --data-urlencode.", + "\n --data-binary ", + "\t (HTTP) Post data exactly as specified with no extra processing", + "\t whatsoever.", + "\n\t If you start the data with the letter @, the rest should be a", + "\t filename. Data is posted in a similar manner as --data does,", + "\t except that newlines and carriage returns are preserved and", + "\t conversions are never done.", + "\n\t Like --data the default content-type sent to the server is", + "\t application/x-www-form-urlencoded. If you want the data to be", + "\t treated as arbitrary binary data by the server then set the", + "\t content-type to octet-stream: -H \"Content-Type:", + "\t application/octet-stream\".", + "\n\t If this option is used several times, the ones following the first", + "\t append data as described in --data. --data-binary can be used", + "\t several times in a command line", + "\n\t Example:", + "\t curl --data-binary @filename https://example.com", + "\n\t See also --data-ascii.", + "\n --data-raw ", + "\t (HTTP) Post data similarly to --data but without the special", + "\t interpretation of the @ character. --data-raw can be used several", + "\t times in a command line", + "\n\t Examples:", + "\t curl --data-raw \"hello\" https://example.com", + "\t curl --data-raw \"@at@at@\" https://example.com", + "\n\t See also --data.", + "\n --data-urlencode ", + "\t (HTTP) Post data, similar to the other --data options with the", + "\t exception that this performs URL-encoding.", + "\n\t To be CGI-compliant, the part should begin with a name", + "\t followed by a separator and a content specification. The ", + "\t part can be passed to curl using one of the following syntaxes:", + "\n\t content", + "\n\t\tURL-encode the content and pass that on. Just be careful so", + "\t\tthat the content does not contain any \"=\" or \"@\" symbols, as", + "\t\tthat makes the syntax match one of the other cases below!", + "\n\t =content", + "\n\t\tURL-encode the content and pass that on. The preceding \"=\"", + "\t\tsymbol is not included in the data.", + "\n\t name=content", + "\n\t\tURL-encode the content part and pass that on. Note that the", + "\t\tname part is expected to be URL-encoded already.", + "\n\t @filename", + "\n\t\tload data from the given file (including any newlines),", + "\t\tURL-encode that data and pass it on in the POST.", + "\n\t name@filename", + "\n\t\tload data from the given file (including any newlines),", + "\t\tURL-encode that data and pass it on in the POST. The name part", + "\t\tgets an equal sign appended, resulting in", + "\t\tname=urlencoded-file-content. Note that the name is expected", + "\t\tto be URL-encoded already.", + "\n\t --data-urlencode can be used several times in a command line", + "\n\t Examples:", + "\t curl --data-urlencode name=val https://example.com", + "\t curl --data-urlencode =encodethis https://example.com", + "\t curl --data-urlencode name@file https://example.com", + "\t curl --data-urlencode @fileonly https://example.com", + "\n\t See also --data and --data-raw.", + "\n --delegation ", + "\t (GSS/kerberos) Set LEVEL what curl is allowed to delegate when it", + "\t comes to user credentials.", + "\n\t none", + "\n\t\tDo not allow any delegation.", + "\n\t policy", + "\n\t\tDelegates if and only if the OK-AS-DELEGATE flag is set in the", + "\t\tKerberos service ticket, which is a matter of realm policy.", + "\n\t always", + "\n\t\tUnconditionally allow the server to delegate.", + "\n\t If --delegation is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --delegation \"none\" https://example.com", + "\n\t See also --insecure and --ssl.", + "\n --digest", + "\t (HTTP) Enables HTTP Digest authentication. This authentication", + "\t scheme avoids sending the password over the wire in clear text.", + "\t Use this in combination with the normal --user option to set", + "\t username and password. Providing --digest multiple times has no", + "\t extra effect. Disable it again with --no-digest.", + "\n\t Example:", + "\t curl -u name:password --digest https://example.com", + "\n\t This option is mutually exclusive with --basic, --ntlm and", + "\t --negotiate. See also --user, --proxy-digest and --anyauth.", + "\n -q, --disable", + "\t If used as the first parameter on the command line, the curlrc", + "\t config file is not read or used. See the --config for details on", + "\t the default config file search path. Providing --disable multiple", + "\t times has no extra effect. Disable it again with --no-disable.", + "\n\t Example:", + "\t curl -q https://example.com", + "\n\t See also --config.", + "\n --disable-eprt", + "\t (FTP) Disable the use of the EPRT and LPRT commands when doing", + "\t active FTP transfers. Curl normally first attempts to use EPRT", + "\t before using PORT, but with this option, it uses PORT right away.", + "\t EPRT is an extension to the original FTP protocol, and does not", + "\t work on all servers, but enables more functionality in a better", + "\t way than the traditional PORT command.", + "\n\t --eprt can be used to explicitly enable EPRT again and --no-eprt", + "\t is an alias for --disable-eprt.", + "\n\t If the server is accessed using IPv6, this option has no effect as", + "\t EPRT is necessary then.", + "\n\t Disabling EPRT only changes the active behavior. If you want to", + "\t switch to passive mode you need to not use --ftp-port or force it", + "\t with --ftp-pasv. Providing --disable-eprt multiple times has no", + "\t extra effect. Disable it again with --no-disable-eprt.", + "\n\t Example:", + "\t curl --disable-eprt ftp://example.com/", + "\n\t See also --disable-epsv and --ftp-port.", + "\n --disable-epsv", + "\t (FTP) Disable the use of the EPSV command when doing passive FTP", + "\t transfers. Curl normally first attempts to use EPSV before PASV,", + "\t but with this option, it does not try EPSV.", + "\n\t --epsv can be used to explicitly enable EPSV again and --no-epsv", + "\t is an alias for --disable-epsv.", + "\n\t If the server is an IPv6 host, this option has no effect as EPSV", + "\t is necessary then.", + "\n\t Disabling EPSV only changes the passive behavior. If you want to", + "\t switch to active mode you need to use --ftp-port. Providing", + "\t --disable-epsv multiple times has no extra effect. Disable it", + "\t again with --no-disable-epsv.", + "\n\t Example:", + "\t curl --disable-epsv ftp://example.com/", + "\n\t See also --disable-eprt and --ftp-port.", + "\n --disallow-username-in-url", + "\t Exit with error if passed a URL containing a username. Probably", + "\t most useful when the URL is being provided at runtime or similar.", + "\t Providing --disallow-username-in-url multiple times has no extra", + "\t effect. Disable it again with --no-disallow-username-in-url.", + "\n\t Example:", + "\t curl --disallow-username-in-url https://example.com", + "\n\t Added in 7.61.0. See also --proto.", + "\n --dns-interface ", + "\t (DNS) Send outgoing DNS requests through the given interface. This", + "\t option is a counterpart to --interface (which does not affect", + "\t DNS). The supplied string must be an interface name (not an", + "\t address). If --dns-interface is provided several times, the last", + "\t set value is used.", + "\n\t Example:", + "\t curl --dns-interface eth0 https://example.com", + "\n\t --dns-interface requires that libcurl is built to support c-ares.", + "\t See also --dns-ipv4-addr and --dns-ipv6-addr.", + "\n --dns-ipv4-addr
", + "\t (DNS) Bind to a specific IP address when making IPv4 DNS requests,", + "\t so that the DNS requests originate from this address. The argument", + "\t should be a single IPv4 address. If --dns-ipv4-addr is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --dns-ipv4-addr 10.1.2.3 https://example.com", + "\n\t --dns-ipv4-addr requires that libcurl is built to support c-ares.", + "\t See also --dns-interface and --dns-ipv6-addr.", + "\n --dns-ipv6-addr
", + "\t (DNS) Bind to a specific IP address when making IPv6 DNS requests,", + "\t so that the DNS requests originate from this address. The argument", + "\t should be a single IPv6 address. If --dns-ipv6-addr is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --dns-ipv6-addr 2a04:4e42::561 https://example.com", + "\n\t --dns-ipv6-addr requires that libcurl is built to support c-ares.", + "\t See also --dns-interface and --dns-ipv4-addr.", + "\n --dns-servers ", + "\t (DNS) Set the list of DNS servers to be used instead of the system", + "\t default. The list of IP addresses should be separated with commas.", + "\t Port numbers may also optionally be given, appended to the IP", + "\t address separated with a colon. If --dns-servers is provided", + "\t several times, the last set value is used.", + "\n\t Examples:", + "\t curl --dns-servers 192.168.0.1,192.168.0.2 https://example.com", + "\t curl --dns-servers 10.0.0.1:53 https://example.com", + "\n\t --dns-servers requires that libcurl is built to support c-ares.", + "\t See also --dns-interface and --dns-ipv4-addr.", + "\n --doh-cert-status", + "\t Same as --cert-status but used for DoH (DNS-over-HTTPS).", + "\n\t Verifies the status of the DoH servers' certificate by using the", + "\t Certificate Status Request (aka. OCSP stapling) TLS extension.", + "\n\t If this option is enabled and the DoH server sends an invalid", + "\t (e.g. expired) response, if the response suggests that the server", + "\t certificate has been revoked, or no response at all is received,", + "\t the verification fails.", + "\n\t This support is currently only implemented in the OpenSSL and", + "\t GnuTLS backends. Providing --doh-cert-status multiple times has no", + "\t extra effect. Disable it again with --no-doh-cert-status.", + "\n\t Example:", + "\t curl --doh-cert-status --doh-url https://doh.example https://example.com", + "\n\t Added in 7.76.0. See also --doh-insecure.", + "\n --doh-insecure", + "\t By default, every connection curl makes to a DoH server is", + "\t verified to be secure before the transfer takes place. This option", + "\t tells curl to skip the verification step and proceed without", + "\t checking.", + "\n\t WARNING: using this option makes the DoH transfer and name", + "\t resolution insecure.", + "\n\t This option is equivalent to --insecure and --proxy-insecure but", + "\t used for DoH (DNS-over-HTTPS) only. Providing --doh-insecure", + "\t multiple times has no extra effect. Disable it again with", + "\t --no-doh-insecure.", + "\n\t Example:", + "\t curl --doh-insecure --doh-url https://doh.example https://example.com", + "\n\t Added in 7.76.0. See also --doh-url, --insecure and", + "\t --proxy-insecure.", + "\n --doh-url ", + "\t Specifies which DNS-over-HTTPS (DoH) server to use to resolve", + "\t hostnames, instead of using the default name resolver mechanism.", + "\t The URL must be HTTPS.", + "\n\t Some SSL options that you set for your transfer also applies to", + "\t DoH since the name lookups take place over SSL. However, the", + "\t certificate verification settings are not inherited but are", + "\t controlled separately via --doh-insecure and --doh-cert-status.", + "\n\t This option is unset if an empty string \"\" is used as the URL.", + "\t (Added in 7.85.0) If --doh-url is provided several times, the last", + "\t set value is used.", + "\n\t Example:", + "\t curl --doh-url https://doh.example https://example.com", + "\n\t Added in 7.62.0. See also --doh-insecure.", + "\n -D, --dump-header ", + "\t (HTTP FTP) Write the received protocol headers to the specified", + "\t file. If no headers are received, the use of this option creates", + "\t an empty file. Specify \"-\" as file name (a single minus) to have", + "\t it written to stdout.", + "\n\t When used in FTP, the FTP server response lines are considered", + "\t being \"headers\" and thus are saved there.", + "\n\t Having multiple transfers in one set of operations (i.e. the URLs", + "\t in one --next clause), appends them to the same file, separated by", + "\t a blank line. If --dump-header is provided several times, the last", + "\t set value is used.", + "\n\t Examples:", + "\t curl --dump-header store.txt https://example.com", + "\t curl --dump-header - https://example.com -o save", + "\n\t See also --output.", + "\n --ech ", + "\t (HTTPS) Specifies how to do ECH (Encrypted Client Hello).", + "\n\t The values allowed for can be:", + "\n\t false", + "\n\t\tDo not attempt ECH", + "\n\t grease", + "\n\t\tSend a GREASE ECH extension", + "\n\t true", + "\n\t\tAttempt ECH if possible, but do not fail if ECH is not", + "\t\tattempted. (The connection fails if ECH is attempted but", + "\t\tfails.)", + "\n\t hard", + "\n\t\tAttempt ECH and fail if that is not possible. ECH only works", + "\t\twith TLS 1.3 and also requires using DoH or providing an", + "\t\tECHConfigList on the command line.", + "\n\t ecl:", + "\n\t\tA base64 encoded ECHConfigList that is used for ECH.", + "\n\t pn:", + "\n\t\tA name to use to over-ride the \"public_name\" field of an", + "\t\tECHConfigList (only available with OpenSSL TLS support)", + "\n\t Errors", + "\n\t\tMost errors cause error CURLE_ECH_REQUIRED (101).", + "\n\t If --ech is provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --ech true https://example.com", + "\n\t Added in 8.8.0. See also --doh-url.", + "\n --egd-file ", + "\t (TLS) Deprecated option (added in 7.84.0). Prior to that it only", + "\t had an effect on curl if built to use old versions of OpenSSL.", + "\n\t Specify the path name to the Entropy Gathering Daemon socket. The", + "\t socket is used to seed the random engine for SSL connections. If", + "\t --egd-file is provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --egd-file /random/here https://example.com", + "\n\t See also --random-file.", + "\n --engine ", + "\t (TLS) Select the OpenSSL crypto engine to use for cipher", + "\t operations. Use --engine list to print a list of build-time", + "\t supported engines. Note that not all (and possibly none) of the", + "\t engines may be available at runtime. If --engine is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --engine flavor https://example.com", + "\n\t See also --ciphers and --curves.", + "\n --etag-compare ", + "\t (HTTP) Make a conditional HTTP request for the specific ETag read", + "\t from the given file by sending a custom If-None-Match header using", + "\t the stored ETag.", + "\n\t For correct results, make sure that the specified file contains", + "\t only a single line with the desired ETag. An empty file is parsed", + "\t as an empty ETag.", + "\n\t Use the option --etag-save to first save the ETag from a response,", + "\t and then use this option to compare against the saved ETag in a", + "\t subsequent request. If --etag-compare is provided several times,", + "\t the last set value is used.", + "\n\t Example:", + "\t curl --etag-compare etag.txt https://example.com", + "\n\t Added in 7.68.0. See also --etag-save and --time-cond.", + "\n --etag-save ", + "\t (HTTP) Save an HTTP ETag to the specified file. An ETag is a", + "\t caching related header, usually returned in a response.", + "\n\t If no ETag is sent by the server, an empty file is created. If", + "\t --etag-save is provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --etag-save storetag.txt https://example.com", + "\n\t Added in 7.68.0. See also --etag-compare.", + "\n --expect100-timeout ", + "\t (HTTP) Maximum time in seconds that you allow curl to wait for a", + "\t 100-continue response when curl emits an Expects: 100-continue", + "\t header in its request. By default curl waits one second. This", + "\t option accepts decimal values. When curl stops waiting, it", + "\t continues as if a response was received.", + "\n\t The decimal value needs to provided using a dot (\".\") as decimal", + "\t separator - not the local version even if it might be using", + "\t another separator. If --expect100-timeout is provided several", + "\t times, the last set value is used.", + "\n\t Example:", + "\t curl --expect100-timeout 2.5 -T file https://example.com", + "\n\t See also --connect-timeout.", + "\n -f, --fail", + "\t (HTTP) Fail with error code 22 and with no response body output at", + "\t all for HTTP transfers returning HTTP response codes at 400 or", + "\t greater.", + "\n\t In normal cases when an HTTP server fails to deliver a document,", + "\t it returns a body of text stating so (which often also describes", + "\t why and more) and a 4xx HTTP response code. This command line", + "\t option prevents curl from outputting that data and instead returns", + "\t error 22 early. By default, curl does not consider HTTP response", + "\t codes to indicate failure.", + "\n\t To get both the error code and also save the content, use", + "\t --fail-with-body instead.", + "\n\t This method is not fail-safe and there are occasions where", + "\t non-successful response codes slip through, especially when", + "\t authentication is involved (response codes 401 and 407). Providing", + "\t --fail multiple times has no extra effect. Disable it again with", + "\t --no-fail.", + "\n\t Example:", + "\t curl --fail https://example.com", + "\n\t This option is mutually exclusive with --fail-with-body. See also", + "\t --fail-with-body and --fail-early.", + "\n --fail-early", + "\t Fail and exit on the first detected transfer error.", + "\n\t When curl is used to do multiple transfers on the command line, it", + "\t attempts to operate on each given URL, one by one. By default, it", + "\t ignores errors if there are more URLs given and the last URL's", + "\t success determines the error code curl returns. Early failures are", + "\t \"hidden\" by subsequent successful transfers.", + "\n\t Using this option, curl instead returns an error on the first", + "\t transfer that fails, independent of the amount of URLs that are", + "\t given on the command line. This way, no transfer failures go", + "\t undetected by scripts and similar.", + "\n\t This option does not imply --fail, which causes transfers to fail", + "\t due to the server's HTTP status code. You can combine the two", + "\t options, however note --fail is not global and is therefore", + "\t contained by --next.", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. Providing --fail-early multiple times has no extra", + "\t effect. Disable it again with --no-fail-early.", + "\n\t Example:", + "\t curl --fail-early https://example.com https://two.example", + "\n\t See also --fail and --fail-with-body.", + "\n --fail-with-body", + "\t (HTTP) Return an error on server errors where the HTTP response", + "\t code is 400 or greater). In normal cases when an HTTP server fails", + "\t to deliver a document, it returns an HTML document stating so", + "\t (which often also describes why and more). This option allows curl", + "\t to output and save that content but also to return error 22.", + "\n\t This is an alternative option to --fail which makes curl fail for", + "\t the same circumstances but without saving the content. Providing", + "\t --fail-with-body multiple times has no extra effect. Disable it", + "\t again with --no-fail-with-body.", + "\n\t Example:", + "\t curl --fail-with-body https://example.com", + "\n\t This option is mutually exclusive with --fail. Added in 7.76.0.", + "\t See also --fail and --fail-early.", + "\n --false-start", + "\t (TLS) Use false start during the TLS handshake. False start is a", + "\t mode where a TLS client starts sending application data before", + "\t verifying the server's Finished message, thus saving a round trip", + "\t when performing a full handshake.", + "\n\t This functionality is currently only implemented in the Secure", + "\t Transport (on iOS 7.0 or later, or OS X 10.9 or later) backend.", + "\t Providing --false-start multiple times has no extra effect.", + "\t Disable it again with --no-false-start.", + "\n\t Example:", + "\t curl --false-start https://example.com", + "\n\t See also --tcp-fastopen.", + "\n -F, --form ", + "\t (HTTP SMTP IMAP) For the HTTP protocol family, emulate a filled-in", + "\t form in which a user has pressed the submit button. This makes", + "\t curl POST data using the Content-Type multipart/form-data", + "\t according to RFC 2388.", + "\n\t For SMTP and IMAP protocols, this composes a multipart mail", + "\t message to transmit.", + "\n\t This enables uploading of binary files etc. To force the 'content'", + "\t part to be a file, prefix the filename with an @ sign. To just get", + "\t the content part from a file, prefix the filename with the symbol", + "\t <. The difference between @ and < is then that @ makes a file get", + "\t attached in the post as a file upload, while the < makes a text", + "\t field and just get the contents for that text field from a file.", + "\n\t Read content from stdin instead of a file by using a single \"-\" as", + "\t filename. This goes for both @ and < constructs. When stdin is", + "\t used, the contents is buffered in memory first by curl to", + "\t determine its size and allow a possible resend. Defining a part's", + "\t data from a named non-regular file (such as a named pipe or", + "\t similar) is not subject to buffering and is instead read at", + "\t transmission time; since the full size is unknown before the", + "\t transfer starts, such data is sent as chunks by HTTP and rejected", + "\t by IMAP.", + "\n\t Example: send an image to an HTTP server, where 'profile' is the", + "\t name of the form-field to which the file portrait.jpg is the", + "\t input:", + "\n\t\tcurl -F profile=@portrait.jpg https://example.com/upload.cgi", + "\n\t Example: send your name and shoe size in two text fields to the", + "\t server:", + "\n\t\tcurl -F name=John -F shoesize=11 https://example.com/", + "\n\t Example: send your essay in a text field to the server. Send it as", + "\t a plain text field, but get the contents for it from a local file:", + "\n\t\tcurl -F \"story=HTML message;type=text/html' \\", + "\t\t -F '=)' -F '=@textfile.txt' ... smtp://example.com", + "\n\t Data can be encoded for transfer using encoder=. Available", + "\t encodings are binary and 8bit that do nothing else than adding the", + "\t corresponding Content-Transfer-Encoding header, 7bit that only", + "\t rejects 8-bit characters with a transfer error, quoted-printable", + "\t and base64 that encodes data according to the corresponding", + "\t schemes, limiting lines length to 76 characters.", + "\n\t Example: send multipart mail with a quoted-printable text message", + "\t and a base64 attached file:", + "\n\t\tcurl -F '=text message;encoder=quoted-printable' \\", + "\t\t -F '=@localfile;encoder=base64' ... smtp://example.com", + "\n\t See further examples and details in the MANUAL. --form can be used", + "\t several times in a command line", + "\n\t Example:", + "\t curl --form \"name=curl\" --form \"file=@loadthis\" https://example.com", + "\n\t This option is mutually exclusive with --data, --head and", + "\t --upload-file. See also --data, --form-string and --form-escape.", + "\n --form-escape", + "\t (HTTP imap smtp) Pass on names of multipart form fields and files", + "\t using backslash-escaping instead of percent-encoding. If", + "\t --form-escape is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --form-escape -F 'field\\name=curl' -F 'file=@load\"this' https://example.com", + "\n\t Added in 7.81.0. See also --form.", + "\n --form-string ", + "\t (HTTP SMTP IMAP) Similar to --form except that the value string", + "\t for the named parameter is used literally. Leading @ and <", + "\t characters, and the \";type=\" string in the value have no special", + "\t meaning. Use this in preference to --form if there is any", + "\t possibility that the string value may accidentally trigger the @", + "\t or < features of --form. --form-string can be used several times", + "\t in a command line", + "\n\t Example:", + "\t curl --form-string \"name=data\" https://example.com", + "\n\t See also --form.", + "\n --ftp-account ", + "\t (FTP) When an FTP server asks for \"account data\" after username", + "\t and password has been provided, this data is sent off using the", + "\t ACCT command. If --ftp-account is provided several times, the last", + "\t set value is used.", + "\n\t Example:", + "\t curl --ftp-account \"mr.robot\" ftp://example.com/", + "\n\t See also --user.", + "\n --ftp-alternative-to-user ", + "\t (FTP) If authenticating with the USER and PASS commands fails,", + "\t send this command. When connecting to Tumbleweed's Secure", + "\t Transport server over FTPS using a client certificate, using \"SITE", + "\t AUTH\" tells the server to retrieve the username from the", + "\t certificate. If --ftp-alternative-to-user is provided several", + "\t times, the last set value is used.", + "\n\t Example:", + "\t curl --ftp-alternative-to-user \"U53r\" ftp://example.com", + "\n\t See also --ftp-account and --user.", + "\n --ftp-create-dirs", + "\t (FTP SFTP) When an FTP or SFTP URL/operation uses a path that does", + "\t not currently exist on the server, the standard behavior of curl", + "\t is to fail. Using this option, curl instead attempts to create", + "\t missing directories. Providing --ftp-create-dirs multiple times", + "\t has no extra effect. Disable it again with --no-ftp-create-dirs.", + "\n\t Example:", + "\t curl --ftp-create-dirs -T file ftp://example.com/remote/path/file", + "\n\t See also --create-dirs.", + "\n --ftp-method ", + "\t (FTP) Control what method curl should use to reach a file on an", + "\t FTP(S) server. The method argument should be one of the following", + "\t alternatives:", + "\n\t multicwd", + "\n\t\tDo a single CWD operation for each path part in the given URL.", + "\t\tFor deep hierarchies this means many commands. This is how RFC", + "\t\t1738 says it should be done. This is the default but the", + "\t\tslowest behavior.", + "\n\t nocwd", + "\n\t\tDo no CWD at all. curl does SIZE, RETR, STOR etc and gives the", + "\t\tfull path to the server for each of these commands. This is", + "\t\tthe fastest behavior.", + "\n\t singlecwd", + "\n\t\tDo one CWD with the full target directory and then operate on", + "\t\tthe file \"normally\" (like in the multicwd case). This is", + "\t\tsomewhat more standards compliant than \"nocwd\" but without the", + "\t\tfull penalty of \"multicwd\".", + "\n\t If --ftp-method is provided several times, the last set value is", + "\t used.", + "\n\t Examples:", + "\t curl --ftp-method multicwd ftp://example.com/dir1/dir2/file", + "\t curl --ftp-method nocwd ftp://example.com/dir1/dir2/file", + "\t curl --ftp-method singlecwd ftp://example.com/dir1/dir2/file", + "\n\t See also --list-only.", + "\n --ftp-pasv", + "\t (FTP) Use passive mode for the data connection. Passive is the", + "\t internal default behavior, but using this option can be used to", + "\t override a previous --ftp-port option.", + "\n\t Reversing an enforced passive really is not doable but you must", + "\t then instead enforce the correct --ftp-port again.", + "\n\t Passive mode means that curl tries the EPSV command first and then", + "\t PASV, unless --disable-epsv is used. Providing --ftp-pasv multiple", + "\t times has no extra effect. Disable it again with --no-ftp-pasv.", + "\n\t Example:", + "\t curl --ftp-pasv ftp://example.com/", + "\n\t See also --disable-epsv.", + "\n -P, --ftp-port
", + "\t (FTP) Reverses the default initiator/listener roles when", + "\t connecting with FTP. This option makes curl use active mode. curl", + "\t then commands the server to connect back to the client's specified", + "\t address and port, while passive mode asks the server to setup an", + "\t IP address and port for it to connect to.
should be one", + "\t of:", + "\n\t interface", + "\n\t\te.g. eth0 to specify which interface's IP address you want to", + "\t\tuse (Unix only)", + "\n\t IP address", + "\n\t\te.g. 192.168.10.1 to specify the exact IP address", + "\n\t hostname", + "\n\t\te.g. my.host.domain to specify the machine", + "\n\t -", + "\n\t\tmake curl pick the same IP address that is already used for", + "\t\tthe control connection. This is the recommended choice.", + "\t\tDisable the use of PORT with --ftp-pasv. Disable the attempt", + "\t\tto use the EPRT command instead of PORT by using", + "\t\t--disable-eprt. EPRT is really PORT++.", + "\n\t\tYou can also append \":[start]-[end]\" to the right of the", + "\t\taddress, to tell curl what TCP port range to use. That means", + "\t\tyou specify a port range, from a lower to a higher number. A", + "\t\tsingle number works as well, but do note that it increases the", + "\t\trisk of failure since the port may not be available.", + "\n\t If --ftp-port is provided several times, the last set value is", + "\t used.", + "\n\t Examples:", + "\t curl -P - ftp:/example.com", + "\t curl -P eth0 ftp:/example.com", + "\t curl -P 192.168.0.2 ftp:/example.com", + "\n\t See also --ftp-pasv and --disable-eprt.", + "\n --ftp-pret", + "\t (FTP) Send a PRET command before PASV (and EPSV). Certain FTP", + "\t servers, mainly drftpd, require this non-standard command for", + "\t directory listings as well as up and downloads in PASV mode.", + "\t Providing --ftp-pret multiple times has no extra effect. Disable", + "\t it again with --no-ftp-pret.", + "\n\t Example:", + "\t curl --ftp-pret ftp://example.com/", + "\n\t See also --ftp-port and --ftp-pasv.", + "\n --ftp-skip-pasv-ip", + "\t (FTP) Do not use the IP address the server suggests in its", + "\t response to curl's PASV command when curl connects the data", + "\t connection. Instead curl reuses the same IP address it already", + "\t uses for the control connection.", + "\n\t This option is enabled by default (added in 7.74.0).", + "\n\t This option has no effect if PORT, EPRT or EPSV is used instead of", + "\t PASV. Providing --ftp-skip-pasv-ip multiple times has no extra", + "\t effect. Disable it again with --no-ftp-skip-pasv-ip.", + "\n\t Example:", + "\t curl --ftp-skip-pasv-ip ftp://example.com/", + "\n\t See also --ftp-pasv.", + "\n --ftp-ssl-ccc", + "\t (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS layer", + "\t after authenticating. The rest of the control channel", + "\t communication is be unencrypted. This allows NAT routers to follow", + "\t the FTP transaction. The default mode is passive. Providing", + "\t --ftp-ssl-ccc multiple times has no extra effect. Disable it again", + "\t with --no-ftp-ssl-ccc.", + "\n\t Example:", + "\t curl --ftp-ssl-ccc ftps://example.com/", + "\n\t See also --ssl and --ftp-ssl-ccc-mode.", + "\n --ftp-ssl-ccc-mode ", + "\t (FTP) Sets the CCC mode. The passive mode does not initiate the", + "\t shutdown, but instead waits for the server to do it, and does not", + "\t reply to the shutdown from the server. The active mode initiates", + "\t the shutdown and waits for a reply from the server. Providing", + "\t --ftp-ssl-ccc-mode multiple times has no extra effect. Disable it", + "\t again with --no-ftp-ssl-ccc-mode.", + "\n\t Example:", + "\t curl --ftp-ssl-ccc-mode active --ftp-ssl-ccc ftps://example.com/", + "\n\t See also --ftp-ssl-ccc.", + "\n --ftp-ssl-control", + "\t (FTP) Require SSL/TLS for the FTP login, clear for transfer.", + "\t Allows secure authentication, but non-encrypted data transfers for", + "\t efficiency. Fails the transfer if the server does not support", + "\t SSL/TLS. Providing --ftp-ssl-control multiple times has no extra", + "\t effect. Disable it again with --no-ftp-ssl-control.", + "\n\t Example:", + "\t curl --ftp-ssl-control ftp://example.com", + "\n\t See also --ssl.", + "\n -G, --get", + "\t (HTTP) When used, this option makes all data specified with", + "\t --data, --data-binary or --data-urlencode to be used in an HTTP", + "\t GET request instead of the POST request that otherwise would be", + "\t used. curl appends the provided data to the URL as a query string.", + "\n\t If used in combination with --head, the POST data is instead", + "\t appended to the URL with a HEAD request. Providing --get multiple", + "\t times has no extra effect. Disable it again with --no-get.", + "\n\t Examples:", + "\t curl --get https://example.com", + "\t curl --get -d \"tool=curl\" -d \"age=old\" https://example.com", + "\t curl --get -I -d \"tool=curl\" https://example.com", + "\n\t See also --data and --request.", + "\n -g, --globoff", + "\t Switch off the URL globbing function. When you set this option,", + "\t you can specify URLs that contain the letters {}[] without having", + "\t curl itself interpret them. Note that these letters are not normal", + "\t legal URL contents but they should be encoded according to the URI", + "\t standard. Providing --globoff multiple times has no extra effect.", + "\t Disable it again with --no-globoff.", + "\n\t Example:", + "\t curl -g \"https://example.com/{[]}}}}\"", + "\n\t See also --config and --disable.", + "\n --happy-eyeballs-timeout-ms ", + "\t Happy Eyeballs is an algorithm that attempts to connect to both", + "\t IPv4 and IPv6 addresses for dual-stack hosts, giving IPv6 a", + "\t head-start of the specified number of milliseconds. If the IPv6", + "\t address cannot be connected to within that time, then a connection", + "\t attempt is made to the IPv4 address in parallel. The first", + "\t connection to be established is the one that is used.", + "\n\t The range of suggested useful values is limited. Happy Eyeballs", + "\t RFC 6555 says \"It is RECOMMENDED that connection attempts be paced", + "\t 150-250 ms apart to balance human factors against network load.\"", + "\t libcurl currently defaults to 200 ms. Firefox and Chrome currently", + "\t default to 300 ms. If --happy-eyeballs-timeout-ms is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --happy-eyeballs-timeout-ms 500 https://example.com", + "\n\t See also --max-time and --connect-timeout.", + "\n --haproxy-clientip ", + "\t (HTTP) Sets a client IP in HAProxy PROXY protocol v1 header at the", + "\t beginning of the connection.", + "\n\t For valid requests, IPv4 addresses must be indicated as a series", + "\t of exactly 4 integers in the range [0..255] inclusive written in", + "\t decimal representation separated by exactly one dot between each", + "\t other. Heading zeroes are not permitted in front of numbers in", + "\t order to avoid any possible confusion with octal numbers. IPv6", + "\t addresses must be indicated as series of 4 hexadecimal digits", + "\t (upper or lower case) delimited by colons between each other, with", + "\t the acceptance of one double colon sequence to replace the largest", + "\t acceptable range of consecutive zeroes. The total number of", + "\t decoded bits must exactly be 128.", + "\n\t Otherwise, any string can be accepted for the client IP and get", + "\t sent.", + "\n\t It replaces --haproxy-protocol if used, it is not necessary to", + "\t specify both flags. If --haproxy-clientip is provided several", + "\t times, the last set value is used.", + "\n\t Example:", + "\t curl --haproxy-clientip $IP", + "\n\t Added in 8.2.0. See also --proxy.", + "\n --haproxy-protocol", + "\t (HTTP) Send a HAProxy PROXY protocol v1 header at the beginning of", + "\t the connection. This is used by some load balancers and reverse", + "\t proxies to indicate the client's true IP address and port.", + "\n\t This option is primarily useful when sending test requests to a", + "\t service that expects this header. Providing --haproxy-protocol", + "\t multiple times has no extra effect. Disable it again with", + "\t --no-haproxy-protocol.", + "\n\t Example:", + "\t curl --haproxy-protocol https://example.com", + "\n\t Added in 7.60.0. See also --proxy.", + "\n -I, --head", + "\t (HTTP FTP FILE) Fetch the headers only! HTTP-servers feature the", + "\t command HEAD which this uses to get nothing but the header of a", + "\t document. When used on an FTP or FILE file, curl displays the file", + "\t size and last modification time only. Providing --head multiple", + "\t times has no extra effect. Disable it again with --no-head.", + "\n\t Example:", + "\t curl -I https://example.com", + "\n\t See also --get, --verbose and --trace-ascii.", + "\n -H, --header
", + "\t (HTTP IMAP SMTP) Extra header to include in information sent. When", + "\t used within an HTTP request, it is added to the regular request", + "\t headers.", + "\n\t For an IMAP or SMTP MIME uploaded mail built with --form options,", + "\t it is prepended to the resulting MIME document, effectively", + "\t including it at the mail global level. It does not affect raw", + "\t uploaded mails.", + "\n\t You may specify any number of extra headers. Note that if you", + "\t should add a custom header that has the same name as one of the", + "\t internal ones curl would use, your externally set header is used", + "\t instead of the internal one. This allows you to make even trickier", + "\t stuff than curl would normally do. You should not replace", + "\t internally set headers without knowing perfectly well what you are", + "\t doing. Remove an internal header by giving a replacement without", + "\t content on the right side of the colon, as in: -H \"Host:\". If you", + "\t send the custom header with no-value then its header must be", + "\t terminated with a semicolon, such as -H \"X-Custom-Header;\" to send", + "\t \"X-Custom-Header:\".", + "\n\t curl makes sure that each header you add/replace is sent with the", + "\t proper end-of-line marker, you should thus not add that as a part", + "\t of the header content: do not add newlines or carriage returns,", + "\t they only mess things up for you. curl passes on the verbatim", + "\t string you give it without any filter or other safe guards. That", + "\t includes white space and control characters.", + "\n\t This option can take an argument in @filename style, which then", + "\t adds a header for each line in the input file. Using @- makes curl", + "\t read the header file from stdin.", + "\n\t Please note that most anti-spam utilities check the presence and", + "\t value of several MIME mail headers: these are \"From:\", \"To:\",", + "\t \"Date:\" and \"Subject:\" among others and should be added with this", + "\t option.", + "\n\t You need --proxy-header to send custom headers intended for an", + "\t HTTP proxy.", + "\n\t Passing on a \"Transfer-Encoding: chunked\" header when doing an", + "\t HTTP request with a request body, makes curl send the data using", + "\t chunked encoding.", + "\n\t WARNING: headers set with this option are set in all HTTP requests", + "\t - even after redirects are followed, like when told with", + "\t --location. This can lead to the header being sent to other hosts", + "\t than the original host, so sensitive headers should be used with", + "\t caution combined with following redirects. --header can be used", + "\t several times in a command line", + "\n\t Examples:", + "\t curl -H \"X-First-Name: Joe\" https://example.com", + "\t curl -H \"User-Agent: yes-please/2000\" https://example.com", + "\t curl -H \"Host:\" https://example.com", + "\t curl -H @headers.txt https://example.com", + "\n\t See also --user-agent and --referer.", + "\n -h, --help ", + "\t Usage help. List all curl command line options within the given", + "\t category.", + "\n\t If no argument is provided, curl displays the most important", + "\t command line arguments.", + "\n\t For category all, curl displays help for all options.", + "\n\t If category is specified, curl displays all available help", + "\t categories.", + "\n\t Example:", + "\t curl --help all", + "\n\t See also --verbose.", + "\n --hostpubmd5 ", + "\t (SFTP SCP) Pass a string containing 32 hexadecimal digits. The", + "\t string should be the 128 bit MD5 checksum of the remote host's", + "\t public key, curl refuses the connection with the host unless the", + "\t checksums match. If --hostpubmd5 is provided several times, the", + "\t last set value is used.", + "\n\t Example:", + "\t curl --hostpubmd5 e5c1c49020640a5ab0f2034854c321a8 sftp://example.com/", + "\n\t See also --hostpubsha256.", + "\n --hostpubsha256 ", + "\t (SFTP SCP) Pass a string containing a Base64-encoded SHA256 hash", + "\t of the remote host's public key. Curl refuses the connection with", + "\t the host unless the hashes match.", + "\n\t This feature requires libcurl to be built with libssh2 and does", + "\t not work with other SSH backends. If --hostpubsha256 is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --hostpubsha256 NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ= sftp://example.com/", + "\n\t Added in 7.80.0. See also --hostpubmd5.", + "\n --hsts ", + "\t (HTTPS) Enable HSTS for the transfer. If the filename points to an", + "\t existing HSTS cache file, that is used. After a completed", + "\t transfer, the cache is saved to the filename again if it has been", + "\t modified.", + "\n\t If curl is told to use HTTP:// for a transfer involving a hostname", + "\t that exists in the HSTS cache, it upgrades the transfer to use", + "\t HTTPS. Each HSTS cache entry has an individual life time after", + "\t which the upgrade is no longer performed.", + "\n\t Specify a \"\" filename (zero length) to avoid loading/saving and", + "\t make curl just handle HSTS in memory.", + "\n\t If this option is used several times, curl loads contents from all", + "\t the files but the last one is used for saving. --hsts can be used", + "\t several times in a command line", + "\n\t Example:", + "\t curl --hsts cache.txt https://example.com", + "\n\t Added in 7.74.0. See also --proto.", + "\n --http0.9", + "\t (HTTP) Accept an HTTP version 0.9 response.", + "\n\t HTTP/0.9 is a response without headers and therefore you can also", + "\t connect with this to non-HTTP servers and still get a response", + "\t since curl simply transparently downgrades - if allowed.", + "\n\t HTTP/0.9 is disabled by default (added in 7.66.0) Providing", + "\t --http0.9 multiple times has no extra effect. Disable it again", + "\t with --no-http0.9.", + "\n\t Example:", + "\t curl --http0.9 https://example.com", + "\n\t Added in 7.64.0. See also --http1.1, --http2 and --http3.", + "\n -0, --http1.0", + "\t (HTTP) Use HTTP version 1.0 instead of using its internally", + "\t preferred HTTP version. Providing --http1.0 multiple times has no", + "\t extra effect.", + "\n\t Example:", + "\t curl --http1.0 https://example.com", + "\n\t This option is mutually exclusive with --http1.1, --http2,", + "\t --http2-prior-knowledge and --http3. See also --http0.9 and", + "\t --http1.1.", + "\n --http1.1", + "\t (HTTP) Use HTTP version 1.1. This is the default with HTTP://", + "\t URLs. Providing --http1.1 multiple times has no extra effect.", + "\n\t Example:", + "\t curl --http1.1 https://example.com", + "\n\t This option is mutually exclusive with --http1.0, --http2,", + "\t --http2-prior-knowledge and --http3. See also --http1.0 and", + "\t --http0.9.", + "\n --http2", + "\t (HTTP) Use HTTP/2.", + "\n\t For HTTPS, this means curl negotiates HTTP/2 in the TLS handshake.", + "\t curl does this by default.", + "\n\t For HTTP, this means curl attempts to upgrade the request to", + "\t HTTP/2 using the Upgrade: request header.", + "\n\t When curl uses HTTP/2 over HTTPS, it does not itself insist on TLS", + "\t 1.2 or higher even though that is required by the specification. A", + "\t user can add this version requirement with --tlsv1.2. Providing", + "\t --http2 multiple times has no extra effect.", + "\n\t Example:", + "\t curl --http2 https://example.com", + "\n\t --http2 requires that libcurl is built to support HTTP/2. This", + "\t option is mutually exclusive with --http1.1, --http1.0,", + "\t --http2-prior-knowledge and --http3. See also --http1.1, --http3", + "\t and --no-alpn.", + "\n --http2-prior-knowledge", + "\t (HTTP) Issue a non-TLS HTTP requests using HTTP/2 directly without", + "\t HTTP/1.1 Upgrade. It requires prior knowledge that the server", + "\t supports HTTP/2 straight away. HTTPS requests still do HTTP/2 the", + "\t standard way with negotiated protocol version in the TLS", + "\t handshake. Providing --http2-prior-knowledge multiple times has no", + "\t extra effect. Disable it again with --no-http2-prior-knowledge.", + "\n\t Example:", + "\t curl --http2-prior-knowledge https://example.com", + "\n\t --http2-prior-knowledge requires that libcurl is built to support", + "\t HTTP/2. This option is mutually exclusive with --http1.1,", + "\t --http1.0, --http2 and --http3. See also --http2 and --http3.", + "\n --http3", + "\t (HTTP) Attempt HTTP/3 to the host in the URL, but fallback to", + "\t earlier HTTP versions if the HTTP/3 connection establishment", + "\t fails. HTTP/3 is only available for HTTPS and not for HTTP URLs.", + "\n\t This option allows a user to avoid using the Alt-Svc method of", + "\t upgrading to HTTP/3 when you know that the target speaks HTTP/3 on", + "\t the given host and port.", + "\n\t When asked to use HTTP/3, curl issues a separate attempt to use", + "\t older HTTP versions with a slight delay, so if the HTTP/3 transfer", + "\t fails or is slow, curl still tries to proceed with an older HTTP", + "\t version.", + "\n\t Use --http3-only for similar functionality without a fallback.", + "\t Providing --http3 multiple times has no extra effect.", + "\n\t Example:", + "\t curl --http3 https://example.com", + "\n\t --http3 requires that libcurl is built to support HTTP/3. This", + "\t option is mutually exclusive with --http1.1, --http1.0, --http2,", + "\t --http2-prior-knowledge and --http3-only. Added in 7.66.0. See", + "\t also --http1.1 and --http2.", + "\n --http3-only", + "\t (HTTP) Instructs curl to use HTTP/3 to the host in the URL, with", + "\t no fallback to earlier HTTP versions. HTTP/3 can only be used for", + "\t HTTPS and not for HTTP URLs. For HTTP, this option triggers an", + "\t error.", + "\n\t This option allows a user to avoid using the Alt-Svc method of", + "\t upgrading to HTTP/3 when you know that the target speaks HTTP/3 on", + "\t the given host and port.", + "\n\t This option makes curl fail if a QUIC connection cannot be", + "\t established, it does not attempt any other HTTP versions on its", + "\t own. Use --http3 for similar functionality with a fallback.", + "\t Providing --http3-only multiple times has no extra effect.", + "\n\t Example:", + "\t curl --http3-only https://example.com", + "\n\t --http3-only requires that libcurl is built to support HTTP/3.", + "\t This option is mutually exclusive with --http1.1, --http1.0,", + "\t --http2, --http2-prior-knowledge and --http3. Added in 7.88.0. See", + "\t also --http1.1, --http2 and --http3.", + "\n --ignore-content-length", + "\t (FTP HTTP) For HTTP, Ignore the Content-Length header. This is", + "\t particularly useful for servers running Apache 1.x, which reports", + "\t incorrect Content-Length for files larger than 2 gigabytes.", + "\n\t For FTP, this makes curl skip the SIZE command to figure out the", + "\t size before downloading a file.", + "\n\t This option does not work for HTTP if libcurl was built to use", + "\t hyper. Providing --ignore-content-length multiple times has no", + "\t extra effect. Disable it again with --no-ignore-content-length.", + "\n\t Example:", + "\t curl --ignore-content-length https://example.com", + "\n\t See also --ftp-skip-pasv-ip.", + "\n -i, --include", + "\t (HTTP FTP) Include response headers in the output. HTTP response", + "\t headers can include things like server name, cookies, date of the", + "\t document, HTTP version and more... With non-HTTP protocols, the", + "\t \"headers\" are other server communication.", + "\n\t To view the request headers, consider the --verbose option.", + "\t Providing --include multiple times has no extra effect. Disable it", + "\t again with --no-include.", + "\n\t Example:", + "\t curl -i https://example.com", + "\n\t See also --verbose.", + "\n -k, --insecure", + "\t (TLS SFTP SCP) By default, every secure connection curl makes is", + "\t verified to be secure before the transfer takes place. This option", + "\t makes curl skip the verification step and proceed without", + "\t checking.", + "\n\t When this option is not used for protocols using TLS, curl", + "\t verifies the server's TLS certificate before it continues: that", + "\t the certificate contains the right name which matches the hostname", + "\t used in the URL and that the certificate has been signed by a CA", + "\t certificate present in the cert store. See this online resource", + "\t for further details: https://curl.se/docs/sslcerts.html", + "\n\t For SFTP and SCP, this option makes curl skip the known_hosts", + "\t verification. known_hosts is a file normally stored in the user's", + "\t home directory in the \".ssh\" subdirectory, which contains", + "\t hostnames and their public keys.", + "\n\t WARNING: using this option makes the transfer insecure.", + "\n\t When curl uses secure protocols it trusts responses and allows for", + "\t example HSTS and Alt-Svc information to be stored and used", + "\t subsequently. Using --insecure can make curl trust and use such", + "\t information from malicious servers. Providing --insecure multiple", + "\t times has no extra effect. Disable it again with --no-insecure.", + "\n\t Example:", + "\t curl --insecure https://example.com", + "\n\t See also --proxy-insecure, --cacert and --capath.", + "\n --interface ", + "\t Perform the operation using a specified interface. You can enter", + "\t interface name, IP address or hostname. If you prefer to be", + "\t specific, you can use the following special syntax:", + "\n\t if!", + "\n\t\tInterface name. If the provided name does not match an", + "\t\texisting interface, curl returns with error 45.", + "\n\t host!", + "\n\t\tIP address or hostname.", + "\n\t ifhost!!", + "\n\t\tInterface name and IP address or hostname. This syntax", + "\t\trequires libcurl 8.9.0 or later.", + "\n\t\tIf the provided name does not match an existing interface,", + "\t\tcurl returns with error 45. curl does not support using", + "\t\tnetwork interface names for this option on Windows.", + "\n\t\tThat name resolve operation if a hostname is provided does not", + "\t\tuse DNS-over-HTTPS even if --doh-url is set.", + "\n\t\tOn Linux this option can be used to specify a VRF (Virtual", + "\t\tRouting and Forwarding) device, but the binary then needs to", + "\t\teither have the CAP_NET_RAW capability set or to be run as", + "\t\troot.", + "\n\t If --interface is provided several times, the last set value is", + "\t used.", + "\n\t Examples:", + "\t curl --interface eth0 https://example.com", + "\t curl --interface \"host!10.0.0.1\" https://example.com", + "\t curl --interface \"if!enp3s0\" https://example.com", + "\n\t See also --dns-interface.", + "\n --ip-tos ", + "\t (All) Set Type of Service (TOS) for IPv4 or Traffic Class for", + "\t IPv6.", + "\n\t The values allowed for can be a numeric value between 1", + "\t and 255 or one of the following:", + "\n\t CS0, CS1, CS2, CS3, CS4, CS5, CS6, CS7, AF11, AF12, AF13, AF21,", + "\t AF22, AF23, AF31, AF32, AF33, AF41, AF42, AF43, EF, VOICE-ADMIT,", + "\t ECT1, ECT0, CE, LE, LOWCOST, LOWDELAY, THROUGHPUT, RELIABILITY,", + "\t MINCOST If --ip-tos is provided several times, the last set value", + "\t is used.", + "\n\t Example:", + "\t curl --ip-tos CS5 https://example.com", + "\n\t Added in 8.9.0. See also --tcp-nodelay and --vlan-priority.", + "\n --ipfs-gateway ", + "\t (IPFS) Specify which gateway to use for IPFS and IPNS URLs. Not", + "\t specifying this instead makes curl check if the IPFS_GATEWAY", + "\t environment variable is set, or if a \"~/.ipfs/gateway\" file", + "\t holding the gateway URL exists.", + "\n\t If you run a local IPFS node, this gateway is by default available", + "\t under \"http://localhost:8080\". A full example URL would look like:", + "\n\t\tcurl --ipfs-gateway http://localhost:8080 ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi", + "\n\t There are many public IPFS gateways. See for example:", + "\t https://ipfs.github.io/public-gateway-checker/", + "\n\t If you opt to go for a remote gateway you need to be aware that", + "\t you completely trust the gateway. This might be fine in local", + "\t gateways that you host yourself. With remote gateways there could", + "\t potentially be malicious actors returning you data that does not", + "\t match the request you made, inspect or even interfere with the", + "\t request. You may not notice this when using curl. A mitigation", + "\t could be to go for a \"trustless\" gateway. This means you locally", + "\t verify that the data. Consult the docs page on trusted vs", + "\t trustless:", + "\t https://docs.ipfs.tech/reference/http/gateway/#trusted-vs-trustless", + "\t If --ipfs-gateway is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --ipfs-gateway https://example.com ipfs://", + "\n\t Added in 8.4.0. See also --help and --manual.", + "\n -4, --ipv4", + "\t Use IPv4 addresses only when resolving hostnames, and not for", + "\t example try IPv6. Providing --ipv4 multiple times has no extra", + "\t effect.", + "\n\t Example:", + "\t curl --ipv4 https://example.com", + "\n\t This option is mutually exclusive with --ipv6. See also --http1.1", + "\t and --http2.", + "\n -6, --ipv6", + "\t Use IPv6 addresses only when resolving hostnames, and not for", + "\t example try IPv4.", + "\n\t Your resolver may respond to an IPv6-only resolve request by", + "\t returning IPv6 addresses that contain \"mapped\" IPv4 addresses for", + "\t compatibility purposes. macOS is known to do this. Providing", + "\t --ipv6 multiple times has no extra effect.", + "\n\t Example:", + "\t curl --ipv6 https://example.com", + "\n\t This option is mutually exclusive with --ipv4. See also --http1.1", + "\t and --http2.", + "\n --json ", + "\t (HTTP) Sends the specified JSON data in a POST request to the HTTP", + "\t server. --json works as a shortcut for passing on these three", + "\t options:", + "\n\t\t--data [arg]", + "\t\t--header \"Content-Type: application/json\"", + "\t\t--header \"Accept: application/json\"", + "\n\t There is no verification that the passed in data is actual JSON or", + "\t that the syntax is correct.", + "\n\t If you start the data with the letter @, the rest should be a", + "\t filename to read the data from, or a single dash (-) if you want", + "\t curl to read the data from stdin. Posting data from a file named", + "\t 'foobar' would thus be done with --json @foobar and to instead", + "\t read the data from stdin, use --json @-.", + "\n\t If this option is used more than once on the same command line,", + "\t the additional data pieces are concatenated to the previous before", + "\t sending.", + "\n\t The headers this option sets can be overridden with --header as", + "\t usual. --json can be used several times in a command line", + "\n\t Examples:", + "\t curl --json '{ \"drink\": \"coffe\" }' https://example.com", + "\t curl --json '{ \"drink\":' --json ' \"coffe\" }' https://example.com", + "\t curl --json @prepared https://example.com", + "\t curl --json @- https://example.com < json.txt", + "\n\t This option is mutually exclusive with --form, --head and", + "\t --upload-file. Added in 7.82.0. See also --data-binary and", + "\t --data-raw.", + "\n -j, --junk-session-cookies", + "\t (HTTP) When curl is told to read cookies from a given file, this", + "\t option makes it discard all \"session cookies\". This has the same", + "\t effect as if a new session is started. Typical browsers discard", + "\t session cookies when they are closed down. Providing", + "\t --junk-session-cookies multiple times has no extra effect. Disable", + "\t it again with --no-junk-session-cookies.", + "\n\t Example:", + "\t curl --junk-session-cookies -b cookies.txt https://example.com", + "\n\t See also --cookie and --cookie-jar.", + "\n --keepalive-cnt ", + "\t Set the maximum number of keepalive probes TCP should send but get", + "\t no response before dropping the connection. This option is usually", + "\t used in conjunction with --keepalive-time.", + "\n\t This option is supported on Linux, *BSD/macOS, Windows", + "\t >=10.0.16299, Solaris 11.4, and recent AIX, HP-UX and more. This", + "\t option has no effect if --no-keepalive is used.", + "\n\t If unspecified, the option defaults to 9. If --keepalive-cnt is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --keepalive-cnt 3 https://example.com", + "\n\t Added in 8.9.0. See also --keepalive-time and --no-keepalive.", + "\n --keepalive-time ", + "\t Set the time a connection needs to remain idle before sending", + "\t keepalive probes and the time between individual keepalive probes.", + "\t It is currently effective on operating systems offering the", + "\t \"TCP_KEEPIDLE\" and \"TCP_KEEPINTVL\" socket options (meaning Linux,", + "\t *BSD/macOS, Windows, Solaris, and recent AIX, HP-UX and more).", + "\t Keepalive is used by the TCP stack to detect broken networks on", + "\t idle connections. The number of missed keepalive probes before", + "\t declaring the connection down is OS dependent and is commonly 8", + "\t (*BSD/macOS/AIX), 9 (Linux/AIX) or 5/10 (Windows), and this number", + "\t can be changed by specifying the curl option \"keepalive-cnt\". Note", + "\t that this option has no effect if --no-keepalive is used.", + "\n\t If unspecified, the option defaults to 60 seconds. If", + "\t --keepalive-time is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --keepalive-time 20 https://example.com", + "\n\t See also --no-keepalive, --keepalive-cnt and --max-time.", + "\n --key ", + "\t (TLS SSH) Private key filename. Allows you to provide your private", + "\t key in this separate file. For SSH, if not specified, curl tries", + "\t the following candidates in order: \"~/.ssh/id_rsa\",", + "\t \"~/.ssh/id_dsa\", \"./id_rsa\", \"./id_dsa\".", + "\n\t If curl is built against OpenSSL library, and the engine pkcs11 is", + "\t available, then a PKCS#11 URI (RFC 7512) can be used to specify a", + "\t private key located in a PKCS#11 device. A string beginning with", + "\t \"pkcs11:\" is interpreted as a PKCS#11 URI. If a PKCS#11 URI is", + "\t provided, then the --engine option is set as \"pkcs11\" if none was", + "\t provided and the --key-type option is set as \"ENG\" if none was", + "\t provided.", + "\n\t If curl is built against Secure Transport or Schannel then this", + "\t option is ignored for TLS protocols (HTTPS, etc). Those backends", + "\t expect the private key to be already present in the keychain or", + "\t PKCS#12 file containing the certificate. If --key is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --cert certificate --key here https://example.com", + "\n\t See also --key-type and --cert.", + "\n --key-type ", + "\t (TLS) Private key file type. Specify which type your --key", + "\t provided private key is. DER, PEM, and ENG are supported. If not", + "\t specified, PEM is assumed. If --key-type is provided several", + "\t times, the last set value is used.", + "\n\t Example:", + "\t curl --key-type DER --key here https://example.com", + "\n\t See also --key.", + "\n --krb ", + "\t (FTP) Enable Kerberos authentication and use. The level must be", + "\t entered and should be one of 'clear', 'safe', 'confidential', or", + "\t 'private'. Should you use a level that is not one of these,", + "\t 'private' is used. If --krb is provided several times, the last", + "\t set value is used.", + "\n\t Example:", + "\t curl --krb clear ftp://example.com/", + "\n\t --krb requires that libcurl is built to support Kerberos. See also", + "\t --delegation and --ssl.", + "\n --libcurl ", + "\t Append this option to any ordinary curl command line, and you get", + "\t libcurl-using C source code written to the file that does the", + "\t equivalent of what your command-line operation does!", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. If --libcurl is provided several times, the last", + "\t set value is used.", + "\n\t Example:", + "\t curl --libcurl client.c https://example.com", + "\n\t See also --verbose.", + "\n --limit-rate ", + "\t Specify the maximum transfer rate you want curl to use - for both", + "\t downloads and uploads. This feature is useful if you have a", + "\t limited pipe and you would like your transfer not to use your", + "\t entire bandwidth. To make it slower than it otherwise would be.", + "\n\t The given speed is measured in bytes/second, unless a suffix is", + "\t appended. Appending 'k' or 'K' counts the number as kilobytes, 'm'", + "\t or 'M' makes it megabytes, while 'g' or 'G' makes it gigabytes.", + "\t The suffixes (k, M, G, T, P) are 1024 based. For example 1k is", + "\t 1024. Examples: 200K, 3m and 1G.", + "\n\t The rate limiting logic works on averaging the transfer speed to", + "\t no more than the set threshold over a period of multiple seconds.", + "\n\t If you also use the --speed-limit option, that option takes", + "\t precedence and might cripple the rate-limiting slightly, to help", + "\t keeping the speed-limit logic working. If --limit-rate is provided", + "\t several times, the last set value is used.", + "\n\t Examples:", + "\t curl --limit-rate 100K https://example.com", + "\t curl --limit-rate 1000 https://example.com", + "\t curl --limit-rate 10M https://example.com", + "\n\t See also --rate, --speed-limit and --speed-time.", + "\n -l, --list-only", + "\t (FTP POP3 SFTP FILE) When listing an FTP directory, force a", + "\t name-only view. Maybe particularly useful if the user wants to", + "\t machine-parse the contents of an FTP directory since the normal", + "\t directory view does not use a standard look or format. When used", + "\t like this, the option causes an NLST command to be sent to the", + "\t server instead of LIST.", + "\n\t Note: Some FTP servers list only files in their response to NLST;", + "\t they do not include sub-directories and symbolic links.", + "\n\t When listing an SFTP directory, this switch forces a name-only", + "\t view, one per line. This is especially useful if the user wants to", + "\t machine-parse the contents of an SFTP directory since the normal", + "\t directory view provides more information than just filenames.", + "\n\t When retrieving a specific email from POP3, this switch forces a", + "\t LIST command to be performed instead of RETR. This is particularly", + "\t useful if the user wants to see if a specific message-id exists on", + "\t the server and what size it is.", + "\n\t For FILE, this option has no effect yet as directories are always", + "\t listed in this mode.", + "\n\t Note: When combined with --request, this option can be used to", + "\t send a UIDL command instead, so the user may use the email's", + "\t unique identifier rather than its message-id to make the request.", + "\t Providing --list-only multiple times has no extra effect. Disable", + "\t it again with --no-list-only.", + "\n\t Example:", + "\t curl --list-only ftp://example.com/dir/", + "\n\t See also --quote and --request.", + "\n --local-port ", + "\t Set a preferred single number or range (FROM-TO) of local port", + "\t numbers to use for the connection(s). Note that port numbers by", + "\t nature are a scarce resource so setting this range to something", + "\t too narrow might cause unnecessary connection setup failures. If", + "\t --local-port is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --local-port 1000-3000 https://example.com", + "\n\t See also --globoff.", + "\n -L, --location", + "\t (HTTP) If the server reports that the requested page has moved to", + "\t a different location (indicated with a Location: header and a 3XX", + "\t response code), this option makes curl redo the request on the new", + "\t place. If used together with --include or --head, headers from all", + "\t requested pages are shown.", + "\n\t When authentication is used, curl only sends its credentials to", + "\t the initial host. If a redirect takes curl to a different host, it", + "\t does not get the user+password pass on. See also", + "\t --location-trusted on how to change this.", + "\n\t Limit the amount of redirects to follow by using the --max-redirs", + "\t option.", + "\n\t When curl follows a redirect and if the request is a POST, it", + "\t sends the following request with a GET if the HTTP response was", + "\t 301, 302, or 303. If the response code was any other 3xx code,", + "\t curl resends the following request using the same unmodified", + "\t method.", + "\n\t You can tell curl to not change POST requests to GET after a 30x", + "\t response by using the dedicated options for that: --post301,", + "\t --post302 and --post303.", + "\n\t The method set with --request overrides the method curl would", + "\t otherwise select to use. Providing --location multiple times has", + "\t no extra effect. Disable it again with --no-location.", + "\n\t Example:", + "\t curl -L https://example.com", + "\n\t See also --resolve and --alt-svc.", + "\n --location-trusted", + "\t (HTTP) Like --location, but allows sending the name + password to", + "\t all hosts that the site may redirect to. This may or may not", + "\t introduce a security breach if the site redirects you to a site to", + "\t which you send your authentication info (which is clear-text in", + "\t the case of HTTP Basic authentication). Providing", + "\t --location-trusted multiple times has no extra effect. Disable it", + "\t again with --no-location-trusted.", + "\n\t Example:", + "\t curl --location-trusted -u user:password https://example.com", + "\n\t See also --user.", + "\n --login-options ", + "\t (IMAP LDAP POP3 SMTP) Specify the login options to use during", + "\t server authentication.", + "\n\t You can use login options to specify protocol specific options", + "\t that may be used during authentication. At present only IMAP, POP3", + "\t and SMTP support login options. For more information about login", + "\t options please see RFC 2384, RFC 5092 and the IETF draft", + "\t https://datatracker.ietf.org/doc/html/draft-earhart-url-smtp-00", + "\n\t Since 8.2.0, IMAP supports the login option \"AUTH=+LOGIN\". With", + "\t this option, curl uses the plain (not SASL) \"LOGIN IMAP\" command", + "\t even if the server advertises SASL authentication. Care should be", + "\t taken in using this option, as it sends your password over the", + "\t network in plain text. This does not work if the IMAP server", + "\t disables the plain \"LOGIN\" (e.g. to prevent password snooping). If", + "\t --login-options is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --login-options 'AUTH=*' imap://example.com", + "\n\t See also --user.", + "\n --mail-auth
", + "\t (SMTP) Specify a single address. This is used to specify the", + "\t authentication address (identity) of a submitted message that is", + "\t being relayed to another server. If --mail-auth is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --mail-auth user@example.com -T mail smtp://example.com/", + "\n\t See also --mail-rcpt and --mail-from.", + "\n --mail-from
", + "\t (SMTP) Specify a single address that the given mail should get", + "\t sent from. If --mail-from is provided several times, the last set", + "\t value is used.", + "\n\t Example:", + "\t curl --mail-from user@example.com -T mail smtp://example.com/", + "\n\t See also --mail-rcpt and --mail-auth.", + "\n --mail-rcpt
", + "\t (SMTP) Specify a single email address, username or mailing list", + "\t name. Repeat this option several times to send to multiple", + "\t recipients.", + "\n\t When performing an address verification (VRFY command), the", + "\t recipient should be specified as the username or username and", + "\t domain (as per Section 3.5 of RFC 5321).", + "\n\t When performing a mailing list expand (EXPN command), the", + "\t recipient should be specified using the mailing list name, such as", + "\t \"Friends\" or \"London-Office\". --mail-rcpt can be used several", + "\t times in a command line", + "\n\t Example:", + "\t curl --mail-rcpt user@example.net smtp://example.com", + "\n\t See also --mail-rcpt-allowfails.", + "\n --mail-rcpt-allowfails", + "\t (SMTP) When sending data to multiple recipients, by default curl", + "\t aborts SMTP conversation if at least one of the recipients causes", + "\t RCPT TO command to return an error.", + "\n\t The default behavior can be changed by passing", + "\t --mail-rcpt-allowfails command-line option which makes curl ignore", + "\t errors and proceed with the remaining valid recipients.", + "\n\t If all recipients trigger RCPT TO failures and this flag is", + "\t specified, curl still aborts the SMTP conversation and returns the", + "\t error received from to the last RCPT TO command. Providing", + "\t --mail-rcpt-allowfails multiple times has no extra effect. Disable", + "\t it again with --no-mail-rcpt-allowfails.", + "\n\t Example:", + "\t curl --mail-rcpt-allowfails --mail-rcpt dest@example.com smtp://example.com", + "\n\t Added in 7.69.0. See also --mail-rcpt.", + "\n -M, --manual", + "\t Manual. Display the huge help text.", + "\n\t Example:", + "\t curl --manual", + "\n\t See also --verbose, --libcurl and --trace.", + "\n --max-filesize ", + "\t (FTP HTTP MQTT) Specify the maximum size (in bytes) of a file to", + "\t download. If the file requested is larger than this value, the", + "\t transfer does not start and curl returns with exit code 63.", + "\n\t A size modifier may be used. For example, Appending 'k' or 'K'", + "\t counts the number as kilobytes, 'm' or 'M' makes it megabytes,", + "\t while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G.", + "\n\t NOTE: before curl 8.4.0, when the file size is not known prior to", + "\t download, for such files this option has no effect even if the", + "\t file transfer ends up being larger than this given limit.", + "\n\t Starting with curl 8.4.0, this option aborts the transfer if it", + "\t reaches the threshold during transfer. If --max-filesize is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --max-filesize 100K https://example.com", + "\n\t See also --limit-rate.", + "\n --max-redirs ", + "\t (HTTP) Set maximum number of redirections to follow. When", + "\t --location is used, to prevent curl from following too many", + "\t redirects, by default, the limit is set to 50 redirects. Set this", + "\t option to -1 to make it unlimited. If --max-redirs is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --max-redirs 3 --location https://example.com", + "\n\t See also --location.", + "\n -m, --max-time ", + "\t Set maximum time in seconds that you allow each transfer to take.", + "\t Prevents your batch jobs from hanging for hours due to slow", + "\t networks or links going down. This option accepts decimal values.", + "\n\t If you enable retrying the transfer (--retry) then the maximum", + "\t time counter is reset each time the transfer is retried. You can", + "\t use --retry-max-time to limit the retry time.", + "\n\t The decimal value needs to provided using a dot (.) as decimal", + "\t separator - not the local version even if it might be using", + "\t another separator. If --max-time is provided several times, the", + "\t last set value is used.", + "\n\t Examples:", + "\t curl --max-time 10 https://example.com", + "\t curl --max-time 2.92 https://example.com", + "\n\t See also --connect-timeout and --retry-max-time.", + "\n --metalink", + "\t This option was previously used to specify a Metalink resource.", + "\t Metalink support is disabled in curl for security reasons (added", + "\t in 7.78.0). If --metalink is provided several times, the last set", + "\t value is used.", + "\n\t Example:", + "\t curl --metalink file https://example.com", + "\n\t See also --parallel.", + "\n --mptcp", + "\t Enables the use of Multipath TCP (MPTCP) for connections. MPTCP is", + "\t an extension to the standard TCP that allows multiple TCP streams", + "\t over different network paths between the same source and", + "\t destination. This can enhance bandwidth and improve reliability by", + "\t using multiple paths simultaneously.", + "\n\t MPTCP is beneficial in networks where multiple paths exist between", + "\t clients and servers, such as mobile networks where a device may", + "\t switch between WiFi and cellular data or in wired networks with", + "\t multiple Internet Service Providers.", + "\n\t This option is currently only supported on Linux starting from", + "\t kernel 5.6. Only TCP connections are modified, hence this option", + "\t does not effect HTTP/3 (QUIC) or UDP connections.", + "\n\t The server curl connects to must also support MPTCP. If not, the", + "\t connection seamlessly falls back to TCP. Providing --mptcp", + "\t multiple times has no extra effect. Disable it again with", + "\t --no-mptcp.", + "\n\t Example:", + "\t curl --mptcp https://example.com", + "\n\t Added in 8.9.0. See also --tcp-fastopen.", + "\n --negotiate", + "\t (HTTP) Enable Negotiate (SPNEGO) authentication.", + "\n\t This option requires a library built with GSS-API or SSPI support.", + "\t Use --version to see if your curl supports GSS-API/SSPI or SPNEGO.", + "\n\t When using this option, you must also provide a fake --user option", + "\t to activate the authentication code properly. Sending a '-u :' is", + "\t enough as the username and password from the --user option are not", + "\t actually used. Providing --negotiate multiple times has no extra", + "\t effect.", + "\n\t Example:", + "\t curl --negotiate -u : https://example.com", + "\n\t See also --basic, --ntlm, --anyauth and --proxy-negotiate.", + "\n -n, --netrc", + "\t Make curl scan the .netrc file in the user's home directory for", + "\t login name and password. This is typically used for FTP on Unix.", + "\t If used with HTTP, curl enables user authentication. See netrc(5)", + "\t and ftp(1) for details on the file format. Curl does not complain", + "\t if that file does not have the right permissions (it should be", + "\t neither world- nor group-readable). The environment variable", + "\t \"HOME\" is used to find the home directory.", + "\n\t On Windows two filenames in the home directory are checked: .netrc", + "\t and _netrc, preferring the former. Older versions on Windows", + "\t checked for _netrc only.", + "\n\t A quick and simple example of how to setup a .netrc to allow curl", + "\t to FTP to the machine host.domain.com with username 'myself' and", + "\t password 'secret' could look similar to:", + "\n\t\tmachine host.domain.com", + "\t\tlogin myself", + "\t\tpassword secret", + "\n\t Providing --netrc multiple times has no extra effect. Disable it", + "\t again with --no-netrc.", + "\n\t Example:", + "\t curl --netrc https://example.com", + "\n\t This option is mutually exclusive with --netrc-file and", + "\t --netrc-optional. See also --netrc-file, --config and --user.", + "\n --netrc-file ", + "\t Set the netrc file to use. Similar to --netrc, except that you", + "\t also provide the path (absolute or relative).", + "\n\t It abides by --netrc-optional if specified. If --netrc-file is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --netrc-file netrc https://example.com", + "\n\t This option is mutually exclusive with --netrc. See also --netrc,", + "\t --user and --config.", + "\n --netrc-optional", + "\t Similar to --netrc, but this option makes the .netrc usage", + "\t optional and not mandatory as the --netrc option does. Providing", + "\t --netrc-optional multiple times has no extra effect. Disable it", + "\t again with --no-netrc-optional.", + "\n\t Example:", + "\t curl --netrc-optional https://example.com", + "\n\t This option is mutually exclusive with --netrc. See also", + "\t --netrc-file.", + "\n -:, --next", + "\t Use a separate operation for the following URL and associated", + "\t options. This allows you to send several URL requests, each with", + "\t their own specific options, for example, such as different", + "\t usernames or custom requests for each.", + "\n\t --next resets all local options and only global ones have their", + "\t values survive over to the operation following the --next", + "\t instruction. Global options include --verbose, --trace,", + "\t --trace-ascii and --fail-early.", + "\n\t For example, you can do both a GET and a POST in a single command", + "\t line:", + "\n\t\tcurl www1.example.com --next -d postthis www2.example.com", + "\n\t --next can be used several times in a command line", + "\n\t Examples:", + "\t curl https://example.com --next -d postthis www2.example.com", + "\t curl -I https://example.com --next https://example.net/", + "\n\t See also --parallel and --config.", + "\n --no-alpn", + "\t (HTTPS) Disable the ALPN TLS extension. ALPN is enabled by default", + "\t if libcurl was built with an SSL library that supports ALPN. ALPN", + "\t is used by a libcurl that supports HTTP/2 to negotiate HTTP/2", + "\t support with the server during https sessions.", + "\n\t Note that this is the negated option name documented. You can use", + "\t --alpn to enable ALPN. Providing --no-alpn multiple times has no", + "\t extra effect. Disable it again with --alpn.", + "\n\t Example:", + "\t curl --no-alpn https://example.com", + "\n\t --no-alpn requires that libcurl is built to support TLS. See also", + "\t --no-npn and --http2.", + "\n -N, --no-buffer", + "\t Disables the buffering of the output stream. In normal work", + "\t situations, curl uses a standard buffered output stream that has", + "\t the effect that it outputs the data in chunks, not necessarily", + "\t exactly when the data arrives. Using this option disables that", + "\t buffering.", + "\n\t Note that this is the negated option name documented. You can use", + "\t --buffer to enable buffering again. Providing --no-buffer multiple", + "\t times has no extra effect. Disable it again with --buffer.", + "\n\t Example:", + "\t curl --no-buffer https://example.com", + "\n\t See also --progress-bar.", + "\n --no-clobber", + "\t When used in conjunction with the --output, --remote-header-name,", + "\t --remote-name, or --remote-name-all options, curl avoids", + "\t overwriting files that already exist. Instead, a dot and a number", + "\t gets appended to the name of the file that would be created, up to", + "\t filename.100 after which it does not create any file.", + "\n\t Note that this is the negated option name documented. You can thus", + "\t use --clobber to enforce the clobbering, even if", + "\t --remote-header-name is specified. Providing --no-clobber multiple", + "\t times has no extra effect. Disable it again with --clobber.", + "\n\t Example:", + "\t curl --no-clobber --output local/dir/file https://example.com", + "\n\t Added in 7.83.0. See also --output and --remote-name.", + "\n --no-keepalive", + "\t Disables the use of keepalive messages on the TCP connection. curl", + "\t otherwise enables them by default.", + "\n\t Note that this is the negated option name documented. You can thus", + "\t use --keepalive to enforce keepalive. Providing --no-keepalive", + "\t multiple times has no extra effect. Disable it again with", + "\t --keepalive.", + "\n\t Example:", + "\t curl --no-keepalive https://example.com", + "\n\t See also --keepalive-time and --keepalive-cnt.", + "\n --no-npn", + "\t (HTTPS) curl never uses NPN, this option has no effect (added in", + "\t 7.86.0).", + "\n\t Disable the NPN TLS extension. NPN is enabled by default if", + "\t libcurl was built with an SSL library that supports NPN. NPN is", + "\t used by a libcurl that supports HTTP/2 to negotiate HTTP/2 support", + "\t with the server during https sessions. Providing --no-npn multiple", + "\t times has no extra effect. Disable it again with --npn.", + "\n\t Example:", + "\t curl --no-npn https://example.com", + "\n\t --no-npn requires that libcurl is built to support TLS. See also", + "\t --no-alpn and --http2.", + "\n --no-progress-meter", + "\t Option to switch off the progress meter output without muting or", + "\t otherwise affecting warning and informational messages like", + "\t --silent does.", + "\n\t Note that this is the negated option name documented. You can thus", + "\t use --progress-meter to enable the progress meter again. Providing", + "\t --no-progress-meter multiple times has no extra effect. Disable it", + "\t again with --progress-meter.", + "\n\t Example:", + "\t curl --no-progress-meter -o store https://example.com", + "\n\t Added in 7.67.0. See also --verbose and --silent.", + "\n --no-sessionid", + "\t (TLS) Disable curl's use of SSL session-ID caching. By default all", + "\t transfers are done using the cache. Note that while nothing should", + "\t ever get hurt by attempting to reuse SSL session-IDs, there seem", + "\t to be broken SSL implementations in the wild that may require you", + "\t to disable this in order for you to succeed.", + "\n\t Note that this is the negated option name documented. You can thus", + "\t use --sessionid to enforce session-ID caching. Providing", + "\t --no-sessionid multiple times has no extra effect. Disable it", + "\t again with --sessionid.", + "\n\t Example:", + "\t curl --no-sessionid https://example.com", + "\n\t See also --insecure.", + "\n --noproxy ", + "\t Comma-separated list of hosts for which not to use a proxy, if one", + "\t is specified. The only wildcard is a single \"*\" character, which", + "\t matches all hosts, and effectively disables the proxy. Each name", + "\t in this list is matched as either a domain which contains the", + "\t hostname, or the hostname itself. For example, \"local.com\" would", + "\t match \"local.com\", \"local.com:80\", and \"www.local.com\", but not", + "\t \"www.notlocal.com\".", + "\n\t This option overrides the environment variables that disable the", + "\t proxy (\"no_proxy\" and \"NO_PROXY\"). If there is an environment", + "\t variable disabling a proxy, you can set the no proxy list to \"\" to", + "\t override it.", + "\n\t IP addresses specified to this option can be provided using CIDR", + "\t notation (added in 7.86.0): an appended slash and number specifies", + "\t the number of network bits out of the address to use in the", + "\t comparison. For example \"192.168.0.0/16\" would match all addresses", + "\t starting with \"192.168\". If --noproxy is provided several times,", + "\t the last set value is used.", + "\n\t Example:", + "\t curl --noproxy \"www.example\" https://example.com", + "\n\t See also --proxy.", + "\n --ntlm", + "\t (HTTP) Use NTLM authentication. The NTLM authentication method was", + "\t designed by Microsoft and is used by IIS web servers. It is a", + "\t proprietary protocol, reverse-engineered by clever people and", + "\t implemented in curl based on their efforts. This kind of behavior", + "\t should not be endorsed, you should encourage everyone who uses", + "\t NTLM to switch to a public and documented authentication method", + "\t instead, such as Digest.", + "\n\t If you want to enable NTLM for your proxy authentication, then use", + "\t --proxy-ntlm. Providing --ntlm multiple times has no extra effect.", + "\n\t Example:", + "\t curl --ntlm -u user:password https://example.com", + "\n\t --ntlm requires that libcurl is built to support TLS. This option", + "\t is mutually exclusive with --basic, --negotiate, --digest and", + "\t --anyauth. See also --proxy-ntlm.", + "\n --ntlm-wb", + "\t (HTTP) Deprecated option (added in 8.8.0).", + "\n\t Enabled NTLM much in the style --ntlm does, but handed over the", + "\t authentication to a separate executable that was executed when", + "\t needed. Providing --ntlm-wb multiple times has no extra effect.", + "\n\t Example:", + "\t curl --ntlm-wb -u user:password https://example.com", + "\n\t See also --ntlm and --proxy-ntlm.", + "\n --oauth2-bearer ", + "\t (IMAP LDAP POP3 SMTP HTTP) Specify the Bearer Token for OAUTH 2.0", + "\t server authentication. The Bearer Token is used in conjunction", + "\t with the username which can be specified as part of the --url or", + "\t --user options.", + "\n\t The Bearer Token and username are formatted according to RFC 6750.", + "\t If --oauth2-bearer is provided several times, the last set value", + "\t is used.", + "\n\t Example:", + "\t curl --oauth2-bearer \"mF_9.B5f-4.1JqM\" https://example.com", + "\n\t See also --basic, --ntlm and --digest.", + "\n -o, --output ", + "\t Write output to the given file instead of stdout. If you are using", + "\t globbing to fetch multiple documents, you should quote the URL and", + "\t you can use \"#\" followed by a number in the filename. That", + "\t variable is then replaced with the current string for the URL", + "\t being fetched. Like in:", + "\n\t\tcurl \"http://{one,two}.example.com\" -o \"file_#1.txt\"", + "\n\t or use several variables like:", + "\n\t\tcurl \"http://{site,host}.host[1-5].example\" -o \"#1_#2\"", + "\n\t You may use this option as many times as the number of URLs you", + "\t have. For example, if you specify two URLs on the same command", + "\t line, you can use it like this:", + "\n\t\tcurl -o aa example.com -o bb example.net", + "\n\t and the order of the -o options and the URLs does not matter, just", + "\t that the first -o is for the first URL and so on, so the above", + "\t command line can also be written as", + "\n\t\tcurl example.com example.net -o aa -o bb", + "\n\t See also the --create-dirs option to create the local directories", + "\t dynamically. Specifying the output as '-' (a single dash) passes", + "\t the output to stdout.", + "\n\t To suppress response bodies, you can redirect output to /dev/null:", + "\n\t\tcurl example.com -o /dev/null", + "\n\t Or for Windows:", + "\n\t\tcurl example.com -o nul", + "\n\t Specify the filename as single minus to force the output to", + "\t stdout, to override curl's internal binary output in terminal", + "\t prevention:", + "\n\t\tcurl https://example.com/jpeg -o -", + "\n\t --output is associated with a single URL. Use it once per URL when", + "\t you use several URLs in a command line.", + "\n\t Examples:", + "\t curl -o file https://example.com", + "\t curl \"http://{one,two}.example.com\" -o \"file_#1.txt\"", + "\t curl \"http://{site,host}.host[1-5].example\" -o \"#1_#2\"", + "\t curl -o file https://example.com -o file2 https://example.net", + "\n\t See also --remote-name, --remote-name-all and", + "\t --remote-header-name.", + "\n --output-dir ", + "\t Specify the directory in which files should be stored, when", + "\t --remote-name or --output are used.", + "\n\t The given output directory is used for all URLs and output options", + "\t on the command line, up until the first --next.", + "\n\t If the specified target directory does not exist, the operation", + "\t fails unless --create-dirs is also used. If --output-dir is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --output-dir \"tmp\" -O https://example.com", + "\n\t Added in 7.73.0. See also --remote-name and --remote-header-name.", + "\n -Z, --parallel", + "\t Makes curl perform all transfers in parallel as compared to the", + "\t regular serial manner. Parallel transfer means that curl runs up", + "\t to N concurrent transfers simultaneously and if there are more", + "\t than N transfers to handle, it starts new ones when earlier", + "\t transfers finish.", + "\n\t With parallel transfers, the progress meter output is different", + "\t than when doing serial transfers, as it then displays the transfer", + "\t status for multiple transfers in a single line.", + "\n\t The maximum amount of concurrent transfers is set with", + "\t --parallel-max and it defaults to 50.", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. Providing --parallel multiple times has no extra", + "\t effect. Disable it again with --no-parallel.", + "\n\t Example:", + "\t curl --parallel https://example.com -o file1 https://example.com -o file2", + "\n\t Added in 7.66.0. See also --next, --verbose, --parallel-max and", + "\t --parallel-immediate.", + "\n --parallel-immediate", + "\t When doing parallel transfers, this option instructs curl to", + "\t prefer opening up more connections in parallel at once rather than", + "\t waiting to see if new transfers can be added as multiplexed", + "\t streams on another connection.", + "\n\t By default, without this option set, curl prefers to wait a little", + "\t and multiplex new transfers over existing connections. It keeps", + "\t the number of connections low at the expense of risking a slightly", + "\t slower transfer startup.", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. Providing --parallel-immediate multiple times has", + "\t no extra effect. Disable it again with --no-parallel-immediate.", + "\n\t Example:", + "\t curl --parallel-immediate -Z https://example.com -o file1 https://example.com -o file2", + "\n\t Added in 7.68.0. See also --parallel and --parallel-max.", + "\n --parallel-max ", + "\t When asked to do parallel transfers, using --parallel, this option", + "\t controls the maximum amount of transfers to do simultaneously.", + "\n\t The default is 50. 300 is the largest supported value.", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. If --parallel-max is provided several times, the", + "\t last set value is used.", + "\n\t Example:", + "\t curl --parallel-max 100 -Z https://example.com ftp://example.com/", + "\n\t Added in 7.66.0. See also --parallel.", + "\n --pass ", + "\t (SSH TLS) Passphrase for the private key. If --pass is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --pass secret --key file https://example.com", + "\n\t See also --key and --user.", + "\n --path-as-is", + "\t Do not handle sequences of /../ or /./ in the given URL path.", + "\t Normally curl squashes or merges them according to standards but", + "\t with this option set you tell it not to do that. Providing", + "\t --path-as-is multiple times has no extra effect. Disable it again", + "\t with --no-path-as-is.", + "\n\t Example:", + "\t curl --path-as-is https://example.com/../../etc/passwd", + "\n\t See also --request-target.", + "\n --pinnedpubkey ", + "\t (TLS) Use the specified public key file (or hashes) to verify the", + "\t peer. This can be a path to a file which contains a single public", + "\t key in PEM or DER format, or any number of base64 encoded sha256", + "\t hashes preceded by 'sha256//' and separated by ';'.", + "\n\t When negotiating a TLS or SSL connection, the server sends a", + "\t certificate indicating its identity. A public key is extracted", + "\t from this certificate and if it does not exactly match the public", + "\t key provided to this option, curl aborts the connection before", + "\t sending or receiving any data.", + "\n\t This option is independent of option --insecure. If you use both", + "\t options together then the peer is still verified by public key.", + "\n\t PEM/DER support:", + "\n\t OpenSSL and GnuTLS, wolfSSL, mbedTLS , Secure Transport macOS", + "\t 10.7+/iOS 10+, Schannel", + "\n\t sha256 support:", + "\n\t OpenSSL, GnuTLS and wolfSSL, mbedTLS, Secure Transport macOS", + "\t 10.7+/iOS 10+, Schannel", + "\n\t Other SSL backends not supported. If --pinnedpubkey is provided", + "\t several times, the last set value is used.", + "\n\t Examples:", + "\t curl --pinnedpubkey keyfile https://example.com", + "\t curl --pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com", + "\n\t See also --hostpubsha256.", + "\n --post301", + "\t (HTTP) Respect RFC 7231/6.4.2 and do not convert POST requests", + "\t into GET requests when following a 301 redirect. The non-RFC", + "\t behavior is ubiquitous in web browsers, so curl does the", + "\t conversion by default to maintain consistency. However, a server", + "\t may require a POST to remain a POST after such a redirection. This", + "\t option is meaningful only when using --location. Providing", + "\t --post301 multiple times has no extra effect. Disable it again", + "\t with --no-post301.", + "\n\t Example:", + "\t curl --post301 --location -d \"data\" https://example.com", + "\n\t See also --post302, --post303 and --location.", + "\n --post302", + "\t (HTTP) Respect RFC 7231/6.4.3 and do not convert POST requests", + "\t into GET requests when following a 302 redirect. The non-RFC", + "\t behavior is ubiquitous in web browsers, so curl does the", + "\t conversion by default to maintain consistency. However, a server", + "\t may require a POST to remain a POST after such a redirection. This", + "\t option is meaningful only when using --location. Providing", + "\t --post302 multiple times has no extra effect. Disable it again", + "\t with --no-post302.", + "\n\t Example:", + "\t curl --post302 --location -d \"data\" https://example.com", + "\n\t See also --post301, --post303 and --location.", + "\n --post303", + "\t (HTTP) Violate RFC 7231/6.4.4 and do not convert POST requests", + "\t into GET requests when following 303 redirect. A server may", + "\t require a POST to remain a POST after a 303 redirection. This", + "\t option is meaningful only when using --location. Providing", + "\t --post303 multiple times has no extra effect. Disable it again", + "\t with --no-post303.", + "\n\t Example:", + "\t curl --post303 --location -d \"data\" https://example.com", + "\n\t See also --post302, --post301 and --location.", + "\n --preproxy [protocol://]host[:port]", + "\t Use the specified SOCKS proxy before connecting to an HTTP or", + "\t HTTPS --proxy. In such a case curl first connects to the SOCKS", + "\t proxy and then connects (through SOCKS) to the HTTP or HTTPS", + "\t proxy. Hence pre proxy.", + "\n\t The pre proxy string should be specified with a protocol:// prefix", + "\t to specify alternative proxy protocols. Use socks4://, socks4a://,", + "\t socks5:// or socks5h:// to request the specific SOCKS version to", + "\t be used. No protocol specified makes curl default to SOCKS4.", + "\n\t If the port number is not specified in the proxy string, it is", + "\t assumed to be 1080.", + "\n\t User and password that might be provided in the proxy string are", + "\t URL decoded by curl. This allows you to pass in special characters", + "\t such as @ by using %40 or pass in a colon with %3a. If --preproxy", + "\t is provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --preproxy socks5://proxy.example -x http://http.example https://example.com", + "\n\t See also --proxy and --socks5.", + "\n -#, --progress-bar", + "\t Make curl display transfer progress as a simple progress bar", + "\t instead of the standard, more informational, meter.", + "\n\t This progress bar draws a single line of '#' characters across the", + "\t screen and shows a percentage if the transfer size is known. For", + "\t transfers without a known size, there is a space ship (-=o=-) that", + "\t moves back and forth but only while data is being transferred,", + "\t with a set of flying hash sign symbols on top.", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. Providing --progress-bar multiple times has no", + "\t extra effect. Disable it again with --no-progress-bar.", + "\n\t Example:", + "\t curl -# -O https://example.com", + "\n\t See also --styled-output.", + "\n --proto ", + "\t Limit what protocols to allow for transfers. Protocols are", + "\t evaluated left to right, are comma separated, and are each a", + "\t protocol name or 'all', optionally prefixed by zero or more", + "\t modifiers. Available modifiers are:", + "\n\t +", + "\n\t\tPermit this protocol in addition to protocols already", + "\t\tpermitted (this is the default if no modifier is used).", + "\n\t -", + "\n\t\tDeny this protocol, removing it from the list of protocols", + "\t\talready permitted.", + "\n\t =", + "\n\t\tPermit only this protocol (ignoring the list already", + "\t\tpermitted), though subject to later modification by subsequent", + "\t\tentries in the comma separated list. For example: --proto", + "\t\t-ftps uses the default protocols, but disables ftps", + "\n\t\t--proto -all,https,+http only enables http and https", + "\n\t\t--proto =http,https also only enables http and https", + "\n\t\tUnknown and disabled protocols produce a warning. This allows", + "\t\tscripts to safely rely on being able to disable potentially", + "\t\tdangerous protocols, without relying upon support for that", + "\t\tprotocol being built into curl to avoid an error.", + "\n\t\tThis option can be used multiple times, in which case the", + "\t\teffect is the same as concatenating the protocols into one", + "\t\tinstance of the option.", + "\n\t If --proto is provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --proto =http,https,sftp https://example.com", + "\n\t See also --proto-redir and --proto-default.", + "\n --proto-default ", + "\t Use protocol for any provided URL missing a scheme.", + "\n\t An unknown or unsupported protocol causes error", + "\t CURLE_UNSUPPORTED_PROTOCOL.", + "\n\t This option does not change the default proxy protocol (http).", + "\n\t Without this option set, curl guesses protocol based on the", + "\t hostname, see --url for details. If --proto-default is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --proto-default https ftp.example.com", + "\n\t See also --proto and --proto-redir.", + "\n --proto-redir ", + "\t Limit what protocols to allow on redirects. Protocols denied by", + "\t --proto are not overridden by this option. See --proto for how", + "\t protocols are represented.", + "\n\t Example, allow only HTTP and HTTPS on redirect:", + "\n\t\tcurl --proto-redir -all,http,https http://example.com", + "\n\t By default curl only allows HTTP, HTTPS, FTP and FTPS on redirects", + "\t (added in 7.65.2). Specifying all or +all enables all protocols on", + "\t redirects, which is not good for security. If --proto-redir is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --proto-redir =http,https https://example.com", + "\n\t See also --proto.", + "\n -x, --proxy [protocol://]host[:port]", + "\t Use the specified proxy.", + "\n\t The proxy string can be specified with a protocol:// prefix. No", + "\t protocol specified or http:// it is treated as an HTTP proxy. Use", + "\t socks4://, socks4a://, socks5:// or socks5h:// to request a", + "\t specific SOCKS version to be used.", + "\n\t Unix domain sockets are supported for socks proxy. Set localhost", + "\t for the host part. e.g. socks5h://localhost/path/to/socket.sock", + "\n\t HTTPS proxy support works set with the https:// protocol prefix", + "\t for OpenSSL and GnuTLS. It also works for BearSSL, mbedTLS,", + "\t rustls, Schannel, Secure Transport and wolfSSL (added in 7.87.0).", + "\n\t Unrecognized and unsupported proxy protocols cause an error.", + "\t Ancient curl versions ignored unknown schemes and used http://", + "\t instead.", + "\n\t If the port number is not specified in the proxy string, it is", + "\t assumed to be 1080.", + "\n\t This option overrides existing environment variables that set the", + "\t proxy to use. If there is an environment variable setting a proxy,", + "\t you can set proxy to \"\" to override it.", + "\n\t All operations that are performed over an HTTP proxy are", + "\t transparently converted to HTTP. It means that certain protocol", + "\t specific operations might not be available. This is not the case", + "\t if you can tunnel through the proxy, as one with the --proxytunnel", + "\t option.", + "\n\t User and password that might be provided in the proxy string are", + "\t URL decoded by curl. This allows you to pass in special characters", + "\t such as @ by using %40 or pass in a colon with %3a.", + "\n\t The proxy host can be specified the same way as the proxy", + "\t environment variables, including the protocol prefix (http://) and", + "\t the embedded user + password.", + "\n\t When a proxy is used, the active FTP mode as set with --ftp-port,", + "\t cannot be used. If --proxy is provided several times, the last set", + "\t value is used.", + "\n\t Example:", + "\t curl --proxy http://proxy.example https://example.com", + "\n\t See also --socks5 and --proxy-basic.", + "\n --proxy-anyauth", + "\t Automatically pick a suitable authentication method when", + "\t communicating with the given HTTP proxy. This might cause an extra", + "\t request/response round-trip. Providing --proxy-anyauth multiple", + "\t times has no extra effect.", + "\n\t Example:", + "\t curl --proxy-anyauth --proxy-user user:passwd -x proxy https://example.com", + "\n\t See also --proxy, --proxy-basic and --proxy-digest.", + "\n --proxy-basic", + "\t Use HTTP Basic authentication when communicating with the given", + "\t proxy. Use --basic for enabling HTTP Basic with a remote host.", + "\t Basic is the default authentication method curl uses with proxies.", + "\t Providing --proxy-basic multiple times has no extra effect.", + "\n\t Example:", + "\t curl --proxy-basic --proxy-user user:passwd -x proxy https://example.com", + "\n\t See also --proxy, --proxy-anyauth and --proxy-digest.", + "\n --proxy-ca-native", + "\t (TLS) Use the CA store from the native operating system to verify", + "\t the HTTPS proxy. By default, curl uses a CA store provided in a", + "\t single file or directory, but when using this option it interfaces", + "\t the operating system's own vault.", + "\n\t This option works for curl on Windows when built to use OpenSSL,", + "\t wolfSSL (added in 8.3.0) or GnuTLS (added in 8.5.0). When curl on", + "\t Windows is built to use Schannel, this feature is implied and curl", + "\t then only uses the native CA store. Providing --proxy-ca-native", + "\t multiple times has no extra effect. Disable it again with", + "\t --no-proxy-ca-native.", + "\n\t Example:", + "\t curl --proxy-ca-native https://example.com", + "\n\t Added in 8.2.0. See also --cacert, --capath and --insecure.", + "\n --proxy-cacert ", + "\t Use the specified certificate file to verify the HTTPS proxy. The", + "\t file may contain multiple CA certificates. The certificate(s) must", + "\t be in PEM format.", + "\n\t This allows you to use a different trust for the proxy compared to", + "\t the remote server connected to via the proxy.", + "\n\t Equivalent to --cacert but used in HTTPS proxy context. If", + "\t --proxy-cacert is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --proxy-cacert CA-file.txt -x https://proxy https://example.com", + "\n\t See also --proxy-capath, --cacert, --capath and --proxy.", + "\n --proxy-capath ", + "\t Same as --capath but used in HTTPS proxy context.", + "\n\t Use the specified certificate directory to verify the proxy.", + "\t Multiple paths can be provided by separated with colon (\":\") (e.g.", + "\t \"path1:path2:path3\"). The certificates must be in PEM format, and", + "\t if curl is built against OpenSSL, the directory must have been", + "\t processed using the c_rehash utility supplied with OpenSSL. Using", + "\t --proxy-capath can allow OpenSSL-powered curl to make", + "\t SSL-connections much more efficiently than using --proxy-cacert if", + "\t the --proxy-cacert file contains many CA certificates.", + "\n\t If this option is set, the default capath value is ignored. If", + "\t --proxy-capath is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --proxy-capath /local/directory -x https://proxy https://example.com", + "\n\t See also --proxy-cacert, --proxy and --capath.", + "\n --proxy-cert ", + "\t Use the specified client certificate file when communicating with", + "\t an HTTPS proxy. The certificate must be in PKCS#12 format if using", + "\t Secure Transport, or PEM format if using any other engine. If the", + "\t optional password is not specified, it is queried for on the", + "\t terminal. Use --proxy-key to provide the private key.", + "\n\t This option is the equivalent to --cert but used in HTTPS proxy", + "\t context. If --proxy-cert is provided several times, the last set", + "\t value is used.", + "\n\t Example:", + "\t curl --proxy-cert file -x https://proxy https://example.com", + "\n\t See also --proxy, --proxy-key and --proxy-cert-type.", + "\n --proxy-cert-type ", + "\t Set type of the provided client certificate when using HTTPS", + "\t proxy. PEM, DER, ENG and P12 are recognized types.", + "\n\t The default type depends on the TLS backend and is usually PEM,", + "\t however for Secure Transport and Schannel it is P12. If", + "\t --proxy-cert is a pkcs11: URI then ENG is the default type.", + "\n\t Equivalent to --cert-type but used in HTTPS proxy context. If", + "\t --proxy-cert-type is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --proxy-cert-type PEM --proxy-cert file -x https://proxy https://example.com", + "\n\t See also --proxy-cert and --proxy-key.", + "\n --proxy-ciphers ", + "\t Same as --ciphers but used in HTTPS proxy context.", + "\n\t Specifies which ciphers to use in the connection to the HTTPS", + "\t proxy. The list of ciphers must specify valid ciphers. Read up on", + "\t SSL cipher list details on this URL:", + "\n\t https://curl.se/docs/ssl-ciphers.html If --proxy-ciphers is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --proxy-ciphers ECDHE-ECDSA-AES256-CCM8 -x https://proxy https://example.com", + "\n\t See also --ciphers, --curves and --proxy.", + "\n --proxy-crlfile ", + "\t Provide filename for a PEM formatted file with a Certificate", + "\t Revocation List that specifies peer certificates that are", + "\t considered revoked when communicating with an HTTPS proxy.", + "\n\t Equivalent to --crlfile but only used in HTTPS proxy context. If", + "\t --proxy-crlfile is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --proxy-crlfile rejects.txt -x https://proxy https://example.com", + "\n\t See also --crlfile and --proxy.", + "\n --proxy-digest", + "\t Use HTTP Digest authentication when communicating with the given", + "\t proxy. Use --digest for enabling HTTP Digest with a remote host.", + "\t Providing --proxy-digest multiple times has no extra effect.", + "\n\t Example:", + "\t curl --proxy-digest --proxy-user user:passwd -x proxy https://example.com", + "\n\t See also --proxy, --proxy-anyauth and --proxy-basic.", + "\n --proxy-header
", + "\t (HTTP) Extra header to include in the request when sending HTTP to", + "\t a proxy. You may specify any number of extra headers. This is the", + "\t equivalent option to --header but is for proxy communication only", + "\t like in CONNECT requests when you want a separate header sent to", + "\t the proxy to what is sent to the actual remote host.", + "\n\t curl makes sure that each header you add/replace is sent with the", + "\t proper end-of-line marker, you should thus not add that as a part", + "\t of the header content: do not add newlines or carriage returns,", + "\t they only mess things up for you.", + "\n\t Headers specified with this option are not included in requests", + "\t that curl knows are not be sent to a proxy.", + "\n\t This option can take an argument in @filename style, which then", + "\t adds a header for each line in the input file. Using @- makes curl", + "\t read the headers from stdin.", + "\n\t This option can be used multiple times to add/replace/remove", + "\t multiple headers. --proxy-header can be used several times in a", + "\t command line", + "\n\t Examples:", + "\t curl --proxy-header \"X-First-Name: Joe\" -x http://proxy https://example.com", + "\t curl --proxy-header \"User-Agent: surprise\" -x http://proxy https://example.com", + "\t curl --proxy-header \"Host:\" -x http://proxy https://example.com", + "\n\t See also --proxy.", + "\n --proxy-http2", + "\t (HTTP) Negotiate HTTP/2 with an HTTPS proxy. The proxy might still", + "\t only offer HTTP/1 and then curl sticks to using that version.", + "\n\t This has no effect for any other kinds of proxies. Providing", + "\t --proxy-http2 multiple times has no extra effect. Disable it again", + "\t with --no-proxy-http2.", + "\n\t Example:", + "\t curl --proxy-http2 -x proxy https://example.com", + "\n\t --proxy-http2 requires that libcurl is built to support HTTP/2.", + "\t Added in 8.1.0. See also --proxy.", + "\n --proxy-insecure", + "\t Same as --insecure but used in HTTPS proxy context.", + "\n\t Every secure connection curl makes is verified to be secure before", + "\t the transfer takes place. This option makes curl skip the", + "\t verification step with a proxy and proceed without checking.", + "\n\t When this option is not used for a proxy using HTTPS, curl", + "\t verifies the proxy's TLS certificate before it continues: that the", + "\t certificate contains the right name which matches the hostname and", + "\t that the certificate has been signed by a CA certificate present", + "\t in the cert store. See this online resource for further details:", + "\t https://curl.se/docs/sslcerts.html", + "\n\t WARNING: using this option makes the transfer to the proxy", + "\t insecure. Providing --proxy-insecure multiple times has no extra", + "\t effect. Disable it again with --no-proxy-insecure.", + "\n\t Example:", + "\t curl --proxy-insecure -x https://proxy https://example.com", + "\n\t See also --proxy and --insecure.", + "\n --proxy-key ", + "\t Specify the filename for your private key when using client", + "\t certificates with your HTTPS proxy. This option is the equivalent", + "\t to --key but used in HTTPS proxy context. If --proxy-key is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --proxy-key here -x https://proxy https://example.com", + "\n\t See also --proxy-key-type and --proxy.", + "\n --proxy-key-type ", + "\t Specify the private key file type your --proxy-key provided", + "\t private key uses. DER, PEM, and ENG are supported. If not", + "\t specified, PEM is assumed.", + "\n\t Equivalent to --key-type but used in HTTPS proxy context. If", + "\t --proxy-key-type is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --proxy-key-type DER --proxy-key here -x https://proxy https://example.com", + "\n\t See also --proxy-key and --proxy.", + "\n --proxy-negotiate", + "\t Use HTTP Negotiate (SPNEGO) authentication when communicating with", + "\t the given proxy. Use --negotiate for enabling HTTP Negotiate", + "\t (SPNEGO) with a remote host. Providing --proxy-negotiate multiple", + "\t times has no extra effect.", + "\n\t Example:", + "\t curl --proxy-negotiate --proxy-user user:passwd -x proxy https://example.com", + "\n\t See also --proxy-anyauth, --proxy-basic and --proxy-service-name.", + "\n --proxy-ntlm", + "\t Use HTTP NTLM authentication when communicating with the given", + "\t proxy. Use --ntlm for enabling NTLM with a remote host. Providing", + "\t --proxy-ntlm multiple times has no extra effect.", + "\n\t Example:", + "\t curl --proxy-ntlm --proxy-user user:passwd -x http://proxy https://example.com", + "\n\t See also --proxy-negotiate, --proxy-anyauth and --proxy-user.", + "\n --proxy-pass ", + "\t Passphrase for the private key for HTTPS proxy client certificate.", + "\n\t Equivalent to --pass but used in HTTPS proxy context. If", + "\t --proxy-pass is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --proxy-pass secret --proxy-key here -x https://proxy https://example.com", + "\n\t See also --proxy and --proxy-key.", + "\n --proxy-pinnedpubkey ", + "\t (TLS) Use the specified public key file (or hashes) to verify the", + "\t proxy. This can be a path to a file which contains a single public", + "\t key in PEM or DER format, or any number of base64 encoded sha256", + "\t hashes preceded by 'sha256//' and separated by ';'.", + "\n\t When negotiating a TLS or SSL connection, the server sends a", + "\t certificate indicating its identity. A public key is extracted", + "\t from this certificate and if it does not exactly match the public", + "\t key provided to this option, curl aborts the connection before", + "\t sending or receiving any data. If --proxy-pinnedpubkey is provided", + "\t several times, the last set value is used.", + "\n\t Examples:", + "\t curl --proxy-pinnedpubkey keyfile https://example.com", + "\t curl --proxy-pinnedpubkey 'sha256//ce118b51897f4452dc' https://example.com", + "\n\t See also --pinnedpubkey and --proxy.", + "\n --proxy-service-name ", + "\t Set the service name for SPNEGO when doing proxy authentication.", + "\t If --proxy-service-name is provided several times, the last set", + "\t value is used.", + "\n\t Example:", + "\t curl --proxy-service-name \"shrubbery\" -x proxy https://example.com", + "\n\t See also --service-name, --proxy and --proxy-negotiate.", + "\n --proxy-ssl-allow-beast", + "\t Do not work around a security flaw in the TLS1.0 protocol known as", + "\t BEAST when communicating to an HTTPS proxy. If this option is not", + "\t used, the TLS layer may use workarounds known to cause", + "\t interoperability problems with some older server implementations.", + "\n\t This option only changes how curl does TLS 1.0 with an HTTPS proxy", + "\t and has no effect on later TLS versions.", + "\n\t WARNING: this option loosens the TLS security, and by using this", + "\t flag you ask for exactly that.", + "\n\t Equivalent to --ssl-allow-beast but used in HTTPS proxy context.", + "\t Providing --proxy-ssl-allow-beast multiple times has no extra", + "\t effect. Disable it again with --no-proxy-ssl-allow-beast.", + "\n\t Example:", + "\t curl --proxy-ssl-allow-beast -x https://proxy https://example.com", + "\n\t See also --ssl-allow-beast and --proxy.", + "\n --proxy-ssl-auto-client-cert", + "\t Same as --ssl-auto-client-cert but used in HTTPS proxy context.", + "\n\t This is only supported by Schannel. Providing", + "\t --proxy-ssl-auto-client-cert multiple times has no extra effect.", + "\t Disable it again with --no-proxy-ssl-auto-client-cert.", + "\n\t Example:", + "\t curl --proxy-ssl-auto-client-cert -x https://proxy https://example.com", + "\n\t Added in 7.77.0. See also --ssl-auto-client-cert and --proxy.", + "\n --proxy-tls13-ciphers ", + "\t (TLS) Specify which cipher suites to use in the connection to your", + "\t HTTPS proxy when it negotiates TLS 1.3. The list of ciphers suites", + "\t must specify valid ciphers. Read up on TLS 1.3 cipher suite", + "\t details on this URL:", + "\n\t https://curl.se/docs/ssl-ciphers.html", + "\n\t This option is currently used only when curl is built to use", + "\t OpenSSL 1.1.1 or later. If you are using a different SSL backend", + "\t you can try setting TLS 1.3 cipher suites by using the", + "\t --proxy-ciphers option. If --proxy-tls13-ciphers is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --proxy-tls13-ciphers TLS_AES_128_GCM_SHA256 -x proxy https://example.com", + "\n\t Added in 7.61.0. See also --tls13-ciphers, --curves and", + "\t --proxy-ciphers.", + "\n --proxy-tlsauthtype ", + "\t Set TLS authentication type with HTTPS proxy. The only supported", + "\t option is \"SRP\", for TLS-SRP (RFC 5054). This option works only if", + "\t the underlying libcurl is built with TLS-SRP support.", + "\n\t Equivalent to --tlsauthtype but used in HTTPS proxy context. If", + "\t --proxy-tlsauthtype is provided several times, the last set value", + "\t is used.", + "\n\t Example:", + "\t curl --proxy-tlsauthtype SRP -x https://proxy https://example.com", + "\n\t See also --proxy, --proxy-tlsuser and --proxy-tlspassword.", + "\n --proxy-tlspassword ", + "\t Set password to use with the TLS authentication method specified", + "\t with --proxy-tlsauthtype when using HTTPS proxy. Requires that", + "\t --proxy-tlsuser is set.", + "\n\t This option does not work with TLS 1.3.", + "\n\t Equivalent to --tlspassword but used in HTTPS proxy context. If", + "\t --proxy-tlspassword is provided several times, the last set value", + "\t is used.", + "\n\t Example:", + "\t curl --proxy-tlspassword passwd -x https://proxy https://example.com", + "\n\t See also --proxy and --proxy-tlsuser.", + "\n --proxy-tlsuser ", + "\t Set username for use for HTTPS proxy with the TLS authentication", + "\t method specified with --proxy-tlsauthtype. Requires that", + "\t --proxy-tlspassword also is set.", + "\n\t This option does not work with TLS 1.3. If --proxy-tlsuser is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --proxy-tlsuser smith -x https://proxy https://example.com", + "\n\t See also --proxy and --proxy-tlspassword.", + "\n --proxy-tlsv1", + "\t Use at least TLS version 1.x when negotiating with an HTTPS proxy.", + "\t That means TLS version 1.0 or higher", + "\n\t Equivalent to --tlsv1 but for an HTTPS proxy context. Providing", + "\t --proxy-tlsv1 multiple times has no extra effect.", + "\n\t Example:", + "\t curl --proxy-tlsv1 -x https://proxy https://example.com", + "\n\t See also --proxy.", + "\n -U, --proxy-user ", + "\t Specify the username and password to use for proxy authentication.", + "\n\t If you use a Windows SSPI-enabled curl binary and do either", + "\t Negotiate or NTLM authentication then you can tell curl to select", + "\t the username and password from your environment by specifying a", + "\t single colon with this option: \"-U :\".", + "\n\t On systems where it works, curl hides the given option argument", + "\t from process listings. This is not enough to protect credentials", + "\t from possibly getting seen by other users on the same system as", + "\t they still are visible for a moment before cleared. Such sensitive", + "\t data should be retrieved from a file instead or similar and never", + "\t used in clear text in a command line. If --proxy-user is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --proxy-user smith:secret -x proxy https://example.com", + "\n\t See also --proxy-pass.", + "\n --proxy1.0 ", + "\t Use the specified HTTP 1.0 proxy. If the port number is not", + "\t specified, it is assumed at port 1080.", + "\n\t The only difference between this and the HTTP proxy option", + "\t --proxy, is that attempts to use CONNECT through the proxy", + "\t specifies an HTTP 1.0 protocol instead of the default HTTP 1.1.", + "\t Providing --proxy1.0 multiple times has no extra effect.", + "\n\t Example:", + "\t curl --proxy1.0 http://proxy https://example.com", + "\n\t See also --proxy, --socks5 and --preproxy.", + "\n -p, --proxytunnel", + "\t When an HTTP proxy is used --proxy, this option makes curl tunnel", + "\t the traffic through the proxy. The tunnel approach is made with", + "\t the HTTP proxy CONNECT request and requires that the proxy allows", + "\t direct connect to the remote port number curl wants to tunnel", + "\t through to.", + "\n\t To suppress proxy CONNECT response headers when curl is set to", + "\t output headers use --suppress-connect-headers. Providing", + "\t --proxytunnel multiple times has no extra effect. Disable it again", + "\t with --no-proxytunnel.", + "\n\t Example:", + "\t curl --proxytunnel -x http://proxy https://example.com", + "\n\t See also --proxy.", + "\n --pubkey ", + "\t (SFTP SCP) Public key filename. Allows you to provide your public", + "\t key in this separate file.", + "\n\t curl attempts to automatically extract the public key from the", + "\t private key file, so passing this option is generally not", + "\t required. Note that this public key extraction requires libcurl to", + "\t be linked against a copy of libssh2 1.2.8 or higher that is itself", + "\t linked against OpenSSL. If --pubkey is provided several times, the", + "\t last set value is used.", + "\n\t Example:", + "\t curl --pubkey file.pub sftp://example.com/", + "\n\t See also --pass.", + "\n -Q, --quote ", + "\t (FTP SFTP) Send an arbitrary command to the remote FTP or SFTP", + "\t server. Quote commands are sent BEFORE the transfer takes place", + "\t (just after the initial PWD command in an FTP transfer, to be", + "\t exact). To make commands take place after a successful transfer,", + "\t prefix them with a dash '-'.", + "\n\t (FTP only) To make commands be sent after curl has changed the", + "\t working directory, just before the file transfer command(s),", + "\t prefix the command with a '+'. This is not performed when a", + "\t directory listing is performed.", + "\n\t You may specify any number of commands.", + "\n\t By default curl stops at first failure. To make curl continue even", + "\t if the command fails, prefix the command with an asterisk (*).", + "\t Otherwise, if the server returns failure for one of the commands,", + "\t the entire operation is aborted.", + "\n\t You must send syntactically correct FTP commands as RFC 959", + "\t defines to FTP servers, or one of the commands listed below to", + "\t SFTP servers.", + "\n\t SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP", + "\t quote commands itself before sending them to the server. Filenames", + "\t may be quoted shell-style to embed spaces or special characters.", + "\t Following is the list of all supported SFTP quote commands:", + "\n\t atime date file", + "\n\t\tThe atime command sets the last access time of the file named", + "\t\tby the file operand. The date expression can be all sorts of", + "\t\tdate strings, see the curl_getdate(3) man page for date", + "\t\texpression details. (Added in 7.73.0)", + "\n\t chgrp group file", + "\n\t\tThe chgrp command sets the group ID of the file named by the", + "\t\tfile operand to the group ID specified by the group operand.", + "\t\tThe group operand is a decimal integer group ID.", + "\n\t chmod mode file", + "\n\t\tThe chmod command modifies the file mode bits of the specified", + "\t\tfile. The mode operand is an octal integer mode number.", + "\n\t chown user file", + "\n\t\tThe chown command sets the owner of the file named by the file", + "\t\toperand to the user ID specified by the user operand. The user", + "\t\toperand is a decimal integer user ID.", + "\n\t ln source_file target_file", + "\n\t\tThe ln and symlink commands create a symbolic link at the", + "\t\ttarget_file location pointing to the source_file location.", + "\n\t mkdir directory_name", + "\n\t\tThe mkdir command creates the directory named by the", + "\t\tdirectory_name operand.", + "\n\t mtime date file", + "\n\t\tThe mtime command sets the last modification time of the file", + "\t\tnamed by the file operand. The date expression can be all", + "\t\tsorts of date strings, see the curl_getdate(3) man page for", + "\t\tdate expression details. (Added in 7.73.0)", + "\n\t pwd", + "\n\t\tThe pwd command returns the absolute path name of the current", + "\t\tworking directory.", + "\n\t rename source target", + "\n\t\tThe rename command renames the file or directory named by the", + "\t\tsource operand to the destination path named by the target", + "\t\toperand.", + "\n\t rm file", + "\n\t\tThe rm command removes the file specified by the file operand.", + "\n\t rmdir directory", + "\n\t\tThe rmdir command removes the directory entry specified by the", + "\t\tdirectory operand, provided it is empty.", + "\n\t symlink source_file target_file", + "\n\t\tSee ln.", + "\n\t --quote can be used several times in a command line", + "\n\t Example:", + "\t curl --quote \"DELE file\" ftp://example.com/foo", + "\n\t See also --request.", + "\n --random-file ", + "\t Deprecated option. This option is ignored (added in 7.84.0). Prior", + "\t to that it only had an effect on curl if built to use old versions", + "\t of OpenSSL.", + "\n\t Specify the path name to file containing random data. The data may", + "\t be used to seed the random engine for SSL connections. If", + "\t --random-file is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --random-file rubbish https://example.com", + "\n\t See also --egd-file.", + "\n -r, --range ", + "\t (HTTP FTP SFTP FILE) Retrieve a byte range (i.e. a partial", + "\t document) from an HTTP/1.1, FTP or SFTP server or a local FILE.", + "\t Ranges can be specified in a number of ways.", + "\n\t 0-499", + "\n\t\tspecifies the first 500 bytes", + "\n\t 500-999", + "\n\t\tspecifies the second 500 bytes", + "\n\t -500", + "\n\t\tspecifies the last 500 bytes", + "\n\t 9500-", + "\n\t\tspecifies the bytes from offset 9500 and forward", + "\n\t 0-0,-1", + "\n\t\tspecifies the first and last byte only(*)(HTTP)", + "\n\t 100-199,500-599", + "\n\t\tspecifies two separate 100-byte ranges(*) (HTTP) (*) = NOTE", + "\t\tthat these make the server reply with a multipart response,", + "\t\twhich is returned as-is by curl! Parsing or otherwise", + "\t\ttransforming this response is the responsibility of the", + "\t\tcaller.", + "\n\t\tOnly digit characters (0-9) are valid in the 'start' and", + "\t\t'stop' fields of the 'start-stop' range syntax. If a non-digit", + "\t\tcharacter is given in the range, the server's response is", + "\t\tunspecified, depending on the server's configuration.", + "\n\t\tMany HTTP/1.1 servers do not have this feature enabled, so", + "\t\tthat when you attempt to get a range, curl instead gets the", + "\t\twhole document.", + "\n\t\tFTP and SFTP range downloads only support the simple", + "\t\t'start-stop' syntax (optionally with one of the numbers", + "\t\tomitted). FTP use depends on the extended FTP command SIZE.", + "\n\t If --range is provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --range 22-44 https://example.com", + "\n\t See also --continue-at and --append.", + "\n --rate ", + "\t Specify the maximum transfer frequency you allow curl to use - in", + "\t number of transfer starts per time unit (sometimes called request", + "\t rate). Without this option, curl starts the next transfer as fast", + "\t as possible.", + "\n\t If given several URLs and a transfer completes faster than the", + "\t allowed rate, curl waits until the next transfer is started to", + "\t maintain the requested rate. This option has no effect when", + "\t --parallel is used.", + "\n\t The request rate is provided as \"N/U\" where N is an integer number", + "\t and U is a time unit. Supported units are 's' (second), 'm'", + "\t (minute), 'h' (hour) and 'd' /(day, as in a 24 hour unit). The", + "\t default time unit, if no \"/U\" is provided, is number of transfers", + "\t per hour.", + "\n\t If curl is told to allow 10 requests per minute, it does not start", + "\t the next request until 6 seconds have elapsed since the previous", + "\t transfer was started.", + "\n\t This function uses millisecond resolution. If the allowed", + "\t frequency is set more than 1000 per second, it instead runs", + "\t unrestricted.", + "\n\t When retrying transfers, enabled with --retry, the separate retry", + "\t delay logic is used and not this setting.", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. If --rate is provided several times, the last set", + "\t value is used.", + "\n\t Examples:", + "\t curl --rate 2/s https://example.com ...", + "\t curl --rate 3/h https://example.com ...", + "\t curl --rate 14/m https://example.com ...", + "\n\t Added in 7.84.0. See also --limit-rate and --retry-delay.", + "\n --raw", + "\t (HTTP) When used, it disables all internal HTTP decoding of", + "\t content or transfer encodings and instead makes them passed on", + "\t unaltered, raw. Providing --raw multiple times has no extra", + "\t effect. Disable it again with --no-raw.", + "\n\t Example:", + "\t curl --raw https://example.com", + "\n\t See also --tr-encoding.", + "\n -e, --referer ", + "\t (HTTP) Set the referrer URL in the HTTP request. This can also be", + "\t set with the --header flag of course. When used with --location", + "\t you can append \";auto\"\" to the --referer URL to make curl", + "\t automatically set the previous URL when it follows a Location:", + "\t header. The \";auto\" string can be used alone, even if you do not", + "\t set an initial --referer. If --referer is provided several times,", + "\t the last set value is used.", + "\n\t Examples:", + "\t curl --referer \"https://fake.example\" https://example.com", + "\t curl --referer \"https://fake.example;auto\" -L https://example.com", + "\t curl --referer \";auto\" -L https://example.com", + "\n\t See also --user-agent and --header.", + "\n -J, --remote-header-name", + "\t (HTTP) Tell the --remote-name option to use the server-specified", + "\t Content-Disposition filename instead of extracting a filename from", + "\t the URL. If the server-provided filename contains a path, that is", + "\t stripped off before the filename is used.", + "\n\t The file is saved in the current directory, or in the directory", + "\t specified with --output-dir.", + "\n\t If the server specifies a filename and a file with that name", + "\t already exists in the destination directory, it is not overwritten", + "\t and an error occurs - unless you allow it by using the --clobber", + "\t option. If the server does not specify a filename then this option", + "\t has no effect.", + "\n\t There is no attempt to decode %-sequences (yet) in the provided", + "\t filename, so this option may provide you with rather unexpected", + "\t filenames.", + "\n\t This feature uses the name from the \"filename\" field, it does not", + "\t yet support the \"filename*\" field (filenames with explicit", + "\t character sets).", + "\n\t WARNING: Exercise judicious use of this option, especially on", + "\t Windows. A rogue server could send you the name of a DLL or other", + "\t file that could be loaded automatically by Windows or some third", + "\t party software. Providing --remote-header-name multiple times has", + "\t no extra effect. Disable it again with --no-remote-header-name.", + "\n\t Example:", + "\t curl -OJ https://example.com/file", + "\n\t See also --remote-name.", + "\n -O, --remote-name", + "\t Write output to a local file named like the remote file we get.", + "\t (Only the file part of the remote file is used, the path is cut", + "\t off.)", + "\n\t The file is saved in the current working directory. If you want", + "\t the file saved in a different directory, make sure you change the", + "\t current working directory before invoking curl with this option or", + "\t use --output-dir.", + "\n\t The remote filename to use for saving is extracted from the given", + "\t URL, nothing else, and if it already exists it is overwritten. If", + "\t you want the server to be able to choose the filename refer to", + "\t --remote-header-name which can be used in addition to this option.", + "\t If the server chooses a filename and that name already exists it", + "\t is not overwritten.", + "\n\t There is no URL decoding done on the filename. If it has %20 or", + "\t other URL encoded parts of the name, they end up as-is as", + "\t filename.", + "\n\t You may use this option as many times as the number of URLs you", + "\t have. --remote-name is associated with a single URL. Use it once", + "\t per URL when you use several URLs in a command line.", + "\n\t Examples:", + "\t curl -O https://example.com/filename", + "\t curl -O https://example.com/filename -O https://example.com/file2", + "\n\t See also --remote-name-all, --output-dir and --remote-header-name.", + "\n --remote-name-all", + "\t Change the default action for all given URLs to be dealt with as", + "\t if --remote-name were used for each one. If you want to disable", + "\t that for a specific URL after --remote-name-all has been used, you", + "\t must use \"-o -\" or --no-remote-name. Providing --remote-name-all", + "\t multiple times has no extra effect. Disable it again with", + "\t --no-remote-name-all.", + "\n\t Example:", + "\t curl --remote-name-all ftp://example.com/file1 ftp://example.com/file2", + "\n\t See also --remote-name.", + "\n -R, --remote-time", + "\t Makes curl attempt to figure out the timestamp of the remote file", + "\t that is getting downloaded, and if that is available make the", + "\t local file get that same timestamp. Providing --remote-time", + "\t multiple times has no extra effect. Disable it again with", + "\t --no-remote-time.", + "\n\t Example:", + "\t curl --remote-time -o foo https://example.com", + "\n\t See also --remote-name and --time-cond.", + "\n --remove-on-error", + "\t Remove output file if an error occurs. If curl returns an error", + "\t when told to save output in a local file. This prevents curl from", + "\t leaving a partial file in the case of an error during transfer.", + "\n\t If the output is not a regular file, this option has no effect.", + "\t Providing --remove-on-error multiple times has no extra effect.", + "\t Disable it again with --no-remove-on-error.", + "\n\t Example:", + "\t curl --remove-on-error -o output https://example.com", + "\n\t Added in 7.83.0. See also --fail.", + "\n -X, --request ", + "\t Change the method to use when starting the transfer.", + "\n\t curl passes on the verbatim string you give it in the request", + "\t without any filter or other safe guards. That includes white space", + "\t and control characters.", + "\n\t HTTP", + "\n\t\tSpecifies a custom request method to use when communicating", + "\t\twith the HTTP server. The specified request method is used", + "\t\tinstead of the method otherwise used (which defaults to GET).", + "\t\tRead the HTTP 1.1 specification for details and explanations.", + "\t\tCommon additional HTTP requests include PUT and DELETE, while", + "\t\trelated technologies like WebDAV offers PROPFIND, COPY, MOVE", + "\t\tand more.", + "\n\t\tNormally you do not need this option. All sorts of GET, HEAD,", + "\t\tPOST and PUT requests are rather invoked by using dedicated", + "\t\tcommand line options.", + "\n\t\tThis option only changes the actual word used in the HTTP", + "\t\trequest, it does not alter the way curl behaves. For example", + "\t\tif you want to make a proper HEAD request, using -X HEAD does", + "\t\tnot suffice. You need to use the --head option.", + "\n\t\tThe method string you set with --request is used for all", + "\t\trequests, which if you for example use --location may cause", + "\t\tunintended side-effects when curl does not change request", + "\t\tmethod according to the HTTP 30x response codes - and similar.", + "\n\t FTP", + "\n\t\tSpecifies a custom FTP command to use instead of LIST when", + "\t\tdoing file lists with FTP.", + "\n\t POP3", + "\n\t\tSpecifies a custom POP3 command to use instead of LIST or", + "\t\tRETR.", + "\n\t IMAP", + "\n\t\tSpecifies a custom IMAP command to use instead of LIST.", + "\n\t SMTP", + "\n\t\tSpecifies a custom SMTP command to use instead of HELP or", + "\t\tVRFY.", + "\n\t If --request is provided several times, the last set value is", + "\t used.", + "\n\t Examples:", + "\t curl -X \"DELETE\" https://example.com", + "\t curl -X NLST ftp://example.com/", + "\n\t See also --request-target.", + "\n --request-target ", + "\t (HTTP) Use an alternative target (path) instead of using the path", + "\t as provided in the URL. Particularly useful when wanting to issue", + "\t HTTP requests without leading slash or other data that does not", + "\t follow the regular URL pattern, like \"OPTIONS *\".", + "\n\t curl passes on the verbatim string you give it its the request", + "\t without any filter or other safe guards. That includes white space", + "\t and control characters. If --request-target is provided several", + "\t times, the last set value is used.", + "\n\t Example:", + "\t curl --request-target \"*\" -X OPTIONS https://example.com", + "\n\t See also --request.", + "\n --resolve <[+]host:port:addr[,addr]...>", + "\t Provide a custom address for a specific host and port pair. Using", + "\t this, you can make the curl requests(s) use a specified address", + "\t and prevent the otherwise normally resolved address to be used.", + "\t Consider it a sort of /etc/hosts alternative provided on the", + "\t command line. The port number should be the number used for the", + "\t specific protocol the host is used for. It means you need several", + "\t entries if you want to provide address for the same host but", + "\t different ports.", + "\n\t By specifying \"*\" as host you can tell curl to resolve any host", + "\t and specific port pair to the specified address. Wildcard is", + "\t resolved last so any --resolve with a specific host and port is", + "\t used first.", + "\n\t The provided address set by this option is used even if --ipv4 or", + "\t --ipv6 is set to make curl use another IP version.", + "\n\t By prefixing the host with a '+' you can make the entry time out", + "\t after curl's default timeout (1 minute). Note that this only makes", + "\t sense for long running parallel transfers with a lot of files. In", + "\t such cases, if this option is used curl tries to resolve the host", + "\t as it normally would once the timeout has expired.", + "\n\t To redirect connects from a specific hostname or any hostname,", + "\t independently of port number, consider the --connect-to option.", + "\n\t Support for resolving with wildcard was added in 7.64.0.", + "\n\t Support for the '+' prefix was added in 7.75.0. --resolve can be", + "\t used several times in a command line", + "\n\t Example:", + "\t curl --resolve example.com:443:127.0.0.1 https://example.com", + "\n\t See also --connect-to and --alt-svc.", + "\n --retry ", + "\t If a transient error is returned when curl tries to perform a", + "\t transfer, it retries this number of times before giving up.", + "\t Setting the number to 0 makes curl do no retries (which is the", + "\t default). Transient error means either: a timeout, an FTP 4xx", + "\t response code or an HTTP 408, 429, 500, 502, 503 or 504 response", + "\t code.", + "\n\t When curl is about to retry a transfer, it first waits one second", + "\t and then for all forthcoming retries it doubles the waiting time", + "\t until it reaches 10 minutes which then remains delay between the", + "\t rest of the retries. By using --retry-delay you disable this", + "\t exponential backoff algorithm. See also --retry-max-time to limit", + "\t the total time allowed for retries.", + "\n\t curl complies with the Retry-After: response header if one was", + "\t present to know when to issue the next retry (added in 7.66.0). If", + "\t --retry is provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --retry 7 https://example.com", + "\n\t See also --retry-max-time.", + "\n --retry-all-errors", + "\t Retry on any error. This option is used together with --retry.", + "\n\t This option is the \"sledgehammer\" of retrying. Do not use this", + "\t option by default (for example in your curlrc), there may be", + "\t unintended consequences such as sending or receiving duplicate", + "\t data. Do not use with redirected input or output. You might be", + "\t better off handling your unique problems in a shell script. Please", + "\t read the example below.", + "\n\t WARNING: For server compatibility curl attempts to retry failed", + "\t flaky transfers as close as possible to how they were started, but", + "\t this is not possible with redirected input or output. For example,", + "\t before retrying it removes output data from a failed partial", + "\t transfer that was written to an output file. However this is not", + "\t true of data redirected to a | pipe or > file, which are not", + "\t reset. We strongly suggest you do not parse or record output via", + "\t redirect in combination with this option, since you may receive", + "\t duplicate data.", + "\n\t By default curl does not return error for transfers with an HTTP", + "\t response code that indicates an HTTP error, if the transfer was", + "\t successful. For example, if a server replies 404 Not Found and the", + "\t reply is fully received then that is not an error. When --retry is", + "\t used then curl retries on some HTTP response codes that indicate", + "\t transient HTTP errors, but that does not include most 4xx response", + "\t codes such as 404. If you want to retry on all response codes that", + "\t indicate HTTP errors (4xx and 5xx) then combine with --fail.", + "\t Providing --retry-all-errors multiple times has no extra effect.", + "\t Disable it again with --no-retry-all-errors.", + "\n\t Example:", + "\t curl --retry 5 --retry-all-errors https://example.com", + "\n\t Added in 7.71.0. See also --retry.", + "\n --retry-connrefused", + "\t In addition to the other conditions, consider ECONNREFUSED as a", + "\t transient error too for --retry. This option is used together with", + "\t --retry. Providing --retry-connrefused multiple times has no extra", + "\t effect. Disable it again with --no-retry-connrefused.", + "\n\t Example:", + "\t curl --retry-connrefused --retry 7 https://example.com", + "\n\t See also --retry and --retry-all-errors.", + "\n --retry-delay ", + "\t Make curl sleep this amount of time before each retry when a", + "\t transfer has failed with a transient error (it changes the default", + "\t backoff time algorithm between retries). This option is only", + "\t interesting if --retry is also used. Setting this delay to zero", + "\t makes curl use the default backoff time. If --retry-delay is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --retry-delay 5 --retry 7 https://example.com", + "\n\t See also --retry.", + "\n --retry-max-time ", + "\t The retry timer is reset before the first transfer attempt.", + "\t Retries are done as usual (see --retry) as long as the timer has", + "\t not reached this given limit. Notice that if the timer has not", + "\t reached the limit, the request is made and while performing, it", + "\t may take longer than this given time period. To limit a single", + "\t request's maximum time, use --max-time. Set this option to zero to", + "\t not timeout retries. If --retry-max-time is provided several", + "\t times, the last set value is used.", + "\n\t Example:", + "\t curl --retry-max-time 30 --retry 10 https://example.com", + "\n\t See also --retry.", + "\n --sasl-authzid ", + "\t Use this authorization identity (authzid), during SASL PLAIN", + "\t authentication, in addition to the authentication identity", + "\t (authcid) as specified by --user.", + "\n\t If the option is not specified, the server derives the authzid", + "\t from the authcid, but if specified, and depending on the server", + "\t implementation, it may be used to access another user's inbox,", + "\t that the user has been granted access to, or a shared mailbox for", + "\t example. If --sasl-authzid is provided several times, the last set", + "\t value is used.", + "\n\t Example:", + "\t curl --sasl-authzid zid imap://example.com/", + "\n\t Added in 7.66.0. See also --login-options.", + "\n --sasl-ir", + "\t Enable initial response in SASL authentication. Providing", + "\t --sasl-ir multiple times has no extra effect. Disable it again", + "\t with --no-sasl-ir.", + "\n\t Example:", + "\t curl --sasl-ir imap://example.com/", + "\n\t See also --sasl-authzid.", + "\n --service-name ", + "\t Set the service name for SPNEGO. If --service-name is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --service-name sockd/server https://example.com", + "\n\t See also --negotiate and --proxy-service-name.", + "\n -S, --show-error", + "\t When used with --silent, it makes curl show an error message if it", + "\t fails.", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. Providing --show-error multiple times has no extra", + "\t effect. Disable it again with --no-show-error.", + "\n\t Example:", + "\t curl --show-error --silent https://example.com", + "\n\t See also --no-progress-meter.", + "\n -s, --silent", + "\t Silent or quiet mode. Do not show progress meter or error", + "\t messages. Makes Curl mute. It still outputs the data you ask for,", + "\t potentially even to the terminal/stdout unless you redirect it.", + "\n\t Use --show-error in addition to this option to disable progress", + "\t meter but still show error messages. Providing --silent multiple", + "\t times has no extra effect. Disable it again with --no-silent.", + "\n\t Example:", + "\t curl -s https://example.com", + "\n\t See also --verbose, --stderr and --no-progress-meter.", + "\n --socks4 ", + "\t Use the specified SOCKS4 proxy. If the port number is not", + "\t specified, it is assumed at port 1080. Using this socket type make", + "\t curl resolve the hostname and passing the address on to the proxy.", + "\n\t To specify proxy on a unix domain socket, use localhost for host,", + "\t e.g. \"socks4://localhost/path/to/socket.sock\"", + "\n\t This option overrides any previous use of --proxy, as they are", + "\t mutually exclusive.", + "\n\t This option is superfluous since you can specify a socks4 proxy", + "\t with --proxy using a socks4:// protocol prefix.", + "\n\t --preproxy can be used to specify a SOCKS proxy at the same time", + "\t proxy is used with an HTTP/HTTPS proxy. In such a case, curl first", + "\t connects to the SOCKS proxy and then connects (through SOCKS) to", + "\t the HTTP or HTTPS proxy. If --socks4 is provided several times,", + "\t the last set value is used.", + "\n\t Example:", + "\t curl --socks4 hostname:4096 https://example.com", + "\n\t See also --socks4a, --socks5 and --socks5-hostname.", + "\n --socks4a ", + "\t Use the specified SOCKS4a proxy. If the port number is not", + "\t specified, it is assumed at port 1080. This asks the proxy to", + "\t resolve the hostname.", + "\n\t To specify proxy on a unix domain socket, use localhost for host,", + "\t e.g. \"socks4a://localhost/path/to/socket.sock\"", + "\n\t This option overrides any previous use of --proxy, as they are", + "\t mutually exclusive.", + "\n\t This option is superfluous since you can specify a socks4a proxy", + "\t with --proxy using a socks4a:// protocol prefix.", + "\n\t --preproxy can be used to specify a SOCKS proxy at the same time", + "\t --proxy is used with an HTTP/HTTPS proxy. In such a case, curl", + "\t first connects to the SOCKS proxy and then connects (through", + "\t SOCKS) to the HTTP or HTTPS proxy. If --socks4a is provided", + "\t several times, the last set value is used.", + "\n\t Example:", + "\t curl --socks4a hostname:4096 https://example.com", + "\n\t See also --socks4, --socks5 and --socks5-hostname.", + "\n --socks5 ", + "\t Use the specified SOCKS5 proxy - but resolve the hostname locally.", + "\t If the port number is not specified, it is assumed at port 1080.", + "\n\t To specify proxy on a unix domain socket, use localhost for host,", + "\t e.g. \"socks5://localhost/path/to/socket.sock\"", + "\n\t This option overrides any previous use of --proxy, as they are", + "\t mutually exclusive.", + "\n\t This option is superfluous since you can specify a socks5 proxy", + "\t with --proxy using a socks5:// protocol prefix.", + "\n\t --preproxy can be used to specify a SOCKS proxy at the same time", + "\t --proxy is used with an HTTP/HTTPS proxy. In such a case, curl", + "\t first connects to the SOCKS proxy and then connects (through", + "\t SOCKS) to the HTTP or HTTPS proxy.", + "\n\t This option does not work with FTPS or LDAP. If --socks5 is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --socks5 proxy.example:7000 https://example.com", + "\n\t See also --socks5-hostname and --socks4a.", + "\n --socks5-basic", + "\t Use username/password authentication when connecting to a SOCKS5", + "\t proxy. The username/password authentication is enabled by default.", + "\t Use --socks5-gssapi to force GSS-API authentication to SOCKS5", + "\t proxies. Providing --socks5-basic multiple times has no extra", + "\t effect.", + "\n\t Example:", + "\t curl --socks5-basic --socks5 hostname:4096 https://example.com", + "\n\t See also --socks5.", + "\n --socks5-gssapi", + "\t Use GSS-API authentication when connecting to a SOCKS5 proxy. The", + "\t GSS-API authentication is enabled by default (if curl is compiled", + "\t with GSS-API support). Use --socks5-basic to force", + "\t username/password authentication to SOCKS5 proxies. Providing", + "\t --socks5-gssapi multiple times has no extra effect. Disable it", + "\t again with --no-socks5-gssapi.", + "\n\t Example:", + "\t curl --socks5-gssapi --socks5 hostname:4096 https://example.com", + "\n\t See also --socks5.", + "\n --socks5-gssapi-nec", + "\t As part of the GSS-API negotiation a protection mode is", + "\t negotiated. RFC 1961 says in section 4.3/4.4 it should be", + "\t protected, but the NEC reference implementation does not. The", + "\t option --socks5-gssapi-nec allows the unprotected exchange of the", + "\t protection mode negotiation. Providing --socks5-gssapi-nec", + "\t multiple times has no extra effect. Disable it again with", + "\t --no-socks5-gssapi-nec.", + "\n\t Example:", + "\t curl --socks5-gssapi-nec --socks5 hostname:4096 https://example.com", + "\n\t See also --socks5.", + "\n --socks5-gssapi-service ", + "\t Set the service name for a socks server. Default is", + "\t rcmd/server-fqdn. If --socks5-gssapi-service is provided several", + "\t times, the last set value is used.", + "\n\t Example:", + "\t curl --socks5-gssapi-service sockd --socks5 hostname:4096 https://example.com", + "\n\t See also --socks5.", + "\n --socks5-hostname ", + "\t Use the specified SOCKS5 proxy (and let the proxy resolve the", + "\t hostname). If the port number is not specified, it is assumed at", + "\t port 1080.", + "\n\t To specify proxy on a unix domain socket, use localhost for host,", + "\t e.g. \"socks5h://localhost/path/to/socket.sock\"", + "\n\t This option overrides any previous use of --proxy, as they are", + "\t mutually exclusive.", + "\n\t This option is superfluous since you can specify a socks5 hostname", + "\t proxy with --proxy using a socks5h:// protocol prefix.", + "\n\t --preproxy can be used to specify a SOCKS proxy at the same time", + "\t --proxy is used with an HTTP/HTTPS proxy. In such a case, curl", + "\t first connects to the SOCKS proxy and then connects (through", + "\t SOCKS) to the HTTP or HTTPS proxy. If --socks5-hostname is", + "\t provided several times, the last set value is used.", + "\n\t Example:", + "\t curl --socks5-hostname proxy.example:7000 https://example.com", + "\n\t See also --socks5 and --socks4a.", + "\n -Y, --speed-limit ", + "\t If a transfer is slower than this set speed (in bytes per second)", + "\t for a given number of seconds, it gets aborted. The time period is", + "\t set with --speed-time and is 30 seconds by default. If", + "\t --speed-limit is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --speed-limit 300 --speed-time 10 https://example.com", + "\n\t See also --speed-time, --limit-rate and --max-time.", + "\n -y, --speed-time ", + "\t If a transfer runs slower than speed-limit bytes per second during", + "\t a speed-time period, the transfer is aborted. If speed-time is", + "\t used, the default speed-limit is 1 unless set with --speed-limit.", + "\n\t This option controls transfers (in both directions) but does not", + "\t affect slow connects etc. If this is a concern for you, try the", + "\t --connect-timeout option. If --speed-time is provided several", + "\t times, the last set value is used.", + "\n\t Example:", + "\t curl --speed-limit 300 --speed-time 10 https://example.com", + "\n\t See also --speed-limit and --limit-rate.", + "\n --ssl", + "\t (FTP IMAP POP3 SMTP LDAP) Warning: this is considered an insecure", + "\t option. Consider using --ssl-reqd instead to be sure curl upgrades", + "\t to a secure connection.", + "\n\t Try to use SSL/TLS for the connection - often referred to as", + "\t STARTTLS or STLS because of the involved commands. Reverts to a", + "\t non-secure connection if the server does not support SSL/TLS. See", + "\t also --ftp-ssl-control and --ssl-reqd for different levels of", + "\t encryption required.", + "\n\t This option is handled in LDAP (added in 7.81.0). It is fully", + "\t supported by the OpenLDAP backend and ignored by the generic ldap", + "\t backend.", + "\n\t Please note that a server may close the connection if the", + "\t negotiation does not succeed.", + "\n\t This option was formerly known as --ftp-ssl. That option name can", + "\t still be used but might be removed in a future version. Providing", + "\t --ssl multiple times has no extra effect. Disable it again with", + "\t --no-ssl.", + "\n\t Example:", + "\t curl --ssl pop3://example.com/", + "\n\t See also --ssl-reqd, --insecure and --ciphers.", + "\n --ssl-allow-beast", + "\t (TLS) Do not work around a security flaw in the TLS1.0 protocol", + "\t known as BEAST. If this option is not used, the TLS layer may use", + "\t workarounds known to cause interoperability problems with some", + "\t older server implementations.", + "\n\t This option only changes how curl does TLS 1.0 and has no effect", + "\t on later TLS versions.", + "\n\t WARNING: this option loosens the TLS security, and by using this", + "\t flag you ask for exactly that. Providing --ssl-allow-beast", + "\t multiple times has no extra effect. Disable it again with", + "\t --no-ssl-allow-beast.", + "\n\t Example:", + "\t curl --ssl-allow-beast https://example.com", + "\n\t See also --proxy-ssl-allow-beast and --insecure.", + "\n --ssl-auto-client-cert", + "\t (TLS) (Schannel) Automatically locate and use a client certificate", + "\t for authentication, when requested by the server. Since the server", + "\t can request any certificate that supports client authentication in", + "\t the OS certificate store it could be a privacy violation and", + "\t unexpected. Providing --ssl-auto-client-cert multiple times has no", + "\t extra effect. Disable it again with --no-ssl-auto-client-cert.", + "\n\t Example:", + "\t curl --ssl-auto-client-cert https://example.com", + "\n\t Added in 7.77.0. See also --proxy-ssl-auto-client-cert.", + "\n --ssl-no-revoke", + "\t (TLS) (Schannel) Disable certificate revocation checks. WARNING:", + "\t this option loosens the SSL security, and by using this flag you", + "\t ask for exactly that. Providing --ssl-no-revoke multiple times has", + "\t no extra effect. Disable it again with --no-ssl-no-revoke.", + "\n\t Example:", + "\t curl --ssl-no-revoke https://example.com", + "\n\t See also --crlfile.", + "\n --ssl-reqd", + "\t (FTP IMAP POP3 SMTP LDAP) Require SSL/TLS for the connection -", + "\t often referred to as STARTTLS or STLS because of the involved", + "\t commands. Terminates the connection if the transfer cannot be", + "\t upgraded to use SSL/TLS.", + "\n\t This option is handled in LDAP (added in 7.81.0). It is fully", + "\t supported by the OpenLDAP backend and rejected by the generic ldap", + "\t backend if explicit TLS is required.", + "\n\t This option is unnecessary if you use a URL scheme that in itself", + "\t implies immediate and implicit use of TLS, like for FTPS, IMAPS,", + "\t POP3S, SMTPS and LDAPS. Such a transfer always fails if the TLS", + "\t handshake does not work.", + "\n\t This option was formerly known as --ftp-ssl-reqd. Providing", + "\t --ssl-reqd multiple times has no extra effect. Disable it again", + "\t with --no-ssl-reqd.", + "\n\t Example:", + "\t curl --ssl-reqd ftp://example.com", + "\n\t See also --ssl and --insecure.", + "\n --ssl-revoke-best-effort", + "\t (TLS) (Schannel) Ignore certificate revocation checks when they", + "\t failed due to missing/offline distribution points for the", + "\t revocation check lists. Providing --ssl-revoke-best-effort", + "\t multiple times has no extra effect. Disable it again with", + "\t --no-ssl-revoke-best-effort.", + "\n\t Example:", + "\t curl --ssl-revoke-best-effort https://example.com", + "\n\t Added in 7.70.0. See also --crlfile and --insecure.", + "\n -2, --sslv2", + "\t (SSL) This option previously asked curl to use SSLv2, but is now", + "\t ignored (added in 7.77.0). SSLv2 is widely considered insecure", + "\t (see RFC 6176). Providing --sslv2 multiple times has no extra", + "\t effect.", + "\n\t Example:", + "\t curl --sslv2 https://example.com", + "\n\t --sslv2 requires that libcurl is built to support TLS. This option", + "\t is mutually exclusive with --sslv3, --tlsv1, --tlsv1.1 and", + "\t --tlsv1.2. See also --http1.1 and --http2.", + "\n -3, --sslv3", + "\t (SSL) This option previously asked curl to use SSLv3, but is now", + "\t ignored (added in 7.77.0). SSLv3 is widely considered insecure", + "\t (see RFC 7568). Providing --sslv3 multiple times has no extra", + "\t effect.", + "\n\t Example:", + "\t curl --sslv3 https://example.com", + "\n\t --sslv3 requires that libcurl is built to support TLS. This option", + "\t is mutually exclusive with --sslv2, --tlsv1, --tlsv1.1 and", + "\t --tlsv1.2. See also --http1.1 and --http2.", + "\n --stderr ", + "\t Redirect all writes to stderr to the specified file instead. If", + "\t the filename is a plain '-', it is instead written to stdout.", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. If --stderr is provided several times, the last set", + "\t value is used.", + "\n\t Example:", + "\t curl --stderr output.txt https://example.com", + "\n\t See also --verbose and --silent.", + "\n --styled-output", + "\t Enable automatic use of bold font styles when writing HTTP headers", + "\t to the terminal. Use --no-styled-output to switch them off.", + "\n\t Styled output requires a terminal that supports bold fonts. This", + "\t feature is not present on curl for Windows due to lack of this", + "\t capability.", + "\n\t This option is global and does not need to be specified for each", + "\t use of --next. Providing --styled-output multiple times has no", + "\t extra effect. Disable it again with --no-styled-output.", + "\n\t Example:", + "\t curl --styled-output -I https://example.com", + "\n\t Added in 7.61.0. See also --head and --verbose.", + "\n --suppress-connect-headers", + "\t When --proxytunnel is used and a CONNECT request is made do not", + "\t output proxy CONNECT response headers. This option is meant to be", + "\t used with --dump-header or --include which are used to show", + "\t protocol headers in the output. It has no effect on debug options", + "\t such as --verbose or --trace, or any statistics. Providing", + "\t --suppress-connect-headers multiple times has no extra effect.", + "\t Disable it again with --no-suppress-connect-headers.", + "\n\t Example:", + "\t curl --suppress-connect-headers --include -x proxy https://example.com", + "\n\t See also --dump-header, --include and --proxytunnel.", + "\n --tcp-fastopen", + "\t Enable use of TCP Fast Open (RFC 7413). TCP Fast Open is a TCP", + "\t extension that allows data to get sent earlier over the connection", + "\t (before the final handshake ACK) if the client and server have", + "\t been connected previously. Providing --tcp-fastopen multiple times", + "\t has no extra effect. Disable it again with --no-tcp-fastopen.", + "\n\t Example:", + "\t curl --tcp-fastopen https://example.com", + "\n\t See also --false-start.", + "\n --tcp-nodelay", + "\t Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man", + "\t page for details about this option.", + "\n\t curl sets this option by default and you need to explicitly switch", + "\t it off if you do not want it on. Providing --tcp-nodelay multiple", + "\t times has no extra effect. Disable it again with --no-tcp-nodelay.", + "\n\t Example:", + "\t curl --tcp-nodelay https://example.com", + "\n\t See also --no-buffer.", + "\n -t, --telnet-option ", + "\t Pass options to the telnet protocol. Supported options are:", + "\n\t TTYPE=", + "\n\t\tSets the terminal type.", + "\n\t XDISPLOC=", + "\n\t\tSets the X display location.", + "\n\t NEW_ENV=", + "\n\t\tSets an environment variable.", + "\n\t --telnet-option can be used several times in a command line", + "\n\t Example:", + "\t curl -t TTYPE=vt100 telnet://example.com/", + "\n\t See also --config.", + "\n --tftp-blksize ", + "\t (TFTP) Set the TFTP BLKSIZE option (must be 512 or larger). This", + "\t is the block size that curl tries to use when transferring data to", + "\t or from a TFTP server. By default 512 bytes are used. If", + "\t --tftp-blksize is provided several times, the last set value is", + "\t used.", + "\n\t Example:", + "\t curl --tftp-blksize 1024 tftp://example.com/file", + "\n\t See also --tftp-no-options.", + "\n --tftp-no-options", + "\t (TFTP) Do not to send TFTP options requests. This improves interop", + "\t with some legacy servers that do not acknowledge or properly", + "\t implement TFTP options. When this option is used --tftp-blksize is", + "\t ignored. Providing --tftp-no-options multiple times has no extra", + "\t effect. Disable it again with --no-tftp-no-options.", + "\n\t Example:", + "\t curl --tftp-no-options tftp://192.168.0.1/", + "\n\t See also --tftp-blksize.", + "\n -z, --time-cond