diff options
author | Patrick Monnerat <patrick@monnerat.net> | 2017-11-05 15:28:16 +0100 |
---|---|---|
committer | Patrick Monnerat <patrick@monnerat.net> | 2017-11-05 15:28:16 +0100 |
commit | 11bf1796cd015373a996e6eb26212e2e1aadb066 (patch) | |
tree | 1b63178f15c501be24d33e81f3b57bb7cd163b92 /lib/version.c | |
parent | dbcced8e32b50c068ac297106f0502ee200a1ebd (diff) | |
download | curl-11bf1796cd015373a996e6eb26212e2e1aadb066.tar.gz |
HTTP: implement Brotli content encoding
This uses the brotli external library (https://github.com/google/brotli).
Brotli becomes a feature: additional curl_version_info() bit and
structure fields are provided for it and CURLVERSION_NOW bumped.
Tests 314 and 315 check Brotli content unencoding with correct and
erroneous data.
Some tests are updated to accomodate with the now configuration dependent
parameters of the Accept-Encoding header.
Diffstat (limited to 'lib/version.c')
-rw-r--r-- | lib/version.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/lib/version.c b/lib/version.c index ebd600635..66c761e34 100644 --- a/lib/version.c +++ b/lib/version.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -74,6 +74,18 @@ void Curl_version_init(void) curl_version_info(CURLVERSION_NOW); } +#ifdef HAVE_BROTLI +static size_t brotli_version(char *buf, size_t bufsz) +{ + uint32_t brotli_version = BrotliDecoderVersion(); + unsigned int major = brotli_version >> 24; + unsigned int minor = (brotli_version & 0x00FFFFFF) >> 12; + unsigned int patch = brotli_version & 0x00000FFF; + + return snprintf(buf, bufsz, "%u.%u.%u", major, minor, patch); +} +#endif + char *curl_version(void) { static bool initialized; @@ -105,6 +117,14 @@ char *curl_version(void) left -= len; ptr += len; #endif +#ifdef HAVE_BROTLI + len = snprintf(ptr, left, "%s", " brotli/"); + left -= len; + ptr += len; + len = brotli_version(ptr, left); + left -= len; + ptr += len; +#endif #ifdef USE_ARES /* this function is only present in c-ares, not in the original ares */ len = snprintf(ptr, left, " c-ares/%s", ares_version(NULL)); @@ -327,6 +347,9 @@ static curl_version_info_data version_info = { #if defined(CURL_WITH_MULTI_SSL) | CURL_VERSION_MULTI_SSL #endif +#if defined(HAVE_BROTLI) + | CURL_VERSION_BROTLI +#endif , NULL, /* ssl_version */ 0, /* ssl_version_num, this is kept at zero */ @@ -337,6 +360,8 @@ static curl_version_info_data version_info = { NULL, /* libidn version */ 0, /* iconv version */ NULL, /* ssh lib version */ + 0, /* brotli_ver_num */ + NULL, /* brotli version */ }; curl_version_info_data *curl_version_info(CURLversion stamp) @@ -348,6 +373,9 @@ curl_version_info_data *curl_version_info(CURLversion stamp) #ifdef USE_SSL static char ssl_buffer[80]; #endif +#ifdef HAVE_BROTLI + static char brotli_buffer[80]; +#endif if(initialized) return &version_info; @@ -396,6 +424,12 @@ curl_version_info_data *curl_version_info(CURLversion stamp) version_info.libssh_version = ssh_buffer; #endif +#ifdef HAVE_BROTLI + version_info.brotli_ver_num = BrotliDecoderVersion(); + brotli_version(brotli_buffer, sizeof brotli_buffer); + version_info.brotli_version = brotli_buffer; +#endif + (void)stamp; /* avoid compiler warnings, we don't use this */ initialized = true; |