Tarantool development patches archive
 help / color / mirror / Atom feed
From: Alexander Turenko <alexander.turenko@tarantool.org>
To: Ilya Kosarev <i.kosarev@tarantool.org>
Cc: tarantool-patches@freelists.org, georgy@tarantool.org,
	i.kosarev@corp.mail.ru
Subject: [tarantool-patches] Re: [PATCH] http: add CURLOPT_ACCEPT_ENCODING option
Date: Tue, 27 Aug 2019 17:30:16 +0300	[thread overview]
Message-ID: <20190827143015.tqifpjmzi63i7ca7@tkn_work_nb> (raw)
In-Reply-To: <20190819121230.17621-1-i.kosarev@tarantool.org>

I have no objections against the code, but I would describe it in more
details. See below.

WBR, Alexander Turenko.

On Mon, Aug 19, 2019 at 03:12:30PM +0300, Ilya Kosarev wrote:
> CURLOPT_ACCEPT_ENCODING option is now supported.
> This option enables automatic decompression of HTTP downloads.
> See https://curl.haxx.se/libcurl/c/CURLOPT_ACCEPT_ENCODING.html

Nit: docbot request is needed.

> 
> Closes #4232
> ---
> Branch: https://github.com/tarantool/tarantool/tree/i.kosarev/gh-4232-curlopt-accept-encoding
> Issue: https://github.com/tarantool/tarantool/issues/4232
> 
>  src/httpc.c       | 13 +++++++++++++
>  src/httpc.h       | 12 ++++++++++++
>  src/lua/httpc.c   |  5 +++++
>  src/lua/httpc.lua |  2 ++
>  4 files changed, 32 insertions(+)
> 
> diff --git a/src/httpc.c b/src/httpc.c
> index 54bc785e1..736184b6b 100644
> --- a/src/httpc.c
> +++ b/src/httpc.c
> @@ -337,6 +337,19 @@ httpc_set_follow_location(struct httpc_request *req, long follow)
>  			 follow);
>  }
>  
> +void
> +httpc_set_accept_encoding(struct httpc_request *req, const char *encoding)
> +{
> +#if LIBCURL_VERSION_NUM >= 0x071506 /* CURLOPT_ACCEPT_ENCODING was called
> + 	CURLOPT_ENCODING before libcurl 7.21.6 */

Nit: Move the comment to its own line(s), fit it to 66 symbols or carry
it, add a period at the end. It will look so:

 | /*
 |  * CURLOPT_ACCEPT_ENCODING was called CURLOPT_ENCODING before
 |  * libcurl 7.21.6.
 |  */
 | #if LIBCURL_VERSION_NUM >= 0x071506


> +	curl_easy_setopt(req->curl_request.easy, CURLOPT_ACCEPT_ENCODING,
> +			 encoding);
> +#else
> +	curl_easy_setopt(req->curl_request.easy, CURLOPT_ENCODING,
> +			 encoding);
> +#endif
> +}
> +

It is possible that a user will set something that bundled / system
libcurl does not support or a user will misspell one of values. What
will going on in the case? As I see from libcurl sources it will just
set passed value for the request header. An http server likely will
ignore unknown values and will choose an encoding from a value that is
spelled corectly (or will send plain http). So everything will work, no
error will be reported, but the transfer will be performed w/o requested
encoding. I think it worth to verify and mention such details.

>  int
>  httpc_execute(struct httpc_request *req, double timeout)
>  {
> diff --git a/src/httpc.h b/src/httpc.h
> index c6882a534..d5f4320c5 100644
> --- a/src/httpc.h
> +++ b/src/httpc.h
> @@ -312,6 +312,18 @@ httpc_set_interface(struct httpc_request *req, const char *interface);
>  void
>  httpc_set_follow_location(struct httpc_request *req, long follow);
>  
> +/**
> + * Enable automatic decompression of HTTP downloads: set the contents
> + * of the Accept-Encoding: header sent in an HTTP request,
> + * and enable decoding of a response
> + * when a Content-Encoding: header is received.

Nit: Fit the comment to 66 symbols; don't carry a line if it can be
continued.

I would remove colons after the header names, because it confuses at
reading.

> + * @param req request
> + * @param encoding - specify what encoding you'd like.

Let's describe the special value: empty string. Let's describe which
options are available with our bundled libcurl and which are possibly
availiable with system libcurl (it is for custom builds). Let's describe
how to set several options. Add this information to a docbot comment
too.

> + * @see https://curl.haxx.se/libcurl/c/CURLOPT_ACCEPT_ENCODING.html
> + */
> +void
> +httpc_set_accept_encoding(struct httpc_request *req, const char *encoding);
> +
>  /**
>   * This function does async HTTP request
>   * @param request - reference to request object with filled fields
> diff --git a/src/lua/httpc.c b/src/lua/httpc.c
> index e02adb9fb..a57f08c6c 100644
> --- a/src/lua/httpc.c
> +++ b/src/lua/httpc.c
> @@ -295,6 +295,11 @@ luaT_httpc_request(lua_State *L)
>  		httpc_set_follow_location(req, lua_toboolean(L, -1));
>  	lua_pop(L, 1);
>  
> +	lua_getfield(L, 5, "accept_encoding");
> +	if (!lua_isnil(L, -1))
> +		httpc_set_accept_encoding(req, lua_tostring(L, -1));
> +	lua_pop(L, 1);
> +
>  	if (httpc_execute(req, timeout) != 0) {
>  		httpc_request_delete(req);
>  		return luaT_error(L);
> diff --git a/src/lua/httpc.lua b/src/lua/httpc.lua
> index 50ff91a36..4b73187c2 100644
> --- a/src/lua/httpc.lua
> +++ b/src/lua/httpc.lua
> @@ -287,6 +287,8 @@ end
>  --          'Location' header that a server sends as part of an
>  --          3xx response;
>  --
> +--      accept_encoding - enables automatic decompression of HTTP downloads;
> +--
>  --  Returns:
>  --      {
>  --          status=NUMBER,
> -- 
> 2.17.1
> 

Can we test, say, gzip encoding with our test/app-tap/httpd.py server?
If so it would be good to add a test.

      reply	other threads:[~2019-08-27 14:30 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-19 12:12 [tarantool-patches] " Ilya Kosarev
2019-08-27 14:30 ` Alexander Turenko [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190827143015.tqifpjmzi63i7ca7@tkn_work_nb \
    --to=alexander.turenko@tarantool.org \
    --cc=georgy@tarantool.org \
    --cc=i.kosarev@corp.mail.ru \
    --cc=i.kosarev@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --subject='[tarantool-patches] Re: [PATCH] http: add CURLOPT_ACCEPT_ENCODING option' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox