mirror of
https://github.com/curl/curl.git
synced 2025-02-11 14:50:40 +08:00
content_encoding: add zstd decoding support
include zstd curl patch for Makefile.m32 from vszakats and include Add CMake support for zstd from Peter Wu Helped-by: Viktor Szakats Helped-by: Peter Wu Closes #5453
This commit is contained in:
parent
c4026a9897
commit
e13357b14b
@ -76,7 +76,7 @@ stages:
|
||||
configure: --enable-debug --disable-shared --disable-threaded-resolver --enable-alt-svc
|
||||
tflags: -n -t --shallow=40 !FTP
|
||||
steps:
|
||||
- script: sudo apt-get update && sudo apt-get install -y stunnel4 python-impacket $(install)
|
||||
- script: sudo apt-get update && sudo apt-get install -y stunnel4 python-impacket libzstd-dev libbrotli-dev $(install)
|
||||
displayName: 'apt install'
|
||||
|
||||
- script: ./buildconf && ./configure $(configure)
|
||||
|
24
.travis.yml
24
.travis.yml
@ -94,6 +94,7 @@ jobs:
|
||||
- *common_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=novalgrind BORINGSSL=yes C="--with-ssl=$HOME/boringssl" LD_LIBRARY_PATH=/home/travis/boringssl/lib:/usr/local/lib
|
||||
- OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
|
||||
@ -111,6 +112,7 @@ jobs:
|
||||
- *common_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=novalgrind NGTCP2=yes C="--with-ssl=$HOME/ngbuild --with-ngtcp2=$HOME/ngbuild --with-nghttp3=$HOME/ngbuild --enable-alt-svc" NOTESTS=
|
||||
- OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
|
||||
@ -121,6 +123,7 @@ jobs:
|
||||
- *common_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=novalgrind NGTCP2=yes GNUTLS=yes C="PKG_CONFIG_PATH=$HOME/ngbuild --without-ssl --with-gnutls=$HOME/ngbuild --with-ngtcp2=$HOME/ngbuild --with-nghttp3=$HOME/ngbuild --enable-alt-svc" NOTESTS=
|
||||
- OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
|
||||
@ -131,6 +134,7 @@ jobs:
|
||||
- *common_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- autogen
|
||||
- automake
|
||||
- autopoint
|
||||
@ -151,6 +155,7 @@ jobs:
|
||||
- *common_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=debug-mesalink C="--with-mesalink --without-ssl"
|
||||
- OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
|
||||
@ -161,6 +166,7 @@ jobs:
|
||||
- *common_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=debug
|
||||
- &clang OVERRIDE_CC="CC=clang-9" OVERRIDE_CXX="CXX=clang++-9"
|
||||
@ -172,6 +178,7 @@ jobs:
|
||||
- &clang_packages [*common_packages, clang-9]
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=debug C="--enable-alt-svc"
|
||||
- *clang
|
||||
@ -183,6 +190,7 @@ jobs:
|
||||
- *clang_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=debug C="--with-mbedtls --without-ssl"
|
||||
- *clang
|
||||
@ -194,6 +202,7 @@ jobs:
|
||||
- *clang_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- libmbedtls-dev
|
||||
- env:
|
||||
- T=debug C="--with-gnutls --without-ssl"
|
||||
@ -207,6 +216,7 @@ jobs:
|
||||
- libgnutls28-dev
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=debug C="--with-nss --without-ssl" NOTESTS=1 CPPFLAGS="-isystem /usr/include/nss"
|
||||
- *clang
|
||||
@ -219,11 +229,12 @@ jobs:
|
||||
- libnss3-dev
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=iconv
|
||||
- OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
|
||||
- env:
|
||||
- T=cmake BORINGSSL=yes QUICHE=yes C="-DUSE_QUICHE=1 -DOPENSSL_ROOT_DIR=$HOME/boringssl"
|
||||
- T=cmake BORINGSSL=yes QUICHE=yes C="-DUSE_QUICHE=1 -DOPENSSL_ROOT_DIR=$HOME/boringssl -DCURL_BROTLI=1 -DCURL_ZSTD=1"
|
||||
- OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
|
||||
- PKG_CONFIG_PATH="$HOME/quiche/target/release"
|
||||
before_install:
|
||||
@ -235,8 +246,9 @@ jobs:
|
||||
- *common_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=cmake NGTCP2=yes C="-DUSE_NGTCP2=ON"
|
||||
- T=cmake NGTCP2=yes C="-DUSE_NGTCP2=ON -DCURL_BROTLI=1 -DCURL_ZSTD=1"
|
||||
- *clang
|
||||
- PKG_CONFIG_PATH="$HOME/ngbuild/lib/pkgconfig"
|
||||
compiler: clang
|
||||
@ -247,6 +259,7 @@ jobs:
|
||||
- *clang_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=torture
|
||||
- OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
|
||||
@ -258,6 +271,7 @@ jobs:
|
||||
- lcov
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- libssh2-1-dev
|
||||
- env:
|
||||
- T=distcheck
|
||||
@ -269,6 +283,7 @@ jobs:
|
||||
- *common_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=fuzzer
|
||||
- *clang
|
||||
@ -280,6 +295,7 @@ jobs:
|
||||
- *clang_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=tidy
|
||||
- *clang
|
||||
@ -292,6 +308,7 @@ jobs:
|
||||
- clang-tidy-9
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=scan-build
|
||||
- *clang
|
||||
@ -303,6 +320,7 @@ jobs:
|
||||
- *clang_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=debug CFLAGS="-fsanitize=address,undefined,signed-integer-overflow -fno-sanitize-recover=undefined,integer -Wformat -Werror=format-security -Werror=array-bounds -g" LDFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined,integer" LIBS="-ldl -lubsan"
|
||||
- *clang
|
||||
@ -314,6 +332,7 @@ jobs:
|
||||
- *clang_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- env:
|
||||
- T=debug C="--enable-alt-svc"
|
||||
- OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
|
||||
@ -325,6 +344,7 @@ jobs:
|
||||
- *common_packages
|
||||
- libpsl-dev
|
||||
- libbrotli-dev
|
||||
- libzstd-dev
|
||||
- libev-dev
|
||||
- libssl-dev
|
||||
- libtool
|
||||
|
69
CMake/FindZstd.cmake
Normal file
69
CMake/FindZstd.cmake
Normal file
@ -0,0 +1,69 @@
|
||||
#***************************************************************************
|
||||
# _ _ ____ _
|
||||
# Project ___| | | | _ \| |
|
||||
# / __| | | | |_) | |
|
||||
# | (__| |_| | _ <| |___
|
||||
# \___|\___/|_| \_\_____|
|
||||
#
|
||||
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||
#
|
||||
# This software is licensed as described in the file COPYING, which
|
||||
# you should have received as part of this distribution. The terms
|
||||
# are also available at https://curl.haxx.se/docs/copyright.html.
|
||||
#
|
||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
||||
# copies of the Software, and permit persons to whom the Software is
|
||||
# furnished to do so, under the terms of the COPYING file.
|
||||
#
|
||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
# KIND, either express or implied.
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
FindZstd
|
||||
----------
|
||||
|
||||
Find the zstd library
|
||||
|
||||
Result Variables
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
``Zstd_FOUND``
|
||||
System has zstd
|
||||
``Zstd_INCLUDE_DIRS``
|
||||
The zstd include directories.
|
||||
``Zstd_LIBRARIES``
|
||||
The libraries needed to use zstd
|
||||
#]=======================================================================]
|
||||
|
||||
if(UNIX)
|
||||
find_package(PkgConfig QUIET)
|
||||
pkg_search_module(PC_Zstd libzstd)
|
||||
endif()
|
||||
|
||||
find_path(Zstd_INCLUDE_DIR zstd.h
|
||||
HINTS
|
||||
${PC_Zstd_INCLUDEDIR}
|
||||
${PC_Zstd_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
find_library(Zstd_LIBRARY NAMES zstd
|
||||
HINTS
|
||||
${PC_Zstd_LIBDIR}
|
||||
${PC_Zstd_LIBRARY_DIRS}
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Zstd
|
||||
REQUIRED_VARS
|
||||
Zstd_LIBRARY
|
||||
Zstd_INCLUDE_DIR
|
||||
)
|
||||
|
||||
if(Zstd_FOUND)
|
||||
set(Zstd_LIBRARIES ${Zstd_LIBRARY})
|
||||
set(Zstd_INCLUDE_DIRS ${Zstd_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
mark_as_advanced(Zstd_INCLUDE_DIRS Zstd_LIBRARIES)
|
@ -641,6 +641,22 @@ if(CURL_BROTLI)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
option(CURL_ZSTD "Set to ON to enable building curl with zstd support." OFF)
|
||||
set(HAVE_ZSTD OFF)
|
||||
if(CURL_ZSTD)
|
||||
find_package(Zstd REQUIRED)
|
||||
cmake_push_check_state()
|
||||
set(CMAKE_REQUIRED_INCLUDES ${Zstd_INCLUDE_DIRS})
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${Zstd_LIBRARIES})
|
||||
check_symbol_exists(ZSTD_createDStream "zstd.h" HAVE_ZSTD_CREATEDSTREAM)
|
||||
cmake_pop_check_state()
|
||||
if(Zstd_FOUND AND HAVE_ZSTD_CREATEDSTREAM)
|
||||
set(HAVE_ZSTD ON)
|
||||
list(APPEND CURL_LIBS ${Zstd_LIBRARIES})
|
||||
include_directories(${Zstd_INCLUDE_DIRS})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
#libSSH2
|
||||
option(CMAKE_USE_LIBSSH2 "Use libSSH2" ON)
|
||||
mark_as_advanced(CMAKE_USE_LIBSSH2)
|
||||
@ -1322,6 +1338,8 @@ _add_if("SSL" SSL_ENABLED)
|
||||
_add_if("IPv6" ENABLE_IPV6)
|
||||
_add_if("unix-sockets" USE_UNIX_SOCKETS)
|
||||
_add_if("libz" HAVE_LIBZ)
|
||||
_add_if("brotli" HAVE_BROTLI)
|
||||
_add_if("zstd" HAVE_ZSTD)
|
||||
_add_if("AsynchDNS" USE_ARES OR USE_THREADS_POSIX OR USE_THREADS_WIN32)
|
||||
_add_if("IDN" HAVE_LIBIDN2)
|
||||
_add_if("Largefile" (CURL_SIZEOF_CURL_OFF_T GREATER 4) AND
|
||||
|
91
configure.ac
91
configure.ac
@ -1115,6 +1115,93 @@ if test X"$OPT_BROTLI" != Xno; then
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for libzstd
|
||||
dnl **********************************************************************
|
||||
|
||||
dnl Default to compiler & linker defaults for libzstd
|
||||
OPT_ZSTD=off
|
||||
AC_ARG_WITH(zstd,dnl
|
||||
AC_HELP_STRING([--with-zstd=PATH],[Where to look for libzstd, PATH points to the libzstd installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option])
|
||||
AC_HELP_STRING([--without-zstd], [disable libzstd]),
|
||||
OPT_ZSTD=$withval)
|
||||
|
||||
if test X"$OPT_ZSTD" != Xno; then
|
||||
dnl backup the pre-zstd variables
|
||||
CLEANLDFLAGS="$LDFLAGS"
|
||||
CLEANCPPFLAGS="$CPPFLAGS"
|
||||
CLEANLIBS="$LIBS"
|
||||
|
||||
case "$OPT_ZSTD" in
|
||||
yes)
|
||||
dnl --with-zstd (without path) used
|
||||
CURL_CHECK_PKGCONFIG(libzstd)
|
||||
|
||||
if test "$PKGCONFIG" != "no" ; then
|
||||
LIB_ZSTD=`$PKGCONFIG --libs-only-l libzstd`
|
||||
LD_ZSTD=`$PKGCONFIG --libs-only-L libzstd`
|
||||
CPP_ZSTD=`$PKGCONFIG --cflags-only-I libzstd`
|
||||
version=`$PKGCONFIG --modversion libzstd`
|
||||
DIR_ZSTD=`echo $LD_ZSTD | $SED -e 's/-L//'`
|
||||
fi
|
||||
|
||||
;;
|
||||
off)
|
||||
dnl no --with-zstd option given, just check default places
|
||||
;;
|
||||
*)
|
||||
dnl use the given --with-zstd spot
|
||||
PREFIX_ZSTD=$OPT_ZSTD
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl if given with a prefix, we set -L and -I based on that
|
||||
if test -n "$PREFIX_ZSTD"; then
|
||||
LIB_ZSTD="-lzstd"
|
||||
LD_ZSTD=-L${PREFIX_ZSTD}/lib$libsuff
|
||||
CPP_ZSTD=-I${PREFIX_ZSTD}/include
|
||||
DIR_ZSTD=${PREFIX_ZSTD}/lib$libsuff
|
||||
fi
|
||||
|
||||
LDFLAGS="$LDFLAGS $LD_ZSTD"
|
||||
CPPFLAGS="$CPPFLAGS $CPP_ZSTD"
|
||||
LIBS="$LIB_ZSTD $LIBS"
|
||||
|
||||
AC_CHECK_LIB(zstd, ZSTD_createDStream)
|
||||
|
||||
AC_CHECK_HEADERS(zstd.h,
|
||||
curl_zstd_msg="enabled (libzstd)"
|
||||
HAVE_ZSTD=1
|
||||
AC_DEFINE(HAVE_ZSTD, 1, [if libzstd is in use])
|
||||
AC_SUBST(HAVE_ZSTD, [1])
|
||||
)
|
||||
|
||||
if test X"$OPT_ZSTD" != Xoff &&
|
||||
test "$HAVE_ZSTD" != "1"; then
|
||||
AC_MSG_ERROR([libzstd was not found where specified!])
|
||||
fi
|
||||
|
||||
if test "$HAVE_ZSTD" = "1"; then
|
||||
if test -n "$DIR_ZSTD"; then
|
||||
dnl when the zstd shared lib were found in a path that the run-time
|
||||
dnl linker doesn't search through, we need to add it to
|
||||
dnl CURL_LIBRARY_PATH to prevent further configure tests to fail due to
|
||||
dnl this
|
||||
|
||||
if test "x$cross_compiling" != "xyes"; then
|
||||
CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_ZSTD"
|
||||
export CURL_LIBRARY_PATH
|
||||
AC_MSG_NOTICE([Added $DIR_ZSTD to CURL_LIBRARY_PATH])
|
||||
fi
|
||||
fi
|
||||
else
|
||||
dnl no zstd, revert back to clean variables
|
||||
LDFLAGS=$CLEANLDFLAGS
|
||||
CPPFLAGS=$CLEANCPPFLAGS
|
||||
LIBS=$CLEANLIBS
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl **********************************************************************
|
||||
dnl Check for LDAP
|
||||
dnl **********************************************************************
|
||||
@ -4825,6 +4912,9 @@ fi
|
||||
if test "x$HAVE_BROTLI" = "x1"; then
|
||||
SUPPORT_FEATURES="$SUPPORT_FEATURES brotli"
|
||||
fi
|
||||
if test "x$HAVE_ZSTD" = "x1"; then
|
||||
SUPPORT_FEATURES="$SUPPORT_FEATURES zstd"
|
||||
fi
|
||||
if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \
|
||||
-o "x$USE_THREADS_WIN32" = "x1"; then
|
||||
SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS"
|
||||
@ -5067,6 +5157,7 @@ AC_MSG_NOTICE([Configured to build curl/libcurl:
|
||||
SSH: ${curl_ssh_msg}
|
||||
zlib: ${curl_zlib_msg}
|
||||
brotli: ${curl_brotli_msg}
|
||||
zstd: ${curl_zstd_msg}
|
||||
GSS-API: ${curl_gss_msg}
|
||||
TLS-SRP: ${curl_tls_srp_msg}
|
||||
resolver: ${curl_res_msg}
|
||||
|
@ -24,7 +24,7 @@
|
||||
#
|
||||
## 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),
|
||||
## brotli (1.0.1)
|
||||
## brotli (1.0.1), zstd (1.4.5)
|
||||
##
|
||||
## Usage: mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
|
||||
## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-sspi-winidn
|
||||
@ -39,6 +39,10 @@
|
||||
ifndef ZLIB_PATH
|
||||
ZLIB_PATH = ../../../zlib-1.2.8
|
||||
endif
|
||||
# Edit the path below to point to the base of your Zstandard sources.
|
||||
ifndef ZSTD_PATH
|
||||
ZSTD_PATH = ../../../zstd-1.4.5
|
||||
endif
|
||||
# Edit the path below to point to the base of your Brotli sources.
|
||||
ifndef BROTLI_PATH
|
||||
BROTLI_PATH = ../../../brotli-1.0.1
|
||||
@ -180,6 +184,9 @@ endif
|
||||
ifeq ($(findstring -zlib,$(CFG)),-zlib)
|
||||
ZLIB = 1
|
||||
endif
|
||||
ifeq ($(findstring -zstd,$(CFG)),-zstd)
|
||||
ZSTD = 1
|
||||
endif
|
||||
ifeq ($(findstring -brotli,$(CFG)),-brotli)
|
||||
BROTLI = 1
|
||||
endif
|
||||
@ -284,6 +291,11 @@ ifdef ZLIB
|
||||
CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
|
||||
curl_LDADD += -L"$(ZLIB_PATH)" -lz
|
||||
endif
|
||||
ifdef ZSTD
|
||||
INCLUDES += -I"$(ZSTD_PATH)/include"
|
||||
CFLAGS += -DHAVE_ZSTD
|
||||
curl_LDADD += -L"$(ZSTD_PATH)/lib" -lzstd
|
||||
endif
|
||||
ifdef BROTLI
|
||||
INCLUDES += -I"$(BROTLI_PATH)/include"
|
||||
CFLAGS += -DHAVE_BROTLI
|
||||
|
@ -92,6 +92,11 @@ typedef struct {
|
||||
be NULL */
|
||||
const char *capath; /* the built-in default CURLOPT_CAPATH, might
|
||||
be NULL */
|
||||
/* when 'age' is CURLVERSION_EIGHTH or higher (>= 7.71.0), the members
|
||||
below exist */
|
||||
unsigned int zstd_ver_num; /* Numeric Zstd version
|
||||
(MAJOR << 24) | (MINOR << 12) | PATCH */
|
||||
const char *zstd_version; /* human readable string. */
|
||||
} curl_version_info_data;
|
||||
.fi
|
||||
|
||||
@ -121,6 +126,8 @@ more exact timeouts (even on Windows) and less blocking when using the multi
|
||||
interface. (added in 7.10.7)
|
||||
.IP CURL_VERSION_BROTLI
|
||||
supports HTTP Brotli content encoding using libbrotlidec (Added in 7.57.0)
|
||||
.IP CURL_VERSION_ZSTD
|
||||
supports HTTP zstd content encoding using zstd library (Added in 7.72.0)
|
||||
.IP CURL_VERSION_CONV
|
||||
libcurl was built with support for character conversions, as provided by the
|
||||
CURLOPT_CONV_* callbacks. (Added in 7.15.4)
|
||||
|
@ -45,8 +45,9 @@ Alternatively, you can specify exactly the encoding or list of encodings you
|
||||
want in the response. Four encodings are supported: \fIidentity\fP, meaning
|
||||
non-compressed, \fIdeflate\fP which requests the server to compress its
|
||||
response using the zlib algorithm, \fIgzip\fP which requests the gzip
|
||||
algorithm and (since curl 7.57.0) \fIbr\fP which is brotli. Provide them in
|
||||
the string as a comma-separated list of accepted encodings, like:
|
||||
algorithm, (since curl 7.57.0) \fIbr\fP which is brotli and (since curl
|
||||
7.72.0) \fIzstd\fP which is zstd. Provide them in the string as a
|
||||
comma-separated list of accepted encodings, like:
|
||||
|
||||
"br, gzip, deflate".
|
||||
|
||||
@ -94,8 +95,9 @@ if(curl) {
|
||||
This option was called CURLOPT_ENCODING before 7.21.6
|
||||
|
||||
The specific libcurl you're using must have been built with zlib to be able to
|
||||
decompress gzip and deflate responses and with the brotli library to
|
||||
decompress brotli responses.
|
||||
decompress gzip and deflate responses, with the brotli library to
|
||||
decompress brotli responses and with the zstd library to decompress zstd
|
||||
responses.
|
||||
.SH RETURN VALUE
|
||||
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
|
||||
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
|
||||
|
@ -803,6 +803,7 @@ CURLU_NO_DEFAULT_PORT 7.62.0
|
||||
CURLU_PATH_AS_IS 7.62.0
|
||||
CURLU_URLDECODE 7.62.0
|
||||
CURLU_URLENCODE 7.62.0
|
||||
CURLVERSION_EIGHTH 7.72.0
|
||||
CURLVERSION_FIFTH 7.57.0
|
||||
CURLVERSION_FIRST 7.10
|
||||
CURLVERSION_FOURTH 7.16.1
|
||||
@ -968,6 +969,7 @@ CURL_VERSION_SSL 7.10
|
||||
CURL_VERSION_SSPI 7.13.2
|
||||
CURL_VERSION_TLSAUTH_SRP 7.21.4
|
||||
CURL_VERSION_UNIX_SOCKETS 7.40.0
|
||||
CURL_VERSION_ZSTD 7.72.0
|
||||
CURL_WAIT_POLLIN 7.28.0
|
||||
CURL_WAIT_POLLOUT 7.28.0
|
||||
CURL_WAIT_POLLPRI 7.28.0
|
||||
|
@ -2748,6 +2748,7 @@ typedef enum {
|
||||
CURLVERSION_FIFTH,
|
||||
CURLVERSION_SIXTH,
|
||||
CURLVERSION_SEVENTH,
|
||||
CURLVERSION_EIGHTH,
|
||||
CURLVERSION_LAST /* never actually use this */
|
||||
} CURLversion;
|
||||
|
||||
@ -2756,7 +2757,7 @@ typedef enum {
|
||||
meant to be a built-in version number for what kind of struct the caller
|
||||
expects. If the struct ever changes, we redefine the NOW to another enum
|
||||
from above. */
|
||||
#define CURLVERSION_NOW CURLVERSION_SEVENTH
|
||||
#define CURLVERSION_NOW CURLVERSION_EIGHTH
|
||||
|
||||
struct curl_version_info_data {
|
||||
CURLversion age; /* age of the returned struct */
|
||||
@ -2802,6 +2803,11 @@ struct curl_version_info_data {
|
||||
const char *capath; /* the built-in default CURLOPT_CAPATH, might
|
||||
be NULL */
|
||||
|
||||
/* These fields were added in CURLVERSION_EIGHTH */
|
||||
unsigned int zstd_ver_num; /* Numeric Zstd version
|
||||
(MAJOR << 24) | (MINOR << 12) | PATCH */
|
||||
const char *zstd_version; /* human readable string. */
|
||||
|
||||
};
|
||||
typedef struct curl_version_info_data curl_version_info_data;
|
||||
|
||||
@ -2836,7 +2842,7 @@ typedef struct curl_version_info_data curl_version_info_data;
|
||||
#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */
|
||||
#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */
|
||||
#define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */
|
||||
|
||||
#define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */
|
||||
/*
|
||||
* NAME curl_version_info()
|
||||
*
|
||||
|
@ -24,7 +24,7 @@
|
||||
#
|
||||
## Makefile for building libcurl.a with MingW (GCC-3.2 or later or LLVM/Clang)
|
||||
## and optionally OpenSSL (1.0.2a), libssh2 (1.5), zlib (1.2.8), librtmp (2.4),
|
||||
## brotli (1.0.1)
|
||||
## brotli (1.0.1), zstd (1.4.5)
|
||||
##
|
||||
## Usage: mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
|
||||
## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-sspi-winidn
|
||||
@ -39,6 +39,10 @@
|
||||
ifndef ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.8
|
||||
endif
|
||||
# Edit the path below to point to the base of your Zstandard sources.
|
||||
ifndef ZSTD_PATH
|
||||
ZSTD_PATH = ../../zstd-1.4.5
|
||||
endif
|
||||
# Edit the path below to point to the base of your Brotli sources.
|
||||
ifndef BROTLI_PATH
|
||||
BROTLI_PATH = ../../brotli-1.0.1
|
||||
@ -180,6 +184,9 @@ endif
|
||||
ifeq ($(findstring -zlib,$(CFG)),-zlib)
|
||||
ZLIB = 1
|
||||
endif
|
||||
ifeq ($(findstring -zstd,$(CFG)),-zstd)
|
||||
ZSTD = 1
|
||||
endif
|
||||
ifeq ($(findstring -brotli,$(CFG)),-brotli)
|
||||
BROTLI = 1
|
||||
endif
|
||||
@ -288,6 +295,11 @@ ifdef ZLIB
|
||||
CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
|
||||
DLL_LIBS += -L"$(ZLIB_PATH)" -lz
|
||||
endif
|
||||
ifdef ZSTD
|
||||
INCLUDES += -I"$(ZSTD_PATH)/include"
|
||||
CFLAGS += -DHAVE_ZSTD
|
||||
DLL_LIBS += -L"$(ZSTD_PATH)/lib" -lzstd
|
||||
endif
|
||||
ifdef BROTLI
|
||||
INCLUDES += -I"$(BROTLI_PATH)/include"
|
||||
CFLAGS += -DHAVE_BROTLI
|
||||
|
@ -38,6 +38,10 @@
|
||||
#include <brotli/decode.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ZSTD
|
||||
#include <zstd.h>
|
||||
#endif
|
||||
|
||||
#include "sendf.h"
|
||||
#include "http.h"
|
||||
#include "content_encoding.h"
|
||||
@ -710,6 +714,95 @@ static const struct content_encoding brotli_encoding = {
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef HAVE_ZSTD
|
||||
/* Writer parameters. */
|
||||
struct zstd_params {
|
||||
ZSTD_DStream *zds; /* State structure for zstd. */
|
||||
void *decomp;
|
||||
};
|
||||
|
||||
static CURLcode zstd_init_writer(struct connectdata *conn,
|
||||
struct contenc_writer *writer)
|
||||
{
|
||||
struct zstd_params *zp = (struct zstd_params *)&writer->params;
|
||||
(void)conn;
|
||||
|
||||
if(!writer->downstream)
|
||||
return CURLE_WRITE_ERROR;
|
||||
|
||||
zp->zds = ZSTD_createDStream();
|
||||
zp->decomp = NULL;
|
||||
return zp->zds ? CURLE_OK : CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
static CURLcode zstd_unencode_write(struct connectdata *conn,
|
||||
struct contenc_writer *writer,
|
||||
const char *buf, size_t nbytes)
|
||||
{
|
||||
CURLcode result = CURLE_OK;
|
||||
struct zstd_params *zp = (struct zstd_params *)&writer->params;
|
||||
ZSTD_inBuffer in;
|
||||
ZSTD_outBuffer out;
|
||||
size_t errorCode;
|
||||
|
||||
if(!zp->decomp) {
|
||||
zp->decomp = malloc(DSIZ);
|
||||
if(!zp->decomp)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
in.pos = 0;
|
||||
in.src = buf;
|
||||
in.size = nbytes;
|
||||
|
||||
for(;;) {
|
||||
out.pos = 0;
|
||||
out.dst = zp->decomp;
|
||||
out.size = DSIZ;
|
||||
|
||||
errorCode = ZSTD_decompressStream(zp->zds, &out, &in);
|
||||
if(ZSTD_isError(errorCode)) {
|
||||
return CURLE_BAD_CONTENT_ENCODING;
|
||||
}
|
||||
if(out.pos > 0) {
|
||||
result = Curl_unencode_write(conn, writer->downstream,
|
||||
zp->decomp, out.pos);
|
||||
if(result)
|
||||
break;
|
||||
}
|
||||
if((in.pos == nbytes) && (out.pos < out.size))
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void zstd_close_writer(struct connectdata *conn,
|
||||
struct contenc_writer *writer)
|
||||
{
|
||||
struct zstd_params *zp = (struct zstd_params *)&writer->params;
|
||||
(void)conn;
|
||||
|
||||
if(zp->decomp) {
|
||||
free(zp->decomp);
|
||||
zp->decomp = NULL;
|
||||
}
|
||||
if(zp->zds) {
|
||||
ZSTD_freeDStream(zp->zds);
|
||||
zp->zds = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static const struct content_encoding zstd_encoding = {
|
||||
"zstd",
|
||||
NULL,
|
||||
zstd_init_writer,
|
||||
zstd_unencode_write,
|
||||
zstd_close_writer,
|
||||
sizeof(struct zstd_params)
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/* Identity handler. */
|
||||
static CURLcode identity_init_writer(struct connectdata *conn,
|
||||
struct contenc_writer *writer)
|
||||
@ -751,6 +844,9 @@ static const struct content_encoding * const encodings[] = {
|
||||
#endif
|
||||
#ifdef HAVE_BROTLI
|
||||
&brotli_encoding,
|
||||
#endif
|
||||
#ifdef HAVE_ZSTD
|
||||
&zstd_encoding,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
@ -437,6 +437,9 @@
|
||||
/* if brotli is available */
|
||||
#cmakedefine HAVE_BROTLI 1
|
||||
|
||||
/* if zstd is available */
|
||||
#cmakedefine HAVE_ZSTD 1
|
||||
|
||||
/* if your compiler supports LL */
|
||||
#cmakedefine HAVE_LL 1
|
||||
|
||||
|
@ -66,6 +66,10 @@
|
||||
#include <brotli/decode.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ZSTD
|
||||
#include <zstd.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_BROTLI
|
||||
static size_t brotli_version(char *buf, size_t bufsz)
|
||||
{
|
||||
@ -78,6 +82,20 @@ static size_t brotli_version(char *buf, size_t bufsz)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ZSTD
|
||||
static size_t zstd_version(char *buf, size_t bufsz)
|
||||
{
|
||||
unsigned long zstd_version = (unsigned long)ZSTD_versionNumber();
|
||||
unsigned int major = (unsigned int)(zstd_version / (100 * 100));
|
||||
unsigned int minor = (unsigned int)((zstd_version -
|
||||
(major * 100 * 100)) / 100);
|
||||
unsigned int patch = (unsigned int)(zstd_version -
|
||||
(major * 100 * 100) - (minor * 100));
|
||||
|
||||
return msnprintf(buf, bufsz, "%u.%u.%u", major, minor, patch);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* curl_version() returns a pointer to a static buffer.
|
||||
*
|
||||
@ -103,6 +121,9 @@ char *curl_version(void)
|
||||
#ifdef HAVE_BROTLI
|
||||
char br_version[40] = "brotli/";
|
||||
#endif
|
||||
#ifdef HAVE_ZSTD
|
||||
char zst_version[40] = "zstd/";
|
||||
#endif
|
||||
#ifdef USE_ARES
|
||||
char cares_version[40];
|
||||
#endif
|
||||
@ -153,6 +174,10 @@ char *curl_version(void)
|
||||
brotli_version(&br_version[7], sizeof(br_version) - 7);
|
||||
src[i++] = br_version;
|
||||
#endif
|
||||
#ifdef HAVE_ZSTD
|
||||
zstd_version(&zst_version[5], sizeof(zst_version) - 5);
|
||||
src[i++] = zst_version;
|
||||
#endif
|
||||
#ifdef USE_ARES
|
||||
msnprintf(cares_version, sizeof(cares_version),
|
||||
"c-ares/%s", ares_version(NULL));
|
||||
@ -389,6 +414,9 @@ static curl_version_info_data version_info = {
|
||||
#if defined(HAVE_BROTLI)
|
||||
| CURL_VERSION_BROTLI
|
||||
#endif
|
||||
#if defined(HAVE_ZSTD)
|
||||
| CURL_VERSION_ZSTD
|
||||
#endif
|
||||
#if defined(USE_ALTSVC)
|
||||
| CURL_VERSION_ALTSVC
|
||||
#endif
|
||||
@ -413,10 +441,12 @@ static curl_version_info_data version_info = {
|
||||
NULL,
|
||||
#endif
|
||||
#ifdef CURL_CA_PATH
|
||||
CURL_CA_PATH /* capath */
|
||||
CURL_CA_PATH, /* capath */
|
||||
#else
|
||||
NULL
|
||||
NULL,
|
||||
#endif
|
||||
0, /* zstd_ver_num */
|
||||
NULL /* zstd version */
|
||||
};
|
||||
|
||||
curl_version_info_data *curl_version_info(CURLversion stamp)
|
||||
@ -434,6 +464,10 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
|
||||
#ifdef HAVE_BROTLI
|
||||
static char brotli_buffer[80];
|
||||
#endif
|
||||
#ifdef HAVE_ZSTD
|
||||
static char zstd_buffer[80];
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef USE_SSL
|
||||
Curl_ssl_version(ssl_buffer, sizeof(ssl_buffer));
|
||||
@ -485,6 +519,12 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
|
||||
version_info.brotli_version = brotli_buffer;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ZSTD
|
||||
version_info.zstd_ver_num = (unsigned int)ZSTD_versionNumber();
|
||||
zstd_version(zstd_buffer, sizeof(zstd_buffer));
|
||||
version_info.zstd_version = zstd_buffer;
|
||||
#endif
|
||||
|
||||
#ifdef USE_NGHTTP2
|
||||
{
|
||||
nghttp2_info *h2 = nghttp2_version(0);
|
||||
|
@ -24,7 +24,7 @@
|
||||
#
|
||||
## Makefile for building curl.exe with MingW (GCC-3.2 or later or LLVM/Clang)
|
||||
## and optionally OpenSSL (1.0.2a), libssh2 (1.5), zlib (1.2.8), librtmp (2.4),
|
||||
## brotli (1.0.1)
|
||||
## brotli (1.0.1), zstd (1.4.5)
|
||||
##
|
||||
## Usage: mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
|
||||
## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-sspi-winidn
|
||||
@ -39,6 +39,10 @@
|
||||
ifndef ZLIB_PATH
|
||||
ZLIB_PATH = ../../zlib-1.2.8
|
||||
endif
|
||||
# Edit the path below to point to the base of your Zstandard sources.
|
||||
ifndef ZSTD_PATH
|
||||
ZSTD_PATH = ../../zstd-1.4.5
|
||||
endif
|
||||
# Edit the path below to point to the base of your Brotli sources.
|
||||
ifndef BROTLI_PATH
|
||||
BROTLI_PATH = ../../brotli-1.0.1
|
||||
@ -189,6 +193,9 @@ endif
|
||||
ifeq ($(findstring -zlib,$(CFG)),-zlib)
|
||||
ZLIB = 1
|
||||
endif
|
||||
ifeq ($(findstring -zstd,$(CFG)),-zstd)
|
||||
ZSTD = 1
|
||||
endif
|
||||
ifeq ($(findstring -brotli,$(CFG)),-brotli)
|
||||
BROTLI = 1
|
||||
endif
|
||||
@ -302,6 +309,11 @@ ifdef ZLIB
|
||||
CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H
|
||||
curl_LDADD += -L"$(ZLIB_PATH)" -lz
|
||||
endif
|
||||
ifdef ZSTD
|
||||
INCLUDES += -I"$(ZSTD_PATH)/include"
|
||||
CFLAGS += -DHAVE_ZSTD
|
||||
curl_LDADD += -L"$(ZSTD_PATH)/lib" -lzstd
|
||||
endif
|
||||
ifdef BROTLI
|
||||
INCLUDES += -I"$(BROTLI_PATH)/include"
|
||||
CFLAGS += -DHAVE_BROTLI
|
||||
|
@ -695,7 +695,8 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
|
||||
|
||||
case 'j': /* --compressed */
|
||||
if(toggle &&
|
||||
!(curlinfo->features & (CURL_VERSION_LIBZ | CURL_VERSION_BROTLI)))
|
||||
!(curlinfo->features & (CURL_VERSION_LIBZ |
|
||||
CURL_VERSION_BROTLI | CURL_VERSION_ZSTD)))
|
||||
return PARAM_LIBCURL_DOESNT_SUPPORT;
|
||||
config->encoding = toggle;
|
||||
break;
|
||||
|
@ -546,6 +546,7 @@ static const struct feat feats[] = {
|
||||
{"SSL", CURL_VERSION_SSL},
|
||||
{"libz", CURL_VERSION_LIBZ},
|
||||
{"brotli", CURL_VERSION_BROTLI},
|
||||
{"zstd", CURL_VERSION_ZSTD},
|
||||
{"CharConv", CURL_VERSION_CONV},
|
||||
{"TLS-SRP", CURL_VERSION_TLSAUTH_SRP},
|
||||
{"HTTP2", CURL_VERSION_HTTP2},
|
||||
|
@ -61,7 +61,7 @@ test334 test335 test336 test337 test338 test339 test340 test341 test342 \
|
||||
test343 test344 test345 test346 \
|
||||
test350 test351 test352 test353 test354 test355 test356 test357 test358 \
|
||||
test359 \
|
||||
test393 test394 test395 \
|
||||
test393 test394 test395 test396 test397 \
|
||||
\
|
||||
test400 test401 test402 test403 test404 test405 test406 test407 test408 \
|
||||
test409 \
|
||||
|
202
tests/data/test396
Normal file
202
tests/data/test396
Normal file
@ -0,0 +1,202 @@
|
||||
<testcase>
|
||||
<info>
|
||||
<keywords>
|
||||
HTTP
|
||||
HTTP GET
|
||||
compressed
|
||||
</keywords>
|
||||
</info>
|
||||
#
|
||||
# Server-side
|
||||
<reply>
|
||||
<data base64="yes">
|
||||
SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy
|
||||
dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg
|
||||
UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K
|
||||
VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J
|
||||
U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiB6c3RkDQpDb250ZW50LUxlbmd0aDogMTMwOQ0K
|
||||
DQootS/9ZLESfSgAhj+9KODQugGwA7ZypiefqCCMWuEChf2B/kAy8O+aCN/J85sQo2WYoY3AzAu3
|
||||
ALMArADzIbf2pNpzu3kaHt3a+7pumz3QvrNJn6zxUdptGFLvNOy67bymt1gZRqqBqhqopndRkImC
|
||||
WNNUYZLrGFaqAWoasKZHVZBrglyVCoXJljJq+kbJsKImFCan5j0IgxD2kFdKljRBHrJtWNa+0GLG
|
||||
t6t0Y2+db98wD3D3dh7PwZLBVGAep877k0Ku1hbWuWeJqMgcQCAAQAgreFCQiuS6IBAYhgcBp05p
|
||||
tdrvMUnUg6Da+d6eR7eMAhjTU/ubEztOjRRyTNXz9lh739eZvfb42ruTgRxSd+6LNDLIIdsbw3Lv
|
||||
5/fMsM699c68G27U5mZebw1yXDCYbOvqdSvdYvxH7kWyt+7bIUcko6Vc977nhbXai24X3bccJD5K
|
||||
GwNyfHyRhGUhAkIhslwYEl4UYYBweVHG8nCxZF6UOWBASIAcUUQm4UWYKCKTWXh/3XJc9+8yPCkj
|
||||
3qrx30GObzo3Ht/Px1B6783X6PddJCZey7W1Se0G2a373CC/5z3vYYj1x47mHWT5WcbbjLdZy6zl
|
||||
xvnGOWSOpc2psaNx88PNT/XJqk/24dwP50Jmn7K9N9thyPxYcyKnod4xvLSLm0bANB2tRs8i2Fc7
|
||||
Lzdd+6x7hpGLIVVht3ZW0zCcJNIVnaFkYkhdUoRiaEkkqyKZeKQdZzmGlQmFXdToDCeUFMFubc2b
|
||||
Y0iRSNZFkWDtVnuNxp003ulhCDmkv7W3aj0MIYzht0eIVkUklkWj3GYvUKypimSTfihJpKIi1kSj
|
||||
ZSgQ8C4YTG3uzsvQmlgUTE6G00Num9XaHwTNadyn0VOrLWtzLSHDiISaKlfFmlDTNFXUdVGRSVUx
|
||||
rDzW7411btMZMkPvigGBNbXOkL0lJ2Yb1DuGHO+s9sU82rPGd9u5XWSIZVvXuZprO1+7XXvIckqu
|
||||
aUJhWEkVJVEwTdN2zWV4eVs3r9uv9uBRcIbBAesPgOiggZVzaGZABgAggEEBQELCICNKAyHz5wz5
|
||||
Gr+3SMoKzoiT4JcFlMRJ8E0BVdBikl8WJGONBZ5ErsE5h2Oju5HWDnZ50LZofbucqKR8qlj/gvM2
|
||||
pP8JtMX1f4XHv4sy+T9yUDCHs9YmJmw5hnGWowLZWgC0/j7rTMyJRnY3KrwRdj/wXTFmjnFucfZu
|
||||
/94DmfjeEDOFz0C0f3YgYWUsI+2YO9YVXGtiM3AJTNsy5j6K9jkAKLew5bRCRJqMYqloGVw2M0JH
|
||||
f4ZlSeeJaBsx6A24uIythC24JsTWGU7cNBP0NL3qbNPMIllkjj1n95If2W0cQobpYDaGF2ja1bjg
|
||||
5MAexBa5GWSJY2kGTsRGwkEd3Ad5qiG3zWSmXQGb7VwHzPvskUlDyLuenXPmlGEajIyyvcZ1Dns9
|
||||
S2Ru2G3YO5OHEHZNu4aZS8MuG5GPrZkBNbsTDMDQBg0rr/EM2GW5AKf9gZiRlINAzPQ5ltqgBSFC
|
||||
GNOIHYGDMjg5MNphi1sImR3WcGKBiIA8sM64mdAQ0sxEb84XSBFzplx8N2jz0O5guS/GeNfaqg7r
|
||||
yLrOzSoJKq2aJUadLQgFtLV6UcfzOw296pBr0/ms+rHmnTs5jnmC0eqLUKV72l4Ym3HYkknmcEsY
|
||||
QP51NUQZGktcjt2485yobNJeXv/S9pzH3nguOoYl36mAbjiMjYXDkIwI+7N0JMiHzrs7y3WvSOFZ
|
||||
</data>
|
||||
|
||||
<datacheck>
|
||||
HTTP/1.1 200 OK
|
||||
Date: Mon, 29 Nov 2004 21:56:53 GMT
|
||||
Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
|
||||
Vary: Accept-Encoding
|
||||
Content-Type: text/html; charset=ISO-8859-1
|
||||
Content-Encoding: zstd
|
||||
Content-Length: 1309
|
||||
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE project-listing SYSTEM "http://freshmeat.net/backend/fm-projects-0.4.dtd">
|
||||
<project-listing>
|
||||
<project>
|
||||
<project_id>1612</project_id>
|
||||
<date_added>1998-08-21 04:01:29</date_added>
|
||||
<date_updated>2004-10-18 02:22:23</date_updated>
|
||||
<projectname_short>curl</projectname_short>
|
||||
<projectname_full>curl and libcurl</projectname_full>
|
||||
<desc_short>Command line tool and library for client-side URL transfers.</desc_short>
|
||||
<desc_full>curl and libcurl is a tool for transferring files
|
||||
using URL syntax. It supports HTTP, HTTPS, FTP,
|
||||
FTPS, DICT, TELNET, LDAP, FILE, and GOPHER, as
|
||||
well as HTTP-post, HTTP-put, cookies, FTP upload,
|
||||
resumed transfers, passwords, portnumbers, SSL
|
||||
certificates, Kerberos, and proxies. It is powered
|
||||
by libcurl, the client-side URL transfer library.
|
||||
There are bindings to libcurl for over 20
|
||||
languages and environments.
|
||||
</desc_full>
|
||||
<vitality_score>5784.57</vitality_score>
|
||||
<vitality_percent>3.16</vitality_percent>
|
||||
<vitality_rank>169</vitality_rank>
|
||||
<popularity_score>6594.54</popularity_score>
|
||||
<popularity_percent>13.81</popularity_percent>
|
||||
<popularity_rank>105</popularity_rank>
|
||||
<rating>8.50</rating>
|
||||
<rating_count>21</rating_count>
|
||||
<rating_rank>183</rating_rank>
|
||||
<subscriptions>323</subscriptions>
|
||||
<branch_name>Default</branch_name>
|
||||
<url_project_page>http://freshmeat.net/projects/curl/</url_project_page>
|
||||
<url_homepage>http://freshmeat.net/redir/curl/1612/url_homepage/</url_homepage>
|
||||
<url_tgz>http://freshmeat.net/redir/curl/1612/url_tgz/</url_tgz>
|
||||
<url_bz2>http://freshmeat.net/redir/curl/1612/url_bz2/</url_bz2>
|
||||
<url_zip>http://freshmeat.net/redir/curl/1612/url_zip/</url_zip>
|
||||
<url_changelog>http://freshmeat.net/redir/curl/1612/url_changelog/</url_changelog>
|
||||
<url_rpm>http://freshmeat.net/redir/curl/1612/url_rpm/</url_rpm>
|
||||
<url_deb>http://freshmeat.net/redir/curl/1612/url_deb/</url_deb>
|
||||
<url_osx>http://freshmeat.net/redir/curl/1612/url_osx/</url_osx>
|
||||
<url_bsdport>http://freshmeat.net/redir/curl/1612/url_bsdport/</url_bsdport>
|
||||
<url_purchase></url_purchase>
|
||||
<url_cvs>http://freshmeat.net/redir/curl/1612/url_cvs/</url_cvs>
|
||||
<url_list>http://freshmeat.net/redir/curl/1612/url_list/</url_list>
|
||||
<url_mirror>http://freshmeat.net/redir/curl/1612/url_mirror/</url_mirror>
|
||||
<url_demo></url_demo>
|
||||
<license>MIT/X Consortium License</license>
|
||||
<latest_release>
|
||||
<latest_release_version>7.12.2</latest_release_version>
|
||||
<latest_release_id>176085</latest_release_id>
|
||||
<latest_release_date>2004-10-18 02:22:23</latest_release_date>
|
||||
</latest_release>
|
||||
<screenshot_thumb></screenshot_thumb>
|
||||
<authors>
|
||||
<author>
|
||||
<author_name>Daniel Stenberg</author_name>
|
||||
<author_url>http://freshmeat.net/~bagder/</author_url>
|
||||
<author_role>Owner</author_role>
|
||||
</author>
|
||||
</authors>
|
||||
<descriminators>
|
||||
<trove_id>12</trove_id>
|
||||
<trove_id>226</trove_id>
|
||||
<trove_id>3</trove_id>
|
||||
<trove_id>2</trove_id>
|
||||
<trove_id>188</trove_id>
|
||||
<trove_id>216</trove_id>
|
||||
<trove_id>200</trove_id>
|
||||
<trove_id>220</trove_id>
|
||||
<trove_id>164</trove_id>
|
||||
<trove_id>90</trove_id>
|
||||
<trove_id>89</trove_id>
|
||||
<trove_id>809</trove_id>
|
||||
<trove_id>150</trove_id>
|
||||
<trove_id>224</trove_id>
|
||||
<trove_id>900</trove_id>
|
||||
<trove_id>839</trove_id>
|
||||
</descriminators>
|
||||
<dependencies>
|
||||
<dependency type="recommended">
|
||||
<dependency_release_id>0</dependency_release_id>
|
||||
<dependency_branch_id>7464</dependency_branch_id>
|
||||
<dependency_project_id>7464</dependency_project_id>
|
||||
<dependency_project_title>OpenSSL (Default)</dependency_project_title>
|
||||
</dependency>
|
||||
<dependency type="optional">
|
||||
<dependency_release_id>0</dependency_release_id>
|
||||
<dependency_branch_id>0</dependency_branch_id>
|
||||
<dependency_project_id>7443</dependency_project_id>
|
||||
<dependency_project_title>OpenLDAP</dependency_project_title>
|
||||
</dependency>
|
||||
<dependency type="optional">
|
||||
<dependency_release_id>0</dependency_release_id>
|
||||
<dependency_branch_id>0</dependency_branch_id>
|
||||
<dependency_project_id>12351</dependency_project_id>
|
||||
<dependency_project_title>zlib</dependency_project_title>
|
||||
</dependency>
|
||||
<dependency type="optional">
|
||||
<dependency_release_id>0</dependency_release_id>
|
||||
<dependency_branch_id>0</dependency_branch_id>
|
||||
<dependency_project_id>32047</dependency_project_id>
|
||||
<dependency_project_title>Heimdal</dependency_project_title>
|
||||
</dependency>
|
||||
<dependency type="optional">
|
||||
<dependency_release_id>0</dependency_release_id>
|
||||
<dependency_branch_id>0</dependency_branch_id>
|
||||
<dependency_project_id>44532</dependency_project_id>
|
||||
<dependency_project_title>c-ares</dependency_project_title>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
</project-listing>
|
||||
</datacheck>
|
||||
|
||||
</reply>
|
||||
|
||||
#
|
||||
# Client-side
|
||||
<client>
|
||||
<features>
|
||||
zstd
|
||||
</features>
|
||||
<server>
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
HTTP GET zstd compressed content
|
||||
</name>
|
||||
<command>
|
||||
http://%HOSTIP:%HTTPPORT/396 --compressed
|
||||
</command>
|
||||
</client>
|
||||
|
||||
#
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<strip>
|
||||
^User-Agent:.*
|
||||
</strip>
|
||||
<strippart>
|
||||
s/^Accept-Encoding: .*/Accept-Encoding: xxx/
|
||||
</strippart>
|
||||
<protocol>
|
||||
GET /396 HTTP/1.1
|
||||
Host: %HOSTIP:%HTTPPORT
|
||||
Accept: */*
|
||||
Accept-Encoding: xxx
|
||||
|
||||
</protocol>
|
||||
</verify>
|
||||
</testcase>
|
198
tests/data/test397
Normal file
198
tests/data/test397
Normal file
@ -0,0 +1,198 @@
|
||||
<testcase>
|
||||
<info>
|
||||
<keywords>
|
||||
HTTP
|
||||
HTTP GET
|
||||
compressed
|
||||
</keywords>
|
||||
</info>
|
||||
#
|
||||
# Server-side
|
||||
<reply>
|
||||
# Length of not-encoded content is 16512 what is greater than default value of
|
||||
# CURL_MAX_WRITE_SIZE (16384)
|
||||
<data base64="yes">
|
||||
SFRUUC8xLjEgMjAwIE9LDQpEYXRlOiBNb24sIDI5IE5vdiAyMDA0IDIxOjU2OjUzIEdNVA0KU2Vy
|
||||
dmVyOiBBcGFjaGUvMS4zLjMxIChEZWJpYW4gR05VL0xpbnV4KSBtb2RfZ3ppcC8xLjMuMjYuMWEg
|
||||
UEhQLzQuMy45LTEgbW9kX3NzbC8yLjguMjAgT3BlblNTTC8wLjkuN2QgbW9kX3BlcmwvMS4yOQ0K
|
||||
VmFyeTogQWNjZXB0LUVuY29kaW5nDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1J
|
||||
U08tODg1OS0xDQpDb250ZW50LUVuY29kaW5nOiB6c3RkDQpDb250ZW50LUxlbmd0aDogNDcNCg0K
|
||||
KLUv/WSAPw0BAIgwMTIzNDU2Nzg5QUJDREVGCgQAfJ9geAAEGh3Sq006l4KvuZw=
|
||||
</data>
|
||||
|
||||
<datacheck>
|
||||
HTTP/1.1 200 OK
|
||||
Date: Mon, 29 Nov 2004 21:56:53 GMT
|
||||
Server: Apache/1.3.31 (Debian GNU/Linux) mod_gzip/1.3.26.1a PHP/4.3.9-1 mod_ssl/2.8.20 OpenSSL/0.9.7d mod_perl/1.29
|
||||
Vary: Accept-Encoding
|
||||
Content-Type: text/html; charset=ISO-8859-1
|
||||
Content-Encoding: zstd
|
||||
Content-Length: 47
|
||||
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF
|
||||
</datacheck>
|
||||
|
||||
</reply>
|
||||
|
||||
#
|
||||
# Client-side
|
||||
<client>
|
||||
<features>
|
||||
zstd
|
||||
</features>
|
||||
<server>
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
HTTP GET zstd compressed content of size more than CURL_MAX_WRITE_SIZE
|
||||
</name>
|
||||
<command>
|
||||
http://%HOSTIP:%HTTPPORT/397 --compressed
|
||||
</command>
|
||||
</client>
|
||||
|
||||
#
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<strip>
|
||||
^User-Agent:.*
|
||||
</strip>
|
||||
<strippart>
|
||||
s/^Accept-Encoding: .*/Accept-Encoding: xxx/
|
||||
</strippart>
|
||||
<protocol>
|
||||
GET /397 HTTP/1.1
|
||||
Host: %HOSTIP:%HTTPPORT
|
||||
Accept: */*
|
||||
Accept-Encoding: xxx
|
||||
|
||||
</protocol>
|
||||
</verify>
|
||||
</testcase>
|
@ -240,6 +240,7 @@ my $has_ipv6; # set if libcurl is built with IPv6 support
|
||||
my $has_unix; # set if libcurl is built with Unix sockets support
|
||||
my $has_libz; # set if libcurl is built with libz support
|
||||
my $has_brotli; # set if libcurl is built with brotli support
|
||||
my $has_zstd; # set if libcurl is built with zstd support
|
||||
my $has_getrlimit; # set if system has getrlimit()
|
||||
my $has_ntlm; # set if libcurl is built with NTLM support
|
||||
my $has_ntlm_wb; # set if libcurl is built with NTLM delegation to winbind
|
||||
@ -2831,6 +2832,7 @@ sub setupfeatures {
|
||||
$feature{"unix-sockets"} = $has_unix;
|
||||
$feature{"win32"} = $has_win32;
|
||||
$feature{"WinSSL"} = $has_winssl;
|
||||
$feature{"zstd"} = $has_zstd;
|
||||
|
||||
# make each protocol an enabled "feature"
|
||||
for my $p (@protocols) {
|
||||
@ -3011,6 +3013,9 @@ sub checksystem {
|
||||
if($feat =~ /brotli/i) {
|
||||
$has_brotli = 1;
|
||||
}
|
||||
if($feat =~ /zstd/i) {
|
||||
$has_zstd = 1;
|
||||
}
|
||||
if($feat =~ /NTLM/i) {
|
||||
# NTLM enabled
|
||||
$has_ntlm=1;
|
||||
|
Loading…
Reference in New Issue
Block a user