Compare commits
14 Commits
HTTPS-prox
...
7_42
Author | SHA1 | Date | |
---|---|---|---|
![]() |
26cb9f1646 | ||
![]() |
4feb6e6d03 | ||
![]() |
69a2e8d7ec | ||
![]() |
c71cc72433 | ||
![]() |
a6e0270e9b | ||
![]() |
14f36574be | ||
![]() |
23c85ba15e | ||
![]() |
cc628cd68a | ||
![]() |
a005d2f7de | ||
![]() |
097460adb2 | ||
![]() |
c75c4d7706 | ||
![]() |
13329f9d4d | ||
![]() |
0ef434f5b6 | ||
![]() |
994ea368a7 |
58
.gitignore
vendored
58
.gitignore
vendored
@@ -1,51 +1,51 @@
|
|||||||
*.asc
|
.deps
|
||||||
|
.libs
|
||||||
|
*.lib
|
||||||
|
*.pdb
|
||||||
*.dll
|
*.dll
|
||||||
*.exe
|
*.exe
|
||||||
*.exp
|
|
||||||
*.la
|
|
||||||
*.lib
|
|
||||||
*.lo
|
|
||||||
*.o
|
|
||||||
*.obj
|
*.obj
|
||||||
*.pdb
|
*.asc
|
||||||
*~
|
|
||||||
.*.swp
|
.*.swp
|
||||||
.cproject
|
|
||||||
.deps
|
|
||||||
.dirstamp
|
|
||||||
.libs
|
|
||||||
.project
|
|
||||||
.settings
|
|
||||||
/build/
|
|
||||||
/builds/
|
|
||||||
CHANGES.dist
|
|
||||||
Debug
|
Debug
|
||||||
INSTALL
|
Release
|
||||||
|
*.exp
|
||||||
Makefile
|
Makefile
|
||||||
Makefile.in
|
Makefile.in
|
||||||
Release
|
|
||||||
TAGS
|
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
aclocal.m4.bak
|
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
compile
|
|
||||||
config.cache
|
config.cache
|
||||||
config.guess
|
config.guess
|
||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
config.sub
|
config.sub
|
||||||
configure
|
configure
|
||||||
curl-*.tar.bz2
|
|
||||||
curl-*.tar.gz
|
|
||||||
curl-*.tar.lzma
|
|
||||||
curl-*.zip
|
|
||||||
curl-config
|
|
||||||
depcomp
|
depcomp
|
||||||
install-sh
|
|
||||||
libcurl.pc
|
|
||||||
libtool
|
libtool
|
||||||
ltmain.sh
|
ltmain.sh
|
||||||
|
compile
|
||||||
|
curl-config
|
||||||
|
libcurl.pc
|
||||||
missing
|
missing
|
||||||
|
curl-*.tar.gz
|
||||||
|
curl-*.tar.bz2
|
||||||
|
curl-*.tar.lzma
|
||||||
|
curl-*.zip
|
||||||
|
INSTALL
|
||||||
|
install-sh
|
||||||
|
*.o
|
||||||
|
*.lo
|
||||||
|
*.la
|
||||||
mkinstalldirs
|
mkinstalldirs
|
||||||
tags
|
tags
|
||||||
|
TAGS
|
||||||
|
*~
|
||||||
|
aclocal.m4.bak
|
||||||
|
CHANGES.dist
|
||||||
|
.project
|
||||||
|
.cproject
|
||||||
|
.settings
|
||||||
|
.dirstamp
|
||||||
test-driver
|
test-driver
|
||||||
|
/build/
|
||||||
|
/builds/
|
||||||
|
10
.travis.yml
10
.travis.yml
@@ -1,15 +1,5 @@
|
|||||||
os:
|
|
||||||
- linux
|
|
||||||
- osx
|
|
||||||
|
|
||||||
sudo: false
|
|
||||||
|
|
||||||
language: c
|
language: c
|
||||||
|
|
||||||
install:
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew update > /dev/null; fi
|
|
||||||
- if [ "$TRAVIS_OS_NAME" == "osx" ]; then brew install openssl libidn rtmpdump libssh2 c-ares libmetalink libressl nghttp2; fi
|
|
||||||
|
|
||||||
before_script:
|
before_script:
|
||||||
- ./buildconf
|
- ./buildconf
|
||||||
|
|
||||||
|
14
CHANGES
14
CHANGES
@@ -1,7 +1,15 @@
|
|||||||
See http://curl.haxx.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 evey release like this:
|
Changelog
|
||||||
|
|
||||||
|
This file no longer holds the changelog. Now you can generate it yourself
|
||||||
|
like this:
|
||||||
|
|
||||||
$ git log --pretty=fuller --no-color --date=short --decorate=full | \
|
$ git log --pretty=fuller --no-color --date=short --decorate=full | \
|
||||||
./log2changes.pl
|
./log2changes.pl
|
||||||
|
|
||||||
|
The older, manually edited, changelog is found in git named CHANGES.0
|
||||||
|
@@ -139,7 +139,7 @@ int main(void)
|
|||||||
rc = gethostbyname_r(address, &h, &hdata);
|
rc = gethostbyname_r(address, &h, &hdata);
|
||||||
#elif defined(HAVE_GETHOSTBYNAME_R_5) || \
|
#elif defined(HAVE_GETHOSTBYNAME_R_5) || \
|
||||||
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
|
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
|
||||||
rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop);
|
rc = gethostbyname_r(address, &h, buffer, 8192, 0, &h_errnop);
|
||||||
(void)hp; /* not used for test */
|
(void)hp; /* not used for test */
|
||||||
#elif defined(HAVE_GETHOSTBYNAME_R_6) || \
|
#elif defined(HAVE_GETHOSTBYNAME_R_6) || \
|
||||||
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
|
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
|
||||||
|
@@ -10,8 +10,8 @@ endmacro(add_header_include)
|
|||||||
|
|
||||||
set(signature_call_conv)
|
set(signature_call_conv)
|
||||||
if(HAVE_WINDOWS_H)
|
if(HAVE_WINDOWS_H)
|
||||||
add_header_include(HAVE_WINSOCK2_H "winsock2.h")
|
|
||||||
add_header_include(HAVE_WINDOWS_H "windows.h")
|
add_header_include(HAVE_WINDOWS_H "windows.h")
|
||||||
|
add_header_include(HAVE_WINSOCK2_H "winsock2.h")
|
||||||
add_header_include(HAVE_WINSOCK_H "winsock.h")
|
add_header_include(HAVE_WINSOCK_H "winsock.h")
|
||||||
set(_source_epilogue
|
set(_source_epilogue
|
||||||
"${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif")
|
"${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif")
|
||||||
|
@@ -122,10 +122,10 @@ endif()
|
|||||||
option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON)
|
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)
|
mark_as_advanced(CURL_HIDDEN_SYMBOLS)
|
||||||
|
|
||||||
IF(WIN32)
|
# IF(WIN32)
|
||||||
OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON)
|
# OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON)
|
||||||
MARK_AS_ADVANCED(CURL_WINDOWS_SSPI)
|
# MARK_AS_ADVANCED(CURL_WINDOWS_SSPI)
|
||||||
ENDIF()
|
# ENDIF()
|
||||||
|
|
||||||
option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
|
option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF)
|
||||||
mark_as_advanced(HTTP_ONLY)
|
mark_as_advanced(HTTP_ONLY)
|
||||||
@@ -186,7 +186,7 @@ option(DISABLED_THREADSAFE "Set to explicitly specify we don't want to use threa
|
|||||||
mark_as_advanced(DISABLED_THREADSAFE)
|
mark_as_advanced(DISABLED_THREADSAFE)
|
||||||
option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON)
|
option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON)
|
||||||
mark_as_advanced(ENABLE_IPV6)
|
mark_as_advanced(ENABLE_IPV6)
|
||||||
if(ENABLE_IPV6 AND NOT WIN32)
|
if(ENABLE_IPV6)
|
||||||
include(CheckStructHasMember)
|
include(CheckStructHasMember)
|
||||||
check_struct_has_member("struct sockaddr_in6" sin6_addr "netinet/in.h"
|
check_struct_has_member("struct sockaddr_in6" sin6_addr "netinet/in.h"
|
||||||
HAVE_SOCKADDR_IN6_SIN6_ADDR)
|
HAVE_SOCKADDR_IN6_SIN6_ADDR)
|
||||||
@@ -355,10 +355,9 @@ if(NOT CURL_DISABLE_LDAP)
|
|||||||
check_include_file_concat("winber.h" HAVE_WINBER_H)
|
check_include_file_concat("winber.h" HAVE_WINBER_H)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_REQUIRED_INCLUDES_BAK ${CMAKE_REQUIRED_INCLUDES})
|
|
||||||
set(CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory")
|
set(CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory")
|
||||||
if(CMAKE_LDAP_INCLUDE_DIR)
|
if(CMAKE_LDAP_INCLUDE_DIR)
|
||||||
list(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR})
|
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR})
|
||||||
endif()
|
endif()
|
||||||
check_include_file_concat("ldap.h" HAVE_LDAP_H)
|
check_include_file_concat("ldap.h" HAVE_LDAP_H)
|
||||||
check_include_file_concat("lber.h" HAVE_LBER_H)
|
check_include_file_concat("lber.h" HAVE_LBER_H)
|
||||||
@@ -366,11 +365,9 @@ if(NOT CURL_DISABLE_LDAP)
|
|||||||
if(NOT HAVE_LDAP_H)
|
if(NOT HAVE_LDAP_H)
|
||||||
message(STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON")
|
message(STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON")
|
||||||
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
|
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
|
||||||
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used
|
|
||||||
elseif(NOT HAVE_LIBLDAP)
|
elseif(NOT HAVE_LIBLDAP)
|
||||||
message(STATUS "LDAP library '${CMAKE_LDAP_LIB}' not found CURL_DISABLE_LDAP set ON")
|
message(STATUS "LDAP library '${CMAKE_LDAP_LIB}' not found CURL_DISABLE_LDAP set ON")
|
||||||
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
|
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
|
||||||
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used
|
|
||||||
else()
|
else()
|
||||||
if(CMAKE_USE_OPENLDAP)
|
if(CMAKE_USE_OPENLDAP)
|
||||||
set(USE_OPENLDAP ON)
|
set(USE_OPENLDAP ON)
|
||||||
@@ -451,7 +448,6 @@ if(CURL_ZLIB)
|
|||||||
set(HAVE_LIBZ ON)
|
set(HAVE_LIBZ ON)
|
||||||
list(APPEND CURL_LIBS ${ZLIB_LIBRARIES})
|
list(APPEND CURL_LIBS ${ZLIB_LIBRARIES})
|
||||||
include_directories(${ZLIB_INCLUDE_DIRS})
|
include_directories(${ZLIB_INCLUDE_DIRS})
|
||||||
list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS})
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -467,7 +463,7 @@ if(CMAKE_USE_LIBSSH2)
|
|||||||
if(LIBSSH2_FOUND)
|
if(LIBSSH2_FOUND)
|
||||||
list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY})
|
list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY})
|
||||||
set(CMAKE_REQUIRED_LIBRARIES ${LIBSSH2_LIBRARY})
|
set(CMAKE_REQUIRED_LIBRARIES ${LIBSSH2_LIBRARY})
|
||||||
list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}")
|
set(CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}")
|
||||||
include_directories("${LIBSSH2_INCLUDE_DIR}")
|
include_directories("${LIBSSH2_INCLUDE_DIR}")
|
||||||
set(HAVE_LIBSSH2 ON)
|
set(HAVE_LIBSSH2 ON)
|
||||||
set(USE_LIBSSH2 ON)
|
set(USE_LIBSSH2 ON)
|
||||||
@@ -495,12 +491,12 @@ mark_as_advanced(CMAKE_USE_GSSAPI)
|
|||||||
if(CMAKE_USE_GSSAPI)
|
if(CMAKE_USE_GSSAPI)
|
||||||
find_package(GSS)
|
find_package(GSS)
|
||||||
|
|
||||||
set(HAVE_GSSAPI ${GSS_FOUND})
|
set(HAVE_GSS_API ${GSS_FOUND})
|
||||||
if(GSS_FOUND)
|
if(GSS_FOUND)
|
||||||
|
|
||||||
message(STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \"${GSS_VERSION}\"")
|
message(STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \"${GSS_VERSION}\"")
|
||||||
|
|
||||||
list(APPEND CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIRECTORIES})
|
set(CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIR})
|
||||||
check_include_file_concat("gssapi/gssapi.h" HAVE_GSSAPI_GSSAPI_H)
|
check_include_file_concat("gssapi/gssapi.h" HAVE_GSSAPI_GSSAPI_H)
|
||||||
check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H)
|
check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H)
|
||||||
check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H)
|
check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H)
|
||||||
@@ -536,7 +532,7 @@ if(CMAKE_USE_GSSAPI)
|
|||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include_directories(${GSS_INCLUDE_DIRECTORIES})
|
include_directories(${GSS_INCLUDE_DIR})
|
||||||
link_directories(${GSS_LINK_DIRECTORIES})
|
link_directories(${GSS_LINK_DIRECTORIES})
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}")
|
||||||
@@ -556,25 +552,12 @@ else()
|
|||||||
unset(USE_UNIX_SOCKETS CACHE)
|
unset(USE_UNIX_SOCKETS CACHE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# Check for header files
|
# Check for header files
|
||||||
if(NOT UNIX)
|
if(NOT UNIX)
|
||||||
check_include_file_concat("windows.h" HAVE_WINDOWS_H)
|
check_include_file_concat("windows.h" HAVE_WINDOWS_H)
|
||||||
check_include_file_concat("winsock.h" HAVE_WINSOCK_H)
|
check_include_file_concat("winsock.h" HAVE_WINSOCK_H)
|
||||||
check_include_file_concat("ws2tcpip.h" HAVE_WS2TCPIP_H)
|
check_include_file_concat("ws2tcpip.h" HAVE_WS2TCPIP_H)
|
||||||
check_include_file_concat("winsock2.h" HAVE_WINSOCK2_H)
|
check_include_file_concat("winsock2.h" HAVE_WINSOCK2_H)
|
||||||
if(CURL_WINDOWS_SSPI)
|
|
||||||
set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DSECURITY_WIN32")
|
|
||||||
check_include_file_concat("sspi.h" HAVE_SSPI_H)
|
|
||||||
if(HAVE_SSPI_H)
|
|
||||||
check_include_file_concat("schannel.h" HAVE_SCHANNEL_H)
|
|
||||||
set(USE_WINDOWS_SSPI ON)
|
|
||||||
if(HAVE_SCHANNEL_H)
|
|
||||||
set(USE_SCHANNEL ON)
|
|
||||||
set(SSL_ENABLED ON)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif(NOT UNIX)
|
endif(NOT UNIX)
|
||||||
|
|
||||||
check_include_file_concat("stdio.h" HAVE_STDIO_H)
|
check_include_file_concat("stdio.h" HAVE_STDIO_H)
|
||||||
@@ -1063,12 +1046,12 @@ _add_if("AsynchDNS" USE_ARES OR USE_THREADS_POSIX)
|
|||||||
_add_if("IDN" HAVE_LIBIDN)
|
_add_if("IDN" HAVE_LIBIDN)
|
||||||
# TODO SSP1 (WinSSL) check is missing
|
# TODO SSP1 (WinSSL) check is missing
|
||||||
_add_if("SSPI" USE_WINDOWS_SSPI)
|
_add_if("SSPI" USE_WINDOWS_SSPI)
|
||||||
_add_if("GSS-API" HAVE_GSSAPI)
|
_add_if("GSS-API" HAVE_GSS_API)
|
||||||
# TODO SSP1 missing for SPNEGO
|
# TODO SSP1 missing for SPNEGO
|
||||||
_add_if("SPNEGO" NOT CURL_DISABLE_CRYPTO_AUTH AND
|
_add_if("SPNEGO" NOT CURL_DISABLE_CRYPTO_AUTH AND
|
||||||
(HAVE_GSSAPI OR USE_WINDOWS_SSPI))
|
(HAVE_GSS_API OR USE_WINDOWS_SSPI))
|
||||||
_add_if("Kerberos" NOT CURL_DISABLE_CRYPTO_AUTH AND
|
_add_if("Kerberos" NOT CURL_DISABLE_CRYPTO_AUTH AND
|
||||||
(HAVE_GSSAPI OR USE_WINDOWS_SSPI))
|
(HAVE_GSS_API OR USE_WINDOWS_SSPI))
|
||||||
# NTLM support requires crypto function adaptions from various SSL libs
|
# NTLM support requires crypto function adaptions from various SSL libs
|
||||||
# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS, DARWINSSL
|
# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS, DARWINSSL
|
||||||
if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR
|
if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR
|
||||||
@@ -1153,7 +1136,7 @@ set(VERSIONNUM "${CURL_VERSION_NUM}")
|
|||||||
# Finally generate a "curl-config" matching this config
|
# Finally generate a "curl-config" matching this config
|
||||||
configure_file("${CURL_SOURCE_DIR}/curl-config.in"
|
configure_file("${CURL_SOURCE_DIR}/curl-config.in"
|
||||||
"${CURL_BINARY_DIR}/curl-config" @ONLY)
|
"${CURL_BINARY_DIR}/curl-config" @ONLY)
|
||||||
install(FILES "${CURL_BINARY_DIR}/curl-config"
|
install(FILES "${CMAKE_BINARY_DIR}/curl-config"
|
||||||
DESTINATION bin
|
DESTINATION bin
|
||||||
PERMISSIONS
|
PERMISSIONS
|
||||||
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
OWNER_READ OWNER_WRITE OWNER_EXECUTE
|
||||||
@@ -1163,7 +1146,7 @@ install(FILES "${CURL_BINARY_DIR}/curl-config"
|
|||||||
# Finally generate a pkg-config file matching this config
|
# Finally generate a pkg-config file matching this config
|
||||||
configure_file("${CURL_SOURCE_DIR}/libcurl.pc.in"
|
configure_file("${CURL_SOURCE_DIR}/libcurl.pc.in"
|
||||||
"${CURL_BINARY_DIR}/libcurl.pc" @ONLY)
|
"${CURL_BINARY_DIR}/libcurl.pc" @ONLY)
|
||||||
install(FILES "${CURL_BINARY_DIR}/libcurl.pc"
|
install(FILES "${CMAKE_BINARY_DIR}/libcurl.pc"
|
||||||
DESTINATION lib/pkgconfig)
|
DESTINATION lib/pkgconfig)
|
||||||
|
|
||||||
# This needs to be run very last so other parts of the scripts can take advantage of this.
|
# This needs to be run very last so other parts of the scripts can take advantage of this.
|
||||||
|
@@ -16,9 +16,11 @@ Send your suggestions using one of these methods:
|
|||||||
|
|
||||||
1. in a mail to the mailing list
|
1. in a mail to the mailing list
|
||||||
|
|
||||||
2. as a pull request on github
|
2. in the [bug tracker](https://sourceforge.net/p/curl/bugs/)
|
||||||
|
|
||||||
3. as an issue on github
|
3. as a pull request on github
|
||||||
|
|
||||||
|
4. as an issue on github
|
||||||
|
|
||||||
|
|
||||||
/ The cURL team!
|
/ The cURL team!
|
||||||
|
@@ -65,7 +65,7 @@ else
|
|||||||
ARCHES64='-arch x86_64'
|
ARCHES64='-arch x86_64'
|
||||||
#We "know" that 10.4 and earlier do not support 64bit
|
#We "know" that 10.4 and earlier do not support 64bit
|
||||||
OLD_SDK64=`ls $SDK_PATH|egrep -v "10.[0-4]"|head -1`
|
OLD_SDK64=`ls $SDK_PATH|egrep -v "10.[0-4]"|head -1`
|
||||||
NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4][^0-9]" | head -1`
|
NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4]"|head -1`
|
||||||
if test $USE_OLD -gt 0
|
if test $USE_OLD -gt 0
|
||||||
then
|
then
|
||||||
SDK64=$OLD_SDK64
|
SDK64=$OLD_SDK64
|
||||||
|
86
Makefile.am
86
Makefile.am
@@ -32,111 +32,99 @@ CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \
|
|||||||
VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
|
VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
|
||||||
VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
|
VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
|
||||||
VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc
|
VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||||
VC6_SRCTMPL = projects/Windows/VC6/src/curl.tmpl
|
VC6_SRCTMPL = projects/Windows/VC6/src/curlsrc.tmpl
|
||||||
VC6_SRCDSP = projects/Windows/VC6/src/curl.dsp.dist
|
VC6_SRCDSP = projects/Windows/VC6/src/curlsrc.dsp.dist
|
||||||
VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc
|
VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc
|
||||||
|
|
||||||
VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl
|
VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl
|
||||||
VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj.dist
|
VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj.dist
|
||||||
VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc
|
VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||||
VC7_SRCTMPL = projects/Windows/VC7/src/curl.tmpl
|
VC7_SRCTMPL = projects/Windows/VC7/src/curlsrc.tmpl
|
||||||
VC7_SRCVCPROJ = projects/Windows/VC7/src/curl.vcproj.dist
|
VC7_SRCVCPROJ = projects/Windows/VC7/src/curlsrc.vcproj.dist
|
||||||
VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc
|
VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc
|
||||||
|
|
||||||
VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl
|
VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl
|
||||||
VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj.dist
|
VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj.dist
|
||||||
VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc
|
VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||||
VC71_SRCTMPL = projects/Windows/VC7.1/src/curl.tmpl
|
VC71_SRCTMPL = projects/Windows/VC7.1/src/curlsrc.tmpl
|
||||||
VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curl.vcproj.dist
|
VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curlsrc.vcproj.dist
|
||||||
VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc
|
VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc
|
||||||
|
|
||||||
VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl
|
VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl
|
||||||
VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj.dist
|
VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj.dist
|
||||||
VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc
|
VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||||
VC8_SRCTMPL = projects/Windows/VC8/src/curl.tmpl
|
VC8_SRCTMPL = projects/Windows/VC8/src/curlsrc.tmpl
|
||||||
VC8_SRCVCPROJ = projects/Windows/VC8/src/curl.vcproj.dist
|
VC8_SRCVCPROJ = projects/Windows/VC8/src/curlsrc.vcproj.dist
|
||||||
VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc
|
VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc
|
||||||
|
|
||||||
VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl
|
VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl
|
||||||
VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj.dist
|
VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj.dist
|
||||||
VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc
|
VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||||
VC9_SRCTMPL = projects/Windows/VC9/src/curl.tmpl
|
VC9_SRCTMPL = projects/Windows/VC9/src/curlsrc.tmpl
|
||||||
VC9_SRCVCPROJ = projects/Windows/VC9/src/curl.vcproj.dist
|
VC9_SRCVCPROJ = projects/Windows/VC9/src/curlsrc.vcproj.dist
|
||||||
VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc
|
VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc
|
||||||
|
|
||||||
VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl
|
VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl
|
||||||
VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist
|
VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist
|
||||||
VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc
|
VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||||
VC10_SRCTMPL = projects/Windows/VC10/src/curl.tmpl
|
VC10_SRCTMPL = projects/Windows/VC10/src/curlsrc.tmpl
|
||||||
VC10_SRCVCXPROJ = projects/Windows/VC10/src/curl.vcxproj.dist
|
VC10_SRCVCXPROJ = projects/Windows/VC10/src/curlsrc.vcxproj.dist
|
||||||
VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc
|
VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc
|
||||||
|
|
||||||
VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl
|
VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl
|
||||||
VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist
|
VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist
|
||||||
VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc
|
VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||||
VC11_SRCTMPL = projects/Windows/VC11/src/curl.tmpl
|
VC11_SRCTMPL = projects/Windows/VC11/src/curlsrc.tmpl
|
||||||
VC11_SRCVCXPROJ = projects/Windows/VC11/src/curl.vcxproj.dist
|
VC11_SRCVCXPROJ = projects/Windows/VC11/src/curlsrc.vcxproj.dist
|
||||||
VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc
|
VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc
|
||||||
|
|
||||||
VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl
|
VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl
|
||||||
VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist
|
VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist
|
||||||
VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc
|
VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc
|
||||||
VC12_SRCTMPL = projects/Windows/VC12/src/curl.tmpl
|
VC12_SRCTMPL = projects/Windows/VC12/src/curlsrc.tmpl
|
||||||
VC12_SRCVCXPROJ = projects/Windows/VC12/src/curl.vcxproj.dist
|
VC12_SRCVCXPROJ = projects/Windows/VC12/src/curlsrc.vcxproj.dist
|
||||||
VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc
|
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
|
|
||||||
|
|
||||||
VC_DIST = projects/README \
|
VC_DIST = projects/README \
|
||||||
projects/build-openssl.bat \
|
projects/build-openssl.bat \
|
||||||
projects/build-wolfssl.bat \
|
|
||||||
projects/checksrc.bat \
|
projects/checksrc.bat \
|
||||||
projects/Windows/VC6/curl-all.dsw \
|
projects/Windows/VC6/curl-all.dsw \
|
||||||
projects/Windows/VC6/lib/libcurl.dsw \
|
projects/Windows/VC6/lib/libcurl.dsw \
|
||||||
projects/Windows/VC6/src/curl.dsw \
|
projects/Windows/VC6/src/curlsrc.dsw \
|
||||||
projects/Windows/VC7/curl-all.sln \
|
projects/Windows/VC7/curl-all.sln \
|
||||||
projects/Windows/VC7/lib/libcurl.sln \
|
projects/Windows/VC7/lib/libcurl.sln \
|
||||||
projects/Windows/VC7/src/curl.sln \
|
projects/Windows/VC7/src/curlsrc.sln \
|
||||||
projects/Windows/VC7.1/curl-all.sln \
|
projects/Windows/VC7.1/curl-all.sln \
|
||||||
projects/Windows/VC7.1/lib/libcurl.sln \
|
projects/Windows/VC7.1/lib/libcurl.sln \
|
||||||
projects/Windows/VC7.1/src/curl.sln \
|
projects/Windows/VC7.1/src/curlsrc.sln \
|
||||||
projects/Windows/VC8/curl-all.sln \
|
projects/Windows/VC8/curl-all.sln \
|
||||||
projects/Windows/VC8/lib/libcurl.sln \
|
projects/Windows/VC8/lib/libcurl.sln \
|
||||||
projects/Windows/VC8/src/curl.sln \
|
projects/Windows/VC8/src/curlsrc.sln \
|
||||||
projects/Windows/VC9/curl-all.sln \
|
projects/Windows/VC9/curl-all.sln \
|
||||||
projects/Windows/VC9/lib/libcurl.sln \
|
projects/Windows/VC9/lib/libcurl.sln \
|
||||||
projects/Windows/VC9/src/curl.sln \
|
projects/Windows/VC9/src/curlsrc.sln \
|
||||||
projects/Windows/VC10/curl-all.sln \
|
projects/Windows/VC10/curl-all.sln \
|
||||||
projects/Windows/VC10/lib/libcurl.sln \
|
projects/Windows/VC10/lib/libcurl.sln \
|
||||||
projects/Windows/VC10/src/curl.sln \
|
projects/Windows/VC10/src/curlsrc.sln \
|
||||||
projects/Windows/VC11/curl-all.sln \
|
projects/Windows/VC11/curl-all.sln \
|
||||||
projects/Windows/VC11/lib/libcurl.sln \
|
projects/Windows/VC11/lib/libcurl.sln \
|
||||||
projects/Windows/VC11/src/curl.sln \
|
projects/Windows/VC11/src/curlsrc.sln \
|
||||||
projects/Windows/VC12/curl-all.sln \
|
projects/Windows/VC12/curl-all.sln \
|
||||||
projects/Windows/VC12/lib/libcurl.sln \
|
projects/Windows/VC12/lib/libcurl.sln \
|
||||||
projects/Windows/VC12/src/curl.sln \
|
projects/Windows/VC12/src/curlsrc.sln
|
||||||
projects/Windows/VC14/curl-all.sln \
|
|
||||||
projects/Windows/VC14/lib/libcurl.sln \
|
|
||||||
projects/Windows/VC14/src/curl.sln
|
|
||||||
|
|
||||||
WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \
|
WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \
|
||||||
winbuild/MakefileBuild.vc winbuild/Makefile.vc \
|
winbuild/MakefileBuild.vc winbuild/Makefile.vc \
|
||||||
winbuild/Makefile.msvc.names
|
winbuild/Makefile.msvc.names
|
||||||
|
|
||||||
EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \
|
EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \
|
||||||
RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework scripts/zsh.pl \
|
RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework \
|
||||||
$(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in
|
$(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in
|
||||||
|
|
||||||
CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ) \
|
CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ) \
|
||||||
$(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \
|
$(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \
|
||||||
$(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \
|
$(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ) \
|
||||||
$(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ) \
|
$(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ)
|
||||||
$(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ)
|
|
||||||
|
|
||||||
bin_SCRIPTS = curl-config
|
bin_SCRIPTS = curl-config
|
||||||
|
|
||||||
@@ -281,7 +269,7 @@ vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS) \
|
|||||||
$(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS) \
|
$(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS) \
|
||||||
$(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
|
$(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
|
||||||
$(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \
|
$(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \
|
||||||
$(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS)
|
$(VC12_SRCVCXPROJ_DEPS)
|
||||||
@(win32_lib_srcs='$(LIB_CFILES)'; \
|
@(win32_lib_srcs='$(LIB_CFILES)'; \
|
||||||
win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \
|
win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \
|
||||||
win32_lib_rc='$(LIB_RCFILES)'; \
|
win32_lib_rc='$(LIB_RCFILES)'; \
|
||||||
@@ -542,22 +530,4 @@ function gen_element(type, dir, file)\
|
|||||||
-v src_rc="$$win32_src_rc" \
|
-v src_rc="$$win32_src_rc" \
|
||||||
-v src_x_srcs="$$sorted_src_x_srcs" \
|
-v src_x_srcs="$$sorted_src_x_srcs" \
|
||||||
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
-v src_x_hdrs="$$sorted_src_x_hdrs" \
|
||||||
"$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; }; \
|
"$$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_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; };)
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
#
|
#
|
||||||
# This software is licensed as described in the file COPYING, which
|
# This software is licensed as described in the file COPYING, which
|
||||||
# you should have received as part of this distribution. The terms
|
# you should have received as part of this distribution. The terms
|
||||||
@@ -566,17 +566,6 @@ src/Makefile.vc12: src/Makefile.vc6
|
|||||||
@echo "generate $@"
|
@echo "generate $@"
|
||||||
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc12/g" -e "s/VC6/VC12/g" src/Makefile.vc6 > src/Makefile.vc12
|
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc12/g" -e "s/VC6/VC12/g" src/Makefile.vc6 > src/Makefile.vc12
|
||||||
|
|
||||||
# VC14 makefiles are for use with VS2015
|
|
||||||
vc14: lib/Makefile.vc14 src/Makefile.vc14
|
|
||||||
|
|
||||||
lib/Makefile.vc14: lib/Makefile.vc6
|
|
||||||
@echo "generate $@"
|
|
||||||
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" lib/Makefile.vc6 > lib/Makefile.vc14
|
|
||||||
|
|
||||||
src/Makefile.vc14: src/Makefile.vc6
|
|
||||||
@echo "generate $@"
|
|
||||||
@sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" src/Makefile.vc6 > src/Makefile.vc14
|
|
||||||
|
|
||||||
ca-bundle: lib/mk-ca-bundle.pl
|
ca-bundle: lib/mk-ca-bundle.pl
|
||||||
@echo "generate a fresh ca-bundle.crt"
|
@echo "generate a fresh ca-bundle.crt"
|
||||||
@perl $< -b -l -u lib/ca-bundle.crt
|
@perl $< -b -l -u lib/ca-bundle.crt
|
||||||
|
4
README
4
README
@@ -38,12 +38,12 @@ GIT
|
|||||||
|
|
||||||
To download the very latest source off the GIT server do this:
|
To download the very latest source off the GIT server do this:
|
||||||
|
|
||||||
git clone https://github.com/bagder/curl.git
|
git clone git://github.com/bagder/curl.git
|
||||||
|
|
||||||
(you'll get a directory named curl created, filled with the source code)
|
(you'll get a directory named curl created, filled with the source code)
|
||||||
|
|
||||||
NOTICE
|
NOTICE
|
||||||
|
|
||||||
Curl contains pieces of source code that is Copyright (c) 1998, 1999
|
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
|
Kungliga Tekniska H<EFBFBD>gskolan. This notice is included here to comply with the
|
||||||
distribution terms.
|
distribution terms.
|
||||||
|
117
RELEASE-NOTES
117
RELEASE-NOTES
@@ -1,73 +1,22 @@
|
|||||||
Curl and libcurl 7.46.0
|
Curl and libcurl 7.42.1
|
||||||
|
|
||||||
Public curl releases: 150
|
Public curl releases: 146
|
||||||
Command line options: 177
|
Command line options: 173
|
||||||
curl_easy_setopt() options: 221
|
curl_easy_setopt() options: 216
|
||||||
Public functions in libcurl: 61
|
Public functions in libcurl: 58
|
||||||
Contributors: 1322
|
Contributors: 1265
|
||||||
|
|
||||||
This release includes the following changes:
|
|
||||||
|
|
||||||
o configure: build silently by default
|
|
||||||
o cookies: Add support for Publix Suffix List with libpsl
|
|
||||||
o vtls: added support for mbedTLS [7]
|
|
||||||
o Added CURLOPT_STREAM_DEPENDS [8]
|
|
||||||
o Added CURLOPT_STREAM_DEPENDS_E [9]
|
|
||||||
o Added CURLOPT_STREAM_WEIGHT [10]
|
|
||||||
o Added CURLFORM_CONTENTLEN [14]
|
|
||||||
o oauth2: Added support for OAUTHBEARER SASL mechanism to IMAP, POP3 and SNMP
|
|
||||||
|
|
||||||
This release includes the following bugfixes:
|
This release includes the following bugfixes:
|
||||||
|
|
||||||
o des: Fix header conditional for Curl_des_set_odd_parity
|
o CURLOPT_HEADEROPT: default to separate [5]
|
||||||
o ntlm: get rid of unconditional use of long long [1]
|
o dist: include {src,lib}/checksrc.whitelist [1]
|
||||||
o CURLOPT_CERTINFO.3: fix reference to CURLINFO_CERTINFO
|
o connectionexists: fix build without NTLM [2]
|
||||||
o docs: CURLINFO_LASTSOCKET => CURLINFO_ACTIVESOCKET [2]
|
o docs: distribute the CURLOPT_PINNEDPUBLICKEY(3) man page, too
|
||||||
o http2: Fix http2_recv to return -1 if recv returned -1
|
o curl -z: do not write empty file on unmet condition [3]
|
||||||
o curl_global_init_mem: set function pointers before doing init
|
o openssl: fix serial number output [4]
|
||||||
o ntlm: error out without 64bit support as the code needs it [1]
|
o curl_easy_getinfo.3: document 'internals' in CURLINFO_TLS_SESSION
|
||||||
o openssl: Fix set up of pkcs12 certificate verification chain
|
o sws: init http2 state properly
|
||||||
o acinclude: remove PKGCONFIG override [3]
|
o curl.1: fix typo
|
||||||
o test1531: case the size to fix the test on non-largefile builds
|
|
||||||
o fread_func: move callback pointer from set to state struct [4]
|
|
||||||
o test1601: fix compilation with --enable-debug and --disable-crypto-auth
|
|
||||||
o http2: Don't pass unitialized name+len pairs to nghttp2_submit_request [5]
|
|
||||||
o curlbuild.h: Fix non-configure compiling to mips and sh4 targets
|
|
||||||
o tool: Generate easysrc with last cache linked-list [6]
|
|
||||||
o cmake: Fix for add_subdirectory(curl) use-case
|
|
||||||
o vtls: fix compiler warning for TLS backends without sha256
|
|
||||||
o build: fix for MSDOS/djgpp
|
|
||||||
o checksrc: add crude // detection
|
|
||||||
o http2: on_frame_recv: trust the conn/data input
|
|
||||||
o ftp: allow CURLOPT_IGNORE_CONTENT_LENGTH to ignore size [11]
|
|
||||||
o polarssl/mbedtls: fix name space pollution
|
|
||||||
o build: Fix mingw ssl gdi32 order [12]
|
|
||||||
o build: Fix support for PKG_CONFIG
|
|
||||||
o MacOSX-Framework: sdk regex fix for sdk 10.10 and later
|
|
||||||
o socks: Fix incorrect port numbers in failed connect messages
|
|
||||||
o curl.1: -E: s/private certificate/client certificate
|
|
||||||
o curl.h: s/HTTPPOST_/CURL_HTTPOST_ [13]
|
|
||||||
o curl_formadd: support >2GB files on windows [14]
|
|
||||||
o http redirects: %-encode bytes outside of ascii range [15]
|
|
||||||
o rawstr: Speed up Curl_raw_toupper by 40%
|
|
||||||
o curl_ntlm_core: fix 2 curl_off_t constant overflows.
|
|
||||||
o getinfo: CURLINFO_ACTIVESOCKET: fix bad socket value
|
|
||||||
o tftp tests: verify sent options too
|
|
||||||
o imap: Don't call imap_atom() when no mailbox specified in LIST command
|
|
||||||
o imap: Fixed double quote in LIST command when mailbox contains spaces
|
|
||||||
o imap: Don't check for continuation when executing a CUSTOMREQUEST [16]
|
|
||||||
o acinclude: Remove check for 16-bit curl_off_t
|
|
||||||
o BoringSSL: Work with stricter BIO_get_mem_data() [17]
|
|
||||||
o cmake: Add missing feature macros in config header [18]
|
|
||||||
o sasl_sspi: fixed unicode build for digest authentication [19]
|
|
||||||
o sasl_sspi: fix identity memory leak in digest authentication
|
|
||||||
o unit1602: Fixed failure in torture test
|
|
||||||
o unit1603: Added unit tests for hash functions
|
|
||||||
o vtls/openssl: remove unused traces of yassl ifdefs
|
|
||||||
o openssl: remove #ifdefs for < 0.9.7 support
|
|
||||||
o typecheck-gcc.h: add some missing options
|
|
||||||
o curl: mark two more options strings for --libcurl output
|
|
||||||
o openssl: Free modules on cleanup [20]
|
|
||||||
|
|
||||||
This release includes the following known bugs:
|
This release includes the following known bugs:
|
||||||
|
|
||||||
@@ -76,35 +25,17 @@ This release includes the following known bugs:
|
|||||||
This release would not have looked like this without help, code, reports and
|
This release would not have looked like this without help, code, reports and
|
||||||
advice from friends like these:
|
advice from friends like these:
|
||||||
|
|
||||||
Anders Bakken, Dan Fandrich, Daniel Hwang, Daniel Stenberg, Dmitry S. Baikov,
|
Alessandro Ghedini, Alexander Elgert, Daniel Stenberg, Kamil Dudka,
|
||||||
Douglas Creager, Erik Johansson, Gisle Vanem, Javier G. Sogo, John Levon,
|
Oren Souroujon, Patrick Rapin, Viktor Szakáts, Yehezkel Horowitz,
|
||||||
Jonas Minnberg, Justin Ehlert, Kamil Dudka, Kang Lin, Kurt Fankhauser,
|
(8 contributors)
|
||||||
Lauri Kasanen, Marcel Raad, Patrick Monnerat, Rainer Jung, Ray Satiro,
|
|
||||||
Richard Hosking, Sebastian Pohlschmidt, Stefan Bühler, Steve Holme,
|
|
||||||
Svyatoslav Mishyn, Tatsuhiro Tsujikawa, Tim Rühsen, xiangbin li,
|
|
||||||
(28 contributors)
|
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
|
||||||
References to bug reports and discussions on issues:
|
References to bug reports and discussions on issues:
|
||||||
|
|
||||||
[1] = http://curl.haxx.se/bug/?i=478
|
[1] = http://curl.haxx.se/mail/archive-2015-04/0046.html
|
||||||
[2] = http://curl.haxx.se/bug/?i=479
|
[2] = http://curl.haxx.se/bug/?i=231
|
||||||
[3] = http://curl.haxx.se/mail/lib-2015-10/0035.html
|
[3] = https://github.com/bagder/curl/issues/237
|
||||||
[4] = http://curl.haxx.se/bug/?i=346
|
[4] = https://github.com/bagder/curl/issues/235
|
||||||
[5] = http://curl.haxx.se/bug/?i=493
|
[5] = http://curl.haxx.se/docs/adv_20150429.html
|
||||||
[6] = http://curl.haxx.se/bug/?i=452
|
|
||||||
[7] = http://curl.haxx.se/bug/?i=496
|
|
||||||
[8] = http://curl.haxx.se/libcurl/c/CURLOPT_STREAM_DEPENDS.html
|
|
||||||
[9] = http://curl.haxx.se/libcurl/c/CURLOPT_STREAM_DEPENDS_E.html
|
|
||||||
[10] = http://curl.haxx.se/libcurl/c/CURLOPT_STREAM_WEIGHT.html
|
|
||||||
[11] = http://curl.haxx.se/bug/?i=480
|
|
||||||
[12] = https://github.com/bagder/curl/pull/501
|
|
||||||
[13] = http://curl.haxx.se/bug/?i=506
|
|
||||||
[14] = http://curl.haxx.se/bug/?i=425
|
|
||||||
[15] = http://curl.haxx.se/bug/?i=473
|
|
||||||
[16] = http://curl.haxx.se/bug/?i=486
|
|
||||||
[17] = http://curl.haxx.se/bug/?i=524
|
|
||||||
[18] = http://curl.haxx.se/bug/?i=523
|
|
||||||
[19] = http://curl.haxx.se/bug/?i=525
|
|
||||||
[20] = http://curl.haxx.se/bug/?i=526
|
|
77
acinclude.m4
77
acinclude.m4
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
#
|
#
|
||||||
# This software is licensed as described in the file COPYING, which
|
# This software is licensed as described in the file COPYING, which
|
||||||
# you should have received as part of this distribution. The terms
|
# you should have received as part of this distribution. The terms
|
||||||
@@ -1851,10 +1851,8 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
|
|||||||
AC_REQUIRE([AC_HEADER_TIME])dnl
|
AC_REQUIRE([AC_HEADER_TIME])dnl
|
||||||
AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
|
AC_CHECK_HEADERS(sys/types.h sys/time.h time.h)
|
||||||
AC_MSG_CHECKING([for monotonic clock_gettime])
|
AC_MSG_CHECKING([for monotonic clock_gettime])
|
||||||
#
|
AC_COMPILE_IFELSE([
|
||||||
if test "x$dontwant_rt" == "xno" ; then
|
AC_LANG_PROGRAM([[
|
||||||
AC_COMPILE_IFELSE([
|
|
||||||
AC_LANG_PROGRAM([[
|
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -1868,18 +1866,17 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
]],[[
|
]],[[
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
(void)clock_gettime(CLOCK_MONOTONIC, &ts);
|
(void)clock_gettime(CLOCK_MONOTONIC, &ts);
|
||||||
]])
|
]])
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
ac_cv_func_clock_gettime="yes"
|
ac_cv_func_clock_gettime="yes"
|
||||||
],[
|
],[
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
ac_cv_func_clock_gettime="no"
|
ac_cv_func_clock_gettime="no"
|
||||||
])
|
])
|
||||||
fi
|
|
||||||
dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
|
dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
|
||||||
dnl until library linking and run-time checks for clock_gettime succeed.
|
dnl until library linking and run-time checks for clock_gettime succeed.
|
||||||
])
|
])
|
||||||
@@ -2455,6 +2452,23 @@ AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
# This is only a temporary fix. This macro is here to replace the broken one
|
||||||
|
# delivered by the automake project (including the 1.9.6 release). As soon as
|
||||||
|
# they ship a working version we SHOULD remove this work-around.
|
||||||
|
|
||||||
|
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||||
|
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||||
|
test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
|
||||||
|
# Use eval to expand $SHELL
|
||||||
|
if eval "$MISSING --run true"; then
|
||||||
|
am_missing_run="$MISSING --run "
|
||||||
|
else
|
||||||
|
am_missing_run=
|
||||||
|
AC_MSG_WARN([`missing' script is too old or missing])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl CURL_VERIFY_RUNTIMELIBS
|
dnl CURL_VERIFY_RUNTIMELIBS
|
||||||
dnl -------------------------------------------------
|
dnl -------------------------------------------------
|
||||||
dnl Verify that the shared libs found so far can be used when running
|
dnl Verify that the shared libs found so far can be used when running
|
||||||
@@ -2662,7 +2676,7 @@ AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
|
|||||||
AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
|
AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path])
|
||||||
AC_MSG_RESULT([$capath (capath)])
|
AC_MSG_RESULT([$capath (capath)])
|
||||||
fi
|
fi
|
||||||
if test "x$ca" = "xno" && test "x$capath" = "xno"; then
|
if test "x$ca" == "xno" && test "x$capath" == "xno"; then
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
@@ -2837,6 +2851,7 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
|
|||||||
#
|
#
|
||||||
x_LP64_long=""
|
x_LP64_long=""
|
||||||
x_LP32_long=""
|
x_LP32_long=""
|
||||||
|
x_LP16_long=""
|
||||||
#
|
#
|
||||||
if test "$ac_cv_sizeof_long" -eq "8" &&
|
if test "$ac_cv_sizeof_long" -eq "8" &&
|
||||||
test "$ac_cv_sizeof_voidp" -ge "8"; then
|
test "$ac_cv_sizeof_voidp" -ge "8"; then
|
||||||
@@ -2844,6 +2859,9 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
|
|||||||
elif test "$ac_cv_sizeof_long" -eq "4" &&
|
elif test "$ac_cv_sizeof_long" -eq "4" &&
|
||||||
test "$ac_cv_sizeof_voidp" -ge "4"; then
|
test "$ac_cv_sizeof_voidp" -ge "4"; then
|
||||||
x_LP32_long="long"
|
x_LP32_long="long"
|
||||||
|
elif test "$ac_cv_sizeof_long" -eq "2" &&
|
||||||
|
test "$ac_cv_sizeof_voidp" -ge "2"; then
|
||||||
|
x_LP16_long="long"
|
||||||
fi
|
fi
|
||||||
#
|
#
|
||||||
dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
|
dnl DO_CURL_OFF_T_CHECK results are stored in next 3 vars
|
||||||
@@ -2877,6 +2895,17 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
|
|||||||
done
|
done
|
||||||
AC_MSG_RESULT([$curl_typeof_curl_off_t])
|
AC_MSG_RESULT([$curl_typeof_curl_off_t])
|
||||||
fi
|
fi
|
||||||
|
if test "$curl_typeof_curl_off_t" = "unknown"; then
|
||||||
|
AC_MSG_CHECKING([for 16-bit curl_off_t data type])
|
||||||
|
for t2 in \
|
||||||
|
"$x_LP16_long" \
|
||||||
|
'int16_t' \
|
||||||
|
'__int16' \
|
||||||
|
'int' ; do
|
||||||
|
DO_CURL_OFF_T_CHECK([$t2], [2])
|
||||||
|
done
|
||||||
|
AC_MSG_RESULT([$curl_typeof_curl_off_t])
|
||||||
|
fi
|
||||||
if test "$curl_typeof_curl_off_t" = "unknown"; then
|
if test "$curl_typeof_curl_off_t" = "unknown"; then
|
||||||
AC_MSG_ERROR([cannot find data type for curl_off_t.])
|
AC_MSG_ERROR([cannot find data type for curl_off_t.])
|
||||||
fi
|
fi
|
||||||
@@ -3037,14 +3066,12 @@ dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir.
|
|||||||
dnl
|
dnl
|
||||||
|
|
||||||
AC_DEFUN([CURL_CHECK_PKGCONFIG], [
|
AC_DEFUN([CURL_CHECK_PKGCONFIG], [
|
||||||
if test -n "$PKG_CONFIG"; then
|
|
||||||
PKGCONFIG="$PKG_CONFIG"
|
|
||||||
else
|
|
||||||
AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no],
|
|
||||||
[$PATH:/usr/bin:/usr/local/bin])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$PKGCONFIG" != "xno"; then
|
PKGCONFIG="no"
|
||||||
|
|
||||||
|
AC_PATH_TOOL( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
|
||||||
|
|
||||||
|
if test x$PKGCONFIG != xno; then
|
||||||
AC_MSG_CHECKING([for $1 options with pkg-config])
|
AC_MSG_CHECKING([for $1 options with pkg-config])
|
||||||
dnl ask pkg-config about $1
|
dnl ask pkg-config about $1
|
||||||
itexists=`CURL_EXPORT_PCDIR([$2]) dnl
|
itexists=`CURL_EXPORT_PCDIR([$2]) dnl
|
||||||
|
19
appveyor.yml
19
appveyor.yml
@@ -1,19 +0,0 @@
|
|||||||
version: 7.45.0.{build}
|
|
||||||
|
|
||||||
environment:
|
|
||||||
matrix:
|
|
||||||
- PRJ_GEN: "Visual Studio 11 2012 Win64"
|
|
||||||
BDIR: msvc2012
|
|
||||||
PRJ_CFG: Release
|
|
||||||
- PRJ_GEN: "Visual Studio 12 2013 Win64"
|
|
||||||
BDIR: msvc2013
|
|
||||||
PRJ_CFG: Release
|
|
||||||
- PRJ_GEN: "Visual Studio 14 2015 Win64"
|
|
||||||
BDIR: msvc2015
|
|
||||||
PRJ_CFG: Release
|
|
||||||
|
|
||||||
build_script:
|
|
||||||
- mkdir build.%BDIR%
|
|
||||||
- cd build.%BDIR%
|
|
||||||
- cmake .. -G"%PRJ_GEN%"
|
|
||||||
- cmake --build . --config %PRJ_CFG% --clean-first
|
|
@@ -318,8 +318,6 @@ for fname in .deps \
|
|||||||
ltsugar.m4 \
|
ltsugar.m4 \
|
||||||
ltversion.m4 \
|
ltversion.m4 \
|
||||||
lt~obsolete.m4 \
|
lt~obsolete.m4 \
|
||||||
missing \
|
|
||||||
install-sh \
|
|
||||||
stamp-h1 \
|
stamp-h1 \
|
||||||
stamp-h2 \
|
stamp-h2 \
|
||||||
stamp-h3 ; do
|
stamp-h3 ; do
|
||||||
@@ -331,7 +329,7 @@ done
|
|||||||
#
|
#
|
||||||
|
|
||||||
echo "buildconf: running libtoolize"
|
echo "buildconf: running libtoolize"
|
||||||
${libtoolize} --copy --force || die "libtoolize command failed"
|
${libtoolize} --copy --automake --force || die "libtoolize command failed"
|
||||||
|
|
||||||
# When using libtool 1.5.X (X < 26) we copy libtool.m4 to our local m4
|
# When using libtool 1.5.X (X < 26) we copy libtool.m4 to our local m4
|
||||||
# subdirectory and this local copy is patched to fix some warnings that
|
# subdirectory and this local copy is patched to fix some warnings that
|
||||||
|
374
buildconf.bat
374
buildconf.bat
@@ -1,352 +1,38 @@
|
|||||||
@echo off
|
@echo off
|
||||||
rem ***************************************************************************
|
REM
|
||||||
rem * _ _ ____ _
|
REM
|
||||||
rem * Project ___| | | | _ \| |
|
REM This batch file must be used to set up a git tree to build on
|
||||||
rem * / __| | | | |_) | |
|
REM systems where there is no autotools support (i.e. Microsoft).
|
||||||
rem * | (__| |_| | _ <| |___
|
REM
|
||||||
rem * \___|\___/|_| \_\_____|
|
REM This file is not included nor needed for curl's release
|
||||||
rem *
|
REM archives, neither for curl's daily snapshot archives.
|
||||||
rem * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
rem *
|
|
||||||
rem * This software is licensed as described in the file COPYING, which
|
|
||||||
rem * you should have received as part of this distribution. The terms
|
|
||||||
rem * are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
rem *
|
|
||||||
rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
rem * copies of the Software, and permit persons to whom the Software is
|
|
||||||
rem * furnished to do so, under the terms of the COPYING file.
|
|
||||||
rem *
|
|
||||||
rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
rem * KIND, either express or implied.
|
|
||||||
rem *
|
|
||||||
rem ***************************************************************************
|
|
||||||
|
|
||||||
rem NOTES
|
if exist GIT-INFO goto start_doing
|
||||||
rem
|
ECHO ERROR: This file shall only be used with a curl git tree checkout.
|
||||||
rem This batch file must be used to set up a git tree to build on systems where
|
goto end_all
|
||||||
rem there is no autotools support (i.e. DOS and Windows).
|
:start_doing
|
||||||
rem
|
|
||||||
rem This file is not included or required for curl's release archives or daily
|
|
||||||
rem snapshot archives.
|
|
||||||
|
|
||||||
:begin
|
REM create tool_hugehelp.c
|
||||||
rem Set our variables
|
if not exist src\tool_hugehelp.c.cvs goto end_hugehelp_c
|
||||||
if "%OS%" == "Windows_NT" setlocal
|
copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c
|
||||||
set MODE=GENERATE
|
:end_hugehelp_c
|
||||||
|
|
||||||
rem Switch to this batch file's directory
|
REM create Makefile
|
||||||
cd /d "%~0\.." 1>NUL 2>&1
|
if not exist Makefile.dist goto end_makefile
|
||||||
|
copy /Y Makefile.dist Makefile
|
||||||
|
:end_makefile
|
||||||
|
|
||||||
rem Check we are running from a curl git repository
|
REM create curlbuild.h
|
||||||
if not exist GIT-INFO goto norepo
|
if not exist include\curl\curlbuild.h.dist goto end_curlbuild_h
|
||||||
|
copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h
|
||||||
|
:end_curlbuild_h
|
||||||
|
|
||||||
rem Detect programs. HAVE_<PROGNAME>
|
REM setup c-ares git tree
|
||||||
rem When not found the variable is set undefined. The undefined pattern
|
if not exist ares\buildconf.bat goto end_c_ares
|
||||||
rem allows for statements like "if not defined HAVE_PERL (command)"
|
cd ares
|
||||||
groff --version <NUL 1>NUL 2>&1
|
call buildconf.bat
|
||||||
if errorlevel 1 (set HAVE_GROFF=) else (set HAVE_GROFF=Y)
|
cd ..
|
||||||
nroff --version <NUL 1>NUL 2>&1
|
:end_c_ares
|
||||||
if errorlevel 1 (set HAVE_NROFF=) else (set HAVE_NROFF=Y)
|
|
||||||
perl --version <NUL 1>NUL 2>&1
|
|
||||||
if errorlevel 1 (set HAVE_PERL=) else (set HAVE_PERL=Y)
|
|
||||||
gzip --version <NUL 1>NUL 2>&1
|
|
||||||
if errorlevel 1 (set HAVE_GZIP=) else (set HAVE_GZIP=Y)
|
|
||||||
|
|
||||||
:parseArgs
|
:end_all
|
||||||
if "%~1" == "" goto start
|
|
||||||
|
|
||||||
if /i "%~1" == "-clean" (
|
|
||||||
set MODE=CLEAN
|
|
||||||
) else if /i "%~1" == "-?" (
|
|
||||||
goto syntax
|
|
||||||
) else if /i "%~1" == "-h" (
|
|
||||||
goto syntax
|
|
||||||
) else if /i "%~1" == "-help" (
|
|
||||||
goto syntax
|
|
||||||
) else (
|
|
||||||
goto unknown
|
|
||||||
)
|
|
||||||
|
|
||||||
shift & goto parseArgs
|
|
||||||
|
|
||||||
:start
|
|
||||||
if "%MODE%" == "GENERATE" (
|
|
||||||
echo.
|
|
||||||
echo Generating prerequisite files
|
|
||||||
|
|
||||||
call :generate
|
|
||||||
if errorlevel 4 goto nogencurlbuild
|
|
||||||
if errorlevel 3 goto nogenhugehelp
|
|
||||||
if errorlevel 2 goto nogenmakefile
|
|
||||||
if errorlevel 1 goto warning
|
|
||||||
|
|
||||||
) else (
|
|
||||||
echo.
|
|
||||||
echo Removing prerequisite files
|
|
||||||
|
|
||||||
call :clean
|
|
||||||
if errorlevel 3 goto nocleancurlbuild
|
|
||||||
if errorlevel 2 goto nocleanhugehelp
|
|
||||||
if errorlevel 1 goto nocleanmakefile
|
|
||||||
)
|
|
||||||
|
|
||||||
goto success
|
|
||||||
|
|
||||||
rem Main generate function.
|
|
||||||
rem
|
|
||||||
rem Returns:
|
|
||||||
rem
|
|
||||||
rem 0 - success
|
|
||||||
rem 1 - success with simplified tool_hugehelp.c
|
|
||||||
rem 2 - failed to generate Makefile
|
|
||||||
rem 3 - failed to generate tool_hugehelp.c
|
|
||||||
rem 4 - failed to generate curlbuild.h
|
|
||||||
rem
|
|
||||||
:generate
|
|
||||||
if "%OS%" == "Windows_NT" setlocal
|
|
||||||
set BASIC_HUGEHELP=0
|
|
||||||
|
|
||||||
rem Create Makefile
|
|
||||||
echo * %CD%\Makefile
|
|
||||||
if exist Makefile.dist (
|
|
||||||
copy /Y Makefile.dist Makefile 1>NUL 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
if "%OS%" == "Windows_NT" endlocal
|
|
||||||
exit /B 2
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
rem Create tool_hugehelp.c
|
|
||||||
echo * %CD%\src\tool_hugehelp.c
|
|
||||||
call :genHugeHelp
|
|
||||||
if errorlevel 2 (
|
|
||||||
if "%OS%" == "Windows_NT" endlocal
|
|
||||||
exit /B 3
|
|
||||||
)
|
|
||||||
if errorlevel 1 (
|
|
||||||
set BASIC_HUGEHELP=1
|
|
||||||
)
|
|
||||||
cmd /c exit 0
|
|
||||||
|
|
||||||
rem Create curlbuild.h
|
|
||||||
echo * %CD%\include\curl\curlbuild.h
|
|
||||||
if exist include\curl\curlbuild.h.dist (
|
|
||||||
copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h 1>NUL 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
if "%OS%" == "Windows_NT" endlocal
|
|
||||||
exit /B 4
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
rem Setup c-ares git tree
|
|
||||||
if exist ares\buildconf.bat (
|
|
||||||
echo.
|
|
||||||
echo Configuring c-ares build environment
|
|
||||||
cd ares
|
|
||||||
call buildconf.bat
|
|
||||||
cd ..
|
|
||||||
)
|
|
||||||
|
|
||||||
if "%BASIC_HUGEHELP%" == "1" (
|
|
||||||
if "%OS%" == "Windows_NT" endlocal
|
|
||||||
exit /B 1
|
|
||||||
)
|
|
||||||
|
|
||||||
if "%OS%" == "Windows_NT" endlocal
|
|
||||||
exit /B 0
|
|
||||||
|
|
||||||
rem Main clean function.
|
|
||||||
rem
|
|
||||||
rem Returns:
|
|
||||||
rem
|
|
||||||
rem 0 - success
|
|
||||||
rem 1 - failed to clean Makefile
|
|
||||||
rem 2 - failed to clean tool_hugehelp.c
|
|
||||||
rem 3 - failed to clean curlbuild.h
|
|
||||||
rem
|
|
||||||
:clean
|
|
||||||
rem Remove Makefile
|
|
||||||
echo * %CD%\Makefile
|
|
||||||
if exist Makefile (
|
|
||||||
del Makefile 2>NUL
|
|
||||||
if exist Makefile (
|
|
||||||
exit /B 1
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
rem Remove tool_hugehelp.c
|
|
||||||
echo * %CD%\src\tool_hugehelp.c
|
|
||||||
if exist src\tool_hugehelp.c (
|
|
||||||
del src\tool_hugehelp.c 2>NUL
|
|
||||||
if exist src\tool_hugehelp.c (
|
|
||||||
exit /B 2
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
rem Remove curlbuild.h
|
|
||||||
echo * %CD%\include\curl\curlbuild.h
|
|
||||||
if exist include\curl\curlbuild.h (
|
|
||||||
del include\curl\curlbuild.h 2>NUL
|
|
||||||
if exist include\curl\curlbuild.h (
|
|
||||||
exit /B 3
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
exit /B
|
|
||||||
|
|
||||||
rem Function to generate src\tool_hugehelp.c
|
|
||||||
rem
|
|
||||||
rem Returns:
|
|
||||||
rem
|
|
||||||
rem 0 - full tool_hugehelp.c generated
|
|
||||||
rem 1 - simplified tool_hugehelp.c
|
|
||||||
rem 2 - failure
|
|
||||||
rem
|
|
||||||
:genHugeHelp
|
|
||||||
if "%OS%" == "Windows_NT" setlocal
|
|
||||||
set LC_ALL=C
|
|
||||||
set ROFFCMD=
|
|
||||||
set BASIC=1
|
|
||||||
|
|
||||||
if defined HAVE_PERL (
|
|
||||||
if defined HAVE_GROFF (
|
|
||||||
set ROFFCMD=groff -mtty-char -Tascii -P-c -man
|
|
||||||
) else if defined HAVE_NROFF (
|
|
||||||
set ROFFCMD=nroff -c -Tascii -man
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if defined ROFFCMD (
|
|
||||||
echo #include "tool_setup.h"> src\tool_hugehelp.c
|
|
||||||
echo #include "tool_hugehelp.h">> src\tool_hugehelp.c
|
|
||||||
|
|
||||||
if defined HAVE_GZIP (
|
|
||||||
echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c
|
|
||||||
)
|
|
||||||
|
|
||||||
%ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c
|
|
||||||
if defined HAVE_GZIP (
|
|
||||||
echo #else>> src\tool_hugehelp.c
|
|
||||||
%ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c
|
|
||||||
echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c
|
|
||||||
)
|
|
||||||
|
|
||||||
set BASIC=0
|
|
||||||
) else (
|
|
||||||
if exist src\tool_hugehelp.c.cvs (
|
|
||||||
copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1
|
|
||||||
) else (
|
|
||||||
echo #include "tool_setup.h"> src\tool_hugehelp.c
|
|
||||||
echo #include "tool_hugehelp.hd">> src\tool_hugehelp.c
|
|
||||||
echo.>> src\tool_hugehelp.c
|
|
||||||
echo void hugehelp(void^)>> src\tool_hugehelp.c
|
|
||||||
echo {>> src\tool_hugehelp.c
|
|
||||||
echo #ifdef USE_MANUAL>> src\tool_hugehelp.c
|
|
||||||
echo fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c
|
|
||||||
echo #endif>> src\tool_hugehelp.c
|
|
||||||
echo }>> src\tool_hugehelp.c
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1
|
|
||||||
if errorlevel 1 (
|
|
||||||
if "%OS%" == "Windows_NT" endlocal
|
|
||||||
exit /B 2
|
|
||||||
)
|
|
||||||
|
|
||||||
if "%BASIC%" == "1" (
|
|
||||||
if "%OS%" == "Windows_NT" endlocal
|
|
||||||
exit /B 1
|
|
||||||
)
|
|
||||||
|
|
||||||
if "%OS%" == "Windows_NT" endlocal
|
|
||||||
exit /B 0
|
|
||||||
|
|
||||||
rem Function to clean-up local variables under DOS, Windows 3.x and
|
|
||||||
rem Windows 9x as setlocal isn't available until Windows NT
|
|
||||||
rem
|
|
||||||
:dosCleanup
|
|
||||||
set MODE=
|
|
||||||
set HAVE_GROFF=
|
|
||||||
set HAVE_NROFF=
|
|
||||||
set HAVE_PERL=
|
|
||||||
set HAVE_GZIP=
|
|
||||||
set BASIC_HUGEHELP=
|
|
||||||
set LC_ALL
|
|
||||||
set ROFFCMD=
|
|
||||||
set BASIC=
|
|
||||||
|
|
||||||
exit /B
|
|
||||||
|
|
||||||
:syntax
|
|
||||||
rem Display the help
|
|
||||||
echo.
|
|
||||||
echo Usage: buildconf [-clean]
|
|
||||||
echo.
|
|
||||||
echo -clean - Removes the files
|
|
||||||
goto error
|
|
||||||
|
|
||||||
:unknown
|
|
||||||
echo.
|
|
||||||
echo Error: Unknown argument '%1'
|
|
||||||
goto error
|
|
||||||
|
|
||||||
:norepo
|
|
||||||
echo.
|
|
||||||
echo Error: This batch file should only be used with a curl git repository
|
|
||||||
goto error
|
|
||||||
|
|
||||||
:nogenmakefile
|
|
||||||
echo.
|
|
||||||
echo Error: Unable to generate Makefile
|
|
||||||
goto error
|
|
||||||
|
|
||||||
:nogenhugehelp
|
|
||||||
echo.
|
|
||||||
echo Error: Unable to generate src\tool_hugehelp.c
|
|
||||||
goto error
|
|
||||||
|
|
||||||
:nogencurlbuild
|
|
||||||
echo.
|
|
||||||
echo Error: Unable to generate include\curl\curlbuild.h
|
|
||||||
goto error
|
|
||||||
|
|
||||||
:nocleanmakefile
|
|
||||||
echo.
|
|
||||||
echo Error: Unable to clean Makefile
|
|
||||||
goto error
|
|
||||||
|
|
||||||
:nocleanhugehelp
|
|
||||||
echo.
|
|
||||||
echo Error: Unable to clean src\tool_hugehelp.c
|
|
||||||
goto error
|
|
||||||
|
|
||||||
:nocleancurlbuild
|
|
||||||
echo.
|
|
||||||
echo Error: Unable to clean include\curl\curlbuild.h
|
|
||||||
goto error
|
|
||||||
|
|
||||||
:warning
|
|
||||||
echo.
|
|
||||||
echo Warning: The curl manual could not be integrated in the source. This means when
|
|
||||||
echo you build curl the manual will not be available (curl --man^). Integration of
|
|
||||||
echo the manual is not required and a summary of the options will still be available
|
|
||||||
echo (curl --help^). To integrate the manual your PATH is required to have
|
|
||||||
echo groff/nroff, perl and optionally gzip for compression.
|
|
||||||
goto success
|
|
||||||
|
|
||||||
:error
|
|
||||||
if "%OS%" == "Windows_NT" (
|
|
||||||
endlocal
|
|
||||||
) else (
|
|
||||||
call :dosCleanup
|
|
||||||
)
|
|
||||||
exit /B 1
|
|
||||||
|
|
||||||
:success
|
|
||||||
if "%OS%" == "Windows_NT" (
|
|
||||||
endlocal
|
|
||||||
) else (
|
|
||||||
call :dosCleanup
|
|
||||||
)
|
|
||||||
exit /B 0
|
|
||||||
|
236
configure.ac
236
configure.ac
@@ -39,7 +39,6 @@ AC_CONFIG_SRCDIR([lib/urldata.h])
|
|||||||
AC_CONFIG_HEADERS(lib/curl_config.h include/curl/curlbuild.h)
|
AC_CONFIG_HEADERS(lib/curl_config.h include/curl/curlbuild.h)
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
|
||||||
|
|
||||||
CURL_CHECK_OPTION_DEBUG
|
CURL_CHECK_OPTION_DEBUG
|
||||||
CURL_CHECK_OPTION_OPTIMIZE
|
CURL_CHECK_OPTION_OPTIMIZE
|
||||||
@@ -48,7 +47,6 @@ CURL_CHECK_OPTION_WERROR
|
|||||||
CURL_CHECK_OPTION_CURLDEBUG
|
CURL_CHECK_OPTION_CURLDEBUG
|
||||||
CURL_CHECK_OPTION_SYMBOL_HIDING
|
CURL_CHECK_OPTION_SYMBOL_HIDING
|
||||||
CURL_CHECK_OPTION_ARES
|
CURL_CHECK_OPTION_ARES
|
||||||
CURL_CHECK_OPTION_RT
|
|
||||||
|
|
||||||
XC_CHECK_PATH_SEPARATOR
|
XC_CHECK_PATH_SEPARATOR
|
||||||
|
|
||||||
@@ -149,7 +147,7 @@ AC_SUBST(PKGADD_VENDOR)
|
|||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl initialize all the info variables
|
dnl initialize all the info variables
|
||||||
curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )"
|
curl_ssl_msg="no (--with-{ssl,gnutls,nss,polarssl,cyassl,axtls,winssl,darwinssl} )"
|
||||||
curl_ssh_msg="no (--with-libssh2)"
|
curl_ssh_msg="no (--with-libssh2)"
|
||||||
curl_zlib_msg="no (--with-zlib)"
|
curl_zlib_msg="no (--with-zlib)"
|
||||||
curl_gss_msg="no (--with-gssapi)"
|
curl_gss_msg="no (--with-gssapi)"
|
||||||
@@ -167,7 +165,6 @@ curl_verbose_msg="enabled (--disable-verbose)"
|
|||||||
curl_rtsp_msg="no (--enable-rtsp)"
|
curl_rtsp_msg="no (--enable-rtsp)"
|
||||||
curl_rtmp_msg="no (--with-librtmp)"
|
curl_rtmp_msg="no (--with-librtmp)"
|
||||||
curl_mtlnk_msg="no (--with-libmetalink)"
|
curl_mtlnk_msg="no (--with-libmetalink)"
|
||||||
curl_psl_msg="no (--with-libpsl)"
|
|
||||||
|
|
||||||
init_ssl_msg=${curl_ssl_msg}
|
init_ssl_msg=${curl_ssl_msg}
|
||||||
|
|
||||||
@@ -1197,6 +1194,8 @@ if test x"$want_gss" = xyes; then
|
|||||||
if test -z "$GSSAPI_INCS"; then
|
if test -z "$GSSAPI_INCS"; then
|
||||||
if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
|
if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
|
||||||
GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi`
|
GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi`
|
||||||
|
elif test -f "$GSSAPI_ROOT/bin/krb5-config"; then
|
||||||
|
GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
|
||||||
elif test -f "$KRB5CONFIG"; then
|
elif test -f "$KRB5CONFIG"; then
|
||||||
GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi`
|
GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi`
|
||||||
elif test "$GSSAPI_ROOT" != "yes"; then
|
elif test "$GSSAPI_ROOT" != "yes"; then
|
||||||
@@ -1399,24 +1398,6 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
|||||||
CLEANCPPFLAGS="$CPPFLAGS"
|
CLEANCPPFLAGS="$CPPFLAGS"
|
||||||
CLEANLIBS="$LIBS"
|
CLEANLIBS="$LIBS"
|
||||||
|
|
||||||
dnl This is for Msys/Mingw
|
|
||||||
case $host in
|
|
||||||
*-*-msys* | *-*-mingw*)
|
|
||||||
AC_MSG_CHECKING([for gdi32])
|
|
||||||
my_ac_save_LIBS=$LIBS
|
|
||||||
LIBS="-lgdi32 $LIBS"
|
|
||||||
AC_TRY_LINK([#include <windef.h>
|
|
||||||
#include <wingdi.h>],
|
|
||||||
[GdiFlush();],
|
|
||||||
[ dnl worked!
|
|
||||||
AC_MSG_RESULT([yes])],
|
|
||||||
[ dnl failed, restore LIBS
|
|
||||||
LIBS=$my_ac_save_LIBS
|
|
||||||
AC_MSG_RESULT(no)]
|
|
||||||
)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "$OPT_SSL" in
|
case "$OPT_SSL" in
|
||||||
yes)
|
yes)
|
||||||
dnl --with-ssl (without path) used
|
dnl --with-ssl (without path) used
|
||||||
@@ -1495,13 +1476,31 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
|||||||
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
|
CPPFLAGS="$CPPFLAGS $SSL_CPPFLAGS"
|
||||||
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
|
LDFLAGS="$LDFLAGS $SSL_LDFLAGS"
|
||||||
|
|
||||||
AC_CHECK_LIB(crypto, HMAC_Update,[
|
dnl This is for Msys/Mingw
|
||||||
|
case $host in
|
||||||
|
*-*-msys* | *-*-mingw*)
|
||||||
|
AC_MSG_CHECKING([for gdi32])
|
||||||
|
my_ac_save_LIBS=$LIBS
|
||||||
|
LIBS="-lgdi32 $LIBS"
|
||||||
|
AC_TRY_LINK([#include <windef.h>
|
||||||
|
#include <wingdi.h>],
|
||||||
|
[GdiFlush();],
|
||||||
|
[ dnl worked!
|
||||||
|
AC_MSG_RESULT([yes])],
|
||||||
|
[ dnl failed, restore LIBS
|
||||||
|
LIBS=$my_ac_save_LIBS
|
||||||
|
AC_MSG_RESULT(no)]
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_CHECK_LIB(crypto, CRYPTO_lock,[
|
||||||
HAVECRYPTO="yes"
|
HAVECRYPTO="yes"
|
||||||
LIBS="-lcrypto $LIBS"
|
LIBS="-lcrypto $LIBS"
|
||||||
],[
|
],[
|
||||||
LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL"
|
LDFLAGS="$CLEANLDFLAGS -L$LIB_OPENSSL"
|
||||||
CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
|
CPPFLAGS="$CLEANCPPFLAGS -I$PREFIX_OPENSSL/include/openssl -I$PREFIX_OPENSSL/include"
|
||||||
AC_CHECK_LIB(crypto, HMAC_Init_ex,[
|
AC_CHECK_LIB(crypto, CRYPTO_add_lock,[
|
||||||
HAVECRYPTO="yes"
|
HAVECRYPTO="yes"
|
||||||
LIBS="-lcrypto $LIBS"], [
|
LIBS="-lcrypto $LIBS"], [
|
||||||
LDFLAGS="$CLEANLDFLAGS"
|
LDFLAGS="$CLEANLDFLAGS"
|
||||||
@@ -1511,46 +1510,6 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
if test X"$HAVECRYPTO" = X"yes"; then
|
|
||||||
AC_MSG_CHECKING([OpenSSL linking without -ldl])
|
|
||||||
saved_libs=$LIBS
|
|
||||||
AC_TRY_LINK(
|
|
||||||
[
|
|
||||||
#include <openssl/evp.h>
|
|
||||||
],
|
|
||||||
[
|
|
||||||
SSLeay_add_all_algorithms();
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
LIBS="$saved_libs"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
AC_MSG_CHECKING([OpenSSL linking with -ldl])
|
|
||||||
LIBS="-ldl $LIBS"
|
|
||||||
AC_TRY_LINK(
|
|
||||||
[
|
|
||||||
#include <openssl/evp.h>
|
|
||||||
],
|
|
||||||
[
|
|
||||||
SSLeay_add_all_algorithms();
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
LIBS="$saved_libs -ldl"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
LIBS="$saved_libs"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test X"$HAVECRYPTO" = X"yes"; then
|
if test X"$HAVECRYPTO" = X"yes"; then
|
||||||
dnl This is only reasonable to do if crypto actually is there: check for
|
dnl This is only reasonable to do if crypto actually is there: check for
|
||||||
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
dnl SSL libs NOTE: it is important to do this AFTER the crypto lib
|
||||||
@@ -1622,8 +1581,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
|||||||
dnl Older versions of Cyassl (some time before 2.9.4) don't have
|
dnl Older versions of Cyassl (some time before 2.9.4) don't have
|
||||||
dnl SSL_get_shutdown (but this check won't actually detect it there
|
dnl SSL_get_shutdown (but this check won't actually detect it there
|
||||||
dnl as it's a macro that needs the header files be included)
|
dnl as it's a macro that needs the header files be included)
|
||||||
dnl BoringSSL didn't have DES_set_odd_parity for a while but now it is
|
dnl BoringSSL doesn't have DES_set_odd_parity
|
||||||
dnl back again.
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS( RAND_status \
|
AC_CHECK_FUNCS( RAND_status \
|
||||||
RAND_screen \
|
RAND_screen \
|
||||||
@@ -1635,22 +1593,14 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
|
|||||||
DES_set_odd_parity )
|
DES_set_odd_parity )
|
||||||
|
|
||||||
AC_MSG_CHECKING([for BoringSSL])
|
AC_MSG_CHECKING([for BoringSSL])
|
||||||
AC_COMPILE_IFELSE([
|
if test "x$ac_cv_func_DES_set_odd_parity" != "xyes"; then
|
||||||
AC_LANG_PROGRAM([[
|
curl_ssl_msg="enabled (BoringSSL)"
|
||||||
#include <openssl/base.h>
|
AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1,
|
||||||
]],[[
|
[Define to 1 if using BoringSSL.])
|
||||||
#ifndef OPENSSL_IS_BORINGSSL
|
AC_MSG_RESULT([yes])
|
||||||
#error not boringssl
|
else
|
||||||
#endif
|
AC_MSG_RESULT([no])
|
||||||
]])
|
fi
|
||||||
],[
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1,
|
|
||||||
[Define to 1 if using BoringSSL.])
|
|
||||||
],[
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([for libressl])
|
AC_MSG_CHECKING([for libressl])
|
||||||
AC_COMPILE_IFELSE([
|
AC_COMPILE_IFELSE([
|
||||||
AC_LANG_PROGRAM([[
|
AC_LANG_PROGRAM([[
|
||||||
@@ -1838,7 +1788,6 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
|
|||||||
AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH])
|
AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
AC_CHECK_FUNCS(gnutls_certificate_set_x509_key_file2)
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
@@ -1976,93 +1925,6 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl ----------------------------------------------------
|
|
||||||
dnl check for mbedTLS
|
|
||||||
dnl ----------------------------------------------------
|
|
||||||
|
|
||||||
OPT_MBEDTLS=no
|
|
||||||
|
|
||||||
_cppflags=$CPPFLAGS
|
|
||||||
_ldflags=$LDFLAGS
|
|
||||||
AC_ARG_WITH(mbedtls,dnl
|
|
||||||
AC_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to the installation root])
|
|
||||||
AC_HELP_STRING([--without-mbedtls], [disable mbedTLS detection]),
|
|
||||||
OPT_MBEDTLS=$withval)
|
|
||||||
|
|
||||||
if test "$curl_ssl_msg" = "$init_ssl_msg"; then
|
|
||||||
|
|
||||||
if test X"$OPT_MBEDTLS" != Xno; then
|
|
||||||
|
|
||||||
if test "$OPT_MBEDTLS" = "yes"; then
|
|
||||||
OPT_MBEDTLS=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "$OPT_MBEDTLS" ; then
|
|
||||||
dnl check for lib first without setting any new path
|
|
||||||
|
|
||||||
AC_CHECK_LIB(mbedtls, mbedtls_havege_init,
|
|
||||||
dnl libmbedtls found, set the variable
|
|
||||||
[
|
|
||||||
AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
|
|
||||||
AC_SUBST(USE_MBEDTLS, [1])
|
|
||||||
MBEDTLS_ENABLED=1
|
|
||||||
USE_MBEDTLS="yes"
|
|
||||||
curl_ssl_msg="enabled (mbedTLS)"
|
|
||||||
], [], -lmbedx509 -lmbedcrypto)
|
|
||||||
fi
|
|
||||||
|
|
||||||
addld=""
|
|
||||||
addlib=""
|
|
||||||
addcflags=""
|
|
||||||
mbedtlslib=""
|
|
||||||
|
|
||||||
if test "x$USE_MBEDTLS" != "xyes"; then
|
|
||||||
dnl add the path and test again
|
|
||||||
addld=-L$OPT_MBEDTLS/lib$libsuff
|
|
||||||
addcflags=-I$OPT_MBEDTLS/include
|
|
||||||
mbedtlslib=$OPT_MBEDTLS/lib$libsuff
|
|
||||||
|
|
||||||
LDFLAGS="$LDFLAGS $addld"
|
|
||||||
if test "$addcflags" != "-I/usr/include"; then
|
|
||||||
CPPFLAGS="$CPPFLAGS $addcflags"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
|
|
||||||
[
|
|
||||||
AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
|
|
||||||
AC_SUBST(USE_MBEDTLS, [1])
|
|
||||||
MBEDTLS_ENABLED=1
|
|
||||||
USE_MBEDTLS="yes"
|
|
||||||
curl_ssl_msg="enabled (mbedTLS)"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
CPPFLAGS=$_cppflags
|
|
||||||
LDFLAGS=$_ldflags
|
|
||||||
], -lmbedx509 -lmbedcrypto)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$USE_MBEDTLS" = "xyes"; then
|
|
||||||
AC_MSG_NOTICE([detected mbedTLS])
|
|
||||||
|
|
||||||
LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
|
|
||||||
|
|
||||||
if test -n "$mbedtlslib"; then
|
|
||||||
dnl when shared libs were found in a path that the run-time
|
|
||||||
dnl linker doesn't search through, we need to add it to
|
|
||||||
dnl LD_LIBRARY_PATH to prevent further configure tests to fail
|
|
||||||
dnl due to this
|
|
||||||
if test "x$cross_compiling" != "xyes"; then
|
|
||||||
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$mbedtlslib"
|
|
||||||
export LD_LIBRARY_PATH
|
|
||||||
AC_MSG_NOTICE([Added $mbedtlslib to LD_LIBRARY_PATH])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi dnl mbedTLS not disabled
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl ----------------------------------------------------
|
dnl ----------------------------------------------------
|
||||||
dnl check for CyaSSL
|
dnl check for CyaSSL
|
||||||
dnl ----------------------------------------------------
|
dnl ----------------------------------------------------
|
||||||
@@ -2387,7 +2249,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then
|
if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then
|
||||||
AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.])
|
AC_MSG_WARN([SSL disabled, you will not be able to use HTTPS, FTPS, NTLM and more.])
|
||||||
AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.])
|
AC_MSG_WARN([Use --with-ssl, --with-gnutls, --with-polarssl, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.])
|
||||||
else
|
else
|
||||||
@@ -2402,27 +2264,6 @@ dnl **********************************************************************
|
|||||||
|
|
||||||
CURL_CHECK_CA_BUNDLE
|
CURL_CHECK_CA_BUNDLE
|
||||||
|
|
||||||
dnl **********************************************************************
|
|
||||||
dnl Check for libpsl
|
|
||||||
dnl **********************************************************************
|
|
||||||
|
|
||||||
AC_ARG_WITH(libpsl,
|
|
||||||
AS_HELP_STRING([--without-libpsl],
|
|
||||||
[disable support for libpsl cookie checking]),
|
|
||||||
with_libpsl=$withval,
|
|
||||||
with_libpsl=yes)
|
|
||||||
if test $with_libpsl != "no"; then
|
|
||||||
AC_SEARCH_LIBS(psl_builtin, psl,
|
|
||||||
[curl_psl_msg="yes";
|
|
||||||
AC_DEFINE([USE_LIBPSL], [1], [PSL support enabled])
|
|
||||||
],
|
|
||||||
[curl_psl_msg="no (libpsl not found)";
|
|
||||||
AC_MSG_WARN([libpsl was not found])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([USE_LIBPSL], [test "$curl_psl_msg" = "yes"])
|
|
||||||
|
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
dnl Check for libmetalink
|
dnl Check for libmetalink
|
||||||
dnl **********************************************************************
|
dnl **********************************************************************
|
||||||
@@ -3002,9 +2843,7 @@ if test X"$want_h2" != Xno; then
|
|||||||
CPPFLAGS="$CPPFLAGS $CPP_H2"
|
CPPFLAGS="$CPPFLAGS $CPP_H2"
|
||||||
LIBS="$LIB_H2 $LIBS"
|
LIBS="$LIB_H2 $LIBS"
|
||||||
|
|
||||||
# use nghttp2_option_set_no_recv_client_magic to require nghttp2
|
AC_CHECK_LIB(nghttp2, nghttp2_session_callbacks_set_send_callback,
|
||||||
# >= 1.0.0
|
|
||||||
AC_CHECK_LIB(nghttp2, nghttp2_option_set_no_recv_client_magic,
|
|
||||||
[
|
[
|
||||||
AC_CHECK_HEADERS(nghttp2/nghttp2.h,
|
AC_CHECK_HEADERS(nghttp2/nghttp2.h,
|
||||||
curl_h2_msg="enabled (nghttp2)"
|
curl_h2_msg="enabled (nghttp2)"
|
||||||
@@ -3378,7 +3217,7 @@ if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then
|
|||||||
[Options --enable-threaded-resolver and --enable-ares are mutually exclusive])
|
[Options --enable-threaded-resolver and --enable-ares are mutually exclusive])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then
|
if test "$want_thres" = "yes"; then
|
||||||
AC_CHECK_HEADER(pthread.h,
|
AC_CHECK_HEADER(pthread.h,
|
||||||
[ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have <pthread.h>])
|
[ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have <pthread.h>])
|
||||||
save_CFLAGS="$CFLAGS"
|
save_CFLAGS="$CFLAGS"
|
||||||
@@ -3646,10 +3485,6 @@ if test "x$HAVE_GSSAPI" = "x1"; then
|
|||||||
SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API"
|
SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$curl_psl_msg" = "xyes"; then
|
|
||||||
SUPPORT_FEATURES="$SUPPORT_FEATURES PSL"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
|
if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
|
||||||
\( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then
|
\( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then
|
||||||
SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO"
|
SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO"
|
||||||
@@ -3855,7 +3690,6 @@ AC_MSG_NOTICE([Configured to build curl/libcurl:
|
|||||||
RTSP support: ${curl_rtsp_msg}
|
RTSP support: ${curl_rtsp_msg}
|
||||||
RTMP support: ${curl_rtmp_msg}
|
RTMP support: ${curl_rtmp_msg}
|
||||||
metalink support: ${curl_mtlnk_msg}
|
metalink support: ${curl_mtlnk_msg}
|
||||||
PSL support: ${curl_psl_msg}
|
|
||||||
HTTP2 support: ${curl_h2_msg}
|
HTTP2 support: ${curl_h2_msg}
|
||||||
Protocols: ${SUPPORT_PROTOCOLS}
|
Protocols: ${SUPPORT_PROTOCOLS}
|
||||||
])
|
])
|
||||||
|
@@ -50,7 +50,7 @@ Cocoa
|
|||||||
D
|
D
|
||||||
|
|
||||||
Written by Kenneth Bogert
|
Written by Kenneth Bogert
|
||||||
http://dlang.org/library/std/net/curl.html
|
http://curl.haxx.se/libcurl/d/
|
||||||
|
|
||||||
Dylan
|
Dylan
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ Dylan
|
|||||||
Eiffel
|
Eiffel
|
||||||
|
|
||||||
Written by Eiffel Software
|
Written by Eiffel Software
|
||||||
https://room.eiffel.com/library/curl
|
http://curl.haxx.se/libcurl/eiffel/
|
||||||
|
|
||||||
Euphoria
|
Euphoria
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ Ferite
|
|||||||
|
|
||||||
Gambas
|
Gambas
|
||||||
|
|
||||||
http://gambas.sourceforge.net/
|
http://gambas.sourceforge.net
|
||||||
|
|
||||||
glib/GTK+
|
glib/GTK+
|
||||||
|
|
||||||
@@ -102,7 +102,8 @@ Haskell
|
|||||||
|
|
||||||
Java
|
Java
|
||||||
|
|
||||||
https://github.com/pjlegato/curl-java
|
Maintained by [blank]
|
||||||
|
http://curl.haxx.se/libcurl/java/
|
||||||
|
|
||||||
Julia
|
Julia
|
||||||
|
|
||||||
@@ -130,7 +131,7 @@ Mono
|
|||||||
.NET
|
.NET
|
||||||
|
|
||||||
libcurl-net by Jeffrey Phillips
|
libcurl-net by Jeffrey Phillips
|
||||||
https://sourceforge.net/projects/libcurl-net/
|
http://sourceforge.net/projects/libcurl-net/
|
||||||
|
|
||||||
node.js
|
node.js
|
||||||
|
|
||||||
@@ -145,7 +146,7 @@ Object-Pascal
|
|||||||
O'Caml
|
O'Caml
|
||||||
|
|
||||||
Written by Lars Nilsson
|
Written by Lars Nilsson
|
||||||
https://sourceforge.net/projects/ocurl/
|
http://sourceforge.net/projects/ocurl/
|
||||||
|
|
||||||
Pascal
|
Pascal
|
||||||
|
|
||||||
@@ -154,13 +155,13 @@ Pascal
|
|||||||
|
|
||||||
Perl
|
Perl
|
||||||
|
|
||||||
Maintained by Cris Bailiff and Bálint Szilakszi
|
Maintained by Cris Bailiff
|
||||||
https://github.com/szbalint/WWW--Curl
|
http://curl.haxx.se/libcurl/perl/
|
||||||
|
|
||||||
PHP
|
PHP
|
||||||
|
|
||||||
Written by Sterling Hughes
|
Written by Sterling Hughes
|
||||||
https://php.net/curl
|
http://curl.haxx.se/libcurl/php/
|
||||||
|
|
||||||
PostgreSQL
|
PostgreSQL
|
||||||
|
|
||||||
@@ -174,7 +175,8 @@ Python
|
|||||||
|
|
||||||
R
|
R
|
||||||
|
|
||||||
http://cran.r-project.org/package=curl
|
RCurl by Duncan Temple Lang
|
||||||
|
http://www.omegahat.org/RCurl/
|
||||||
|
|
||||||
Rexx
|
Rexx
|
||||||
|
|
||||||
@@ -195,15 +197,10 @@ Ruby
|
|||||||
ruby-curl-multi - written by Kristjan Petursson and Keith Rarick
|
ruby-curl-multi - written by Kristjan Petursson and Keith Rarick
|
||||||
http://curl-multi.rubyforge.org/
|
http://curl-multi.rubyforge.org/
|
||||||
|
|
||||||
Rust
|
|
||||||
|
|
||||||
curl-rust - by Carl Lerche
|
|
||||||
https://github.com/carllerche/curl-rust
|
|
||||||
|
|
||||||
Scheme
|
Scheme
|
||||||
|
|
||||||
Bigloo binding by Kirill Lisovsky
|
Bigloo binding by Kirill Lisovsky
|
||||||
http://www.metapaper.net/lisovsky/web/curl/
|
http://curl.haxx.se/libcurl/scheme/
|
||||||
|
|
||||||
S-Lang
|
S-Lang
|
||||||
|
|
||||||
@@ -233,7 +230,7 @@ Tcl
|
|||||||
Visual Basic
|
Visual Basic
|
||||||
|
|
||||||
libcurl-vb by Jeffrey Phillips
|
libcurl-vb by Jeffrey Phillips
|
||||||
https://sourceforge.net/projects/libcurl-vb/
|
http://sourceforge.net/projects/libcurl-vb/
|
||||||
|
|
||||||
Visual Foxpro
|
Visual Foxpro
|
||||||
|
|
||||||
@@ -253,8 +250,3 @@ XBLite
|
|||||||
|
|
||||||
Written by David Szafranski
|
Written by David Szafranski
|
||||||
http://perso.wanadoo.fr/xblite/libraries.html
|
http://perso.wanadoo.fr/xblite/libraries.html
|
||||||
|
|
||||||
Xojo
|
|
||||||
|
|
||||||
Written by Andrew Lambert
|
|
||||||
https://github.com/charonn0/RB-libcURL
|
|
||||||
|
@@ -1,32 +0,0 @@
|
|||||||
Contributor Code of Conduct
|
|
||||||
===========================
|
|
||||||
|
|
||||||
As contributors and maintainers of this project, we pledge to respect all
|
|
||||||
people who contribute through reporting issues, posting feature requests,
|
|
||||||
updating documentation, submitting pull requests or patches, and other
|
|
||||||
activities.
|
|
||||||
|
|
||||||
We are committed to making participation in this project a harassment-free
|
|
||||||
experience for everyone, regardless of level of experience, gender, gender
|
|
||||||
identity and expression, sexual orientation, disability, personal appearance,
|
|
||||||
body size, race, ethnicity, age, or religion.
|
|
||||||
|
|
||||||
Examples of unacceptable behavior by participants include the use of sexual
|
|
||||||
language or imagery, derogatory comments or personal attacks, trolling, public
|
|
||||||
or private harassment, insults, or other unprofessional conduct.
|
|
||||||
|
|
||||||
Project maintainers have the right and responsibility to remove, edit, or
|
|
||||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
|
||||||
that are not aligned to this Code of Conduct. Project maintainers who do not
|
|
||||||
follow the Code of Conduct may be removed from the project team.
|
|
||||||
|
|
||||||
This code of conduct applies both within project spaces and in public spaces
|
|
||||||
when an individual is representing the project or its community.
|
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
||||||
reported by opening an issue or contacting one or more of the project
|
|
||||||
maintainers.
|
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor
|
|
||||||
Covenant](http://contributor-covenant.org), version 1.1.0, available at
|
|
||||||
[http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/)
|
|
@@ -203,7 +203,7 @@
|
|||||||
|
|
||||||
You need to first checkout the repository:
|
You need to first checkout the repository:
|
||||||
|
|
||||||
git clone https://github.com/bagder/curl.git
|
git clone git://github.com/bagder/curl.git
|
||||||
|
|
||||||
You then proceed and edit all the files you like and you commit them to your
|
You then proceed and edit all the files you like and you commit them to your
|
||||||
local repository:
|
local repository:
|
||||||
@@ -245,8 +245,8 @@
|
|||||||
|
|
||||||
For unix-like operating systems:
|
For unix-like operating systems:
|
||||||
|
|
||||||
https://savannah.gnu.org/projects/patch/
|
http://www.gnu.org/software/patch/patch.html
|
||||||
https://www.gnu.org/software/diffutils/
|
http://www.gnu.org/directory/diffutils.html
|
||||||
|
|
||||||
For Windows:
|
For Windows:
|
||||||
|
|
||||||
|
176
docs/DISTRO-DILEMMA
Normal file
176
docs/DISTRO-DILEMMA
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
Date: February 11, 2007
|
||||||
|
Author: Daniel Stenberg <daniel@haxx.se>
|
||||||
|
URL: http://curl.haxx.se/legal/distro-dilemma.html
|
||||||
|
|
||||||
|
Condition
|
||||||
|
|
||||||
|
This document is written to describe the situation as it is right now.
|
||||||
|
libcurl 7.16.1 is currently the latest version available. Things may of
|
||||||
|
course change in the future.
|
||||||
|
|
||||||
|
This document reflects my view and understanding of these things. Please tell
|
||||||
|
me where and how you think I'm wrong, and I'll try to correct my mistakes.
|
||||||
|
|
||||||
|
Background
|
||||||
|
|
||||||
|
The Free Software Foundation has deemed the Original BSD license[1] to be
|
||||||
|
"incompatible"[2] with GPL[3]. I'd rather say it is the other way around, but
|
||||||
|
the point is the same: if you distribute a binary version of a GPL program,
|
||||||
|
it MUST NOT be linked with any Original BSD-licensed parts or libraries.
|
||||||
|
Doing so will violate the GPL license. For a long time, very many GPL
|
||||||
|
licensed programs have avoided this license mess by adding an exception[8] to
|
||||||
|
their license. And many others have just closed their eyes for this problem.
|
||||||
|
|
||||||
|
libcurl is MIT-style[4] licensed - how on earth did this dilemma fall onto
|
||||||
|
our plates?
|
||||||
|
|
||||||
|
libcurl is only a little library. libcurl can be built to use OpenSSL for its
|
||||||
|
SSL/TLS capabilities. OpenSSL is basically Original BSD licensed[5].
|
||||||
|
|
||||||
|
If libcurl built to use OpenSSL is used by a GPL-licensed application and you
|
||||||
|
decide to distribute a binary version of it (Linux distros - for example -
|
||||||
|
tend to), you have a clash. GPL vs Original BSD.
|
||||||
|
|
||||||
|
This dilemma is not libcurl-specific nor is it specific to any particular
|
||||||
|
Linux distro. (This article mentions and refers to Debian several times, but
|
||||||
|
only because Debian seems to be the only Linux distro to have faced this
|
||||||
|
issue yet since no other distro is shipping libcurl built with two SSL
|
||||||
|
libraries.)
|
||||||
|
|
||||||
|
Part of the Operating System
|
||||||
|
|
||||||
|
This would not be a problem if the used lib would be considered part of the
|
||||||
|
underlying operating system, as then the GPL license has an exception
|
||||||
|
clause[6] that allows applications to use such libs without having to be
|
||||||
|
allowed to distribute it or its sources. Possibly some distros will claim
|
||||||
|
that OpenSSL is part of their operating system.
|
||||||
|
|
||||||
|
Debian does however not take this stance and has officially(?) claimed that
|
||||||
|
OpenSSL is not a required part of the Debian operating system
|
||||||
|
|
||||||
|
Some people claim that this paragraph cannot be exploited this way by a Linux
|
||||||
|
distro, but I am not a lawyer and that is a discussion left outside of this
|
||||||
|
document.
|
||||||
|
|
||||||
|
GnuTLS
|
||||||
|
|
||||||
|
Since May 2005 libcurl can get built to use GnuTLS instead of OpenSSL. GnuTLS
|
||||||
|
is an LGPL[7] licensed library that offers a matching set of features as
|
||||||
|
OpenSSL does. Now, you can build and distribute an TLS/SSL capable libcurl
|
||||||
|
without including any Original BSD licensed code.
|
||||||
|
|
||||||
|
I believe Debian is the first (only?) distro that provides libcurl/GnuTLS
|
||||||
|
packages.
|
||||||
|
|
||||||
|
yassl
|
||||||
|
|
||||||
|
libcurl can get also get built to use yassl for the TLS/SSL layer. yassl is a
|
||||||
|
GPL[3] licensed library.
|
||||||
|
|
||||||
|
|
||||||
|
GnuTLS vs OpenSSL vs yassl
|
||||||
|
|
||||||
|
While these three libraries offer similar features, they are not equal.
|
||||||
|
libcurl does not (yet) offer a standardized stable ABI if you decide to
|
||||||
|
switch from using libcurl-openssl to libcurl-gnutls or vice-versa. The GnuTLS
|
||||||
|
and yassl support is very recent in libcurl and it has not been tested nor
|
||||||
|
used very extensively, while the OpenSSL equivalent code has been used and
|
||||||
|
thus matured since 1999.
|
||||||
|
|
||||||
|
GnuTLS
|
||||||
|
- LGPL licensed
|
||||||
|
- supports SRP
|
||||||
|
- lacks SSLv2 support
|
||||||
|
- lacks MD2 support (used by at least some CA certs)
|
||||||
|
- lacks the crypto functions libcurl uses for NTLM
|
||||||
|
|
||||||
|
OpenSSL
|
||||||
|
- Original BSD licensed
|
||||||
|
- lacks SRP
|
||||||
|
- supports SSLv2
|
||||||
|
- older and more widely used
|
||||||
|
- provides crypto functions libcurl uses for NTLM
|
||||||
|
- libcurl can do non-blocking connects with it in 7.15.4 and later
|
||||||
|
|
||||||
|
yassl
|
||||||
|
- GPL licensed
|
||||||
|
- much untested and unproven in the real work by (lib)curl users so we don't
|
||||||
|
know a lot about restrictions or benefits from using this
|
||||||
|
|
||||||
|
The Better License, Original BSD, GPL or LGPL?
|
||||||
|
|
||||||
|
It isn't obvious or without debate to any objective interested party that
|
||||||
|
either of these licenses are the "better" or even the "preferred" one in a
|
||||||
|
generic situation.
|
||||||
|
|
||||||
|
Instead, I think we should accept the fact that the SSL/TLS libraries and
|
||||||
|
their different licenses will fit different applications and their authors
|
||||||
|
differently depending on the applications' licenses and their general usage
|
||||||
|
pattern (considering how GPL and LGPL libraries for example can be burdensome
|
||||||
|
for embedded systems usage).
|
||||||
|
|
||||||
|
In Debian land, there seems to be a common opinion that LGPL is "maximally
|
||||||
|
compatible" with apps while Original BSD is not. Like this:
|
||||||
|
|
||||||
|
http://lists.debian.org/debian-devel/2005/09/msg01417.html
|
||||||
|
|
||||||
|
More SSL Libraries
|
||||||
|
|
||||||
|
In libcurl, there's no stopping us here. There are more Open Source/Free
|
||||||
|
SSL/TLS libraries out there and we would very much like to support them as
|
||||||
|
well, to offer application authors an even wider scope of choice.
|
||||||
|
|
||||||
|
Application Angle of this Problem
|
||||||
|
|
||||||
|
libcurl is built to use one SSL/TLS library. It uses a single fixed name (by
|
||||||
|
default) on the built/created lib file, and applications are built/linked to
|
||||||
|
use that single lib. Replacing one libcurl instance with another one that
|
||||||
|
uses the other SSL/TLS library might break one or more applications (due to
|
||||||
|
ABI differences and/or different feature set). You want your application to
|
||||||
|
use the libcurl it was built for.
|
||||||
|
|
||||||
|
Project cURL Angle of this Problem
|
||||||
|
|
||||||
|
We distribute libcurl and everyone may build libcurl with either library at
|
||||||
|
their choice. This problem is not directly a problem of ours. It merely
|
||||||
|
affects users - GPL application authors only - of our lib as it comes
|
||||||
|
included and delivered on some distros.
|
||||||
|
|
||||||
|
libcurl has different ABI when built with different SSL/TLS libraries due to
|
||||||
|
these reasons:
|
||||||
|
|
||||||
|
1. No one has worked on fixing this. The mutex/lock callbacks should be set
|
||||||
|
with a generic libcurl function that should use the proper underlying
|
||||||
|
functions.
|
||||||
|
|
||||||
|
2. The CURLOPT_SSL_CTX_FUNCTION option is not possible to "emulate" on GnuTLS
|
||||||
|
but simply requires OpenSSL.
|
||||||
|
|
||||||
|
3. There might be some other subtle differences just because nobody has yet
|
||||||
|
tried to make a fixed ABI like this.
|
||||||
|
|
||||||
|
Distro Angle of this Problem
|
||||||
|
|
||||||
|
To my knowledge there is only one distro that ships libcurl built with either
|
||||||
|
OpenSSL or GnuTLS.
|
||||||
|
|
||||||
|
Debian Linux is now (since mid September 2005) providing two different
|
||||||
|
libcurl packages, one for libcurl built with OpenSSL and one built with
|
||||||
|
GnuTLS. They use different .so names and can this both be installed in a
|
||||||
|
single system simultaneously. This has been said to be a transitional system
|
||||||
|
not desired to keep in the long run.
|
||||||
|
|
||||||
|
Footnotes
|
||||||
|
|
||||||
|
[1] = http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6
|
||||||
|
[2] = http://www.fsf.org/licensing/essays/bsd.html
|
||||||
|
[3] = http://www.fsf.org/licensing/licenses/gpl.html
|
||||||
|
[4] = http://curl.haxx.se/docs/copyright.html
|
||||||
|
[5] = http://www.openssl.org/source/license.html
|
||||||
|
[6] = http://www.fsf.org/licensing/licenses/gpl.html end of section 3
|
||||||
|
[7] = http://www.fsf.org/licensing/licenses/lgpl.html
|
||||||
|
[8] = http://en.wikipedia.org/wiki/OpenSSL_exception
|
||||||
|
|
||||||
|
Feedback/Updates provided by
|
||||||
|
|
||||||
|
Eric Cooper
|
38
docs/FAQ
38
docs/FAQ
@@ -21,7 +21,6 @@ FAQ
|
|||||||
1.12 I have a problem who can I chat with?
|
1.12 I have a problem who can I chat with?
|
||||||
1.13 curl's ECCN number?
|
1.13 curl's ECCN number?
|
||||||
1.14 How do I submit my patch?
|
1.14 How do I submit my patch?
|
||||||
1.15 How do I port libcurl to my OS?
|
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
2.1 configure doesn't find OpenSSL even when it is installed
|
2.1 configure doesn't find OpenSSL even when it is installed
|
||||||
@@ -352,7 +351,7 @@ FAQ
|
|||||||
cryptography. When doing so, the Export Control Classification Number (ECCN)
|
cryptography. When doing so, the Export Control Classification Number (ECCN)
|
||||||
is used to identify the level of export control etc.
|
is used to identify the level of export control etc.
|
||||||
|
|
||||||
ASF gives a good explanation at https://www.apache.org/dev/crypto.html
|
ASF gives a good explanation at http://www.apache.org/dev/crypto.html
|
||||||
|
|
||||||
We believe curl's number might be ECCN 5D002, another possibility is
|
We believe curl's number might be ECCN 5D002, another possibility is
|
||||||
5D992. It seems necessary to write them, asking to confirm.
|
5D992. It seems necessary to write them, asking to confirm.
|
||||||
@@ -381,19 +380,6 @@ FAQ
|
|||||||
|
|
||||||
Lots of more details are found in the CONTRIBUTE and INTERNALS docs.
|
Lots of more details are found in the CONTRIBUTE and INTERNALS docs.
|
||||||
|
|
||||||
1.15 How do I port libcurl to my OS?
|
|
||||||
|
|
||||||
Here's a rough step-by-step:
|
|
||||||
|
|
||||||
1. copy a suitable lib/config-*.h file as a start to lib/config-[youros].h
|
|
||||||
|
|
||||||
2. edit lib/config-[youros].h to match your OS and setup
|
|
||||||
|
|
||||||
3. edit lib/curl_setup.h to include config-[youros].h when your OS is
|
|
||||||
detected by the preprocessor, in the style others already exist
|
|
||||||
|
|
||||||
4. compile lib/*.c and make them into a library
|
|
||||||
|
|
||||||
|
|
||||||
2. Install Related Problems
|
2. Install Related Problems
|
||||||
|
|
||||||
@@ -1042,7 +1028,7 @@ FAQ
|
|||||||
timeout is set.
|
timeout is set.
|
||||||
|
|
||||||
See option TcpMaxConnectRetransmissions on this page:
|
See option TcpMaxConnectRetransmissions on this page:
|
||||||
https://support.microsoft.com/en-us/kb/175523/en-us
|
http://support.microsoft.com/?scid=kb%3Ben-us%3B175523&x=6&y=7
|
||||||
|
|
||||||
Also, even on non-Windows systems there may run a firewall or anti-virus
|
Also, even on non-Windows systems there may run a firewall or anti-virus
|
||||||
software or similar that accepts the connection but does not actually do
|
software or similar that accepts the connection but does not actually do
|
||||||
@@ -1059,7 +1045,7 @@ FAQ
|
|||||||
You'll find that even if D:\blah.txt does exist, cURL returns a 'file
|
You'll find that even if D:\blah.txt does exist, cURL returns a 'file
|
||||||
not found' error.
|
not found' error.
|
||||||
|
|
||||||
According to RFC 1738 (https://www.ietf.org/rfc/rfc1738.txt),
|
According to RFC 1738 (http://www.faqs.org/rfcs/rfc1738.html),
|
||||||
file:// URLs must contain a host component, but it is ignored by
|
file:// URLs must contain a host component, but it is ignored by
|
||||||
most implementations. In the above example, 'D:' is treated as the
|
most implementations. In the above example, 'D:' is treated as the
|
||||||
host component, and is taken away. Thus, cURL tries to open '/blah.txt'.
|
host component, and is taken away. Thus, cURL tries to open '/blah.txt'.
|
||||||
@@ -1163,13 +1149,13 @@ FAQ
|
|||||||
If you use a OpenSSL-powered libcurl in a multi-threaded environment, you
|
If you use a OpenSSL-powered libcurl in a multi-threaded environment, you
|
||||||
need to provide one or two locking functions:
|
need to provide one or two locking functions:
|
||||||
|
|
||||||
https://www.openssl.org/docs/crypto/threads.html
|
http://www.openssl.org/docs/crypto/threads.html
|
||||||
|
|
||||||
If you use a GnuTLS-powered libcurl in a multi-threaded environment, you
|
If you use a GnuTLS-powered libcurl in a multi-threaded environment, you
|
||||||
need to provide locking function(s) for libgcrypt (which is used by GnuTLS
|
need to provide locking function(s) for libgcrypt (which is used by GnuTLS
|
||||||
for the crypto functions).
|
for the crypto functions).
|
||||||
|
|
||||||
https://web.archive.org/web/20111103083330/http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
|
http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html
|
||||||
|
|
||||||
No special locking is needed with a NSS-powered libcurl. NSS is thread-safe.
|
No special locking is needed with a NSS-powered libcurl. NSS is thread-safe.
|
||||||
|
|
||||||
@@ -1345,7 +1331,7 @@ FAQ
|
|||||||
Also note that on many networks NATs or other IP-munging techniques are used
|
Also note that on many networks NATs or other IP-munging techniques are used
|
||||||
that makes you see and use a different IP address locally than what the
|
that makes you see and use a different IP address locally than what the
|
||||||
remote server will see you coming from. You may also consider using
|
remote server will see you coming from. You may also consider using
|
||||||
https://www.torproject.org/ .
|
http://www.torproject.org .
|
||||||
|
|
||||||
5.13 How do I stop an ongoing transfer?
|
5.13 How do I stop an ongoing transfer?
|
||||||
|
|
||||||
@@ -1536,7 +1522,9 @@ FAQ
|
|||||||
|
|
||||||
7.2 Who wrote PHP/CURL?
|
7.2 Who wrote PHP/CURL?
|
||||||
|
|
||||||
PHP/CURL was initially written by Sterling Hughes.
|
PHP/CURL is a module that comes with the regular PHP package. It depends and
|
||||||
|
uses libcurl, so you need to have libcurl installed properly first before
|
||||||
|
PHP/CURL can be used. PHP/CURL was initially written by Sterling Hughes.
|
||||||
|
|
||||||
7.3 Can I perform multiple requests using the same handle?
|
7.3 Can I perform multiple requests using the same handle?
|
||||||
|
|
||||||
@@ -1545,10 +1533,4 @@ FAQ
|
|||||||
unknown to me).
|
unknown to me).
|
||||||
|
|
||||||
After a transfer, you just set new options in the handle and make another
|
After a transfer, you just set new options in the handle and make another
|
||||||
transfer. This will make libcurl re-use the same connection if it can.
|
transfer. This will make libcurl to re-use the same connection if it can.
|
||||||
|
|
||||||
7.4 Does PHP/CURL have dependencies?
|
|
||||||
|
|
||||||
PHP/CURL is a module that comes with the regular PHP package. It depends on
|
|
||||||
and uses libcurl, so you need to have libcurl installed properly before
|
|
||||||
PHP/CURL can be used.
|
|
||||||
|
@@ -36,7 +36,7 @@ HTTP Cookies
|
|||||||
For a very long time, the only spec explaining how to use cookies was the
|
For a very long time, the only spec explaining how to use cookies was the
|
||||||
original Netscape spec from 1994: http://curl.haxx.se/rfc/cookie_spec.html
|
original Netscape spec from 1994: http://curl.haxx.se/rfc/cookie_spec.html
|
||||||
|
|
||||||
In 2011, RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) was finally published
|
In 2011, RFC6265 (http://www.ietf.org/rfc/rfc6265.txt) was finally published
|
||||||
and details how cookies work within HTTP.
|
and details how cookies work within HTTP.
|
||||||
|
|
||||||
1.2 Cookies saved to disk
|
1.2 Cookies saved to disk
|
||||||
|
107
docs/HTTP2.md
107
docs/HTTP2.md
@@ -1,107 +0,0 @@
|
|||||||
HTTP/2 with curl
|
|
||||||
================
|
|
||||||
|
|
||||||
[HTTP/2 Spec](https://www.rfc-editor.org/rfc/rfc7540.txt)
|
|
||||||
[http2 explained](http://daniel.haxx.se/http2/)
|
|
||||||
|
|
||||||
Build prerequisites
|
|
||||||
-------------------
|
|
||||||
- nghttp2
|
|
||||||
- OpenSSL, NSS, GnutTLS or PolarSSL with a new enough version
|
|
||||||
|
|
||||||
[nghttp2](https://nghttp2.org/)
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
libcurl uses this 3rd party library for the low level protocol handling
|
|
||||||
parts. The reason for this is that HTTP/2 is much more complex at that layer
|
|
||||||
than HTTP/1.1 (which we implement on our own) and that nghttp2 is an already
|
|
||||||
existing and well functional library.
|
|
||||||
|
|
||||||
We require at least version 1.0.0.
|
|
||||||
|
|
||||||
Over an http:// URL
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will
|
|
||||||
include an upgrade header in the initial request to the host to allow
|
|
||||||
upgrading to HTTP/2.
|
|
||||||
|
|
||||||
Possibly we can later introduce an option that will cause libcurl to fail if
|
|
||||||
not possible to upgrade. Possibly we introduce an option that makes libcurl
|
|
||||||
use HTTP/2 at once over http://
|
|
||||||
|
|
||||||
Over an https:// URL
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will use
|
|
||||||
ALPN (or NPN) to negotiate which protocol to continue with. Possibly introduce
|
|
||||||
an option that will cause libcurl to fail if not possible to use HTTP/2.
|
|
||||||
Consider options to explicitly disable ALPN and/or NPN.
|
|
||||||
|
|
||||||
ALPN is the TLS extension that HTTP/2 is expected to use. The NPN extension is
|
|
||||||
for a similar purpose, was made prior to ALPN and is used for SPDY so early
|
|
||||||
HTTP/2 servers are implemented using NPN before ALPN support is widespread.
|
|
||||||
|
|
||||||
SSL libs
|
|
||||||
--------
|
|
||||||
|
|
||||||
The challenge is the ALPN and NPN support and all our different SSL
|
|
||||||
backends. You may need a fairly updated SSL library version for it to
|
|
||||||
provide the necessary TLS features. Right now we support:
|
|
||||||
|
|
||||||
- OpenSSL: ALPN and NPN
|
|
||||||
- NSS: ALPN and NPN
|
|
||||||
- GnuTLS: ALPN
|
|
||||||
- PolarSSL: ALPN
|
|
||||||
|
|
||||||
Multiplexing
|
|
||||||
------------
|
|
||||||
|
|
||||||
Starting in 7.43.0, libcurl fully supports HTTP/2 multiplexing, which is the
|
|
||||||
term for doing multiple independent transfers over the same physical TCP
|
|
||||||
connection.
|
|
||||||
|
|
||||||
To take advantage of multiplexing, you need to use the multi interface and set
|
|
||||||
`CURLMOPT_PIPELINING` to `CURLPIPE_MULTIPLEX`. With that bit set, libcurl will
|
|
||||||
attempt to re-use existing HTTP/2 connections and just add a new stream over
|
|
||||||
that when doing subsequent parallel requests.
|
|
||||||
|
|
||||||
While libcurl sets up a connection to a HTTP server there is a period during
|
|
||||||
which it doesn't know if it can pipeline or do multiplexing and if you add new
|
|
||||||
transfers in that period, libcurl will default to start new connections for
|
|
||||||
those transfers. With the new option `CURLOPT_PIPEWAIT` (added in 7.43.0), you
|
|
||||||
can ask that a transfer should rather wait and see in case there's a
|
|
||||||
connection for the same host in progress that might end up being possible to
|
|
||||||
multiplex on. It favours keeping the number of connections low to the cost of
|
|
||||||
slightly longer time to first byte transferred.
|
|
||||||
|
|
||||||
Applications
|
|
||||||
------------
|
|
||||||
|
|
||||||
We hide HTTP/2's binary nature and convert received HTTP/2 traffic to headers
|
|
||||||
in HTTP 1.1 style. This allows applications to work unmodified.
|
|
||||||
|
|
||||||
curl tool
|
|
||||||
---------
|
|
||||||
|
|
||||||
curl offers the `--http2` command line option to enable use of HTTP/2
|
|
||||||
|
|
||||||
HTTP Alternative Services
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
Alt-Svc is a suggested extension with a corresponding frame (ALTSVC) in HTTP/2
|
|
||||||
that tells the client about an alternative "route" to the same content for the
|
|
||||||
same origin server that you get the response from. A browser or long-living
|
|
||||||
client can use that hint to create a new connection asynchronously. For
|
|
||||||
libcurl, we may introduce a way to bring such clues to the applicaton and/or
|
|
||||||
let a subsequent request use the alternate route
|
|
||||||
automatically. [Spec](https://tools.ietf.org/html/draft-ietf-httpbis-alt-svc-05)
|
|
||||||
|
|
||||||
TODO
|
|
||||||
----
|
|
||||||
|
|
||||||
- Provide API to set priorities / dependencies of individual streams
|
|
||||||
|
|
||||||
- Implement "prior-knowledge" HTTP/2 connecitons over clear text so that
|
|
||||||
curl can connect with HTTP/2 at once without 1.1+Upgrade.
|
|
||||||
|
|
68
docs/INSTALL
68
docs/INSTALL
@@ -173,13 +173,13 @@ Win32
|
|||||||
advice given above.
|
advice given above.
|
||||||
|
|
||||||
KB94248 - How To Use the C Run-Time
|
KB94248 - How To Use the C Run-Time
|
||||||
https://support.microsoft.com/kb/94248/en-us
|
http://support.microsoft.com/kb/94248/en-us
|
||||||
|
|
||||||
KB140584 - How to link with the correct C Run-Time (CRT) library
|
KB140584 - How to link with the correct C Run-Time (CRT) library
|
||||||
https://support.microsoft.com/kb/140584/en-us
|
http://support.microsoft.com/kb/140584/en-us
|
||||||
|
|
||||||
KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries
|
KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries
|
||||||
https://msdn.microsoft.com/en-us/library/ms235460
|
http://msdn.microsoft.com/en-us/library/ms235460
|
||||||
|
|
||||||
If your app is misbehaving in some strange way, or it is suffering
|
If your app is misbehaving in some strange way, or it is suffering
|
||||||
from memory corruption, before asking for further help, please try
|
from memory corruption, before asking for further help, please try
|
||||||
@@ -209,8 +209,8 @@ Win32
|
|||||||
environment variables, for example:
|
environment variables, for example:
|
||||||
|
|
||||||
set ZLIB_PATH=c:\zlib-1.2.8
|
set ZLIB_PATH=c:\zlib-1.2.8
|
||||||
set OPENSSL_PATH=c:\openssl-1.0.2c
|
set OPENSSL_PATH=c:\openssl-0.9.8zc
|
||||||
set LIBSSH2_PATH=c:\libssh2-1.6.0
|
set LIBSSH2_PATH=c:\libssh2-1.4.3
|
||||||
|
|
||||||
ATTENTION: if you want to build with libssh2 support you have to use latest
|
ATTENTION: if you want to build with libssh2 support you have to use latest
|
||||||
version 0.17 - previous versions will NOT work with 7.17.0 and later!
|
version 0.17 - previous versions will NOT work with 7.17.0 and later!
|
||||||
@@ -232,7 +232,7 @@ Win32
|
|||||||
- optional MingW32-built OpenLDAP SDK available from:
|
- optional MingW32-built OpenLDAP SDK available from:
|
||||||
http://www.gknw.net/mirror/openldap/
|
http://www.gknw.net/mirror/openldap/
|
||||||
- optional recent Novell CLDAP SDK available from:
|
- optional recent Novell CLDAP SDK available from:
|
||||||
https://www.novell.com/developer/ndk/ldap_libraries_for_c.html
|
http://developer.novell.com/ndk/cldap.htm
|
||||||
|
|
||||||
Cygwin
|
Cygwin
|
||||||
------
|
------
|
||||||
@@ -254,7 +254,7 @@ Win32
|
|||||||
If you use MSVC 6 it is required that you use the February 2003 edition of
|
If you use MSVC 6 it is required that you use the February 2003 edition of
|
||||||
the 'Platform SDK' which can be downloaded from:
|
the 'Platform SDK' which can be downloaded from:
|
||||||
|
|
||||||
https://www.microsoft.com/en-us/download/details.aspx?id=12261
|
http://www.microsoft.com/en-us/download/details.aspx?id=12261
|
||||||
|
|
||||||
Building any software with MSVC 6 without having PSDK installed is just
|
Building any software with MSVC 6 without having PSDK installed is just
|
||||||
asking for trouble down the road once you have released it, you might notice
|
asking for trouble down the road once you have released it, you might notice
|
||||||
@@ -263,7 +263,7 @@ Win32
|
|||||||
software built in such way will at some point regret having done so.
|
software built in such way will at some point regret having done so.
|
||||||
|
|
||||||
If the compiler has been updated with the installation of a service pack as
|
If the compiler has been updated with the installation of a service pack as
|
||||||
those mentioned in https://support.microsoft.com/kb/194022 the compiler can be
|
those mentioned in http://support.microsoft.com/kb/194022 the compiler can be
|
||||||
safely used to read source code, translate and make it object code.
|
safely used to read source code, translate and make it object code.
|
||||||
|
|
||||||
But, even with the service packs mentioned above installed, the resulting
|
But, even with the service packs mentioned above installed, the resulting
|
||||||
@@ -299,7 +299,7 @@ Win32
|
|||||||
Then run 'nmake vc' in curl's root directory.
|
Then run 'nmake vc' in curl's root directory.
|
||||||
|
|
||||||
If you want to compile with zlib support, you will need to build
|
If you want to compile with zlib support, you will need to build
|
||||||
zlib (http://www.zlib.net/) as well. Please read the zlib
|
zlib (http://www.gzip.org/zlib/) as well. Please read the zlib
|
||||||
documentation on how to compile zlib. Define the ZLIB_PATH environment
|
documentation on how to compile zlib. Define the ZLIB_PATH environment
|
||||||
variable to the location of zlib.h and zlib.lib, for example:
|
variable to the location of zlib.h and zlib.lib, for example:
|
||||||
|
|
||||||
@@ -471,15 +471,6 @@ Win32
|
|||||||
add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
|
add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for
|
||||||
dynamic import symbols.
|
dynamic import symbols.
|
||||||
|
|
||||||
Legacy Windows and SSL
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
WinSSL (specifically SChannel from Windows SSPI), is the native SSL library
|
|
||||||
in Windows. However, WinSSL in Windows <= XP is unable to connect to servers
|
|
||||||
that no longer support the legacy handshakes and algorithms used by those
|
|
||||||
versions. If you will be using curl in one of those earlier versions of
|
|
||||||
Windows you should choose another SSL backend such as OpenSSL.
|
|
||||||
|
|
||||||
Apple iOS and Mac OS X
|
Apple iOS and Mac OS X
|
||||||
======================
|
======================
|
||||||
|
|
||||||
@@ -674,10 +665,12 @@ NetWare
|
|||||||
- gnu make and awk running on the platform you compile on;
|
- gnu make and awk running on the platform you compile on;
|
||||||
native Win32 versions can be downloaded from:
|
native Win32 versions can be downloaded from:
|
||||||
http://www.gknw.net/development/prgtools/
|
http://www.gknw.net/development/prgtools/
|
||||||
- recent Novell LibC or Novell CLib SDK available from:
|
- recent Novell LibC SDK available from:
|
||||||
https://www.novell.com/developer/ndk/
|
http://developer.novell.com/ndk/libc.htm
|
||||||
|
- or recent Novell CLib SDK available from:
|
||||||
|
http://developer.novell.com/ndk/clib.htm
|
||||||
- optional recent Novell CLDAP SDK available from:
|
- optional recent Novell CLDAP SDK available from:
|
||||||
https://www.novell.com/developer/ndk/ldap_libraries_for_c.html
|
http://developer.novell.com/ndk/cldap.htm
|
||||||
- optional zlib sources (static or dynamic linking with zlib.imp);
|
- optional zlib sources (static or dynamic linking with zlib.imp);
|
||||||
sources with NetWare Makefile can be obtained from:
|
sources with NetWare Makefile can be obtained from:
|
||||||
http://www.gknw.net/mirror/zlib/
|
http://www.gknw.net/mirror/zlib/
|
||||||
@@ -832,7 +825,7 @@ VxWorks
|
|||||||
|
|
||||||
To build libcurl for VxWorks you need:
|
To build libcurl for VxWorks you need:
|
||||||
|
|
||||||
- CYGWIN (free, https://cygwin.com/)
|
- CYGWIN (free, http://cygwin.com/)
|
||||||
- Wind River Workbench (commercial)
|
- Wind River Workbench (commercial)
|
||||||
|
|
||||||
If you have CYGWIN and Workbench installed on you machine
|
If you have CYGWIN and Workbench installed on you machine
|
||||||
@@ -950,10 +943,9 @@ REDUCING SIZE
|
|||||||
important factor. First, be sure to set the CFLAGS variable when
|
important factor. First, be sure to set the CFLAGS variable when
|
||||||
configuring with any relevant compiler optimization flags to reduce the
|
configuring with any relevant compiler optimization flags to reduce the
|
||||||
size of the binary. For gcc, this would mean at minimum the -Os option,
|
size of the binary. For gcc, this would mean at minimum the -Os option,
|
||||||
and potentially the -march=X, -mdynamic-no-pic and -flto options as well,
|
and potentially the -march=X and -mdynamic-no-pic options as well, e.g.
|
||||||
e.g.
|
|
||||||
|
|
||||||
./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'...
|
./configure CFLAGS='-Os' ...
|
||||||
|
|
||||||
Note that newer compilers often produce smaller code than older versions
|
Note that newer compilers often produce smaller code than older versions
|
||||||
due to improved optimization.
|
due to improved optimization.
|
||||||
@@ -971,9 +963,7 @@ REDUCING SIZE
|
|||||||
--disable-ipv6 (disables support for IPv6)
|
--disable-ipv6 (disables support for IPv6)
|
||||||
--disable-manual (disables support for the built-in documentation)
|
--disable-manual (disables support for the built-in documentation)
|
||||||
--disable-proxy (disables support for HTTP and SOCKS proxies)
|
--disable-proxy (disables support for HTTP and SOCKS proxies)
|
||||||
--disable-unix-sockets (disables support for UNIX sockets)
|
|
||||||
--disable-verbose (eliminates debugging strings and error code strings)
|
--disable-verbose (eliminates debugging strings and error code strings)
|
||||||
--disable-versioned-symbols (disables support for versioned symbols)
|
|
||||||
--enable-hidden-symbols (eliminates unneeded symbols in the shared library)
|
--enable-hidden-symbols (eliminates unneeded symbols in the shared library)
|
||||||
--without-libidn (disables support for the libidn DNS library)
|
--without-libidn (disables support for the libidn DNS library)
|
||||||
--without-librtmp (disables support for RTMP)
|
--without-librtmp (disables support for RTMP)
|
||||||
@@ -986,7 +976,7 @@ REDUCING SIZE
|
|||||||
configure command-line, e.g.
|
configure command-line, e.g.
|
||||||
|
|
||||||
CFLAGS="-Os -ffunction-sections -fdata-sections \
|
CFLAGS="-Os -ffunction-sections -fdata-sections \
|
||||||
-fno-unwind-tables -fno-asynchronous-unwind-tables -flto" \
|
-fno-unwind-tables -fno-asynchronous-unwind-tables" \
|
||||||
LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
|
LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
|
||||||
|
|
||||||
Be sure also to strip debugging symbols from your binaries after
|
Be sure also to strip debugging symbols from your binaries after
|
||||||
@@ -996,9 +986,9 @@ REDUCING SIZE
|
|||||||
.comment section).
|
.comment section).
|
||||||
|
|
||||||
Using these techniques it is possible to create a basic HTTP-only shared
|
Using these techniques it is possible to create a basic HTTP-only shared
|
||||||
libcurl library for i386 Linux platforms that is only 109 KiB in size, and
|
libcurl library for i386 Linux platforms that is only 114 KiB in size, and
|
||||||
an FTP-only library that is 109 KiB in size (as of libcurl version 7.45.0,
|
an FTP-only library that is 115 KiB in size (as of libcurl version 7.35.0,
|
||||||
using gcc 4.9.2).
|
using gcc 4.8.2).
|
||||||
|
|
||||||
You may find that statically linking libcurl to your application will
|
You may find that statically linking libcurl to your application will
|
||||||
result in a lower total size than dynamically linking.
|
result in a lower total size than dynamically linking.
|
||||||
@@ -1096,18 +1086,18 @@ Useful URLs
|
|||||||
|
|
||||||
axTLS http://axtls.sourceforge.net/
|
axTLS http://axtls.sourceforge.net/
|
||||||
c-ares http://c-ares.haxx.se/
|
c-ares http://c-ares.haxx.se/
|
||||||
GNU GSS https://www.gnu.org/software/gss/
|
GNU GSS http://www.gnu.org/software/gss/
|
||||||
GnuTLS https://www.gnu.org/software/gnutls/
|
GnuTLS http://www.gnu.org/software/gnutls/
|
||||||
Heimdal http://www.h5l.org/
|
Heimdal http://www.pdc.kth.se/heimdal/
|
||||||
libidn https://www.gnu.org/software/libidn/
|
libidn http://www.gnu.org/software/libidn/
|
||||||
libmetalink https://launchpad.net/libmetalink/
|
libmetalink https://launchpad.net/libmetalink/
|
||||||
libssh2 http://www.libssh2.org/
|
libssh2 http://www.libssh2.org/
|
||||||
MIT Kerberos http://web.mit.edu/kerberos/www/dist/
|
MIT Kerberos http://web.mit.edu/kerberos/www/dist/
|
||||||
NSS https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
|
NSS http://www.mozilla.org/projects/security/pki/nss/
|
||||||
OpenLDAP http://www.openldap.org/
|
OpenLDAP http://www.openldap.org/
|
||||||
OpenSSL https://www.openssl.org/
|
OpenSSL http://www.openssl.org/
|
||||||
PolarSSL https://tls.mbed.org/
|
PolarSSL http://polarssl.org/
|
||||||
wolfSSL https://www.wolfssl.com/wolfSSL/
|
yassl http://www.yassl.com/
|
||||||
Zlib http://www.zlib.net/
|
Zlib http://www.zlib.net/
|
||||||
|
|
||||||
MingW http://www.mingw.org/
|
MingW http://www.mingw.org/
|
||||||
|
@@ -95,7 +95,7 @@ install instructions may produce erratic behaviour in DevCpp. For further info
|
|||||||
check the following sites
|
check the following sites
|
||||||
|
|
||||||
http://aditsu.freeunixhost.com/dev-cpp-faq.html
|
http://aditsu.freeunixhost.com/dev-cpp-faq.html
|
||||||
https://sourceforge.net/p/dev-cpp/discussion/48211/thread/2a85ea46
|
http://sourceforge.net/forum/message.php?msg_id=3252213
|
||||||
|
|
||||||
As I have mentioned before I will confine this to the SSL Library compilations
|
As I have mentioned before I will confine this to the SSL Library compilations
|
||||||
but the process is very similar for compilation of the executable - curl.exe;
|
but the process is very similar for compilation of the executable - curl.exe;
|
||||||
|
907
docs/INTERNALS
907
docs/INTERNALS
File diff suppressed because it is too large
Load Diff
@@ -3,9 +3,6 @@ join in and help us correct one or more of these! Also be sure to check the
|
|||||||
changelog of the current development status, as one or more of these problems
|
changelog of the current development status, as one or more of these problems
|
||||||
may have been fixed since this was written!
|
may have been fixed since this was written!
|
||||||
|
|
||||||
91. "curl_easy_perform hangs with imap and PolarSSL"
|
|
||||||
https://github.com/bagder/curl/issues/334
|
|
||||||
|
|
||||||
90. IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the
|
90. IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the
|
||||||
code reveals that pingpong.c contains some truncation code, at line 408,
|
code reveals that pingpong.c contains some truncation code, at line 408,
|
||||||
when it deems the server response to be too large truncating it to 40
|
when it deems the server response to be too large truncating it to 40
|
||||||
@@ -35,7 +32,6 @@ may have been fixed since this was written!
|
|||||||
CURLINFO_STARTTRANSFER_TIME is wrong. While using POST
|
CURLINFO_STARTTRANSFER_TIME is wrong. While using POST
|
||||||
CURLINFO_STARTTRANSFER_TIME minus CURLINFO_PRETRANSFER_TIME is near to zero
|
CURLINFO_STARTTRANSFER_TIME minus CURLINFO_PRETRANSFER_TIME is near to zero
|
||||||
every time.
|
every time.
|
||||||
https://github.com/bagder/curl/issues/218
|
|
||||||
http://curl.haxx.se/bug/view.cgi?id=1213
|
http://curl.haxx.se/bug/view.cgi?id=1213
|
||||||
|
|
||||||
84. CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS
|
84. CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS
|
||||||
@@ -62,6 +58,16 @@ may have been fixed since this was written!
|
|||||||
that can receive data. This is subject for change in the future.
|
that can receive data. This is subject for change in the future.
|
||||||
http://curl.haxx.se/bug/view.cgi?id=1116
|
http://curl.haxx.se/bug/view.cgi?id=1116
|
||||||
|
|
||||||
|
78. curl and libcurl don't always signal the client properly when "sending"
|
||||||
|
zero bytes files - it makes for example the command line client not creating
|
||||||
|
any file at all. Like when using FTP.
|
||||||
|
http://curl.haxx.se/bug/view.cgi?id=1063
|
||||||
|
|
||||||
|
76. The SOCKET type in Win64 is 64 bits large (and thus so is curl_socket_t on
|
||||||
|
that platform), and long is only 32 bits. It makes it impossible for
|
||||||
|
curl_easy_getinfo() to return a socket properly with the CURLINFO_LASTSOCKET
|
||||||
|
option as for all other operating systems.
|
||||||
|
|
||||||
75. NTLM authentication involving unicode user name or password only works
|
75. NTLM authentication involving unicode user name or password only works
|
||||||
properly if built with UNICODE defined together with the WinSSL/schannel
|
properly if built with UNICODE defined together with the WinSSL/schannel
|
||||||
backend. The original problem was mentioned in:
|
backend. The original problem was mentioned in:
|
||||||
@@ -91,7 +97,7 @@ may have been fixed since this was written!
|
|||||||
something beyond ascii but currently libcurl will only pass in the verbatim
|
something beyond ascii but currently libcurl will only pass in the verbatim
|
||||||
string the app provides. There are several browsers that already do this
|
string the app provides. There are several browsers that already do this
|
||||||
encoding. The key seems to be the updated draft to RFC2231:
|
encoding. The key seems to be the updated draft to RFC2231:
|
||||||
https://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02
|
http://tools.ietf.org/html/draft-reschke-rfc2231-in-http-02
|
||||||
|
|
||||||
66. When using telnet, the time limitation options don't work.
|
66. When using telnet, the time limitation options don't work.
|
||||||
http://curl.haxx.se/bug/view.cgi?id=846
|
http://curl.haxx.se/bug/view.cgi?id=846
|
||||||
@@ -239,3 +245,13 @@ may have been fixed since this was written!
|
|||||||
it seems HTTP servers send the *uncompressed* length in that header and
|
it seems HTTP servers send the *uncompressed* length in that header and
|
||||||
libcurl thinks of it as the *compressed* length. Some explanations are here:
|
libcurl thinks of it as the *compressed* length. Some explanations are here:
|
||||||
http://curl.haxx.se/mail/lib-2003-06/0146.html
|
http://curl.haxx.se/mail/lib-2003-06/0146.html
|
||||||
|
|
||||||
|
2. If a HTTP server responds to a HEAD request and includes a body (thus
|
||||||
|
violating the RFC2616), curl won't wait to read the response but just stop
|
||||||
|
reading and return back. If a second request (let's assume a GET) is then
|
||||||
|
immediately made to the same server again, the connection will be re-used
|
||||||
|
fine of course, and the second request will be sent off but when the
|
||||||
|
response is to get read, the previous response-body is what curl will read
|
||||||
|
and havoc is what happens.
|
||||||
|
More details on this is found in this libcurl mailing list thread:
|
||||||
|
http://curl.haxx.se/mail/lib-2002-08/0000.html
|
||||||
|
245
docs/LIBCURL-STRUCTS
Normal file
245
docs/LIBCURL-STRUCTS
Normal file
@@ -0,0 +1,245 @@
|
|||||||
|
_ _ ____ _
|
||||||
|
___| | | | _ \| |
|
||||||
|
/ __| | | | |_) | |
|
||||||
|
| (__| |_| | _ <| |___
|
||||||
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
|
Structs in libcurl
|
||||||
|
|
||||||
|
This document should cover 7.32.0 pretty accurately, but will make sense even
|
||||||
|
for older and later versions as things don't change drastically that often.
|
||||||
|
|
||||||
|
1. The main structs in libcurl
|
||||||
|
1.1 SessionHandle
|
||||||
|
1.2 connectdata
|
||||||
|
1.3 Curl_multi
|
||||||
|
1.4 Curl_handler
|
||||||
|
1.5 conncache
|
||||||
|
1.6 Curl_share
|
||||||
|
1.7 CookieInfo
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
|
||||||
|
1. The main structs in libcurl
|
||||||
|
|
||||||
|
1.1 SessionHandle
|
||||||
|
|
||||||
|
The SessionHandle handle struct is the one returned to the outside in the
|
||||||
|
external API as a "CURL *". This is usually known as an easy handle in API
|
||||||
|
documentations and examples.
|
||||||
|
|
||||||
|
Information and state that is related to the actual connection is in the
|
||||||
|
'connectdata' struct. When a transfer is about to be made, libcurl will
|
||||||
|
either create a new connection or re-use an existing one. The particular
|
||||||
|
connectdata that is used by this handle is pointed out by
|
||||||
|
SessionHandle->easy_conn.
|
||||||
|
|
||||||
|
Data and information that regard this particular single transfer is put in
|
||||||
|
the SingleRequest sub-struct.
|
||||||
|
|
||||||
|
When the SessionHandle struct is added to a multi handle, as it must be in
|
||||||
|
order to do any transfer, the ->multi member will point to the Curl_multi
|
||||||
|
struct it belongs to. The ->prev and ->next members will then be used by the
|
||||||
|
multi code to keep a linked list of SessionHandle structs that are added to
|
||||||
|
that same multi handle. libcurl always uses multi so ->multi *will* point to
|
||||||
|
a Curl_multi when a transfer is in progress.
|
||||||
|
|
||||||
|
->mstate is the multi state of this particular SessionHandle. When
|
||||||
|
multi_runsingle() is called, it will act on this handle according to which
|
||||||
|
state it is in. The mstate is also what tells which sockets to return for a
|
||||||
|
specific SessionHandle when curl_multi_fdset() is called etc.
|
||||||
|
|
||||||
|
The libcurl source code generally use the name 'data' for the variable that
|
||||||
|
points to the SessionHandle.
|
||||||
|
|
||||||
|
|
||||||
|
1.2 connectdata
|
||||||
|
|
||||||
|
A general idea in libcurl is to keep connections around in a connection
|
||||||
|
"cache" after they have been used in case they will be used again and then
|
||||||
|
re-use an existing one instead of creating a new as it creates a significant
|
||||||
|
performance boost.
|
||||||
|
|
||||||
|
Each 'connectdata' identifies a single physical connection to a server. If
|
||||||
|
the connection can't be kept alive, the connection will be closed after use
|
||||||
|
and then this struct can be removed from the cache and freed.
|
||||||
|
|
||||||
|
Thus, the same SessionHandle can be used multiple times and each time select
|
||||||
|
another connectdata struct to use for the connection. Keep this in mind, as
|
||||||
|
it is then important to consider if options or choices are based on the
|
||||||
|
connection or the SessionHandle.
|
||||||
|
|
||||||
|
Functions in libcurl will assume that connectdata->data points to the
|
||||||
|
SessionHandle that uses this connection.
|
||||||
|
|
||||||
|
As a special complexity, some protocols supported by libcurl require a
|
||||||
|
special disconnect procedure that is more than just shutting down the
|
||||||
|
socket. It can involve sending one or more commands to the server before
|
||||||
|
doing so. Since connections are kept in the connection cache after use, the
|
||||||
|
original SessionHandle may no longer be around when the time comes to shut
|
||||||
|
down a particular connection. For this purpose, libcurl holds a special
|
||||||
|
dummy 'closure_handle' SessionHandle in the Curl_multi struct to
|
||||||
|
|
||||||
|
FTP uses two TCP connections for a typical transfer but it keeps both in
|
||||||
|
this single struct and thus can be considered a single connection for most
|
||||||
|
internal concerns.
|
||||||
|
|
||||||
|
The libcurl source code generally use the name 'conn' for the variable that
|
||||||
|
points to the connectdata.
|
||||||
|
|
||||||
|
|
||||||
|
1.3 Curl_multi
|
||||||
|
|
||||||
|
Internally, the easy interface is implemented as a wrapper around multi
|
||||||
|
interface functions. This makes everything multi interface.
|
||||||
|
|
||||||
|
Curl_multi is the multi handle struct exposed as "CURLM *" in external APIs.
|
||||||
|
|
||||||
|
This struct holds a list of SessionHandle structs that have been added to
|
||||||
|
this handle with curl_multi_add_handle(). The start of the list is ->easyp
|
||||||
|
and ->num_easy is a counter of added SessionHandles.
|
||||||
|
|
||||||
|
->msglist is a linked list of messages to send back when
|
||||||
|
curl_multi_info_read() is called. Basically a node is added to that list
|
||||||
|
when an individual SessionHandle's transfer has completed.
|
||||||
|
|
||||||
|
->hostcache points to the name cache. It is a hash table for looking up name
|
||||||
|
to IP. The nodes have a limited life time in there and this cache is meant
|
||||||
|
to reduce the time for when the same name is wanted within a short period of
|
||||||
|
time.
|
||||||
|
|
||||||
|
->timetree points to a tree of SessionHandles, sorted by the remaining time
|
||||||
|
until it should be checked - normally some sort of timeout. Each
|
||||||
|
SessionHandle has one node in the tree.
|
||||||
|
|
||||||
|
->sockhash is a hash table to allow fast lookups of socket descriptor to
|
||||||
|
which SessionHandle that uses that descriptor. This is necessary for the
|
||||||
|
multi_socket API.
|
||||||
|
|
||||||
|
->conn_cache points to the connection cache. It keeps track of all
|
||||||
|
connections that are kept after use. The cache has a maximum size.
|
||||||
|
|
||||||
|
->closure_handle is described in the 'connectdata' section.
|
||||||
|
|
||||||
|
The libcurl source code generally use the name 'multi' for the variable that
|
||||||
|
points to the Curl_multi struct.
|
||||||
|
|
||||||
|
|
||||||
|
1.4 Curl_handler
|
||||||
|
|
||||||
|
Each unique protocol that is supported by libcurl needs to provide at least
|
||||||
|
one Curl_handler struct. It defines what the protocol is called and what
|
||||||
|
functions the main code should call to deal with protocol specific issues.
|
||||||
|
In general, there's a source file named [protocol].c in which there's a
|
||||||
|
"struct Curl_handler Curl_handler_[protocol]" declared. In url.c there's
|
||||||
|
then the main array with all individual Curl_handler structs pointed to from
|
||||||
|
a single array which is scanned through when a URL is given to libcurl to
|
||||||
|
work with.
|
||||||
|
|
||||||
|
->scheme is the URL scheme name, usually spelled out in uppercase. That's
|
||||||
|
"HTTP" or "FTP" etc. SSL versions of the protcol need its own Curl_handler
|
||||||
|
setup so HTTPS separate from HTTP.
|
||||||
|
|
||||||
|
->setup_connection is called to allow the protocol code to allocate protocol
|
||||||
|
specific data that then gets associated with that SessionHandle for the rest
|
||||||
|
of this transfer. It gets freed again at the end of the transfer. It will be
|
||||||
|
called before the 'connectdata' for the transfer has been selected/created.
|
||||||
|
Most protocols will allocate its private 'struct [PROTOCOL]' here and assign
|
||||||
|
SessionHandle->req.protop to point to it.
|
||||||
|
|
||||||
|
->connect_it allows a protocol to do some specific actions after the TCP
|
||||||
|
connect is done, that can still be considered part of the connection phase.
|
||||||
|
|
||||||
|
Some protocols will alter the connectdata->recv[] and connectdata->send[]
|
||||||
|
function pointers in this function.
|
||||||
|
|
||||||
|
->connecting is similarly a function that keeps getting called as long as the
|
||||||
|
protocol considers itself still in the connecting phase.
|
||||||
|
|
||||||
|
->do_it is the function called to issue the transfer request. What we call
|
||||||
|
the DO action internally. If the DO is not enough and things need to be kept
|
||||||
|
getting done for the entire DO sequence to complete, ->doing is then usually
|
||||||
|
also provided. Each protocol that needs to do multiple commands or similar
|
||||||
|
for do/doing need to implement their own state machines (see SCP, SFTP,
|
||||||
|
FTP). Some protocols (only FTP and only due to historical reasons) has a
|
||||||
|
separate piece of the DO state called DO_MORE.
|
||||||
|
|
||||||
|
->doing keeps getting called while issuing the transfer request command(s)
|
||||||
|
|
||||||
|
->done gets called when the transfer is complete and DONE. That's after the
|
||||||
|
main data has been transferred.
|
||||||
|
|
||||||
|
->do_more gets called during the DO_MORE state. The FTP protocol uses this
|
||||||
|
state when setting up the second connection.
|
||||||
|
|
||||||
|
->proto_getsock
|
||||||
|
->doing_getsock
|
||||||
|
->domore_getsock
|
||||||
|
->perform_getsock
|
||||||
|
Functions that return socket information. Which socket(s) to wait for which
|
||||||
|
action(s) during the particular multi state.
|
||||||
|
|
||||||
|
->disconnect is called immediately before the TCP connection is shutdown.
|
||||||
|
|
||||||
|
->readwrite gets called during transfer to allow the protocol to do extra
|
||||||
|
reads/writes
|
||||||
|
|
||||||
|
->defport is the default report TCP or UDP port this protocol uses
|
||||||
|
|
||||||
|
->protocol is one or more bits in the CURLPROTO_* set. The SSL versions have
|
||||||
|
their "base" protocol set and then the SSL variation. Like "HTTP|HTTPS".
|
||||||
|
|
||||||
|
->flags is a bitmask with additional information about the protocol that will
|
||||||
|
make it get treated differently by the generic engine:
|
||||||
|
|
||||||
|
PROTOPT_SSL - will make it connect and negotiate SSL
|
||||||
|
|
||||||
|
PROTOPT_DUAL - this protocol uses two connections
|
||||||
|
|
||||||
|
PROTOPT_CLOSEACTION - this protocol has actions to do before closing the
|
||||||
|
connection. This flag is no longer used by code, yet still set for a bunch
|
||||||
|
protocol handlers.
|
||||||
|
|
||||||
|
PROTOPT_DIRLOCK - "direction lock". The SSH protocols set this bit to
|
||||||
|
limit which "direction" of socket actions that the main engine will
|
||||||
|
concern itself about.
|
||||||
|
|
||||||
|
PROTOPT_NONETWORK - a protocol that doesn't use network (read file:)
|
||||||
|
|
||||||
|
PROTOPT_NEEDSPWD - this protocol needs a password and will use a default
|
||||||
|
one unless one is provided
|
||||||
|
|
||||||
|
PROTOPT_NOURLQUERY - this protocol can't handle a query part on the URL
|
||||||
|
(?foo=bar)
|
||||||
|
|
||||||
|
|
||||||
|
1.5 conncache
|
||||||
|
|
||||||
|
Is a hash table with connections for later re-use. Each SessionHandle has
|
||||||
|
a pointer to its connection cache. Each multi handle sets up a connection
|
||||||
|
cache that all added SessionHandles share by default.
|
||||||
|
|
||||||
|
|
||||||
|
1.6 Curl_share
|
||||||
|
|
||||||
|
The libcurl share API allocates a Curl_share struct, exposed to the external
|
||||||
|
API as "CURLSH *".
|
||||||
|
|
||||||
|
The idea is that the struct can have a set of own versions of caches and
|
||||||
|
pools and then by providing this struct in the CURLOPT_SHARE option, those
|
||||||
|
specific SessionHandles will use the caches/pools that this share handle
|
||||||
|
holds.
|
||||||
|
|
||||||
|
Then individual SessionHandle structs can be made to share specific things
|
||||||
|
that they otherwise wouldn't, such as cookies.
|
||||||
|
|
||||||
|
The Curl_share struct can currently hold cookies, DNS cache and the SSL
|
||||||
|
session cache.
|
||||||
|
|
||||||
|
|
||||||
|
1.7 CookieInfo
|
||||||
|
|
||||||
|
This is the main cookie struct. It holds all known cookies and related
|
||||||
|
information. Each SessionHandle has its own private CookieInfo even when
|
||||||
|
they are added to a multi handle. They can be made to share cookies by using
|
||||||
|
the share API.
|
@@ -23,29 +23,29 @@ libcurl http://curl.haxx.se/docs/copyright.html
|
|||||||
Uses an MIT (or Modified BSD)-style license that is as liberal as
|
Uses an MIT (or Modified BSD)-style license that is as liberal as
|
||||||
possible.
|
possible.
|
||||||
|
|
||||||
OpenSSL https://www.openssl.org/source/license.html
|
OpenSSL http://www.openssl.org/source/license.html
|
||||||
|
|
||||||
(May be used for SSL/TLS support) Uses an Original BSD-style license
|
(May be used for SSL/TLS support) Uses an Original BSD-style license
|
||||||
with an announcement clause that makes it "incompatible" with GPL. You
|
with an announcement clause that makes it "incompatible" with GPL. You
|
||||||
are not allowed to ship binaries that link with OpenSSL that includes
|
are not allowed to ship binaries that link with OpenSSL that includes
|
||||||
GPL code (unless that specific GPL code includes an exception for
|
GPL code (unless that specific GPL code includes an exception for
|
||||||
OpenSSL - a habit that is growing more and more common). If OpenSSL's
|
OpenSSL - a habit that is growing more and more common). If OpenSSL's
|
||||||
licensing is a problem for you, consider using another TLS library.
|
licensing is a problem for you, consider using GnuTLS or yassl
|
||||||
|
instead.
|
||||||
|
|
||||||
GnuTLS http://www.gnutls.org/
|
GnuTLS http://www.gnutls.org/
|
||||||
|
|
||||||
(May be used for SSL/TLS support) Uses the LGPL[3] license. If this is
|
(May be used for SSL/TLS support) Uses the LGPL[3] license. If this is
|
||||||
a problem for you, consider using another TLS library. Also note that
|
a problem for you, consider using OpenSSL instead. Also note that
|
||||||
GnuTLS itself depends on and uses other libs (libgcrypt and
|
GnuTLS itself depends on and uses other libs (libgcrypt and
|
||||||
libgpg-error) and they too are LGPL- or GPL-licensed.
|
libgpg-error) and they too are LGPL- or GPL-licensed.
|
||||||
|
|
||||||
WolfSSL https://www.wolfssl.com/
|
yassl http://www.yassl.com/
|
||||||
|
|
||||||
(May be used for SSL/TLS support) Uses the GPL[1] license or a
|
(May be used for SSL/TLS support) Uses the GPL[1] license. If this is
|
||||||
propietary license. If this is a problem for you, consider using
|
a problem for you, consider using OpenSSL or GnuTLS instead.
|
||||||
another TLS library.
|
|
||||||
|
|
||||||
NSS https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
|
NSS http://www.mozilla.org/projects/security/pki/nss/
|
||||||
|
|
||||||
(May be used for SSL/TLS support) Is covered by the MPL[4] license,
|
(May be used for SSL/TLS support) Is covered by the MPL[4] license,
|
||||||
the GPL[1] license and the LGPL[3] license. You may choose to license
|
the GPL[1] license and the LGPL[3] license. You may choose to license
|
||||||
@@ -57,29 +57,13 @@ axTLS http://axtls.sourceforge.net/
|
|||||||
|
|
||||||
(May be used for SSL/TLS support) Uses a Modified BSD-style license.
|
(May be used for SSL/TLS support) Uses a Modified BSD-style license.
|
||||||
|
|
||||||
mbedTLS https://tls.mbed.org/
|
|
||||||
|
|
||||||
(May be used for SSL/TLS support) Uses the GPL[1] license or a
|
|
||||||
propietary license. If this is a problem for you, consider using
|
|
||||||
another TLS library.
|
|
||||||
|
|
||||||
BoringSSL https://boringssl.googlesource.com/
|
|
||||||
|
|
||||||
(May be used for SSL/TLS support) As an OpenSSL fork, it has the same
|
|
||||||
license as that.
|
|
||||||
|
|
||||||
libressl http://www.libressl.org/
|
|
||||||
|
|
||||||
(May be used for SSL/TLS support) As an OpenSSL fork, it has the same
|
|
||||||
license as that.
|
|
||||||
|
|
||||||
c-ares http://daniel.haxx.se/projects/c-ares/license.html
|
c-ares http://daniel.haxx.se/projects/c-ares/license.html
|
||||||
|
|
||||||
(Used for asynchronous name resolves) Uses an MIT license that is very
|
(Used for asynchronous name resolves) Uses an MIT license that is very
|
||||||
liberal and imposes no restrictions on any other library or part you
|
liberal and imposes no restrictions on any other library or part you
|
||||||
may link with.
|
may link with.
|
||||||
|
|
||||||
zlib http://www.zlib.net/zlib_license.html
|
zlib http://www.gzip.org/zlib/zlib_license.html
|
||||||
|
|
||||||
(Used for compressed Transfer-Encoding support) Uses an MIT-style
|
(Used for compressed Transfer-Encoding support) Uses an MIT-style
|
||||||
license that shouldn't collide with any other library.
|
license that shouldn't collide with any other library.
|
||||||
@@ -89,12 +73,12 @@ MIT Kerberos http://web.mit.edu/kerberos/www/dist/
|
|||||||
(May be used for GSS support) MIT licensed, that shouldn't collide
|
(May be used for GSS support) MIT licensed, that shouldn't collide
|
||||||
with any other parts.
|
with any other parts.
|
||||||
|
|
||||||
Heimdal http://www.h5l.org
|
Heimdal http://www.pdc.kth.se/heimdal/
|
||||||
|
|
||||||
(May be used for GSS support) Heimdal is Original BSD licensed with
|
(May be used for GSS support) Heimdal is Original BSD licensed with
|
||||||
the announcement clause.
|
the announcement clause.
|
||||||
|
|
||||||
GNU GSS https://www.gnu.org/software/gss/
|
GNU GSS http://www.gnu.org/software/gss/
|
||||||
|
|
||||||
(May be used for GSS support) GNU GSS is GPL licensed. Note that you
|
(May be used for GSS support) GNU GSS is GPL licensed. Note that you
|
||||||
may not distribute binary curl packages that uses this if you build
|
may not distribute binary curl packages that uses this if you build
|
||||||
@@ -121,10 +105,10 @@ libssh2 http://www.libssh2.org/
|
|||||||
(Used for scp and sftp support) libssh2 uses a Modified BSD-style
|
(Used for scp and sftp support) libssh2 uses a Modified BSD-style
|
||||||
license.
|
license.
|
||||||
|
|
||||||
[1] = GPL - GNU General Public License: https://www.gnu.org/licenses/gpl.html
|
[1] = GPL - GNU General Public License: http://www.gnu.org/licenses/gpl.html
|
||||||
[2] = https://www.gnu.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on
|
[2] = http://www.fsf.org/licenses/gpl-faq.html#GPLIncompatibleLibs details on
|
||||||
how to write such an exception to the GPL
|
how to write such an exception to the GPL
|
||||||
[3] = LGPL - GNU Lesser General Public License:
|
[3] = LGPL - GNU Lesser General Public License:
|
||||||
https://www.gnu.org/licenses/lgpl.html
|
http://www.gnu.org/licenses/lgpl.html
|
||||||
[4] = MPL - Mozilla Public License:
|
[4] = MPL - Mozilla Public License:
|
||||||
https://www.mozilla.org/MPL/
|
http://www.mozilla.org/MPL/
|
||||||
|
@@ -230,7 +230,7 @@ MAIL ETIQUETTE
|
|||||||
Quote as little as possible. Just enough to provide the context you cannot
|
Quote as little as possible. Just enough to provide the context you cannot
|
||||||
leave out. A lengthy description can be found here:
|
leave out. A lengthy description can be found here:
|
||||||
|
|
||||||
https://www.netmeister.org/news/learn2quote.html
|
http://www.netmeister.org/news/learn2quote.html
|
||||||
|
|
||||||
2.7 Digest
|
2.7 Digest
|
||||||
|
|
||||||
|
@@ -470,8 +470,8 @@ COOKIES
|
|||||||
stored cookies which match the request as it follows the location. The
|
stored cookies which match the request as it follows the location. The
|
||||||
file "empty.txt" may be a nonexistent file.
|
file "empty.txt" may be a nonexistent file.
|
||||||
|
|
||||||
To read and write cookies from a netscape cookie file, you can set both -b
|
Alas, to both read and write cookies from a netscape cookie file, you can
|
||||||
and -c to use the same file:
|
set both -b and -c to use the same file:
|
||||||
|
|
||||||
curl -b cookies.txt -c cookies.txt www.example.com
|
curl -b cookies.txt -c cookies.txt www.example.com
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
#
|
#
|
||||||
# This software is licensed as described in the file COPYING, which
|
# This software is licensed as described in the file COPYING, which
|
||||||
# you should have received as part of this distribution. The terms
|
# you should have received as part of this distribution. The terms
|
||||||
@@ -33,12 +33,12 @@ SUBDIRS = examples libcurl
|
|||||||
|
|
||||||
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES)
|
||||||
|
|
||||||
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
EXTRA_DIST = MANUAL BUGS CONTRIBUTE FAQ FEATURES INTERNALS SSLCERTS \
|
||||||
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
|
README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \
|
||||||
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
|
KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY INSTALL \
|
||||||
$(PDFPAGES) LICENSE-MIXING README.netware INSTALL.devcpp \
|
$(PDFPAGES) LICENSE-MIXING README.netware DISTRO-DILEMMA INSTALL.devcpp \
|
||||||
MAIL-ETIQUETTE HTTP-COOKIES SECURITY RELEASE-PROCEDURE SSL-PROBLEMS \
|
MAIL-ETIQUETTE HTTP-COOKIES LIBCURL-STRUCTS SECURITY RELEASE-PROCEDURE \
|
||||||
HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md
|
SSL-PROBLEMS
|
||||||
|
|
||||||
MAN2HTML= roffit < $< >$@
|
MAN2HTML= roffit < $< >$@
|
||||||
|
|
||||||
|
@@ -1,3 +1,9 @@
|
|||||||
|
_ _ ____ _
|
||||||
|
___| | | | _ \| |
|
||||||
|
/ __| | | | |_) | |
|
||||||
|
| (__| |_| | _ <| |___
|
||||||
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
curl release procedure - how to do a release
|
curl release procedure - how to do a release
|
||||||
============================================
|
============================================
|
||||||
|
|
||||||
@@ -24,8 +30,6 @@ in the source code repo
|
|||||||
|
|
||||||
- upload the 8 resulting files to the primary download directory
|
- upload the 8 resulting files to the primary download directory
|
||||||
|
|
||||||
- upload the 4 tarballs to github for the HTTPS download
|
|
||||||
|
|
||||||
in the curl-www repo
|
in the curl-www repo
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
@@ -80,10 +84,12 @@ Coming dates
|
|||||||
Based on the description above, here are some planned release dates (at the
|
Based on the description above, here are some planned release dates (at the
|
||||||
time of this writing):
|
time of this writing):
|
||||||
|
|
||||||
- October 7, 2015 (version 7.45.0)
|
- February 25, 2015 (version 7.41.0)
|
||||||
|
- April 22, 2015
|
||||||
|
- June 17, 2015
|
||||||
|
- August 12, 2015
|
||||||
|
- October 7, 2015
|
||||||
- December 2, 2015
|
- December 2, 2015
|
||||||
- January 27, 2016
|
- January 27, 2016
|
||||||
- March 23, 2016
|
- March 23, 2016
|
||||||
- May 18, 2016
|
- May 18, 2016
|
||||||
- July 13, 2016
|
|
||||||
- September 7, 2016
|
|
||||||
|
116
docs/ROADMAP.md
116
docs/ROADMAP.md
@@ -5,86 +5,44 @@ Roadmap of things Daniel Stenberg and Steve Holme want to work on next. It is
|
|||||||
intended to serve as a guideline for others for information, feedback and
|
intended to serve as a guideline for others for information, feedback and
|
||||||
possible participation.
|
possible participation.
|
||||||
|
|
||||||
HTTP/2
|
New stuff - libcurl
|
||||||
------
|
|
||||||
|
|
||||||
- test suite
|
|
||||||
|
|
||||||
Base this on existing nghttp2 server to start with to make functional
|
|
||||||
tests. Later on we can adopt that code or work with nghttp2 to provide ways
|
|
||||||
to have the http2 server respond with broken responses to make sure we deal
|
|
||||||
with that nicely as well.
|
|
||||||
|
|
||||||
To decide: if we need to bundle parts of the nghttp2 stuff that probably
|
|
||||||
won't be shipped by many distros.
|
|
||||||
|
|
||||||
- provide option for HTTP/2 "prior knowledge" over clear text
|
|
||||||
|
|
||||||
As it would avoid the roundtrip-heavy Upgrade: procedures when you _know_
|
|
||||||
it speaks HTTP/2.
|
|
||||||
|
|
||||||
- provide option to allow curl to default to HTTP/2 only when using HTTPS
|
|
||||||
|
|
||||||
We could switch on HTTP/2 by-default for HTTPS quite easily and it
|
|
||||||
shouldn't hurt anyone, while HTTP/2 for HTTP by default could introduce
|
|
||||||
lots of Upgrade: roundtrips that users won't like. So a separated option
|
|
||||||
alternative makes sense.
|
|
||||||
|
|
||||||
SRV records
|
|
||||||
-----------
|
|
||||||
|
|
||||||
How to find services for specific domains/hosts.
|
|
||||||
|
|
||||||
HTTPS to proxy
|
|
||||||
--------------
|
|
||||||
|
|
||||||
To avoid network traffic to/from the proxy getting snooped on.
|
|
||||||
|
|
||||||
curl_formadd()
|
|
||||||
--------------
|
|
||||||
|
|
||||||
make sure there's an easy handle passed in to `curl_formadd()`,
|
|
||||||
`curl_formget()` and `curl_formfree()` by adding replacement functions and
|
|
||||||
deprecating the old ones to allow custom mallocs and more
|
|
||||||
|
|
||||||
third-party SASL
|
|
||||||
----------------
|
|
||||||
|
|
||||||
add support for third-party SASL libraries such as Cyrus SASL - may need to
|
|
||||||
move existing native and SSPI based authentication into vsasl folder after
|
|
||||||
reworking HTTP and SASL code
|
|
||||||
|
|
||||||
SASL authentication in LDAP
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
Simplify the SMTP email
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
Simplify the SMTP email interface so that programmers don't have to
|
|
||||||
construct the body of an email that contains all the headers, alternative
|
|
||||||
content, images and attachments - maintain raw interface so that
|
|
||||||
programmers that want to do this can
|
|
||||||
|
|
||||||
email capabilities
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Allow the email protocols to return the capabilities before
|
|
||||||
authenticating. This will allow an application to decide on the best
|
|
||||||
authentication mechanism
|
|
||||||
|
|
||||||
Win32 pthreads
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Allow Windows threading model to be replaced by Win32 pthreads port
|
|
||||||
|
|
||||||
dynamic buffer size
|
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Implement a dynamic buffer size to allow SFTP to use much larger buffers and
|
1. HTTP/2
|
||||||
possibly allow the size to be customizable by applications. Use less memory
|
|
||||||
when handles are not in use?
|
- test suite
|
||||||
|
- http2 multiplexing/pipelining
|
||||||
|
- provide option for HTTP/2 "prior knowledge" over clear text
|
||||||
|
- provide option to allow curl to default to HTTP/2 only when using HTTPS
|
||||||
|
|
||||||
|
2. SRV records
|
||||||
|
|
||||||
|
3. HTTPS to proxy
|
||||||
|
|
||||||
|
4. make sure there's an easy handle passed in to `curl_formadd()`,
|
||||||
|
`curl_formget()` and `curl_formfree()` by adding replacement functions and
|
||||||
|
deprecating the old ones to allow custom mallocs and more
|
||||||
|
|
||||||
|
5. add support for third-party SASL libraries such as Cyrus SASL - may need to
|
||||||
|
move existing native and SSPI based authentication into vsasl folder after
|
||||||
|
reworking HTTP and SASL code
|
||||||
|
|
||||||
|
6. SASL authentication in LDAP
|
||||||
|
|
||||||
|
7. Simplify the SMTP email interface so that programmers don't have to
|
||||||
|
construct the body of an email that contains all the headers, alternative
|
||||||
|
content, images and attachments - maintain raw interface so that
|
||||||
|
programmers that want to do this can
|
||||||
|
|
||||||
|
8. Allow the email protocols to return the capabilities before
|
||||||
|
authenticating. This will allow an application to decide on the best
|
||||||
|
authentication mechanism
|
||||||
|
|
||||||
|
9. Allow Windows threading model to be replaced by Win32 pthreads port
|
||||||
|
|
||||||
|
10. Implement a dynamic buffer size to allow SFTP to use much larger buffers
|
||||||
|
and possibly allow the size to be customizable by applications. Use less
|
||||||
|
memory when handles are not in use?
|
||||||
|
|
||||||
New stuff - curl
|
New stuff - curl
|
||||||
----------------
|
----------------
|
||||||
@@ -103,7 +61,7 @@ Improve
|
|||||||
|
|
||||||
2. curl -h output (considered overwhelming to users)
|
2. curl -h output (considered overwhelming to users)
|
||||||
|
|
||||||
3. we have > 170 command line options, is there a way to redo things to
|
3. we have > 160 command line options, is there a way to redo things to
|
||||||
simplify or improve the situation as we are likely to keep adding
|
simplify or improve the situation as we are likely to keep adding
|
||||||
features/options in the future too
|
features/options in the future too
|
||||||
|
|
||||||
|
@@ -26,7 +26,7 @@ CA bundle missing intermediate certificates
|
|||||||
problems if your CA cert does not have the certificates for the
|
problems if your CA cert does not have the certificates for the
|
||||||
intermediates in the whole trust chain.
|
intermediates in the whole trust chain.
|
||||||
|
|
||||||
Protocol version
|
SSL version
|
||||||
|
|
||||||
Some broken servers fail to support the protocol negotiation properly that
|
Some broken servers fail to support the protocol negotiation properly that
|
||||||
SSL servers are supposed to handle. This may cause the connection to fail
|
SSL servers are supposed to handle. This may cause the connection to fail
|
||||||
@@ -36,9 +36,7 @@ Protocol version
|
|||||||
An additional complication can be that modern SSL libraries sometimes are
|
An additional complication can be that modern SSL libraries sometimes are
|
||||||
built with support for older SSL and TLS versions disabled!
|
built with support for older SSL and TLS versions disabled!
|
||||||
|
|
||||||
All versions of SSL are considered insecure and should be avoided. Use TLS.
|
SSL ciphers
|
||||||
|
|
||||||
Ciphers
|
|
||||||
|
|
||||||
Clients give servers a list of ciphers to select from. If the list doesn't
|
Clients give servers a list of ciphers to select from. If the list doesn't
|
||||||
include any ciphers the server wants/can use, the connection handshake
|
include any ciphers the server wants/can use, the connection handshake
|
||||||
@@ -53,13 +51,9 @@ Ciphers
|
|||||||
Note that these weak ciphers are identified as flawed. For example, this
|
Note that these weak ciphers are identified as flawed. For example, this
|
||||||
includes symmetric ciphers with less than 128 bit keys and RC4.
|
includes symmetric ciphers with less than 128 bit keys and RC4.
|
||||||
|
|
||||||
WinSSL in Windows XP is not able to connect to servers that no longer
|
|
||||||
support the legacy handshakes and algorithms used by those versions, so we
|
|
||||||
advice against building curl to use WinSSL on really old Windows versions.
|
|
||||||
|
|
||||||
References:
|
References:
|
||||||
|
|
||||||
https://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01
|
http://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01
|
||||||
|
|
||||||
Allow BEAST
|
Allow BEAST
|
||||||
|
|
||||||
@@ -71,17 +65,3 @@ Allow BEAST
|
|||||||
introduced. Exactly as it sounds, it re-introduces the BEAST vulnerability
|
introduced. Exactly as it sounds, it re-introduces the BEAST vulnerability
|
||||||
but on the other hand it allows curl to connect to that kind of strange
|
but on the other hand it allows curl to connect to that kind of strange
|
||||||
servers.
|
servers.
|
||||||
|
|
||||||
Disabling certificate revocation checks
|
|
||||||
|
|
||||||
Some SSL backends may do certificate revocation checks (CRL, OCSP, etc)
|
|
||||||
depending on the OS or build configuration. The --ssl-no-revoke option was
|
|
||||||
introduced in 7.44.0 to disable revocation checking but currently is only
|
|
||||||
supported for WinSSL (the native Windows SSL library), with an exception in
|
|
||||||
the case of Windows' Untrusted Publishers blacklist which it seems can't be
|
|
||||||
bypassed. This option may have broader support to accommodate other SSL
|
|
||||||
backends in the future.
|
|
||||||
|
|
||||||
References:
|
|
||||||
|
|
||||||
http://curl.haxx.se/docs/ssl-compared.html
|
|
||||||
|
56
docs/THANKS
56
docs/THANKS
@@ -36,7 +36,6 @@ Alex Suykov
|
|||||||
Alex Vinnik
|
Alex Vinnik
|
||||||
Alex aka WindEagle
|
Alex aka WindEagle
|
||||||
Alexander Beedie
|
Alexander Beedie
|
||||||
Alexander Dyagilev
|
|
||||||
Alexander Elgert
|
Alexander Elgert
|
||||||
Alexander Klauer
|
Alexander Klauer
|
||||||
Alexander Kourakos
|
Alexander Kourakos
|
||||||
@@ -56,7 +55,6 @@ Alona Rossen
|
|||||||
Amol Pattekar
|
Amol Pattekar
|
||||||
Amr Shahin
|
Amr Shahin
|
||||||
Anatoli Tubman
|
Anatoli Tubman
|
||||||
Anders Bakken
|
|
||||||
Anders Gustafsson
|
Anders Gustafsson
|
||||||
Anders Havn
|
Anders Havn
|
||||||
Andi Jahja
|
Andi Jahja
|
||||||
@@ -92,7 +90,6 @@ Andy Serpa
|
|||||||
Andy Tsouladze
|
Andy Tsouladze
|
||||||
Angus Mackay
|
Angus Mackay
|
||||||
Anthon Pang
|
Anthon Pang
|
||||||
Anthony Avina
|
|
||||||
Anthony Bryan
|
Anthony Bryan
|
||||||
Anthony G. Basile
|
Anthony G. Basile
|
||||||
Antoine Calando
|
Antoine Calando
|
||||||
@@ -107,7 +104,6 @@ Arnaud Ebalard
|
|||||||
Arthur Murray
|
Arthur Murray
|
||||||
Arve Knudsen
|
Arve Knudsen
|
||||||
Arvid Norberg
|
Arvid Norberg
|
||||||
Ashish Shukla
|
|
||||||
Ask Bjørn Hansen
|
Ask Bjørn Hansen
|
||||||
Askar Safin
|
Askar Safin
|
||||||
Ates Goral
|
Ates Goral
|
||||||
@@ -131,14 +127,11 @@ Benbuck Nason
|
|||||||
Benjamin Gerard
|
Benjamin Gerard
|
||||||
Benjamin Gilbert
|
Benjamin Gilbert
|
||||||
Benjamin Johnson
|
Benjamin Johnson
|
||||||
Benjamin Kircher
|
|
||||||
Benoit Neil
|
Benoit Neil
|
||||||
Benoit Sigoure
|
Benoit Sigoure
|
||||||
Bernard Leak
|
Bernard Leak
|
||||||
Bernhard Reutner-Fischer
|
Bernhard Reutner-Fischer
|
||||||
Bert Huijben
|
|
||||||
Bertrand Demiddelaer
|
Bertrand Demiddelaer
|
||||||
Bertrand Simonnet
|
|
||||||
Bill Doyle
|
Bill Doyle
|
||||||
Bill Egert
|
Bill Egert
|
||||||
Bill Hoffman
|
Bill Hoffman
|
||||||
@@ -164,10 +157,8 @@ Brandon Wang
|
|||||||
Brendan Jurd
|
Brendan Jurd
|
||||||
Brent Beardsley
|
Brent Beardsley
|
||||||
Brian Akins
|
Brian Akins
|
||||||
Brian Chrisman
|
|
||||||
Brian Dessent
|
Brian Dessent
|
||||||
Brian J. Murrell
|
Brian J. Murrell
|
||||||
Brian Prodoehl
|
|
||||||
Brian R Duffy
|
Brian R Duffy
|
||||||
Brian Ulm
|
Brian Ulm
|
||||||
Brock Noland
|
Brock Noland
|
||||||
@@ -191,7 +182,6 @@ Charles Romestant
|
|||||||
Chen Prog
|
Chen Prog
|
||||||
Chih-Chung Chang
|
Chih-Chung Chang
|
||||||
Chris "Bob Bob"
|
Chris "Bob Bob"
|
||||||
Chris Araman
|
|
||||||
Chris Combes
|
Chris Combes
|
||||||
Chris Conlon
|
Chris Conlon
|
||||||
Chris Deidun
|
Chris Deidun
|
||||||
@@ -236,7 +226,6 @@ Cris Bailiff
|
|||||||
Cristian Rodríguez
|
Cristian Rodríguez
|
||||||
Curt Bogmine
|
Curt Bogmine
|
||||||
Cyrill Osterwalder
|
Cyrill Osterwalder
|
||||||
Cédric Connes
|
|
||||||
Cédric Deltheil
|
Cédric Deltheil
|
||||||
D. Flinkmann
|
D. Flinkmann
|
||||||
Da-Yoon Chung
|
Da-Yoon Chung
|
||||||
@@ -255,13 +244,8 @@ Dan Zitter
|
|||||||
Daniel Black
|
Daniel Black
|
||||||
Daniel Cater
|
Daniel Cater
|
||||||
Daniel Egger
|
Daniel Egger
|
||||||
Daniel Hwang
|
|
||||||
Daniel Johnson
|
Daniel Johnson
|
||||||
Daniel Kahn Gillmor
|
|
||||||
Daniel Lee Hwang
|
|
||||||
Daniel Melani
|
|
||||||
Daniel Mentz
|
Daniel Mentz
|
||||||
Daniel Seither
|
|
||||||
Daniel Steinberg
|
Daniel Steinberg
|
||||||
Daniel Stenberg
|
Daniel Stenberg
|
||||||
Daniel Theron
|
Daniel Theron
|
||||||
@@ -304,7 +288,6 @@ David Woodhouse
|
|||||||
David Wright
|
David Wright
|
||||||
David Yan
|
David Yan
|
||||||
Dengminwen
|
Dengminwen
|
||||||
Denis Feklushkin
|
|
||||||
Dennis Clarke
|
Dennis Clarke
|
||||||
Derek Higgins
|
Derek Higgins
|
||||||
Detlef Schmier
|
Detlef Schmier
|
||||||
@@ -323,7 +306,6 @@ Dirk Manske
|
|||||||
Dmitri Shubin
|
Dmitri Shubin
|
||||||
Dmitriy Sergeyev
|
Dmitriy Sergeyev
|
||||||
Dmitry Bartsevich
|
Dmitry Bartsevich
|
||||||
Dmitry Eremin-Solenikov
|
|
||||||
Dmitry Falko
|
Dmitry Falko
|
||||||
Dmitry Kurochkin
|
Dmitry Kurochkin
|
||||||
Dmitry Popov
|
Dmitry Popov
|
||||||
@@ -339,7 +321,6 @@ Douglas Kilpatrick
|
|||||||
Douglas R. Horner
|
Douglas R. Horner
|
||||||
Douglas Steinwand
|
Douglas Steinwand
|
||||||
Dov Murik
|
Dov Murik
|
||||||
Drake Arconis
|
|
||||||
Duane Cathey
|
Duane Cathey
|
||||||
Duncan Mac-Vicar Prett
|
Duncan Mac-Vicar Prett
|
||||||
Dustin Boswell
|
Dustin Boswell
|
||||||
@@ -354,7 +335,6 @@ Edward Rudd
|
|||||||
Edward Sheldrake
|
Edward Sheldrake
|
||||||
Eelco Dolstra
|
Eelco Dolstra
|
||||||
Eetu Ojanen
|
Eetu Ojanen
|
||||||
Egon Eckert
|
|
||||||
Eldar Zaitov
|
Eldar Zaitov
|
||||||
Ellis Pritchard
|
Ellis Pritchard
|
||||||
Elmira A Semenova
|
Elmira A Semenova
|
||||||
@@ -372,14 +352,12 @@ Eric Lubin
|
|||||||
Eric Melville
|
Eric Melville
|
||||||
Eric Mertens
|
Eric Mertens
|
||||||
Eric Rautman
|
Eric Rautman
|
||||||
Eric Ridge
|
|
||||||
Eric S. Raymond
|
Eric S. Raymond
|
||||||
Eric Thelin
|
Eric Thelin
|
||||||
Eric Vergnaud
|
Eric Vergnaud
|
||||||
Eric Wong
|
Eric Wong
|
||||||
Eric Young
|
Eric Young
|
||||||
Erick Nuwendam
|
Erick Nuwendam
|
||||||
Erik Janssen
|
|
||||||
Erik Johansson
|
Erik Johansson
|
||||||
Ernest Beinrohr
|
Ernest Beinrohr
|
||||||
Erwan Legrand
|
Erwan Legrand
|
||||||
@@ -394,7 +372,6 @@ Fabian Hiernaux
|
|||||||
Fabian Keil
|
Fabian Keil
|
||||||
Fabrizio Ammollo
|
Fabrizio Ammollo
|
||||||
Fedor Karpelevitch
|
Fedor Karpelevitch
|
||||||
Feist Josselin
|
|
||||||
Felix Yan
|
Felix Yan
|
||||||
Felix von Leitner
|
Felix von Leitner
|
||||||
Feng Tu
|
Feng Tu
|
||||||
@@ -413,7 +390,6 @@ François Charlier
|
|||||||
Fred Machado
|
Fred Machado
|
||||||
Fred New
|
Fred New
|
||||||
Fred Noz
|
Fred Noz
|
||||||
Fred Stluka
|
|
||||||
Frederic Lepied
|
Frederic Lepied
|
||||||
Fredrik Thulin
|
Fredrik Thulin
|
||||||
Gabriel Kuri
|
Gabriel Kuri
|
||||||
@@ -451,7 +427,6 @@ Glenn Sheridan
|
|||||||
Gordon Marler
|
Gordon Marler
|
||||||
Gorilla Maguila
|
Gorilla Maguila
|
||||||
Grant Erickson
|
Grant Erickson
|
||||||
Grant Pannell
|
|
||||||
Greg Hewgill
|
Greg Hewgill
|
||||||
Greg Morse
|
Greg Morse
|
||||||
Greg Onufer
|
Greg Onufer
|
||||||
@@ -464,7 +439,6 @@ Guido Berhoerster
|
|||||||
Guillaume Arluison
|
Guillaume Arluison
|
||||||
Gunter Knauf
|
Gunter Knauf
|
||||||
Gustaf Hui
|
Gustaf Hui
|
||||||
Gustavo Grieco
|
|
||||||
Gwenole Beauchesne
|
Gwenole Beauchesne
|
||||||
Gökhan Şengün
|
Gökhan Şengün
|
||||||
Götz Babin-Ebell
|
Götz Babin-Ebell
|
||||||
@@ -509,7 +483,6 @@ Iida Yosiaki
|
|||||||
Ilguiz Latypov
|
Ilguiz Latypov
|
||||||
Ilja van Sprundel
|
Ilja van Sprundel
|
||||||
Immanuel Gregoire
|
Immanuel Gregoire
|
||||||
Inca R
|
|
||||||
Ingmar Runge
|
Ingmar Runge
|
||||||
Ingo Ralf Blum
|
Ingo Ralf Blum
|
||||||
Ingo Wilken
|
Ingo Wilken
|
||||||
@@ -520,7 +493,6 @@ Jack Zhang
|
|||||||
Jacky Lam
|
Jacky Lam
|
||||||
Jacob Meuser
|
Jacob Meuser
|
||||||
Jacob Moshenko
|
Jacob Moshenko
|
||||||
Jactry Zeng
|
|
||||||
Jad Chamcham
|
Jad Chamcham
|
||||||
Jakub Zakrzewski
|
Jakub Zakrzewski
|
||||||
James Bursa
|
James Bursa
|
||||||
@@ -568,7 +540,6 @@ Jeff Lawson
|
|||||||
Jeff Phillips
|
Jeff Phillips
|
||||||
Jeff Pohlmeyer
|
Jeff Pohlmeyer
|
||||||
Jeff Weber
|
Jeff Weber
|
||||||
Jens Rantil
|
|
||||||
Jeremy Friesner
|
Jeremy Friesner
|
||||||
Jeremy Huddleston
|
Jeremy Huddleston
|
||||||
Jeremy Lin
|
Jeremy Lin
|
||||||
@@ -596,7 +567,6 @@ Joe Halpin
|
|||||||
Joe Malicki
|
Joe Malicki
|
||||||
Joe Mason
|
Joe Mason
|
||||||
Joel Chen
|
Joel Chen
|
||||||
Joel Depooter
|
|
||||||
Jofell Gallardo
|
Jofell Gallardo
|
||||||
Johan Anderson
|
Johan Anderson
|
||||||
Johan Lantz
|
Johan Lantz
|
||||||
@@ -734,9 +704,7 @@ Linas Vepstas
|
|||||||
Lindley French
|
Lindley French
|
||||||
Ling Thio
|
Ling Thio
|
||||||
Linus Nielsen Feltzing
|
Linus Nielsen Feltzing
|
||||||
Lior Kaplan
|
|
||||||
Lisa Xu
|
Lisa Xu
|
||||||
Liviu Chircu
|
|
||||||
Liza Alenchery
|
Liza Alenchery
|
||||||
Lluís Batlle i Rossell
|
Lluís Batlle i Rossell
|
||||||
Loic Dachary
|
Loic Dachary
|
||||||
@@ -757,7 +725,6 @@ Maciej Karpiuk
|
|||||||
Maciej Puzio
|
Maciej Puzio
|
||||||
Maciej W. Rozycki
|
Maciej W. Rozycki
|
||||||
Maks Naumov
|
Maks Naumov
|
||||||
Maksim Stsepanenka
|
|
||||||
Mamoru Tasaka
|
Mamoru Tasaka
|
||||||
Mandy Wu
|
Mandy Wu
|
||||||
Manfred Schwarb
|
Manfred Schwarb
|
||||||
@@ -841,7 +808,6 @@ Michael Day
|
|||||||
Michael Goffioul
|
Michael Goffioul
|
||||||
Michael Jahn
|
Michael Jahn
|
||||||
Michael Jerris
|
Michael Jerris
|
||||||
Michael Kalinin
|
|
||||||
Michael Kaufmann
|
Michael Kaufmann
|
||||||
Michael Mealling
|
Michael Mealling
|
||||||
Michael Mueller
|
Michael Mueller
|
||||||
@@ -852,7 +818,6 @@ Michael Stillwell
|
|||||||
Michael Wallner
|
Michael Wallner
|
||||||
Michal Bonino
|
Michal Bonino
|
||||||
Michal Marek
|
Michal Marek
|
||||||
Michał Fita
|
|
||||||
Michał Górny
|
Michał Górny
|
||||||
Michał Kowalczyk
|
Michał Kowalczyk
|
||||||
Michel Promonet
|
Michel Promonet
|
||||||
@@ -886,7 +851,6 @@ Nagai H
|
|||||||
Nathan Coulter
|
Nathan Coulter
|
||||||
Nathan O'Sullivan
|
Nathan O'Sullivan
|
||||||
Nathanael Nerode
|
Nathanael Nerode
|
||||||
Nathaniel Waisbrot
|
|
||||||
Naveen Chandran
|
Naveen Chandran
|
||||||
Naveen Noel
|
Naveen Noel
|
||||||
Neil Bowers
|
Neil Bowers
|
||||||
@@ -922,10 +886,8 @@ Oliver Gondža
|
|||||||
Oliver Kuckertz
|
Oliver Kuckertz
|
||||||
Oliver Schindler
|
Oliver Schindler
|
||||||
Olivier Berger
|
Olivier Berger
|
||||||
Orange Tsai
|
|
||||||
Oren Souroujon
|
Oren Souroujon
|
||||||
Oren Tirosh
|
Oren Tirosh
|
||||||
Orgad Shaneh
|
|
||||||
Ori Avtalion
|
Ori Avtalion
|
||||||
Oscar Koeroo
|
Oscar Koeroo
|
||||||
Oscar Norlander
|
Oscar Norlander
|
||||||
@@ -954,7 +916,6 @@ Paul Marks
|
|||||||
Paul Marquis
|
Paul Marquis
|
||||||
Paul Moore
|
Paul Moore
|
||||||
Paul Nolan
|
Paul Nolan
|
||||||
Paul Oliver
|
|
||||||
Paul Querna
|
Paul Querna
|
||||||
Paul Saab
|
Paul Saab
|
||||||
Pavel Cenek
|
Pavel Cenek
|
||||||
@@ -1012,13 +973,11 @@ Quinn Slack
|
|||||||
Radu Simionescu
|
Radu Simionescu
|
||||||
Rafa Muyo
|
Rafa Muyo
|
||||||
Rafael Sagula
|
Rafael Sagula
|
||||||
Rafayel Mkrtchyan
|
|
||||||
Rafaël Carré
|
Rafaël Carré
|
||||||
Rainer Canavan
|
Rainer Canavan
|
||||||
Rainer Jung
|
Rainer Jung
|
||||||
Rainer Koenig
|
Rainer Koenig
|
||||||
Rajesh Naganathan
|
Rajesh Naganathan
|
||||||
Rajkumar Mandal
|
|
||||||
Ralf S. Engelschall
|
Ralf S. Engelschall
|
||||||
Ralph Beckmann
|
Ralph Beckmann
|
||||||
Ralph Mitchell
|
Ralph Mitchell
|
||||||
@@ -1028,7 +987,6 @@ Ravi Pratap
|
|||||||
Ray Dassen
|
Ray Dassen
|
||||||
Ray Pekowski
|
Ray Pekowski
|
||||||
Ray Satiro
|
Ray Satiro
|
||||||
Razvan Cojocaru
|
|
||||||
Reinout van Schouwen
|
Reinout van Schouwen
|
||||||
Remi Gacogne
|
Remi Gacogne
|
||||||
Renato Botelho
|
Renato Botelho
|
||||||
@@ -1053,7 +1011,6 @@ Richard Michael
|
|||||||
Richard Moore
|
Richard Moore
|
||||||
Richard Prescott
|
Richard Prescott
|
||||||
Richard Silverman
|
Richard Silverman
|
||||||
Richard van den Berg
|
|
||||||
Rick Jones
|
Rick Jones
|
||||||
Rick Richardson
|
Rick Richardson
|
||||||
Rob Crittenden
|
Rob Crittenden
|
||||||
@@ -1077,7 +1034,6 @@ Robson Braga Araujo
|
|||||||
Rodney Simmons
|
Rodney Simmons
|
||||||
Rodric Glaser
|
Rodric Glaser
|
||||||
Rodrigo Silva
|
Rodrigo Silva
|
||||||
Roger Leigh
|
|
||||||
Roland Blom
|
Roland Blom
|
||||||
Roland Krikava
|
Roland Krikava
|
||||||
Roland Zimmermann
|
Roland Zimmermann
|
||||||
@@ -1102,7 +1058,6 @@ Salvador Dávila
|
|||||||
Salvatore Sorrentino
|
Salvatore Sorrentino
|
||||||
Sam Deane
|
Sam Deane
|
||||||
Sam Hurst
|
Sam Hurst
|
||||||
Sam Roth
|
|
||||||
Sam Schanken
|
Sam Schanken
|
||||||
Sampo Kellomaki
|
Sampo Kellomaki
|
||||||
Samuel Díaz García
|
Samuel Díaz García
|
||||||
@@ -1121,7 +1076,6 @@ Scott Barrett
|
|||||||
Scott Cantor
|
Scott Cantor
|
||||||
Scott Davis
|
Scott Davis
|
||||||
Scott McCreary
|
Scott McCreary
|
||||||
Sean Boudreau
|
|
||||||
Sebastian Rasmussen
|
Sebastian Rasmussen
|
||||||
Senthil Raja Velu
|
Senthil Raja Velu
|
||||||
Sergei Nikulov
|
Sergei Nikulov
|
||||||
@@ -1182,18 +1136,15 @@ Sune Ahlgren
|
|||||||
Sven Anders
|
Sven Anders
|
||||||
Sven Neuhaus
|
Sven Neuhaus
|
||||||
Sven Wegener
|
Sven Wegener
|
||||||
Svyatoslav Mishyn
|
|
||||||
Symeon Paraschoudis
|
Symeon Paraschoudis
|
||||||
Sébastien Willemijns
|
Sébastien Willemijns
|
||||||
T. Bharath
|
T. Bharath
|
||||||
T. Yamada
|
T. Yamada
|
||||||
TJ Saunders
|
|
||||||
Tae Hyoung Ahn
|
Tae Hyoung Ahn
|
||||||
Taneli Vahakangas
|
Taneli Vahakangas
|
||||||
Tanguy Fautre
|
Tanguy Fautre
|
||||||
Tatsuhiro Tsujikawa
|
Tatsuhiro Tsujikawa
|
||||||
Temprimus
|
Temprimus
|
||||||
Terri Oda
|
|
||||||
Thomas Braun
|
Thomas Braun
|
||||||
Thomas J. Moore
|
Thomas J. Moore
|
||||||
Thomas Klausner
|
Thomas Klausner
|
||||||
@@ -1202,7 +1153,6 @@ Thomas Lopatic
|
|||||||
Thomas Ruecker
|
Thomas Ruecker
|
||||||
Thomas Schwinge
|
Thomas Schwinge
|
||||||
Thomas Tonino
|
Thomas Tonino
|
||||||
Thorsten Schöning
|
|
||||||
Tiit Pikma
|
Tiit Pikma
|
||||||
Till Maas
|
Till Maas
|
||||||
Tim Ansell
|
Tim Ansell
|
||||||
@@ -1215,7 +1165,6 @@ Tim Heckman
|
|||||||
Tim Newsome
|
Tim Newsome
|
||||||
Tim Ruehsen
|
Tim Ruehsen
|
||||||
Tim Sneddon
|
Tim Sneddon
|
||||||
Tim Stack
|
|
||||||
Tim Starling
|
Tim Starling
|
||||||
Timo Sirainen
|
Timo Sirainen
|
||||||
Tinus van den Berg
|
Tinus van den Berg
|
||||||
@@ -1225,6 +1174,7 @@ Tobias Stoeckmann
|
|||||||
Toby Peterson
|
Toby Peterson
|
||||||
Todd A Ouska
|
Todd A Ouska
|
||||||
Todd Kulesza
|
Todd Kulesza
|
||||||
|
Todd Ouska
|
||||||
Todd Vierling
|
Todd Vierling
|
||||||
Tom Benoist
|
Tom Benoist
|
||||||
Tom Donovan
|
Tom Donovan
|
||||||
@@ -1241,7 +1191,6 @@ Tomas Hoger
|
|||||||
Tomas Mlcoch
|
Tomas Mlcoch
|
||||||
Tomas Pospisek
|
Tomas Pospisek
|
||||||
Tomas Szepe
|
Tomas Szepe
|
||||||
Tomas Tomecek
|
|
||||||
Tomasz Kojm
|
Tomasz Kojm
|
||||||
Tomasz Lacki
|
Tomasz Lacki
|
||||||
Tommie Gannert
|
Tommie Gannert
|
||||||
@@ -1269,7 +1218,6 @@ Victor Snezhko
|
|||||||
Vijay Panghal
|
Vijay Panghal
|
||||||
Vikram Saxena
|
Vikram Saxena
|
||||||
Viktor Szakáts
|
Viktor Szakáts
|
||||||
Ville Skyttä
|
|
||||||
Vilmos Nebehaj
|
Vilmos Nebehaj
|
||||||
Vincent Bronner
|
Vincent Bronner
|
||||||
Vincent Le Normand
|
Vincent Le Normand
|
||||||
@@ -1284,7 +1232,6 @@ Vojtech Janota
|
|||||||
Vojtech Minarik
|
Vojtech Minarik
|
||||||
Vojtěch Král
|
Vojtěch Král
|
||||||
Vsevolod Novikov
|
Vsevolod Novikov
|
||||||
W. Mark Kubacki
|
|
||||||
Waldek Kozba
|
Waldek Kozba
|
||||||
Walter J. Mack
|
Walter J. Mack
|
||||||
Ward Willats
|
Ward Willats
|
||||||
@@ -1324,5 +1271,4 @@ Zvi Har'El
|
|||||||
nk
|
nk
|
||||||
swalkaus at yahoo.com
|
swalkaus at yahoo.com
|
||||||
tommink[at]post.pl
|
tommink[at]post.pl
|
||||||
Štefan Kremeň
|
|
||||||
Никита Дорохин
|
Никита Дорохин
|
||||||
|
@@ -49,5 +49,3 @@ s/tetetest tetetest//
|
|||||||
s/Jiří Hruška/Jiri Hruska/
|
s/Jiří Hruška/Jiri Hruska/
|
||||||
s/Viktor Szakats/Viktor Szakáts/
|
s/Viktor Szakats/Viktor Szakáts/
|
||||||
s/Jonathan Cardoso/Jonathan Cardoso Machado/
|
s/Jonathan Cardoso/Jonathan Cardoso Machado/
|
||||||
s/Linus Nielsen/Linus Nielsen Feltzing/
|
|
||||||
s/Todd Ouska$/Todd A Ouska/
|
|
||||||
|
84
docs/TODO
84
docs/TODO
@@ -25,8 +25,6 @@
|
|||||||
1.7 Detect when called from within callbacks
|
1.7 Detect when called from within callbacks
|
||||||
1.8 Allow SSL (HTTPS) to proxy
|
1.8 Allow SSL (HTTPS) to proxy
|
||||||
1.9 Cache negative name resolves
|
1.9 Cache negative name resolves
|
||||||
1.10 Support IDNA2008
|
|
||||||
1.11 minimize dependencies with dynamicly loaded modules
|
|
||||||
|
|
||||||
2. libcurl - multi interface
|
2. libcurl - multi interface
|
||||||
2.1 More non-blocking
|
2.1 More non-blocking
|
||||||
@@ -51,8 +49,6 @@
|
|||||||
5.3 Rearrange request header order
|
5.3 Rearrange request header order
|
||||||
5.4 SPDY
|
5.4 SPDY
|
||||||
5.5 auth= in URLs
|
5.5 auth= in URLs
|
||||||
5.6 Refuse "downgrade" redirects
|
|
||||||
5.7 More compressions
|
|
||||||
|
|
||||||
6. TELNET
|
6. TELNET
|
||||||
6.1 ditch stdin
|
6.1 ditch stdin
|
||||||
@@ -115,7 +111,6 @@
|
|||||||
17.7 warning when sending binary output to terminal
|
17.7 warning when sending binary output to terminal
|
||||||
17.8 offer color-coded HTTP header output
|
17.8 offer color-coded HTTP header output
|
||||||
17.9 Choose the name of file in braces for complex URLs
|
17.9 Choose the name of file in braces for complex URLs
|
||||||
17.10 improve how curl works in a windows console window
|
|
||||||
|
|
||||||
18. Build
|
18. Build
|
||||||
18.1 roffit
|
18.1 roffit
|
||||||
@@ -212,7 +207,7 @@
|
|||||||
|
|
||||||
To prevent local users from snooping on your traffic to the proxy. Supported
|
To prevent local users from snooping on your traffic to the proxy. Supported
|
||||||
by Chrome already:
|
by Chrome already:
|
||||||
https://www.chromium.org/developers/design-documents/secure-web-proxy
|
http://www.chromium.org/developers/design-documents/secure-web-proxy
|
||||||
|
|
||||||
...and by Firefox soon:
|
...and by Firefox soon:
|
||||||
https://bugzilla.mozilla.org/show_bug.cgi?id=378637
|
https://bugzilla.mozilla.org/show_bug.cgi?id=378637
|
||||||
@@ -222,19 +217,6 @@
|
|||||||
A name resolve that has failed is likely to fail when made again within a
|
A name resolve that has failed is likely to fail when made again within a
|
||||||
short period of time. Currently we only cache positive responses.
|
short period of time. Currently we only cache positive responses.
|
||||||
|
|
||||||
1.10 Support IDNA2008
|
|
||||||
|
|
||||||
International Domain Names are supported in libcurl since years back, powered
|
|
||||||
by libidn. libidn implements IDNA2003 which has been superseded by IDNA2008.
|
|
||||||
libidn2 is an existing library offering support for IDNA2008.
|
|
||||||
|
|
||||||
1.11 minimize dependencies with dynamicly loaded modules
|
|
||||||
|
|
||||||
We can create a system with loadable modules/plug-ins, where these modules
|
|
||||||
would be the ones that link to 3rd party libs. That would allow us to avoid
|
|
||||||
having to load ALL dependencies since only the necessary ones for this
|
|
||||||
app/invoke/used protocols would be necessary to load. See
|
|
||||||
https://github.com/bagder/curl/issues/349
|
|
||||||
|
|
||||||
2. libcurl - multi interface
|
2. libcurl - multi interface
|
||||||
|
|
||||||
@@ -282,7 +264,7 @@
|
|||||||
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 host name to use, to offer FTP
|
||||||
servers named-based virtual hosting:
|
servers named-based virtual hosting:
|
||||||
|
|
||||||
https://tools.ietf.org/html/rfc7151
|
http://tools.ietf.org/html/rfc7151
|
||||||
|
|
||||||
4.2 Alter passive/active on failure and retry
|
4.2 Alter passive/active on failure and retry
|
||||||
|
|
||||||
@@ -366,22 +348,6 @@ This is not detailed in any FTP specification.
|
|||||||
|
|
||||||
Additionally this should be implemented for proxy base URLs as well.
|
Additionally this should be implemented for proxy base URLs as well.
|
||||||
|
|
||||||
5.6 Refuse "downgrade" redirects
|
|
||||||
|
|
||||||
See https://github.com/bagder/curl/issues/226
|
|
||||||
|
|
||||||
Consider a way to tell curl to refuse to "downgrade" protocol with a redirect
|
|
||||||
and/or possibly a bit that refuses redirect to change protocol completely.
|
|
||||||
|
|
||||||
5.7 More compressions
|
|
||||||
|
|
||||||
Compression algorithms that perform better than gzip are being considered for
|
|
||||||
use and inclusion in existing browsers. For example 'brotli'. If servers
|
|
||||||
follow along it is a good reason for us to also allow users to take advantage
|
|
||||||
of this. The algorithm: https://github.com/google/brotli The Firefox bug:
|
|
||||||
https://bugzilla.mozilla.org/show_bug.cgi?id=366559
|
|
||||||
|
|
||||||
|
|
||||||
6. TELNET
|
6. TELNET
|
||||||
|
|
||||||
6.1 ditch stdin
|
6.1 ditch stdin
|
||||||
@@ -454,7 +420,7 @@ be the same as/similar to FTP.
|
|||||||
|
|
||||||
11.2 Honor file timestamps
|
11.2 Honor file timestamps
|
||||||
|
|
||||||
The timestamp of the transferred file should reflect that of the original file.
|
The timestamp of the transfered file should reflect that of the original file.
|
||||||
|
|
||||||
11.3 Use NTLMv2
|
11.3 Use NTLMv2
|
||||||
|
|
||||||
@@ -518,7 +484,7 @@ Currently the SMB authentication uses NTLMv1.
|
|||||||
|
|
||||||
DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL
|
DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL
|
||||||
keys and certs over DNS using DNSSEC as an alternative to the CA model.
|
keys and certs over DNS using DNSSEC as an alternative to the CA model.
|
||||||
https://www.rfc-editor.org/rfc/rfc6698.txt
|
http://www.rfc-editor.org/rfc/rfc6698.txt
|
||||||
|
|
||||||
An initial patch was posted by Suresh Krishnaswamy on March 7th 2013
|
An initial patch was posted by Suresh Krishnaswamy on March 7th 2013
|
||||||
(http://curl.haxx.se/mail/lib-2013-03/0075.html) but it was a too simple
|
(http://curl.haxx.se/mail/lib-2013-03/0075.html) but it was a too simple
|
||||||
@@ -548,7 +514,7 @@ Currently the SMB authentication uses NTLMv1.
|
|||||||
Therefore support for the existing -E/--cert and --key options should be
|
Therefore support for the existing -E/--cert and --key options should be
|
||||||
implemented by supplying a custom certificate to the SChannel APIs, see:
|
implemented by supplying a custom certificate to the SChannel APIs, see:
|
||||||
- Getting a Certificate for Schannel
|
- Getting a Certificate for Schannel
|
||||||
https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
|
http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
|
||||||
|
|
||||||
15.2 Add support for custom server certificate validation
|
15.2 Add support for custom server certificate validation
|
||||||
|
|
||||||
@@ -559,7 +525,7 @@ Currently the SMB authentication uses NTLMv1.
|
|||||||
Therefore support for the existing --cacert or --capath options should be
|
Therefore support for the existing --cacert or --capath options should be
|
||||||
implemented by supplying a custom certificate to the SChannel APIs, see:
|
implemented by supplying a custom certificate to the SChannel APIs, see:
|
||||||
- Getting a Certificate for Schannel
|
- Getting a Certificate for Schannel
|
||||||
https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
|
http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
|
||||||
|
|
||||||
15.3 Add support for the --ciphers option
|
15.3 Add support for the --ciphers option
|
||||||
|
|
||||||
@@ -570,7 +536,7 @@ Currently the SMB authentication uses NTLMv1.
|
|||||||
Therefore support for the existing --ciphers option should be implemented
|
Therefore support for the existing --ciphers option should be implemented
|
||||||
by mapping the OpenSSL/GnuTLS cipher suites to the SChannel APIs, see
|
by mapping the OpenSSL/GnuTLS cipher suites to the SChannel APIs, see
|
||||||
- Specifying Schannel Ciphers and Cipher Strengths
|
- Specifying Schannel Ciphers and Cipher Strengths
|
||||||
https://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx
|
http://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx
|
||||||
|
|
||||||
16. SASL
|
16. SASL
|
||||||
|
|
||||||
@@ -633,38 +599,32 @@ Currently the SMB authentication uses NTLMv1.
|
|||||||
|
|
||||||
17.6 warning when setting an option
|
17.6 warning when setting an option
|
||||||
|
|
||||||
Display a warning when libcurl returns an error when setting an option.
|
Display a warning when libcurl returns an error when setting an option.
|
||||||
This can be useful to tell when support for a particular feature hasn't been
|
This can be useful to tell when support for a particular feature hasn't been
|
||||||
compiled into the library.
|
compiled into the library.
|
||||||
|
|
||||||
17.7 warning when sending binary output to terminal
|
17.7 warning when sending binary output to terminal
|
||||||
|
|
||||||
Provide a way that prompts the user for confirmation before binary data is
|
Provide a way that prompts the user for confirmation before binary data is
|
||||||
sent to the terminal, much in the style 'less' does it.
|
sent to the terminal, much in the style 'less' does it.
|
||||||
|
|
||||||
17.8 offer color-coded HTTP header output
|
17.8 offer color-coded HTTP header output
|
||||||
|
|
||||||
By offering different color output on the header name and the header
|
By offering different color output on the header name and the header
|
||||||
contents, they could be made more readable and thus help users working on
|
contents, they could be made more readable and thus help users working on
|
||||||
HTTP services.
|
HTTP services.
|
||||||
|
|
||||||
17.9 Choose the name of file in braces for complex URLs
|
17.9 Choose the name of file in braces for complex URLs
|
||||||
|
|
||||||
When using braces to download a list of URLs and you use complicated names
|
When using braces to download a list of URLs and you use complicated names
|
||||||
in the list of alternatives, it could be handy to allow curl to use other
|
in the list of alternatives, it could be handy to allow curl to use other
|
||||||
names when saving.
|
names when saving.
|
||||||
|
|
||||||
Consider a way to offer that. Possibly like
|
Consider a way to offer that. Possibly like
|
||||||
{partURL1:name1,partURL2:name2,partURL3:name3} where the name following the
|
{partURL1:name1,partURL2:name2,partURL3:name3} where the name following the
|
||||||
colon is the output name.
|
colon is the output name.
|
||||||
|
|
||||||
See https://github.com/bagder/curl/issues/221
|
See https://github.com/bagder/curl/issues/221
|
||||||
|
|
||||||
17.10 improve how curl works in a windows console window
|
|
||||||
|
|
||||||
If you pull the scrollbar when transferring with curl in a Windows console
|
|
||||||
window, the transfer is interrupted and can get disconnected. This can
|
|
||||||
probably be improved. See https://github.com/bagder/curl/issues/322
|
|
||||||
|
|
||||||
|
|
||||||
18. Build
|
18. Build
|
||||||
|
@@ -1,18 +1,22 @@
|
|||||||
|
_ _ ____ _
|
||||||
|
___| | | | _ \| |
|
||||||
|
/ __| | | | |_) | |
|
||||||
|
| (__| |_| | _ <| |___
|
||||||
|
\___|\___/|_| \_\_____|
|
||||||
|
|
||||||
Version Numbers and Releases
|
Version Numbers and Releases
|
||||||
============================
|
|
||||||
|
|
||||||
Curl is not only curl. Curl is also libcurl. They're actually individually
|
Curl is not only curl. Curl is also libcurl. They're actually individually
|
||||||
versioned, but they mostly follow each other rather closely.
|
versioned, but they mostly follow each other rather closely.
|
||||||
|
|
||||||
The version numbering is always built up using the same system:
|
The version numbering is always built up using the same system:
|
||||||
|
|
||||||
X.Y.Z
|
X.Y[.Z]
|
||||||
|
|
||||||
- X is main version number
|
Where
|
||||||
- Y is release number
|
X is main version number
|
||||||
- Z is patch number
|
Y is release number
|
||||||
|
Z is patch number
|
||||||
## Bumping numbers
|
|
||||||
|
|
||||||
One of these numbers will get bumped in each new release. The numbers to the
|
One of these numbers will get bumped in each new release. The numbers to the
|
||||||
right of a bumped number will be reset to zero. If Z is zero, it may not be
|
right of a bumped number will be reset to zero. If Z is zero, it may not be
|
||||||
@@ -53,4 +57,4 @@ Version Numbers and Releases
|
|||||||
release. It makes comparisons with greater than and less than work.
|
release. It makes comparisons with greater than and less than work.
|
||||||
|
|
||||||
This number is also available as three separate defines:
|
This number is also available as three separate defines:
|
||||||
`LIBCURL_VERSION_MAJOR`, `LIBCURL_VERSION_MINOR` and `LIBCURL_VERSION_PATCH`.
|
LIBCURL_VERSION_MAJOR, LIBCURL_VERSION_MINOR and LIBCURL_VERSION_PATCH.
|
||||||
|
163
docs/curl.1
163
docs/curl.1
@@ -39,7 +39,8 @@ resume, Metalink, and more. As you will see below, the number of features will
|
|||||||
make your head spin!
|
make your head spin!
|
||||||
|
|
||||||
curl is powered by libcurl for all transfer-related features. See
|
curl is powered by libcurl for all transfer-related features. See
|
||||||
\fIlibcurl(3)\fP for details.
|
.BR libcurl (3)
|
||||||
|
for details.
|
||||||
.SH URL
|
.SH URL
|
||||||
The URL syntax is protocol-dependent. You'll find a detailed description in
|
The URL syntax is protocol-dependent. You'll find a detailed description in
|
||||||
RFC 3986.
|
RFC 3986.
|
||||||
@@ -171,11 +172,10 @@ a level of control).
|
|||||||
.IP "-2, --sslv2"
|
.IP "-2, --sslv2"
|
||||||
(SSL) Forces curl to use SSL version 2 when negotiating with a remote SSL
|
(SSL) Forces curl to use SSL version 2 when negotiating with a remote SSL
|
||||||
server. Sometimes curl is built without SSLv2 support. SSLv2 is widely
|
server. Sometimes curl is built without SSLv2 support. SSLv2 is widely
|
||||||
considered insecure (see RFC 6176).
|
considered insecure.
|
||||||
.IP "-3, --sslv3"
|
.IP "-3, --sslv3"
|
||||||
(SSL) Forces curl to use SSL version 3 when negotiating with a remote SSL
|
(SSL) Forces curl to use SSL version 3 when negotiating with a remote SSL
|
||||||
server. Sometimes curl is built without SSLv3 support. SSLv3 is widely
|
server. Sometimes curl is built without SSLv3 support.
|
||||||
considered insecure (see RFC 7568).
|
|
||||||
.IP "-4, --ipv4"
|
.IP "-4, --ipv4"
|
||||||
This option tells curl to resolve names to IPv4 addresses only, and not for
|
This option tells curl to resolve names to IPv4 addresses only, and not for
|
||||||
example try IPv6.
|
example try IPv6.
|
||||||
@@ -213,7 +213,7 @@ be in the format "NAME1=VALUE1; NAME2=VALUE2".
|
|||||||
|
|
||||||
If no '=' symbol is used in the line, it is treated as a filename to use to
|
If no '=' symbol is used in the line, it is treated as a filename to use to
|
||||||
read previously stored cookie lines from, which should be used in this session
|
read previously stored cookie lines from, which should be used in this session
|
||||||
if they match. Using this method also activates the cookie engine which will
|
if they match. Using this method also activates the "cookie parser" which will
|
||||||
make curl record incoming cookies too, which may be handy if you're using this
|
make curl record incoming cookies too, which may be handy if you're using this
|
||||||
in combination with the \fI-L, --location\fP option. The file format of the
|
in combination with the \fI-L, --location\fP option. The file format of the
|
||||||
file to read cookies from should be plain HTTP headers or the Netscape/Mozilla
|
file to read cookies from should be plain HTTP headers or the Netscape/Mozilla
|
||||||
@@ -223,15 +223,6 @@ The file specified with \fI-b, --cookie\fP is only used as input. No cookies
|
|||||||
will be written to the file. To store cookies, use the \fI-c, --cookie-jar\fP
|
will be written to the file. To store cookies, use the \fI-c, --cookie-jar\fP
|
||||||
option.
|
option.
|
||||||
|
|
||||||
Exercise caution if you are using this option and multiple transfers may occur.
|
|
||||||
If you use the NAME1=VALUE1; format, or in a file use the Set-Cookie format and
|
|
||||||
don't specify a domain, then the cookie is sent for any domain (even after
|
|
||||||
redirects are followed) and cannot be modified by a server-set cookie. If the
|
|
||||||
cookie engine is enabled and a server sets a cookie of the same name then both
|
|
||||||
will be sent on a future transfer to that server, likely not what you intended.
|
|
||||||
To address these issues set a domain in Set-Cookie (doing that will include
|
|
||||||
sub-domains) or use the Netscape format.
|
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-B, --use-ascii"
|
.IP "-B, --use-ascii"
|
||||||
(FTP/LDAP) Enable ASCII transfer. For FTP, this can also be enforced by using
|
(FTP/LDAP) Enable ASCII transfer. For FTP, this can also be enforced by using
|
||||||
@@ -263,9 +254,6 @@ won't fail or even report an error clearly. Using -v will get a warning
|
|||||||
displayed, but that is the only visible feedback you get about this possibly
|
displayed, but that is the only visible feedback you get about this possibly
|
||||||
lethal situation.
|
lethal situation.
|
||||||
|
|
||||||
Since 7.43.0 cookies that were imported in the Set-Cookie format without a
|
|
||||||
domain name are not exported by this option.
|
|
||||||
|
|
||||||
If this option is used several times, the last specified file name will be
|
If this option is used several times, the last specified file name will be
|
||||||
used.
|
used.
|
||||||
.IP "-C, --continue-at <offset>"
|
.IP "-C, --continue-at <offset>"
|
||||||
@@ -281,11 +269,11 @@ If this option is used several times, the last one will be used.
|
|||||||
.IP "--ciphers <list of ciphers>"
|
.IP "--ciphers <list of ciphers>"
|
||||||
(SSL) Specifies which ciphers to use in the connection. The list of ciphers
|
(SSL) Specifies which ciphers to use in the connection. The list of ciphers
|
||||||
must specify valid ciphers. Read up on SSL cipher list details on this URL:
|
must specify valid ciphers. Read up on SSL cipher list details on this URL:
|
||||||
\fIhttps://www.openssl.org/docs/apps/ciphers.html\fP
|
\fIhttp://www.openssl.org/docs/apps/ciphers.html\fP
|
||||||
|
|
||||||
NSS ciphers are done differently than OpenSSL and GnuTLS. The full list of NSS
|
NSS ciphers are done differently than OpenSSL and GnuTLS. The full list of NSS
|
||||||
ciphers is in the NSSCipherSuite entry at this URL:
|
ciphers is in the NSSCipherSuite entry at this URL:
|
||||||
\fIhttps://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\fP
|
\fIhttp://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\fP
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "--compressed"
|
.IP "--compressed"
|
||||||
@@ -327,10 +315,9 @@ presses the submit button. This will cause curl to pass the data to the server
|
|||||||
using the content-type application/x-www-form-urlencoded. Compare to
|
using the content-type application/x-www-form-urlencoded. Compare to
|
||||||
\fI-F, --form\fP.
|
\fI-F, --form\fP.
|
||||||
|
|
||||||
\fI-d, --data\fP is the same as \fI--data-ascii\fP. \fI--data-raw\fP is almost
|
\fI-d, --data\fP is the same as \fI--data-ascii\fP. To post data purely binary,
|
||||||
the same but does not have a special interpretation of the @ character. To
|
you should instead use the \fI--data-binary\fP option. To URL-encode the value
|
||||||
post data purely binary, you should instead use the \fI--data-binary\fP option.
|
of a form field you may use \fI--data-urlencode\fP.
|
||||||
To URL-encode the value of a form field you may use \fI--data-urlencode\fP.
|
|
||||||
|
|
||||||
If any of these options is used more than once on the same command line, the
|
If any of these options is used more than once on the same command line, the
|
||||||
data pieces specified will be merged together with a separating
|
data pieces specified will be merged together with a separating
|
||||||
@@ -342,8 +329,7 @@ read the data from, or - if you want curl to read the data from
|
|||||||
stdin. Multiple files can also be specified. Posting data from a file
|
stdin. Multiple files can also be specified. Posting data from a file
|
||||||
named 'foobar' would thus be done with \fI--data\fP @foobar. When --data is
|
named 'foobar' would thus be done with \fI--data\fP @foobar. When --data is
|
||||||
told to read from a file like that, carriage returns and newlines will be
|
told to read from a file like that, carriage returns and newlines will be
|
||||||
stripped out. If you don't want the @ character to have a special
|
stripped out.
|
||||||
interpretation use \fI--data-raw\fP instead.
|
|
||||||
.IP "-D, --dump-header <file>"
|
.IP "-D, --dump-header <file>"
|
||||||
Write the protocol headers to the specified file.
|
Write the protocol headers to the specified file.
|
||||||
|
|
||||||
@@ -368,10 +354,6 @@ and carriage returns are preserved and conversions are never done.
|
|||||||
|
|
||||||
If this option is used several times, the ones following the first will append
|
If this option is used several times, the ones following the first will append
|
||||||
data as described in \fI-d, --data\fP.
|
data as described in \fI-d, --data\fP.
|
||||||
.IP "--data-raw <data>"
|
|
||||||
(HTTP) This posts data similarly to \fI--data\fP but without the special
|
|
||||||
interpretation of the @ character. See \fI-d, --data\fP.
|
|
||||||
(Added in 7.43.0)
|
|
||||||
.IP "--data-urlencode <data>"
|
.IP "--data-urlencode <data>"
|
||||||
(HTTP) This posts data, similar to the other --data options with the exception
|
(HTTP) This posts data, similar to the other --data options with the exception
|
||||||
that this performs URL-encoding. (Added in 7.18.0)
|
that this performs URL-encoding. (Added in 7.18.0)
|
||||||
@@ -488,10 +470,10 @@ If this option is used several times, the last one will be used.
|
|||||||
(SSL) Tells curl to use the specified client certificate file when getting a
|
(SSL) Tells curl to use the specified client certificate file when getting a
|
||||||
file with HTTPS, FTPS or another SSL-based protocol. The certificate must be
|
file with HTTPS, FTPS or another SSL-based protocol. The certificate must be
|
||||||
in PKCS#12 format if using Secure Transport, or PEM format if using any other
|
in PKCS#12 format if using Secure Transport, or PEM format if using any other
|
||||||
engine. If the optional password isn't specified, it will be queried for on
|
engine. If the optional password isn't specified, it will be queried
|
||||||
the terminal. Note that this option assumes a \&"certificate" file that is the
|
for on the terminal. Note that this option assumes a \&"certificate" file that
|
||||||
private key and the client certificate concatenated! See \fI--cert\fP and
|
is the private key and the private certificate concatenated! See \fI--cert\fP
|
||||||
\fI--key\fP to specify them independently.
|
and \fI--key\fP to specify them independently.
|
||||||
|
|
||||||
If curl is built against the NSS SSL library then this option can tell
|
If curl is built against the NSS SSL library then this option can tell
|
||||||
curl the nickname of the certificate to use within the NSS database defined
|
curl the nickname of the certificate to use within the NSS database defined
|
||||||
@@ -557,22 +539,19 @@ OpenSSL-powered curl to make SSL-connections much more efficiently than using
|
|||||||
|
|
||||||
If this option is set, the default capath value will be ignored, and if it is
|
If this option is set, the default capath value will be ignored, and if it is
|
||||||
used several times, the last one will be used.
|
used several times, the last one will be used.
|
||||||
.IP "--pinnedpubkey <pinned public key (hashes)>"
|
.IP "--pinnedpubkey <pinned public key>"
|
||||||
(SSL) Tells curl to use the specified public key file (or hashes) to verify the
|
(SSL) Tells curl to use the specified public key file to verify the peer. The
|
||||||
peer. This can be a path to a file which contains a single public key in PEM or
|
file must contain a single public key in PEM or DER format.
|
||||||
DER format, or any number of base64 encoded sha256 hashes preceded by
|
|
||||||
\'sha256//\' and separated by \';\'
|
|
||||||
|
|
||||||
When negotiating a TLS or SSL connection, the server sends a certificate
|
When negotiating a TLS or SSL connection, the server sends a certificate
|
||||||
indicating its identity. A public key is extracted from this certificate and
|
indicating its identity. A public key is extracted from this certificate and
|
||||||
if it does not exactly match the public key provided to this option, curl will
|
if it does not exactly match the public key provided to this option, curl will
|
||||||
abort the connection before sending or receiving any data.
|
abort the connection before sending or receiving any data.
|
||||||
|
|
||||||
Added in 7.39.0 for OpenSSL, GnuTLS and GSKit. Added in 7.43.0 for NSS and
|
This is currently only implemented in the OpenSSL, GnuTLS and GSKit backends.
|
||||||
wolfSSL/CyaSSL. sha256 support added in 7.44.0 for OpenSSL,
|
|
||||||
GnuTLS, NSS and wolfSSL/CyaSSL. Other SSL backends not supported.
|
|
||||||
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
|
(Added in 7.39.0)
|
||||||
.IP "--cert-status"
|
.IP "--cert-status"
|
||||||
(SSL) Tells curl to verify the status of the server certificate by using the
|
(SSL) Tells curl to verify the status of the server certificate by using the
|
||||||
Certificate Status Request (aka. OCSP stapling) TLS extension.
|
Certificate Status Request (aka. OCSP stapling) TLS extension.
|
||||||
@@ -581,7 +560,7 @@ If this option is enabled and the server sends an invalid (e.g. expired)
|
|||||||
response, if the response suggests that the server certificate has been revoked,
|
response, if the response suggests that the server certificate has been revoked,
|
||||||
or no response at all is received, the verification fails.
|
or no response at all is received, the verification fails.
|
||||||
|
|
||||||
This is currently only implemented in the OpenSSL, GnuTLS and NSS backends.
|
This is currently only implemented in the OpenSSL, GnuTLS and NSS backends.
|
||||||
(Added in 7.41.0)
|
(Added in 7.41.0)
|
||||||
.IP "--false-start"
|
.IP "--false-start"
|
||||||
|
|
||||||
@@ -620,9 +599,7 @@ input:
|
|||||||
\fBcurl\fP -F password=@/etc/passwd www.mypasswords.com
|
\fBcurl\fP -F password=@/etc/passwd www.mypasswords.com
|
||||||
|
|
||||||
To read content from stdin instead of a file, use - as the filename. This goes
|
To read content from stdin instead of a file, use - as the filename. This goes
|
||||||
for both @ and < constructs. Unfortunately it does not support reading the
|
for both @ and < constructs.
|
||||||
file from a named pipe or similar, as it needs the full size before the
|
|
||||||
transfer starts.
|
|
||||||
|
|
||||||
You can also tell curl what Content-Type to use by using 'type=', in a manner
|
You can also tell curl what Content-Type to use by using 'type=', in a manner
|
||||||
similar to:
|
similar to:
|
||||||
@@ -684,7 +661,6 @@ curl does one CWD with the full target directory and then operates on the file
|
|||||||
\&"normally" (like in the multicwd case). This is somewhat more standards
|
\&"normally" (like in the multicwd case). This is somewhat more standards
|
||||||
compliant than 'nocwd' but without the full penalty of 'multicwd'.
|
compliant than 'nocwd' but without the full penalty of 'multicwd'.
|
||||||
.RE
|
.RE
|
||||||
.IP
|
|
||||||
(Added in 7.15.1)
|
(Added in 7.15.1)
|
||||||
.IP "--ftp-pasv"
|
.IP "--ftp-pasv"
|
||||||
(FTP) Use passive mode for the data connection. Passive is the internal default
|
(FTP) Use passive mode for the data connection. Passive is the internal default
|
||||||
@@ -789,12 +765,10 @@ This option can be used multiple times to add/replace/remove multiple headers.
|
|||||||
be the 128 bit MD5 checksum of the remote host's public key, curl will refuse
|
be the 128 bit MD5 checksum of the remote host's public key, curl will refuse
|
||||||
the connection with the host unless the md5sums match. (Added in 7.17.1)
|
the connection with the host unless the md5sums match. (Added in 7.17.1)
|
||||||
.IP "--ignore-content-length"
|
.IP "--ignore-content-length"
|
||||||
For HTTP, Ignore the Content-Length header. This is particularly useful for
|
(HTTP)
|
||||||
servers running Apache 1.x, which will report incorrect Content-Length for
|
Ignore the Content-Length header. This is particularly useful for servers
|
||||||
files larger than 2 gigabytes.
|
running Apache 1.x, which will report incorrect Content-Length for files
|
||||||
|
larger than 2 gigabytes.
|
||||||
For FTP (since 7.46.0), skip the RETR command to figure out the size before
|
|
||||||
downloading a file.
|
|
||||||
.IP "-i, --include"
|
.IP "-i, --include"
|
||||||
(HTTP) Include the HTTP-header in the output. The HTTP-header includes things
|
(HTTP) Include the HTTP-header in the output. The HTTP-header includes things
|
||||||
like server-name, date of the document, HTTP-version and more...
|
like server-name, date of the document, HTTP-version and more...
|
||||||
@@ -1079,10 +1053,13 @@ in Metalink file, hash check will fail.
|
|||||||
Makes curl scan the \fI.netrc\fP (\fI_netrc\fP on Windows) file in the user's
|
Makes curl scan the \fI.netrc\fP (\fI_netrc\fP on Windows) file in the user's
|
||||||
home directory for login name and password. This is typically used for FTP on
|
home directory for login name and password. This is typically used for FTP on
|
||||||
Unix. If used with HTTP, curl will enable user authentication. See
|
Unix. If used with HTTP, curl will enable user authentication. See
|
||||||
\fInetrc(5)\fP \fIftp(1)\fP for details on the file format. Curl will not
|
.BR netrc(4)
|
||||||
complain if that file doesn't have the right permissions (it should not be
|
or
|
||||||
either world- or group-readable). The environment variable "HOME" is used to
|
.BR ftp(1)
|
||||||
find the home directory.
|
for details on the file format. Curl will not complain if that file
|
||||||
|
doesn't have the right permissions (it should not be either world- or
|
||||||
|
group-readable). The environment variable "HOME" is used to find the home
|
||||||
|
directory.
|
||||||
|
|
||||||
A quick and very simple example of how to setup a \fI.netrc\fP to allow curl
|
A quick and very simple example of how to setup a \fI.netrc\fP to allow curl
|
||||||
to FTP to the machine host.domain.com with user name \&'myself' and password
|
to FTP to the machine host.domain.com with user name \&'myself' and password
|
||||||
@@ -1244,7 +1221,7 @@ i.e "my.host.domain" to specify the machine
|
|||||||
make curl pick the same IP address that is already used for the control
|
make curl pick the same IP address that is already used for the control
|
||||||
connection
|
connection
|
||||||
.RE
|
.RE
|
||||||
.IP
|
|
||||||
If this option is used several times, the last one will be used. Disable the
|
If this option is used several times, the last one will be used. Disable the
|
||||||
use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command
|
use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command
|
||||||
instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++.
|
instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++.
|
||||||
@@ -1265,21 +1242,21 @@ this option set you tell it not to do that.
|
|||||||
|
|
||||||
(Added in 7.42.0)
|
(Added in 7.42.0)
|
||||||
.IP "--post301"
|
.IP "--post301"
|
||||||
(HTTP) Tells curl to respect RFC 7230/6.4.2 and not convert POST requests
|
(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
|
||||||
into GET requests when following a 301 redirection. The non-RFC behaviour is
|
into GET requests when following a 301 redirection. The non-RFC behaviour is
|
||||||
ubiquitous in web browsers, so curl does the conversion by default to maintain
|
ubiquitous in web browsers, so curl does the conversion by default to maintain
|
||||||
consistency. However, a server may require a POST to remain a POST after such
|
consistency. However, a server may require a POST to remain a POST after such
|
||||||
a redirection. This option is meaningful only when using \fI-L, --location\fP
|
a redirection. This option is meaningful only when using \fI-L, --location\fP
|
||||||
(Added in 7.17.1)
|
(Added in 7.17.1)
|
||||||
.IP "--post302"
|
.IP "--post302"
|
||||||
(HTTP) Tells curl to respect RFC 7230/6.4.3 and not convert POST requests
|
(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
|
||||||
into GET requests when following a 302 redirection. The non-RFC behaviour is
|
into GET requests when following a 302 redirection. The non-RFC behaviour is
|
||||||
ubiquitous in web browsers, so curl does the conversion by default to maintain
|
ubiquitous in web browsers, so curl does the conversion by default to maintain
|
||||||
consistency. However, a server may require a POST to remain a POST after such
|
consistency. However, a server may require a POST to remain a POST after such
|
||||||
a redirection. This option is meaningful only when using \fI-L, --location\fP
|
a redirection. This option is meaningful only when using \fI-L, --location\fP
|
||||||
(Added in 7.19.1)
|
(Added in 7.19.1)
|
||||||
.IP "--post303"
|
.IP "--post303"
|
||||||
(HTTP) Tells curl to respect RFC 7230/6.4.4 and not convert POST requests
|
(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
|
||||||
into GET requests when following a 303 redirection. The non-RFC behaviour is
|
into GET requests when following a 303 redirection. The non-RFC behaviour is
|
||||||
ubiquitous in web browsers, so curl does the conversion by default to maintain
|
ubiquitous in web browsers, so curl does the conversion by default to maintain
|
||||||
consistency. However, a server may require a POST to remain a POST after such
|
consistency. However, a server may require a POST to remain a POST after such
|
||||||
@@ -1326,40 +1303,9 @@ This option can be used multiple times, in which case the effect is the same
|
|||||||
as concatenating the protocols into one instance of the option.
|
as concatenating the protocols into one instance of the option.
|
||||||
|
|
||||||
(Added in 7.20.2)
|
(Added in 7.20.2)
|
||||||
.IP "--proto-default <protocol>"
|
|
||||||
Tells curl to use \fIprotocol\fP for any URL missing a scheme name.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
.RS
|
|
||||||
.IP "--proto-default https ftp.mozilla.org"
|
|
||||||
https://ftp.mozilla.org
|
|
||||||
.RE
|
|
||||||
|
|
||||||
An unknown or unsupported protocol causes error
|
|
||||||
\fICURLE_UNSUPPORTED_PROTOCOL\fP.
|
|
||||||
|
|
||||||
This option does not change the default proxy protocol (http).
|
|
||||||
|
|
||||||
Without this option curl would make a guess based on the host, see \fI--url\fP
|
|
||||||
for details.
|
|
||||||
|
|
||||||
(Added in 7.45.0)
|
|
||||||
.IP "--proto-redir <protocols>"
|
.IP "--proto-redir <protocols>"
|
||||||
Tells curl to use the listed protocols on redirect. See --proto for how
|
Tells curl to use the listed protocols after a redirect. See --proto for
|
||||||
protocols are represented.
|
how protocols are represented.
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
.RS
|
|
||||||
.IP "--proto-redir -all,http,https"
|
|
||||||
Allow only HTTP and HTTPS on redirect.
|
|
||||||
.RE
|
|
||||||
|
|
||||||
By default curl will allow all protocols on redirect except several disabled
|
|
||||||
for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0
|
|
||||||
SMB and SMBS are also disabled. Specifying \fIall\fP or \fI+all\fP enables all
|
|
||||||
protocols on redirect, including those disabled for security.
|
|
||||||
|
|
||||||
(Added in 7.20.2)
|
(Added in 7.20.2)
|
||||||
.IP "--proxy-anyauth"
|
.IP "--proxy-anyauth"
|
||||||
@@ -1380,11 +1326,6 @@ with a remote host. (Added in 7.17.1)
|
|||||||
.IP "--proxy-ntlm"
|
.IP "--proxy-ntlm"
|
||||||
Tells curl to use HTTP NTLM authentication when communicating with the given
|
Tells curl to use HTTP NTLM authentication when communicating with the given
|
||||||
proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host.
|
proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host.
|
||||||
.IP "--proxy-service-name <servicename>"
|
|
||||||
This option allows you to change the service name for proxy negotiation.
|
|
||||||
|
|
||||||
Examples: --proxy-negotiate proxy-name \fI--proxy-service-name\fP sockd would use
|
|
||||||
sockd/proxy-name. (Added in 7.43.0).
|
|
||||||
.IP "--proxy1.0 <proxyhost[:port]>"
|
.IP "--proxy1.0 <proxyhost[:port]>"
|
||||||
Use the specified HTTP 1.0 proxy. If the port number is not specified, it is
|
Use the specified HTTP 1.0 proxy. If the port number is not specified, it is
|
||||||
assumed at port 1080.
|
assumed at port 1080.
|
||||||
@@ -1474,12 +1415,15 @@ specifies the last 500 bytes
|
|||||||
specifies the bytes from offset 9500 and forward
|
specifies the bytes from offset 9500 and forward
|
||||||
.TP
|
.TP
|
||||||
.B 0-0,-1
|
.B 0-0,-1
|
||||||
specifies the first and last byte only(*)(HTTP)
|
specifies the first and last byte only(*)(H)
|
||||||
|
.TP
|
||||||
|
.B 500-700,600-799
|
||||||
|
specifies 300 bytes from offset 500(H)
|
||||||
.TP
|
.TP
|
||||||
.B 100-199,500-599
|
.B 100-199,500-599
|
||||||
specifies two separate 100-byte ranges(*) (HTTP)
|
specifies two separate 100-byte ranges(*)(H)
|
||||||
.RE
|
.RE
|
||||||
.IP
|
|
||||||
(*) = NOTE that this will cause the server to reply with a multipart
|
(*) = NOTE that this will cause the server to reply with a multipart
|
||||||
response!
|
response!
|
||||||
|
|
||||||
@@ -1563,11 +1507,6 @@ terminal/stdout unless you redirect it.
|
|||||||
.IP "--sasl-ir"
|
.IP "--sasl-ir"
|
||||||
Enable initial response in SASL authentication.
|
Enable initial response in SASL authentication.
|
||||||
(Added in 7.31.0)
|
(Added in 7.31.0)
|
||||||
.IP "--service-name <servicename>"
|
|
||||||
This option allows you to change the service name for SPNEGO.
|
|
||||||
|
|
||||||
Examples: --negotiate \fI--service-name\fP sockd would use
|
|
||||||
sockd/server-name. (Added in 7.43.0).
|
|
||||||
.IP "-S, --show-error"
|
.IP "-S, --show-error"
|
||||||
When used with \fI-s\fP it makes curl show an error message if it fails.
|
When used with \fI-s\fP it makes curl show an error message if it fails.
|
||||||
.IP "--ssl"
|
.IP "--ssl"
|
||||||
@@ -1590,10 +1529,6 @@ and TLS1.0 protocols known as BEAST. If this option isn't used, the SSL layer
|
|||||||
may use workarounds known to cause interoperability problems with some older
|
may use workarounds known to cause interoperability problems with some older
|
||||||
SSL implementations. WARNING: this option loosens the SSL security, and by
|
SSL implementations. WARNING: this option loosens the SSL security, and by
|
||||||
using this flag you ask for exactly that. (Added in 7.25.0)
|
using this flag you ask for exactly that. (Added in 7.25.0)
|
||||||
.IP "--ssl-no-revoke"
|
|
||||||
(WinSSL) This option tells curl to disable certificate revocation checks.
|
|
||||||
WARNING: this option loosens the SSL security, and by using this flag you ask
|
|
||||||
for exactly that. (Added in 7.44.0)
|
|
||||||
.IP "--socks4 <host[:port]>"
|
.IP "--socks4 <host[:port]>"
|
||||||
Use the specified SOCKS4 proxy. If the port number is not specified, it is
|
Use the specified SOCKS4 proxy. If the port number is not specified, it is
|
||||||
assumed at port 1080. (Added in 7.15.2)
|
assumed at port 1080. (Added in 7.15.2)
|
||||||
@@ -1803,12 +1738,6 @@ If this option is used several times, the last one will be used.
|
|||||||
Specify a URL to fetch. This option is mostly handy when you want to specify
|
Specify a URL to fetch. This option is mostly handy when you want to specify
|
||||||
URL(s) in a config file.
|
URL(s) in a config file.
|
||||||
|
|
||||||
If the given URL is missing a scheme name (such as "http://" or "ftp://" etc)
|
|
||||||
then curl will make a guess based on the host. If the outermost sub-domain name
|
|
||||||
matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be used,
|
|
||||||
otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by setting a
|
|
||||||
default protocol, see \fI--proto-default\fP for details.
|
|
||||||
|
|
||||||
This option may be used any number of times. To control where this URL is
|
This option may be used any number of times. To control where this URL is
|
||||||
written, use the \fI-o, --output\fP or the \fI-O, --remote-name\fP options.
|
written, use the \fI-o, --output\fP or the \fI-O, --remote-name\fP options.
|
||||||
.IP "-v, --verbose"
|
.IP "-v, --verbose"
|
||||||
@@ -1953,7 +1882,7 @@ displayed with millisecond resolution.
|
|||||||
The URL that was fetched last. This is most meaningful if you've told curl
|
The URL that was fetched last. This is most meaningful if you've told curl
|
||||||
to follow location: headers.
|
to follow location: headers.
|
||||||
.RE
|
.RE
|
||||||
.IP
|
|
||||||
If this option is used several times, the last one will be used.
|
If this option is used several times, the last one will be used.
|
||||||
.IP "-x, --proxy <[protocol://][user:password@]proxyhost[:port]>"
|
.IP "-x, --proxy <[protocol://][user:password@]proxyhost[:port]>"
|
||||||
Use the specified proxy.
|
Use the specified proxy.
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,9 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* Example application source code using the multi interface to download many
|
||||||
* Source code using the multi interface to download many
|
* files, but with a capped maximum amount of simultaneous transfers.
|
||||||
* files, with a capped maximum amount of simultaneous transfers.
|
*
|
||||||
* </DESC>
|
|
||||||
* Written by Michael Wallner
|
* Written by Michael Wallner
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
#
|
#
|
||||||
# This software is licensed as described in the file COPYING, which
|
# This software is licensed as described in the file COPYING, which
|
||||||
# you should have received as part of this distribution. The terms
|
# you should have received as part of this distribution. The terms
|
||||||
@@ -31,8 +31,7 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \
|
|||||||
pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi \
|
pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi \
|
||||||
imap-list imap-lsub imap-fetch imap-store imap-append imap-examine \
|
imap-list imap-lsub imap-fetch imap-store imap-append imap-examine \
|
||||||
imap-search imap-create imap-delete imap-copy imap-noop imap-ssl \
|
imap-search imap-create imap-delete imap-copy imap-noop imap-ssl \
|
||||||
imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \
|
imap-tls imap-multi url2file sftpget ftpsget postinmemory
|
||||||
http2-upload http2-serverpush
|
|
||||||
|
|
||||||
# These examples require external dependencies that may not be commonly
|
# These examples require external dependencies that may not be commonly
|
||||||
# available on POSIX systems, so don't bother attempting to compile them here.
|
# available on POSIX systems, so don't bother attempting to compile them here.
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
# | (__| |_| | _ <| |___
|
# | (__| |_| | _ <| |___
|
||||||
# \___|\___/|_| \_\_____|
|
# \___|\___/|_| \_\_____|
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
# Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
#
|
#
|
||||||
# This software is licensed as described in the file COPYING, which
|
# This software is licensed as described in the file COPYING, which
|
||||||
# you should have received as part of this distribution. The terms
|
# you should have received as part of this distribution. The terms
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
###########################################################################
|
###########################################################################
|
||||||
#
|
#
|
||||||
## Makefile for building curl examples with MingW (GCC-3.2 or later)
|
## Makefile for building curl examples with MingW (GCC-3.2 or later)
|
||||||
## and optionally OpenSSL (1.0.2a), libssh2 (1.5), zlib (1.2.8), librtmp (2.4)
|
## and optionally OpenSSL (0.9.8), libssh2 (1.3), zlib (1.2.5), librtmp (2.3)
|
||||||
##
|
##
|
||||||
## Usage: mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
|
## Usage: mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
|
||||||
## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-spi-winidn
|
## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-spi-winidn
|
||||||
@@ -38,23 +38,23 @@ ZLIB_PATH = ../../../zlib-1.2.8
|
|||||||
endif
|
endif
|
||||||
# Edit the path below to point to the base of your OpenSSL package.
|
# Edit the path below to point to the base of your OpenSSL package.
|
||||||
ifndef OPENSSL_PATH
|
ifndef OPENSSL_PATH
|
||||||
OPENSSL_PATH = ../../../openssl-1.0.2a
|
OPENSSL_PATH = ../../../openssl-0.9.8zc
|
||||||
endif
|
endif
|
||||||
# Edit the path below to point to the base of your LibSSH2 package.
|
# Edit the path below to point to the base of your LibSSH2 package.
|
||||||
ifndef LIBSSH2_PATH
|
ifndef LIBSSH2_PATH
|
||||||
LIBSSH2_PATH = ../../../libssh2-1.5.0
|
LIBSSH2_PATH = ../../../libssh2-1.4.3
|
||||||
endif
|
endif
|
||||||
# Edit the path below to point to the base of your librtmp package.
|
# Edit the path below to point to the base of your librtmp package.
|
||||||
ifndef LIBRTMP_PATH
|
ifndef LIBRTMP_PATH
|
||||||
LIBRTMP_PATH = ../../../librtmp-2.4
|
LIBRTMP_PATH = ../../../librtmp-2.3
|
||||||
endif
|
endif
|
||||||
# Edit the path below to point to the base of your libidn package.
|
# Edit the path below to point to the base of your libidn package.
|
||||||
ifndef LIBIDN_PATH
|
ifndef LIBIDN_PATH
|
||||||
LIBIDN_PATH = ../../../libidn-1.32
|
LIBIDN_PATH = ../../../libidn-1.18
|
||||||
endif
|
endif
|
||||||
# Edit the path below to point to the base of your MS IDN package.
|
# Edit the path below to point to the base of your MS IDN package.
|
||||||
# Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1
|
# Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1
|
||||||
# https://www.microsoft.com/en-us/download/details.aspx?id=734
|
# http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ad6158d7-ddba-416a-9109-07607425a815
|
||||||
ifndef WINIDN_PATH
|
ifndef WINIDN_PATH
|
||||||
WINIDN_PATH = ../../../Microsoft IDN Mitigation APIs
|
WINIDN_PATH = ../../../Microsoft IDN Mitigation APIs
|
||||||
endif
|
endif
|
||||||
@@ -62,10 +62,6 @@ endif
|
|||||||
ifndef LDAP_SDK
|
ifndef LDAP_SDK
|
||||||
LDAP_SDK = c:/novell/ndk/cldapsdk/win32
|
LDAP_SDK = c:/novell/ndk/cldapsdk/win32
|
||||||
endif
|
endif
|
||||||
# Edit the path below to point to the base of your nghttp2 package.
|
|
||||||
ifndef NGHTTP2_PATH
|
|
||||||
NGHTTP2_PATH = ../../../nghttp2-1.0.0
|
|
||||||
endif
|
|
||||||
|
|
||||||
PROOT = ../..
|
PROOT = ../..
|
||||||
|
|
||||||
@@ -76,24 +72,14 @@ endif
|
|||||||
|
|
||||||
# Edit the var below to set to your architecture or set environment var.
|
# Edit the var below to set to your architecture or set environment var.
|
||||||
ifndef ARCH
|
ifndef ARCH
|
||||||
ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64)
|
ARCH = w32
|
||||||
ARCH = w64
|
|
||||||
else
|
|
||||||
ARCH = w32
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CC = $(CROSSPREFIX)gcc
|
CC = $(CROSSPREFIX)gcc
|
||||||
CFLAGS = -g -O2 -Wall
|
CFLAGS = -g -O2 -Wall
|
||||||
CFLAGS += -fno-strict-aliasing
|
CFLAGS += -fno-strict-aliasing
|
||||||
ifeq ($(ARCH),w64)
|
ifeq ($(ARCH),w64)
|
||||||
CFLAGS += -m64 -D_AMD64_
|
CFLAGS += -D_AMD64_
|
||||||
LDFLAGS += -m64
|
|
||||||
RCFLAGS += -F pe-x86-64
|
|
||||||
else
|
|
||||||
CFLAGS += -m32
|
|
||||||
LDFLAGS += -m32
|
|
||||||
RCFLAGS += -F pe-i386
|
|
||||||
endif
|
endif
|
||||||
# comment LDFLAGS below to keep debug info
|
# comment LDFLAGS below to keep debug info
|
||||||
LDFLAGS = -s
|
LDFLAGS = -s
|
||||||
@@ -172,12 +158,9 @@ ifeq ($(findstring -metalink,$(CFG)),-metalink)
|
|||||||
METALINK = 1
|
METALINK = 1
|
||||||
endif
|
endif
|
||||||
ifeq ($(findstring -winssl,$(CFG)),-winssl)
|
ifeq ($(findstring -winssl,$(CFG)),-winssl)
|
||||||
WINSSL = 1
|
SCHANNEL = 1
|
||||||
SSPI = 1
|
SSPI = 1
|
||||||
endif
|
endif
|
||||||
ifeq ($(findstring -nghttp2,$(CFG)),-nghttp2)
|
|
||||||
NGHTTP2 = 1
|
|
||||||
endif
|
|
||||||
|
|
||||||
INCLUDES = -I. -I$(PROOT) -I$(PROOT)/include -I$(PROOT)/lib
|
INCLUDES = -I. -I$(PROOT) -I$(PROOT)/include -I$(PROOT)/lib
|
||||||
|
|
||||||
@@ -201,10 +184,6 @@ ifdef RTMP
|
|||||||
CFLAGS += -DUSE_LIBRTMP
|
CFLAGS += -DUSE_LIBRTMP
|
||||||
curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm
|
curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm
|
||||||
endif
|
endif
|
||||||
ifdef NGHTTP2
|
|
||||||
CFLAGS += -DUSE_NGHTTP2
|
|
||||||
curl_LDADD += -L"$(NGHTTP2_PATH)/lib" -lnghttp2
|
|
||||||
endif
|
|
||||||
ifdef SSH2
|
ifdef SSH2
|
||||||
CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
|
CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
|
||||||
curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2
|
curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2
|
||||||
@@ -225,7 +204,7 @@ ifdef SSL
|
|||||||
ifndef DYN
|
ifndef DYN
|
||||||
OPENSSL_LIBS += -lgdi32 -lcrypt32
|
OPENSSL_LIBS += -lgdi32 -lcrypt32
|
||||||
endif
|
endif
|
||||||
CFLAGS += -DUSE_OPENSSL
|
CFLAGS += -DUSE_SSLEAY
|
||||||
curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
|
curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
|
||||||
endif
|
endif
|
||||||
ifdef ZLIB
|
ifdef ZLIB
|
||||||
@@ -244,7 +223,7 @@ endif
|
|||||||
endif
|
endif
|
||||||
ifdef SSPI
|
ifdef SSPI
|
||||||
CFLAGS += -DUSE_WINDOWS_SSPI
|
CFLAGS += -DUSE_WINDOWS_SSPI
|
||||||
ifdef WINSSL
|
ifdef SCHANNEL
|
||||||
CFLAGS += -DUSE_SCHANNEL
|
CFLAGS += -DUSE_SCHANNEL
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@@ -19,12 +19,12 @@ endif
|
|||||||
|
|
||||||
# Edit the path below to point to the base of your OpenSSL package.
|
# Edit the path below to point to the base of your OpenSSL package.
|
||||||
ifndef OPENSSL_PATH
|
ifndef OPENSSL_PATH
|
||||||
OPENSSL_PATH = ../../../openssl-1.0.2a
|
OPENSSL_PATH = ../../../openssl-0.9.8zc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Edit the path below to point to the base of your LibSSH2 package.
|
# Edit the path below to point to the base of your LibSSH2 package.
|
||||||
ifndef LIBSSH2_PATH
|
ifndef LIBSSH2_PATH
|
||||||
LIBSSH2_PATH = ../../../libssh2-1.5.0
|
LIBSSH2_PATH = ../../../libssh2-1.4.3
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Edit the path below to point to the base of your axTLS package.
|
# Edit the path below to point to the base of your axTLS package.
|
||||||
@@ -34,12 +34,12 @@ endif
|
|||||||
|
|
||||||
# Edit the path below to point to the base of your libidn package.
|
# Edit the path below to point to the base of your libidn package.
|
||||||
ifndef LIBIDN_PATH
|
ifndef LIBIDN_PATH
|
||||||
LIBIDN_PATH = ../../../libidn-1.32
|
LIBIDN_PATH = ../../../libidn-1.18
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Edit the path below to point to the base of your librtmp package.
|
# Edit the path below to point to the base of your librtmp package.
|
||||||
ifndef LIBRTMP_PATH
|
ifndef LIBRTMP_PATH
|
||||||
LIBRTMP_PATH = ../../../librtmp-2.4
|
LIBRTMP_PATH = ../../../librtmp-2.3
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Edit the path below to point to the base of your fbopenssl package.
|
# Edit the path below to point to the base of your fbopenssl package.
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,11 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* HTTP PUT upload with authentiction using "any" method. libcurl picks the
|
|
||||||
* one the server supports/wants.
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -20,11 +20,11 @@
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/* <DESC>
|
|
||||||
* demonstrate the use of multi socket interface with boost::asio
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
|
* file: asiohiper.cpp
|
||||||
|
* Example program to demonstrate the use of multi socket interface
|
||||||
|
* with boost::asio
|
||||||
|
*
|
||||||
* This program is in c++ and uses boost::asio instead of libevent/libev.
|
* This program is in c++ and uses boost::asio instead of libevent/libev.
|
||||||
* Requires boost::asio, boost::bind and boost::system
|
* Requires boost::asio, boost::bind and boost::system
|
||||||
*
|
*
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,11 +19,17 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* Example using a "in core" PEM certificate to retrieve a https page.
|
||||||
* CA cert in memory with OpenSSL to get a HTTPS page.
|
* Written by Theo Borm
|
||||||
* </DESC>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* on a netBSD system with OPENSSL& LIBCURL installed from
|
||||||
|
* pkgsrc (using default paths) this program can be compiled using:
|
||||||
|
* gcc -I/usr/pkg/include -L/usr/pkg/lib -lcurl -Wl,-R/usr/pkg/lib -lssl
|
||||||
|
* -lcrypto -lz -o curlcacerttest curlcacerttest.c
|
||||||
|
* on other operating systems you may want to change paths to headers
|
||||||
|
* and libraries
|
||||||
|
*/
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* Extract lots of TLS certificate info.
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* Show transfer timing info after download completes.
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
/* Example source code to show how the callback function can be used to
|
/* Example source code to show how the callback function can be used to
|
||||||
* download data into a chunk of memory instead of storing it in a file.
|
* download data into a chunk of memory instead of storing it in a file.
|
||||||
* After successful download we use curl_easy_getinfo() calls to get the
|
* After successful download we use curl_easy_getinfo() calls to get the
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,7 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* This example shows usage of simple cookie interface. */
|
||||||
* Import and export cookies with COOKIELIST.
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -99,12 +96,7 @@ main(void)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HTTP-header style cookie. If you use the Set-Cookie format and don't
|
/* HTTP-header style cookie */
|
||||||
specify a domain then the cookie is sent for any domain and will not be
|
|
||||||
modified, likely not what you intended. Starting in 7.43.0 any-domain
|
|
||||||
cookies will not be exported either. For more information refer to the
|
|
||||||
CURLOPT_COOKIELIST documentation.
|
|
||||||
*/
|
|
||||||
snprintf(nline, sizeof(nline),
|
snprintf(nline, sizeof(nline),
|
||||||
"Set-Cookie: OLD_PREF=3d141414bf4209321; "
|
"Set-Cookie: OLD_PREF=3d141414bf4209321; "
|
||||||
"expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com");
|
"expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com");
|
||||||
|
@@ -5,12 +5,9 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft
|
|
||||||
*/
|
|
||||||
/* <DESC>
|
|
||||||
* use the libcurl in a gtk-threaded application
|
|
||||||
* </DESC>
|
|
||||||
*/
|
*/
|
||||||
|
/* Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft */
|
||||||
|
/* an attempt to use the curl library in concert with a gtk-threaded application */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
@@ -9,10 +9,7 @@
|
|||||||
certificate presented during ssl session establishment.
|
certificate presented during ssl session establishment.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/* <DESC>
|
|
||||||
* demonstrates use of SSL context callback, requires OpenSSL
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003 The OpenEvidence Project. All rights reserved.
|
* Copyright (c) 2003 The OpenEvidence Project. All rights reserved.
|
||||||
@@ -493,7 +490,7 @@ int main(int argc, char **argv) {
|
|||||||
BIO_printf(p.errorbio,"the response has a correct mimetype : %s\n",
|
BIO_printf(p.errorbio,"the response has a correct mimetype : %s\n",
|
||||||
response);
|
response);
|
||||||
else
|
else
|
||||||
BIO_printf(p.errorbio,"the response doesn\'t have an acceptable "
|
BIO_printf(p.errorbio,"the reponse doesn\'t has an acceptable "
|
||||||
"mime type, it is %s instead of %s\n",
|
"mime type, it is %s instead of %s\n",
|
||||||
response,mimetypeaccept);
|
response,mimetypeaccept);
|
||||||
}
|
}
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* Show how CURLOPT_DEBUGFUNCTION can be used.
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* multi socket interface together with libev
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
/* Example application source code using the multi socket interface to
|
/* Example application source code using the multi socket interface to
|
||||||
* download many files at once.
|
* download many files at once.
|
||||||
*
|
*
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,9 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/*
|
||||||
* An example demonstrating how an application can pass in a custom
|
* This is an example demonstrating how an application can pass in a custom
|
||||||
* socket to libcurl to use. This example also handles the connect itself.
|
* socket to libcurl to use. This example also handles the connect itself.
|
||||||
* </DESC>
|
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* Upload to a file:// URL
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
@@ -42,10 +42,6 @@
|
|||||||
*
|
*
|
||||||
* This example requires libcurl 7.9.7 or later.
|
* This example requires libcurl 7.9.7 or later.
|
||||||
*/
|
*/
|
||||||
/* <DESC>
|
|
||||||
* implements an fopen() abstraction allowing reading from URLs
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -112,7 +108,7 @@ static size_t write_callback(char *buffer,
|
|||||||
size=rembuff;
|
size=rembuff;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* realloc succeeded increase buffer size*/
|
/* realloc suceeded increase buffer size*/
|
||||||
url->buffer_len+=size - rembuff;
|
url->buffer_len+=size - rembuff;
|
||||||
url->buffer=newbuff;
|
url->buffer=newbuff;
|
||||||
}
|
}
|
||||||
@@ -135,7 +131,7 @@ static int fill_buffer(URL_FILE *file, size_t want)
|
|||||||
CURLMcode mc; /* curl_multi_fdset() return code */
|
CURLMcode mc; /* curl_multi_fdset() return code */
|
||||||
|
|
||||||
/* only attempt to fill buffer if transactions still running and buffer
|
/* only attempt to fill buffer if transactions still running and buffer
|
||||||
* doesn't exceed required size already
|
* doesnt exceed required size already
|
||||||
*/
|
*/
|
||||||
if((!file->still_running) || (file->buffer_pos > want))
|
if((!file->still_running) || (file->buffer_pos > want))
|
||||||
return 0;
|
return 0;
|
||||||
@@ -209,7 +205,7 @@ static int fill_buffer(URL_FILE *file, size_t want)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* use to remove want bytes from the front of a files buffer */
|
/* use to remove want bytes from the front of a files buffer */
|
||||||
static int use_buffer(URL_FILE *file, size_t want)
|
static int use_buffer(URL_FILE *file,int want)
|
||||||
{
|
{
|
||||||
/* sort out buffer */
|
/* sort out buffer */
|
||||||
if((file->buffer_pos - want) <=0) {
|
if((file->buffer_pos - want) <=0) {
|
||||||
@@ -233,7 +229,7 @@ static int use_buffer(URL_FILE *file, size_t want)
|
|||||||
URL_FILE *url_fopen(const char *url,const char *operation)
|
URL_FILE *url_fopen(const char *url,const char *operation)
|
||||||
{
|
{
|
||||||
/* this code could check for URLs or types in the 'url' and
|
/* this code could check for URLs or types in the 'url' and
|
||||||
basically use the real fopen() for standard files */
|
basicly use the real fopen() for standard files */
|
||||||
|
|
||||||
URL_FILE *file;
|
URL_FILE *file;
|
||||||
(void)operation;
|
(void)operation;
|
||||||
@@ -379,7 +375,7 @@ char *url_fgets(char *ptr, size_t size, URL_FILE *file)
|
|||||||
|
|
||||||
switch(file->type) {
|
switch(file->type) {
|
||||||
case CFTYPE_FILE:
|
case CFTYPE_FILE:
|
||||||
ptr = fgets(ptr, (int)size, file->handle.file);
|
ptr = fgets(ptr,size,file->handle.file);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CFTYPE_CURL:
|
case CFTYPE_CURL:
|
||||||
@@ -455,7 +451,7 @@ int main(int argc, char *argv[])
|
|||||||
URL_FILE *handle;
|
URL_FILE *handle;
|
||||||
FILE *outf;
|
FILE *outf;
|
||||||
|
|
||||||
size_t nread;
|
int nread;
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
const char *url;
|
const char *url;
|
||||||
|
|
||||||
@@ -503,7 +499,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
nread = url_fread(buffer, 1, sizeof(buffer), handle);
|
nread = url_fread(buffer, 1,sizeof(buffer), handle);
|
||||||
fwrite(buffer,1,nread,outf);
|
fwrite(buffer,1,nread,outf);
|
||||||
} while(nread);
|
} while(nread);
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* FTP wildcard pattern matching
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -23,9 +23,11 @@
|
|||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
/* <DESC>
|
/*
|
||||||
* Get a single file from an FTP server.
|
* This is an example showing how to get a single file from an FTP server.
|
||||||
* </DESC>
|
* It delays the actual destination file creation until the first write
|
||||||
|
* callback so that it won't create an empty file in case the remote file
|
||||||
|
* doesn't exist or something else fails.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct FtpFile {
|
struct FtpFile {
|
||||||
@@ -51,7 +53,7 @@ int main(void)
|
|||||||
CURL *curl;
|
CURL *curl;
|
||||||
CURLcode res;
|
CURLcode res;
|
||||||
struct FtpFile ftpfile={
|
struct FtpFile ftpfile={
|
||||||
"curl.tar.gz", /* name to store the file as if successful */
|
"curl.tar.gz", /* name to store the file as if succesful */
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -24,9 +24,9 @@
|
|||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
/* <DESC>
|
/*
|
||||||
* Checks a single file's size and mtime from an FTP server.
|
* This is an example showing how to check a single file's size and mtime
|
||||||
* </DESC>
|
* from an FTP server.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static size_t throw_away(void *ptr, size_t size, size_t nmemb, void *data)
|
static size_t throw_away(void *ptr, size_t size, size_t nmemb, void *data)
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -23,11 +23,13 @@
|
|||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
/* <DESC>
|
/*
|
||||||
* Similar to ftpget.c but also stores the received response-lines
|
* Similar to ftpget.c but this also stores the received response-lines
|
||||||
* in a separate file using our own callback!
|
* in a separate file using our own callback!
|
||||||
* </DESC>
|
*
|
||||||
|
* This functionality was introduced in libcurl 7.9.3.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
write_response(void *ptr, size_t size, size_t nmemb, void *data)
|
write_response(void *ptr, size_t size, size_t nmemb, void *data)
|
||||||
{
|
{
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -24,9 +24,11 @@
|
|||||||
|
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
/* <DESC>
|
/*
|
||||||
* Get a single file from an FTPS server.
|
* This is an example showing how to get a single file from an FTPS server.
|
||||||
* </DESC>
|
* It delays the actual destination file creation until the first write
|
||||||
|
* callback so that it won't create an empty file in case the remote file
|
||||||
|
* doesn't exist or something else fails.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct FtpFile {
|
struct FtpFile {
|
||||||
@@ -53,7 +55,7 @@ int main(void)
|
|||||||
CURL *curl;
|
CURL *curl;
|
||||||
CURLcode res;
|
CURLcode res;
|
||||||
struct FtpFile ftpfile={
|
struct FtpFile ftpfile={
|
||||||
"yourfile.bin", /* name to store the file as if successful */
|
"yourfile.bin", /* name to store the file as if succesful */
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -33,10 +33,11 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* <DESC>
|
/*
|
||||||
* Performs an FTP upload and renames the file just after a successful
|
* This example shows an FTP upload, with a rename of the file just after
|
||||||
* transfer.
|
* a successful upload.
|
||||||
* </DESC>
|
*
|
||||||
|
* Example based on source code provided by Erick Nuwendam. Thanks!
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define LOCAL_FILE "/tmp/uploadthis.txt"
|
#define LOCAL_FILE "/tmp/uploadthis.txt"
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,9 +19,13 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* Upload to FTP, resuming failed transfers
|
||||||
* Upload to FTP, resuming failed transfers.
|
*
|
||||||
* </DESC>
|
* Compile for MinGW like this:
|
||||||
|
* gcc -Wall -pedantic -std=c99 ftpuploadwithresume.c -o ftpuploadresume.exe
|
||||||
|
* -lcurl -lmsvcr70
|
||||||
|
*
|
||||||
|
* Written by Philip Bock
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* Use getinfo to get content-type after completed transfer.
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
@@ -31,14 +27,18 @@ int main(void)
|
|||||||
CURL *curl;
|
CURL *curl;
|
||||||
CURLcode res;
|
CURLcode res;
|
||||||
|
|
||||||
|
/* http://curl.haxx.se/libcurl/c/curl_easy_init.html */
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
if(curl) {
|
if(curl) {
|
||||||
|
/* http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTURL */
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/");
|
curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/");
|
||||||
|
/* http://curl.haxx.se/libcurl/c/curl_easy_perform.html */
|
||||||
res = curl_easy_perform(curl);
|
res = curl_easy_perform(curl);
|
||||||
|
|
||||||
if(CURLE_OK == res) {
|
if(CURLE_OK == res) {
|
||||||
char *ct;
|
char *ct;
|
||||||
/* ask for the content-type */
|
/* ask for the content-type */
|
||||||
|
/* http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html */
|
||||||
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
|
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
|
||||||
|
|
||||||
if((CURLE_OK == res) && ct)
|
if((CURLE_OK == res) && ct)
|
||||||
@@ -46,6 +46,7 @@ int main(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* always cleanup */
|
/* always cleanup */
|
||||||
|
/* http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html */
|
||||||
curl_easy_cleanup(curl);
|
curl_easy_cleanup(curl);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,8 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* Example source code to show how the callback function can be used to
|
||||||
* Shows how the write callback function can be used to download data into a
|
* download data into a chunk of memory instead of storing it in a file.
|
||||||
* chunk of memory instead of storing it in a file.
|
|
||||||
* </DESC>
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -36,6 +34,7 @@ struct MemoryStruct {
|
|||||||
size_t size;
|
size_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
|
WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
|
||||||
{
|
{
|
||||||
@@ -56,6 +55,7 @@ WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
|
|||||||
return realsize;
|
return realsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
CURL *curl_handle;
|
CURL *curl_handle;
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* multi socket API usage together with with glib2
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
/* Example application source code using the multi socket interface to
|
/* Example application source code using the multi socket interface to
|
||||||
* download many files at once.
|
* download many files at once.
|
||||||
*
|
*
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* multi socket API usage with libevent 2
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
/* Example application source code using the multi socket interface to
|
/* Example application source code using the multi socket interface to
|
||||||
download many files at once.
|
download many files at once.
|
||||||
|
|
||||||
@@ -330,7 +326,7 @@ static void new_conn(char *url, GlobalInfo *g )
|
|||||||
conn->url = strdup(url);
|
conn->url = strdup(url);
|
||||||
curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url);
|
curl_easy_setopt(conn->easy, CURLOPT_URL, conn->url);
|
||||||
curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb);
|
curl_easy_setopt(conn->easy, CURLOPT_WRITEFUNCTION, write_cb);
|
||||||
curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, conn);
|
curl_easy_setopt(conn->easy, CURLOPT_WRITEDATA, &conn);
|
||||||
curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, 1L);
|
curl_easy_setopt(conn->easy, CURLOPT_VERBOSE, 1L);
|
||||||
curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error);
|
curl_easy_setopt(conn->easy, CURLOPT_ERRORBUFFER, conn->error);
|
||||||
curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn);
|
curl_easy_setopt(conn->easy, CURLOPT_PRIVATE, conn);
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -20,13 +20,13 @@
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/* <DESC>
|
|
||||||
* Uses the "Streaming HTML parser" to extract the href pieces in a streaming
|
|
||||||
* manner from a downloaded HTML.
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
* The HTML parser is found at http://code.google.com/p/htmlstreamparser/
|
* This example uses the "Streaming HTML parser" to extract the href pieces in
|
||||||
|
* a streaming manner from a downloaded HTML. Kindly donated by Michał
|
||||||
|
* Kowalczyk.
|
||||||
|
*
|
||||||
|
* The parser is found at
|
||||||
|
* http://code.google.com/p/htmlstreamparser/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,12 +19,13 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* Download a document and use libtidy to parse the HTML.
|
||||||
* Download a document and use libtidy to parse the HTML.
|
* Written by Jeff Pohlmeyer
|
||||||
* </DESC>
|
*
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* LibTidy => http://tidy.sourceforge.net
|
* LibTidy => http://tidy.sourceforge.net
|
||||||
|
*
|
||||||
|
* gcc -Wall -I/usr/local/include tidycurl.c -lcurl -ltidy -o tidycurl
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,8 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
// Get a web page, parse it with libxml.
|
||||||
* Get a web page, extract the title with libxml.
|
//
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
// Written by Lars Nilsson
|
// Written by Lars Nilsson
|
||||||
//
|
//
|
||||||
// GNU C++ compile command line suggestion (edit paths accordingly):
|
// GNU C++ compile command line suggestion (edit paths accordingly):
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* simple HTTP POST using the easy interface
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
@@ -1,292 +0,0 @@
|
|||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
/* <DESC>
|
|
||||||
* Multiplexed HTTP/2 downloads over a single connection
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
/* somewhat unix-specific */
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
/* curl stuff */
|
|
||||||
#include <curl/curl.h>
|
|
||||||
|
|
||||||
#ifndef CURLPIPE_MULTIPLEX
|
|
||||||
/* This little trick will just make sure that we don't enable pipelining for
|
|
||||||
libcurls old enough to not have this symbol. It is _not_ defined to zero in
|
|
||||||
a recent libcurl header. */
|
|
||||||
#define CURLPIPE_MULTIPLEX 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define NUM_HANDLES 1000
|
|
||||||
|
|
||||||
void *curl_hnd[NUM_HANDLES];
|
|
||||||
int num_transfers;
|
|
||||||
|
|
||||||
/* a handle to number lookup, highly ineffective when we do many
|
|
||||||
transfers... */
|
|
||||||
static int hnd2num(CURL *hnd)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i=0; i< num_transfers; i++) {
|
|
||||||
if(curl_hnd[i] == hnd)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
return 0; /* weird, but just a fail-safe */
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void dump(const char *text, int num, unsigned char *ptr, size_t size,
|
|
||||||
char nohex)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
size_t c;
|
|
||||||
|
|
||||||
unsigned int width=0x10;
|
|
||||||
|
|
||||||
if(nohex)
|
|
||||||
/* without the hex output, we can fit more on screen */
|
|
||||||
width = 0x40;
|
|
||||||
|
|
||||||
fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n",
|
|
||||||
num, text, (long)size, (long)size);
|
|
||||||
|
|
||||||
for(i=0; i<size; i+= width) {
|
|
||||||
|
|
||||||
fprintf(stderr, "%4.4lx: ", (long)i);
|
|
||||||
|
|
||||||
if(!nohex) {
|
|
||||||
/* hex not disabled, show it */
|
|
||||||
for(c = 0; c < width; c++)
|
|
||||||
if(i+c < size)
|
|
||||||
fprintf(stderr, "%02x ", ptr[i+c]);
|
|
||||||
else
|
|
||||||
fputs(" ", stderr);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(c = 0; (c < width) && (i+c < size); c++) {
|
|
||||||
/* check for 0D0A; if found, skip past and start a new line of output */
|
|
||||||
if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
|
|
||||||
i+=(c+2-width);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fprintf(stderr, "%c",
|
|
||||||
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
|
|
||||||
/* check again for 0D0A, to avoid an extra \n if it's at width */
|
|
||||||
if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
|
|
||||||
i+=(c+3-width);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fputc('\n', stderr); /* newline */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
int my_trace(CURL *handle, curl_infotype type,
|
|
||||||
char *data, size_t size,
|
|
||||||
void *userp)
|
|
||||||
{
|
|
||||||
const char *text;
|
|
||||||
int num = hnd2num(handle);
|
|
||||||
(void)handle; /* prevent compiler warning */
|
|
||||||
(void)userp;
|
|
||||||
switch (type) {
|
|
||||||
case CURLINFO_TEXT:
|
|
||||||
fprintf(stderr, "== %d Info: %s", num, data);
|
|
||||||
default: /* in case a new one is introduced to shock us */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case CURLINFO_HEADER_OUT:
|
|
||||||
text = "=> Send header";
|
|
||||||
break;
|
|
||||||
case CURLINFO_DATA_OUT:
|
|
||||||
text = "=> Send data";
|
|
||||||
break;
|
|
||||||
case CURLINFO_SSL_DATA_OUT:
|
|
||||||
text = "=> Send SSL data";
|
|
||||||
break;
|
|
||||||
case CURLINFO_HEADER_IN:
|
|
||||||
text = "<= Recv header";
|
|
||||||
break;
|
|
||||||
case CURLINFO_DATA_IN:
|
|
||||||
text = "<= Recv data";
|
|
||||||
break;
|
|
||||||
case CURLINFO_SSL_DATA_IN:
|
|
||||||
text = "<= Recv SSL data";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dump(text, num, (unsigned char *)data, size, 1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void setup(CURL *hnd, int num)
|
|
||||||
{
|
|
||||||
FILE *out;
|
|
||||||
char filename[128];
|
|
||||||
|
|
||||||
sprintf(filename, "dl-%d", num);
|
|
||||||
|
|
||||||
out = fopen(filename, "wb");
|
|
||||||
|
|
||||||
/* write to this file */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
|
|
||||||
|
|
||||||
/* set the same URL */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html");
|
|
||||||
|
|
||||||
/* send it verbose for max debuggaility */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
|
|
||||||
|
|
||||||
/* HTTP/2 please */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
|
|
||||||
|
|
||||||
/* we use a self-signed test server, skip verification during debugging */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
|
|
||||||
|
|
||||||
#if (CURLPIPE_MULTIPLEX > 0)
|
|
||||||
/* wait for pipe connection to confirm */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
curl_hnd[num] = hnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Simply download two files over HTTP/2, using the same physical connection!
|
|
||||||
*/
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
CURL *easy[NUM_HANDLES];
|
|
||||||
CURLM *multi_handle;
|
|
||||||
int i;
|
|
||||||
int still_running; /* keep number of running handles */
|
|
||||||
|
|
||||||
if(argc > 1)
|
|
||||||
/* if given a number, do that many transfers */
|
|
||||||
num_transfers = atoi(argv[1]);
|
|
||||||
|
|
||||||
if(!num_transfers || (num_transfers > NUM_HANDLES))
|
|
||||||
num_transfers = 3; /* a suitable low default */
|
|
||||||
|
|
||||||
/* init a multi stack */
|
|
||||||
multi_handle = curl_multi_init();
|
|
||||||
|
|
||||||
for(i=0; i<num_transfers; i++) {
|
|
||||||
easy[i] = curl_easy_init();
|
|
||||||
/* set options */
|
|
||||||
setup(easy[i], i);
|
|
||||||
|
|
||||||
/* add the individual transfer */
|
|
||||||
curl_multi_add_handle(multi_handle, easy[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
|
|
||||||
|
|
||||||
/* we start some action by calling perform right away */
|
|
||||||
curl_multi_perform(multi_handle, &still_running);
|
|
||||||
|
|
||||||
do {
|
|
||||||
struct timeval timeout;
|
|
||||||
int rc; /* select() return code */
|
|
||||||
CURLMcode mc; /* curl_multi_fdset() return code */
|
|
||||||
|
|
||||||
fd_set fdread;
|
|
||||||
fd_set fdwrite;
|
|
||||||
fd_set fdexcep;
|
|
||||||
int maxfd = -1;
|
|
||||||
|
|
||||||
long curl_timeo = -1;
|
|
||||||
|
|
||||||
FD_ZERO(&fdread);
|
|
||||||
FD_ZERO(&fdwrite);
|
|
||||||
FD_ZERO(&fdexcep);
|
|
||||||
|
|
||||||
/* set a suitable timeout to play around with */
|
|
||||||
timeout.tv_sec = 1;
|
|
||||||
timeout.tv_usec = 0;
|
|
||||||
|
|
||||||
curl_multi_timeout(multi_handle, &curl_timeo);
|
|
||||||
if(curl_timeo >= 0) {
|
|
||||||
timeout.tv_sec = curl_timeo / 1000;
|
|
||||||
if(timeout.tv_sec > 1)
|
|
||||||
timeout.tv_sec = 1;
|
|
||||||
else
|
|
||||||
timeout.tv_usec = (curl_timeo % 1000) * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get file descriptors from the transfers */
|
|
||||||
mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
|
||||||
|
|
||||||
if(mc != CURLM_OK)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* On success the value of maxfd is guaranteed to be >= -1. We call
|
|
||||||
select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
|
|
||||||
no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
|
|
||||||
to sleep 100ms, which is the minimum suggested value in the
|
|
||||||
curl_multi_fdset() doc. */
|
|
||||||
|
|
||||||
if(maxfd == -1) {
|
|
||||||
#ifdef _WIN32
|
|
||||||
Sleep(100);
|
|
||||||
rc = 0;
|
|
||||||
#else
|
|
||||||
/* Portable sleep for platforms other than Windows. */
|
|
||||||
struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
|
|
||||||
rc = select(0, NULL, NULL, NULL, &wait);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* Note that on some platforms 'timeout' may be modified by select().
|
|
||||||
If you need access to the original value save a copy beforehand. */
|
|
||||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(rc) {
|
|
||||||
case -1:
|
|
||||||
/* select error */
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
default:
|
|
||||||
/* timeout or readable/writable sockets */
|
|
||||||
curl_multi_perform(multi_handle, &still_running);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while(still_running);
|
|
||||||
|
|
||||||
curl_multi_cleanup(multi_handle);
|
|
||||||
|
|
||||||
for(i=0; i<num_transfers; i++)
|
|
||||||
curl_easy_cleanup(easy[i]);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -1,317 +0,0 @@
|
|||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
/* <DESC>
|
|
||||||
* HTTP/2 server push
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
/* somewhat unix-specific */
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
/* curl stuff */
|
|
||||||
#include <curl/curl.h>
|
|
||||||
|
|
||||||
#ifndef CURLPIPE_MULTIPLEX
|
|
||||||
#error "too old libcurl, can't do HTTP/2 server push!"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static
|
|
||||||
void dump(const char *text, unsigned char *ptr, size_t size,
|
|
||||||
char nohex)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
size_t c;
|
|
||||||
|
|
||||||
unsigned int width=0x10;
|
|
||||||
|
|
||||||
if(nohex)
|
|
||||||
/* without the hex output, we can fit more on screen */
|
|
||||||
width = 0x40;
|
|
||||||
|
|
||||||
fprintf(stderr, "%s, %ld bytes (0x%lx)\n",
|
|
||||||
text, (long)size, (long)size);
|
|
||||||
|
|
||||||
for(i=0; i<size; i+= width) {
|
|
||||||
|
|
||||||
fprintf(stderr, "%4.4lx: ", (long)i);
|
|
||||||
|
|
||||||
if(!nohex) {
|
|
||||||
/* hex not disabled, show it */
|
|
||||||
for(c = 0; c < width; c++)
|
|
||||||
if(i+c < size)
|
|
||||||
fprintf(stderr, "%02x ", ptr[i+c]);
|
|
||||||
else
|
|
||||||
fputs(" ", stderr);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(c = 0; (c < width) && (i+c < size); c++) {
|
|
||||||
/* check for 0D0A; if found, skip past and start a new line of output */
|
|
||||||
if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
|
|
||||||
i+=(c+2-width);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fprintf(stderr, "%c",
|
|
||||||
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
|
|
||||||
/* check again for 0D0A, to avoid an extra \n if it's at width */
|
|
||||||
if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
|
|
||||||
i+=(c+3-width);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fputc('\n', stderr); /* newline */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
int my_trace(CURL *handle, curl_infotype type,
|
|
||||||
char *data, size_t size,
|
|
||||||
void *userp)
|
|
||||||
{
|
|
||||||
const char *text;
|
|
||||||
(void)handle; /* prevent compiler warning */
|
|
||||||
(void)userp;
|
|
||||||
switch (type) {
|
|
||||||
case CURLINFO_TEXT:
|
|
||||||
fprintf(stderr, "== Info: %s", data);
|
|
||||||
default: /* in case a new one is introduced to shock us */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case CURLINFO_HEADER_OUT:
|
|
||||||
text = "=> Send header";
|
|
||||||
break;
|
|
||||||
case CURLINFO_DATA_OUT:
|
|
||||||
text = "=> Send data";
|
|
||||||
break;
|
|
||||||
case CURLINFO_SSL_DATA_OUT:
|
|
||||||
text = "=> Send SSL data";
|
|
||||||
break;
|
|
||||||
case CURLINFO_HEADER_IN:
|
|
||||||
text = "<= Recv header";
|
|
||||||
break;
|
|
||||||
case CURLINFO_DATA_IN:
|
|
||||||
text = "<= Recv data";
|
|
||||||
break;
|
|
||||||
case CURLINFO_SSL_DATA_IN:
|
|
||||||
text = "<= Recv SSL data";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dump(text, (unsigned char *)data, size, 1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void setup(CURL *hnd)
|
|
||||||
{
|
|
||||||
FILE *out = fopen("dl", "wb");
|
|
||||||
|
|
||||||
/* write to this file */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
|
|
||||||
|
|
||||||
/* set the same URL */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html");
|
|
||||||
|
|
||||||
/* send it verbose for max debuggaility */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
|
|
||||||
|
|
||||||
/* HTTP/2 please */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
|
|
||||||
|
|
||||||
/* we use a self-signed test server, skip verification during debugging */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
|
|
||||||
|
|
||||||
#if (CURLPIPE_MULTIPLEX > 0)
|
|
||||||
/* wait for pipe connection to confirm */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* called when there's an incoming push */
|
|
||||||
static int server_push_callback(CURL *parent,
|
|
||||||
CURL *easy,
|
|
||||||
size_t num_headers,
|
|
||||||
struct curl_pushheaders *headers,
|
|
||||||
void *userp)
|
|
||||||
{
|
|
||||||
char *headp;
|
|
||||||
size_t i;
|
|
||||||
int *transfers = (int *)userp;
|
|
||||||
char filename[128];
|
|
||||||
FILE *out;
|
|
||||||
static unsigned int count = 0;
|
|
||||||
|
|
||||||
(void)parent; /* we have no use for this */
|
|
||||||
|
|
||||||
sprintf(filename, "push%u", count++);
|
|
||||||
|
|
||||||
/* here's a new stream, save it in a new file for each new push */
|
|
||||||
out = fopen(filename, "wb");
|
|
||||||
|
|
||||||
/* write to this file */
|
|
||||||
curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
|
|
||||||
|
|
||||||
fprintf(stderr, "**** push callback approves stream %u, got %d headers!\n",
|
|
||||||
count, (int)num_headers);
|
|
||||||
|
|
||||||
for(i=0; i<num_headers; i++) {
|
|
||||||
headp = curl_pushheader_bynum(headers, i);
|
|
||||||
fprintf(stderr, "**** header %u: %s\n", (int)i, headp);
|
|
||||||
}
|
|
||||||
|
|
||||||
headp = curl_pushheader_byname(headers, ":path");
|
|
||||||
if(headp) {
|
|
||||||
fprintf(stderr, "**** The PATH is %s\n", headp /* skip :path + colon */ );
|
|
||||||
}
|
|
||||||
|
|
||||||
(*transfers)++; /* one more */
|
|
||||||
return CURL_PUSH_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Download a file over HTTP/2, take care of server push.
|
|
||||||
*/
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
CURL *easy;
|
|
||||||
CURLM *multi_handle;
|
|
||||||
int still_running; /* keep number of running handles */
|
|
||||||
int transfers=1; /* we start with one */
|
|
||||||
struct CURLMsg *m;
|
|
||||||
|
|
||||||
/* init a multi stack */
|
|
||||||
multi_handle = curl_multi_init();
|
|
||||||
|
|
||||||
easy = curl_easy_init();
|
|
||||||
|
|
||||||
/* set options */
|
|
||||||
setup(easy);
|
|
||||||
|
|
||||||
/* add the easy transfer */
|
|
||||||
curl_multi_add_handle(multi_handle, easy);
|
|
||||||
|
|
||||||
curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
|
|
||||||
curl_multi_setopt(multi_handle, CURLMOPT_PUSHFUNCTION, server_push_callback);
|
|
||||||
curl_multi_setopt(multi_handle, CURLMOPT_PUSHDATA, &transfers);
|
|
||||||
|
|
||||||
/* we start some action by calling perform right away */
|
|
||||||
curl_multi_perform(multi_handle, &still_running);
|
|
||||||
|
|
||||||
do {
|
|
||||||
struct timeval timeout;
|
|
||||||
int rc; /* select() return code */
|
|
||||||
CURLMcode mc; /* curl_multi_fdset() return code */
|
|
||||||
|
|
||||||
fd_set fdread;
|
|
||||||
fd_set fdwrite;
|
|
||||||
fd_set fdexcep;
|
|
||||||
int maxfd = -1;
|
|
||||||
|
|
||||||
long curl_timeo = -1;
|
|
||||||
|
|
||||||
FD_ZERO(&fdread);
|
|
||||||
FD_ZERO(&fdwrite);
|
|
||||||
FD_ZERO(&fdexcep);
|
|
||||||
|
|
||||||
/* set a suitable timeout to play around with */
|
|
||||||
timeout.tv_sec = 1;
|
|
||||||
timeout.tv_usec = 0;
|
|
||||||
|
|
||||||
curl_multi_timeout(multi_handle, &curl_timeo);
|
|
||||||
if(curl_timeo >= 0) {
|
|
||||||
timeout.tv_sec = curl_timeo / 1000;
|
|
||||||
if(timeout.tv_sec > 1)
|
|
||||||
timeout.tv_sec = 1;
|
|
||||||
else
|
|
||||||
timeout.tv_usec = (curl_timeo % 1000) * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get file descriptors from the transfers */
|
|
||||||
mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
|
||||||
|
|
||||||
if(mc != CURLM_OK) {
|
|
||||||
fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* On success the value of maxfd is guaranteed to be >= -1. We call
|
|
||||||
select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
|
|
||||||
no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
|
|
||||||
to sleep 100ms, which is the minimum suggested value in the
|
|
||||||
curl_multi_fdset() doc. */
|
|
||||||
|
|
||||||
if(maxfd == -1) {
|
|
||||||
#ifdef _WIN32
|
|
||||||
Sleep(100);
|
|
||||||
rc = 0;
|
|
||||||
#else
|
|
||||||
/* Portable sleep for platforms other than Windows. */
|
|
||||||
struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
|
|
||||||
rc = select(0, NULL, NULL, NULL, &wait);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* Note that on some platforms 'timeout' may be modified by select().
|
|
||||||
If you need access to the original value save a copy beforehand. */
|
|
||||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(rc) {
|
|
||||||
case -1:
|
|
||||||
/* select error */
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
default:
|
|
||||||
/* timeout or readable/writable sockets */
|
|
||||||
curl_multi_perform(multi_handle, &still_running);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A little caution when doing server push is that libcurl itself has
|
|
||||||
* created and added one or more easy handles but we need to clean them up
|
|
||||||
* when we are done.
|
|
||||||
*/
|
|
||||||
|
|
||||||
do {
|
|
||||||
int msgq = 0;;
|
|
||||||
m = curl_multi_info_read(multi_handle, &msgq);
|
|
||||||
if(m && (m->msg == CURLMSG_DONE)) {
|
|
||||||
CURL *e = m->easy_handle;
|
|
||||||
transfers--;
|
|
||||||
curl_multi_remove_handle(multi_handle, e);
|
|
||||||
curl_easy_cleanup(e);
|
|
||||||
}
|
|
||||||
} while(m);
|
|
||||||
|
|
||||||
} while(transfers); /* as long as we have transfers going */
|
|
||||||
|
|
||||||
curl_multi_cleanup(multi_handle);
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -1,356 +0,0 @@
|
|||||||
/***************************************************************************
|
|
||||||
* _ _ ____ _
|
|
||||||
* Project ___| | | | _ \| |
|
|
||||||
* / __| | | | |_) | |
|
|
||||||
* | (__| |_| | _ <| |___
|
|
||||||
* \___|\___/|_| \_\_____|
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
*
|
|
||||||
* This software is licensed as described in the file COPYING, which
|
|
||||||
* you should have received as part of this distribution. The terms
|
|
||||||
* are also available at http://curl.haxx.se/docs/copyright.html.
|
|
||||||
*
|
|
||||||
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
* copies of the Software, and permit persons to whom the Software is
|
|
||||||
* furnished to do so, under the terms of the COPYING file.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
***************************************************************************/
|
|
||||||
/* <DESC>
|
|
||||||
* Multiplexed HTTP/2 uploads over a single connection
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
/* somewhat unix-specific */
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
/* curl stuff */
|
|
||||||
#include <curl/curl.h>
|
|
||||||
|
|
||||||
#ifndef CURLPIPE_MULTIPLEX
|
|
||||||
/* This little trick will just make sure that we don't enable pipelining for
|
|
||||||
libcurls old enough to not have this symbol. It is _not_ defined to zero in
|
|
||||||
a recent libcurl header. */
|
|
||||||
#define CURLPIPE_MULTIPLEX 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define NUM_HANDLES 1000
|
|
||||||
|
|
||||||
void *curl_hnd[NUM_HANDLES];
|
|
||||||
int num_transfers;
|
|
||||||
|
|
||||||
/* a handle to number lookup, highly ineffective when we do many
|
|
||||||
transfers... */
|
|
||||||
static int hnd2num(CURL *hnd)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i=0; i< num_transfers; i++) {
|
|
||||||
if(curl_hnd[i] == hnd)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
return 0; /* weird, but just a fail-safe */
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
void dump(const char *text, int num, unsigned char *ptr, size_t size,
|
|
||||||
char nohex)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
size_t c;
|
|
||||||
unsigned int width=0x10;
|
|
||||||
|
|
||||||
if(nohex)
|
|
||||||
/* without the hex output, we can fit more on screen */
|
|
||||||
width = 0x40;
|
|
||||||
|
|
||||||
fprintf(stderr, "%d %s, %ld bytes (0x%lx)\n",
|
|
||||||
num, text, (long)size, (long)size);
|
|
||||||
|
|
||||||
for(i=0; i<size; i+= width) {
|
|
||||||
|
|
||||||
fprintf(stderr, "%4.4lx: ", (long)i);
|
|
||||||
|
|
||||||
if(!nohex) {
|
|
||||||
/* hex not disabled, show it */
|
|
||||||
for(c = 0; c < width; c++)
|
|
||||||
if(i+c < size)
|
|
||||||
fprintf(stderr, "%02x ", ptr[i+c]);
|
|
||||||
else
|
|
||||||
fputs(" ", stderr);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(c = 0; (c < width) && (i+c < size); c++) {
|
|
||||||
/* check for 0D0A; if found, skip past and start a new line of output */
|
|
||||||
if (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
|
|
||||||
i+=(c+2-width);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fprintf(stderr, "%c",
|
|
||||||
(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.');
|
|
||||||
/* check again for 0D0A, to avoid an extra \n if it's at width */
|
|
||||||
if (nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
|
|
||||||
i+=(c+3-width);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fputc('\n', stderr); /* newline */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
int my_trace(CURL *handle, curl_infotype type,
|
|
||||||
char *data, size_t size,
|
|
||||||
void *userp)
|
|
||||||
{
|
|
||||||
char timebuf[20];
|
|
||||||
const char *text;
|
|
||||||
int num = hnd2num(handle);
|
|
||||||
static time_t epoch_offset;
|
|
||||||
static int known_offset;
|
|
||||||
struct timeval tv;
|
|
||||||
time_t secs;
|
|
||||||
struct tm *now;
|
|
||||||
|
|
||||||
(void)handle; /* prevent compiler warning */
|
|
||||||
(void)userp;
|
|
||||||
|
|
||||||
gettimeofday(&tv, NULL);
|
|
||||||
if(!known_offset) {
|
|
||||||
epoch_offset = time(NULL) - tv.tv_sec;
|
|
||||||
known_offset = 1;
|
|
||||||
}
|
|
||||||
secs = epoch_offset + tv.tv_sec;
|
|
||||||
now = localtime(&secs); /* not thread safe but we don't care */
|
|
||||||
snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld",
|
|
||||||
now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec);
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case CURLINFO_TEXT:
|
|
||||||
fprintf(stderr, "%s [%d] Info: %s", timebuf, num, data);
|
|
||||||
default: /* in case a new one is introduced to shock us */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case CURLINFO_HEADER_OUT:
|
|
||||||
text = "=> Send header";
|
|
||||||
break;
|
|
||||||
case CURLINFO_DATA_OUT:
|
|
||||||
text = "=> Send data";
|
|
||||||
break;
|
|
||||||
case CURLINFO_SSL_DATA_OUT:
|
|
||||||
text = "=> Send SSL data";
|
|
||||||
break;
|
|
||||||
case CURLINFO_HEADER_IN:
|
|
||||||
text = "<= Recv header";
|
|
||||||
break;
|
|
||||||
case CURLINFO_DATA_IN:
|
|
||||||
text = "<= Recv data";
|
|
||||||
break;
|
|
||||||
case CURLINFO_SSL_DATA_IN:
|
|
||||||
text = "<= Recv SSL data";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dump(text, num, (unsigned char *)data, size, 1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct input {
|
|
||||||
FILE *in;
|
|
||||||
size_t bytes_read; /* count up */
|
|
||||||
CURL *hnd;
|
|
||||||
};
|
|
||||||
|
|
||||||
static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
|
|
||||||
{
|
|
||||||
struct input *i = userp;
|
|
||||||
size_t retcode = fread(ptr, size, nmemb, i->in);
|
|
||||||
i->bytes_read += retcode;
|
|
||||||
return retcode;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct input indata[NUM_HANDLES];
|
|
||||||
|
|
||||||
static void setup(CURL *hnd, int num, const char *upload)
|
|
||||||
{
|
|
||||||
FILE *out;
|
|
||||||
char url[256];
|
|
||||||
char filename[128];
|
|
||||||
struct stat file_info;
|
|
||||||
curl_off_t uploadsize;
|
|
||||||
|
|
||||||
sprintf(filename, "dl-%d", num);
|
|
||||||
out = fopen(filename, "wb");
|
|
||||||
|
|
||||||
sprintf(url, "https://localhost:8443/upload-%d", num);
|
|
||||||
|
|
||||||
/* get the file size of the local file */
|
|
||||||
stat(upload, &file_info);
|
|
||||||
uploadsize = file_info.st_size;
|
|
||||||
|
|
||||||
indata[num].in = fopen(upload, "rb");
|
|
||||||
indata[num].hnd = hnd;
|
|
||||||
|
|
||||||
/* write to this file */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
|
|
||||||
|
|
||||||
/* we want to use our own read function */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_READFUNCTION, read_callback);
|
|
||||||
/* read from this file */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_READDATA, &indata[num]);
|
|
||||||
/* provide the size of the upload */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, uploadsize);
|
|
||||||
|
|
||||||
/* send in the URL to store the upload as */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_URL, url);
|
|
||||||
|
|
||||||
/* upload please */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L);
|
|
||||||
|
|
||||||
/* send it verbose for max debuggaility */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
|
|
||||||
|
|
||||||
/* HTTP/2 please */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
|
|
||||||
|
|
||||||
/* we use a self-signed test server, skip verification during debugging */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
|
|
||||||
|
|
||||||
#if (CURLPIPE_MULTIPLEX > 0)
|
|
||||||
/* wait for pipe connection to confirm */
|
|
||||||
curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
curl_hnd[num] = hnd;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Upload all files over HTTP/2, using the same physical connection!
|
|
||||||
*/
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
CURL *easy[NUM_HANDLES];
|
|
||||||
CURLM *multi_handle;
|
|
||||||
int i;
|
|
||||||
int still_running; /* keep number of running handles */
|
|
||||||
const char *filename = "index.html";
|
|
||||||
|
|
||||||
if(argc > 1)
|
|
||||||
/* if given a number, do that many transfers */
|
|
||||||
num_transfers = atoi(argv[1]);
|
|
||||||
|
|
||||||
if(argc > 2)
|
|
||||||
/* if given a file name, upload this! */
|
|
||||||
filename = argv[2];
|
|
||||||
|
|
||||||
if(!num_transfers || (num_transfers > NUM_HANDLES))
|
|
||||||
num_transfers = 3; /* a suitable low default */
|
|
||||||
|
|
||||||
/* init a multi stack */
|
|
||||||
multi_handle = curl_multi_init();
|
|
||||||
|
|
||||||
for(i=0; i<num_transfers; i++) {
|
|
||||||
easy[i] = curl_easy_init();
|
|
||||||
/* set options */
|
|
||||||
setup(easy[i], i, filename);
|
|
||||||
|
|
||||||
/* add the individual transfer */
|
|
||||||
curl_multi_add_handle(multi_handle, easy[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
|
|
||||||
|
|
||||||
/* We do HTTP/2 so let's stick to one connection per host */
|
|
||||||
curl_multi_setopt(multi_handle, CURLMOPT_MAX_HOST_CONNECTIONS, 1L);
|
|
||||||
|
|
||||||
/* we start some action by calling perform right away */
|
|
||||||
curl_multi_perform(multi_handle, &still_running);
|
|
||||||
|
|
||||||
do {
|
|
||||||
struct timeval timeout;
|
|
||||||
int rc; /* select() return code */
|
|
||||||
CURLMcode mc; /* curl_multi_fdset() return code */
|
|
||||||
|
|
||||||
fd_set fdread;
|
|
||||||
fd_set fdwrite;
|
|
||||||
fd_set fdexcep;
|
|
||||||
int maxfd = -1;
|
|
||||||
|
|
||||||
long curl_timeo = -1;
|
|
||||||
|
|
||||||
FD_ZERO(&fdread);
|
|
||||||
FD_ZERO(&fdwrite);
|
|
||||||
FD_ZERO(&fdexcep);
|
|
||||||
|
|
||||||
/* set a suitable timeout to play around with */
|
|
||||||
timeout.tv_sec = 1;
|
|
||||||
timeout.tv_usec = 0;
|
|
||||||
|
|
||||||
curl_multi_timeout(multi_handle, &curl_timeo);
|
|
||||||
if(curl_timeo >= 0) {
|
|
||||||
timeout.tv_sec = curl_timeo / 1000;
|
|
||||||
if(timeout.tv_sec > 1)
|
|
||||||
timeout.tv_sec = 1;
|
|
||||||
else
|
|
||||||
timeout.tv_usec = (curl_timeo % 1000) * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get file descriptors from the transfers */
|
|
||||||
mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
|
||||||
|
|
||||||
if(mc != CURLM_OK)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* On success the value of maxfd is guaranteed to be >= -1. We call
|
|
||||||
select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
|
|
||||||
no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
|
|
||||||
to sleep 100ms, which is the minimum suggested value in the
|
|
||||||
curl_multi_fdset() doc. */
|
|
||||||
|
|
||||||
if(maxfd == -1) {
|
|
||||||
#ifdef _WIN32
|
|
||||||
Sleep(100);
|
|
||||||
rc = 0;
|
|
||||||
#else
|
|
||||||
/* Portable sleep for platforms other than Windows. */
|
|
||||||
struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
|
|
||||||
rc = select(0, NULL, NULL, NULL, &wait);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* Note that on some platforms 'timeout' may be modified by select().
|
|
||||||
If you need access to the original value save a copy beforehand. */
|
|
||||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(rc) {
|
|
||||||
case -1:
|
|
||||||
/* select error */
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
default:
|
|
||||||
/* timeout or readable/writable sockets */
|
|
||||||
curl_multi_perform(multi_handle, &still_running);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while(still_running);
|
|
||||||
|
|
||||||
curl_multi_cleanup(multi_handle);
|
|
||||||
|
|
||||||
for(i=0; i<num_transfers; i++)
|
|
||||||
curl_easy_cleanup(easy[i]);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* HTTP request with custom modified, removed and added headers
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* HTTP PUT with easy interface and read callback
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* Simple HTTPS GET
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* Simple IMAP APPEND use
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
@@ -60,7 +60,7 @@ int main(void)
|
|||||||
* they have mentioned in their server certificate's commonName (or
|
* they have mentioned in their server certificate's commonName (or
|
||||||
* subjectAltName) fields, libcurl will refuse to connect. You can skip
|
* subjectAltName) fields, libcurl will refuse to connect. You can skip
|
||||||
* this check, but this will make the connection less secure. */
|
* this check, but this will make the connection less secure. */
|
||||||
#ifdef SKIP_HOSTNAME_VERIFICATION
|
#ifdef SKIP_HOSTNAME_VERFICATION
|
||||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -19,6 +19,10 @@
|
|||||||
# KIND, either express or implied.
|
# KIND, either express or implied.
|
||||||
#
|
#
|
||||||
###########################################################################
|
###########################################################################
|
||||||
|
#
|
||||||
|
# Adapted for djgpp / Watt-32 / DOS by
|
||||||
|
# Gisle Vanem <gvanem@broadpark.no>
|
||||||
|
#
|
||||||
|
|
||||||
TOPDIR = ../..
|
TOPDIR = ../..
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,7 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* This is an example showing the multi interface and the debug callback. */
|
||||||
* multi interface and debug callback
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* multi interface code doing two parallel HTTP transfers
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,11 +19,8 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* This is an example application source code using the multi interface
|
||||||
* using the multi interface to do a multipart formpost without blocking
|
* to do a multipart formpost without "blocking". */
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
@@ -67,7 +64,7 @@ int main(void)
|
|||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
multi_handle = curl_multi_init();
|
multi_handle = curl_multi_init();
|
||||||
|
|
||||||
/* initialize custom header list (stating that Expect: 100-continue is not
|
/* initalize custom header list (stating that Expect: 100-continue is not
|
||||||
wanted */
|
wanted */
|
||||||
headerlist = curl_slist_append(headerlist, buf);
|
headerlist = curl_slist_append(headerlist, buf);
|
||||||
if(curl && multi_handle) {
|
if(curl && multi_handle) {
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,7 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* This is a very simple example using the multi interface. */
|
||||||
* using the multi interface to do a single download
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -79,12 +76,12 @@ int main(void)
|
|||||||
|
|
||||||
if(mc != CURLM_OK)
|
if(mc != CURLM_OK)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "curl_multi_wait() failed, code %d.\n", mc);
|
fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 'numfds' being zero means either a timeout or no file descriptors to
|
/* 'numfds' being zero means either a timeout or no file descriptors to
|
||||||
wait for. Try timeout on first occurrence, then assume no file
|
wait for. Try timeout on first occurance, then assume no file
|
||||||
descriptors and no file descriptors to wait for means wait for 100
|
descriptors and no file descriptors to wait for means wait for 100
|
||||||
milliseconds. */
|
milliseconds. */
|
||||||
|
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -20,10 +20,6 @@
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
/* <DESC>
|
|
||||||
* multi_socket API using libuv
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
/* Example application code using the multi socket interface to download
|
/* Example application code using the multi socket interface to download
|
||||||
multiple files at once, but instead of using curl_multi_perform and
|
multiple files at once, but instead of using curl_multi_perform and
|
||||||
curl_multi_wait, which uses select(), we use libuv.
|
curl_multi_wait, which uses select(), we use libuv.
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,8 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* A multi-threaded example that uses pthreads extensively to fetch
|
||||||
* A multi-threaded example that uses pthreads to fetch several files at once
|
* X remote files at once */
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,17 +19,16 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* Example source code to show one way to set the necessary OpenSSL locking
|
||||||
* one way to set the necessary OpenSSL locking callbacks if you want to do
|
* callbacks if you want to do multi-threaded transfers with HTTPS/FTPS with
|
||||||
* multi-threaded transfers with HTTPS/FTPS with libcurl built to use OpenSSL.
|
* libcurl built to use OpenSSL.
|
||||||
* </DESC>
|
*
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* This is not a complete stand-alone example.
|
* This is not a complete stand-alone example.
|
||||||
*
|
*
|
||||||
* Author: Jeremy Brown
|
* Author: Jeremy Brown
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <openssl/err.h>
|
#include <openssl/err.h>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
|
||||||
* re-using handles to do HTTP persistent connections
|
|
||||||
* </DESC>
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
@@ -69,7 +69,7 @@ int main(void)
|
|||||||
curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
|
curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
|
||||||
curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
|
curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
|
||||||
|
|
||||||
/* This will retrieve message 1 from the user's mailbox */
|
/* This will retreive message 1 from the user's mailbox */
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
|
curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
|
||||||
|
|
||||||
/* Tell the multi stack about our easy handle */
|
/* Tell the multi stack about our easy handle */
|
||||||
|
@@ -39,7 +39,7 @@ int main(void)
|
|||||||
curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
|
curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
|
||||||
curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
|
curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
|
||||||
|
|
||||||
/* This will retrieve message 1 from the user's mailbox */
|
/* This will retreive message 1 from the user's mailbox */
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
|
curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
|
||||||
|
|
||||||
/* Perform the retr */
|
/* Perform the retr */
|
||||||
|
@@ -40,7 +40,7 @@ int main(void)
|
|||||||
curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
|
curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
|
||||||
curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
|
curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
|
||||||
|
|
||||||
/* This will retrieve message 1 from the user's mailbox. Note the use of
|
/* This will retreive message 1 from the user's mailbox. Note the use of
|
||||||
* pop3s:// rather than pop3:// to request a SSL based connection. */
|
* pop3s:// rather than pop3:// to request a SSL based connection. */
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, "pop3s://pop.example.com/1");
|
curl_easy_setopt(curl, CURLOPT_URL, "pop3s://pop.example.com/1");
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ int main(void)
|
|||||||
* they have mentioned in their server certificate's commonName (or
|
* they have mentioned in their server certificate's commonName (or
|
||||||
* subjectAltName) fields, libcurl will refuse to connect. You can skip
|
* subjectAltName) fields, libcurl will refuse to connect. You can skip
|
||||||
* this check, but this will make the connection less secure. */
|
* this check, but this will make the connection less secure. */
|
||||||
#ifdef SKIP_HOSTNAME_VERIFICATION
|
#ifdef SKIP_HOSTNAME_VERFICATION
|
||||||
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
|
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -40,7 +40,7 @@ int main(void)
|
|||||||
curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
|
curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
|
||||||
curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
|
curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
|
||||||
|
|
||||||
/* This will retrieve message 1 from the user's mailbox */
|
/* This will retreive message 1 from the user's mailbox */
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
|
curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
|
||||||
|
|
||||||
/* In this example, we'll start with a plain text connection, and upgrade
|
/* In this example, we'll start with a plain text connection, and upgrade
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@@ -19,10 +19,8 @@
|
|||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
/* <DESC>
|
/* An example source code that issues a HTTP POST and we provide the actual
|
||||||
* An example source code that issues a HTTP POST and we provide the actual
|
|
||||||
* data through a read callback.
|
* data through a read callback.
|
||||||
* </DESC>
|
|
||||||
*/
|
*/
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@@ -73,7 +73,7 @@ int main(int argc, char *argv[])
|
|||||||
CURLFORM_END);
|
CURLFORM_END);
|
||||||
|
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
/* initialize custom header list (stating that Expect: 100-continue is not
|
/* initalize custom header list (stating that Expect: 100-continue is not
|
||||||
wanted */
|
wanted */
|
||||||
headerlist = curl_slist_append(headerlist, buf);
|
headerlist = curl_slist_append(headerlist, buf);
|
||||||
if(curl) {
|
if(curl) {
|
||||||
|
@@ -58,7 +58,7 @@ int main(void)
|
|||||||
CURL *curl;
|
CURL *curl;
|
||||||
CURLcode res;
|
CURLcode res;
|
||||||
struct FtpFile ftpfile={
|
struct FtpFile ftpfile={
|
||||||
"yourfile.bin", /* name to store the file as if successful */
|
"yourfile.bin", /* name to store the file as if succesful */
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -24,7 +24,7 @@
|
|||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
/* This is a simple example showing how to send mail using libcurl's SMTP
|
/* This is a simple example showing how to send mail using libcurl's SMTP
|
||||||
* capabilities. For an example of using the multi interface please see
|
* capabilities. For an exmaple of using the multi interface please see
|
||||||
* smtp-multi.c.
|
* smtp-multi.c.
|
||||||
*
|
*
|
||||||
* Note that this example requires libcurl 7.20.0 or above.
|
* Note that this example requires libcurl 7.20.0 or above.
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user