mirror of
https://github.com/curl/curl.git
synced 2026-08-25 00:13:34 +03:00
HTTP: support multiple Content-Encodings
This is implemented as an output streaming stack of unencoders, the last calling the client write procedure. New test 230 checks this feature. Bug: https://github.com/curl/curl/pull/2002 Reported-By: Daniel Bankhead
This commit is contained in:
parent
462f3cac34
commit
dbcced8e32
11 changed files with 736 additions and 283 deletions
|
|
@ -779,48 +779,19 @@ static CURLcode readwrite_data(struct Curl_easy *data,
|
|||
in http_chunks.c.
|
||||
Make sure that ALL_CONTENT_ENCODINGS contains all the
|
||||
encodings handled here. */
|
||||
#ifdef HAVE_LIBZ
|
||||
switch(conn->data->set.http_ce_skip ?
|
||||
IDENTITY : k->auto_decoding) {
|
||||
case IDENTITY:
|
||||
#endif
|
||||
/* This is the default when the server sends no
|
||||
Content-Encoding header. See Curl_readwrite_init; the
|
||||
memset() call initializes k->auto_decoding to zero. */
|
||||
if(conn->data->set.http_ce_skip || !k->writer_stack) {
|
||||
if(!k->ignorebody) {
|
||||
|
||||
#ifndef CURL_DISABLE_POP3
|
||||
if(conn->handler->protocol&PROTO_FAMILY_POP3)
|
||||
if(conn->handler->protocol & PROTO_FAMILY_POP3)
|
||||
result = Curl_pop3_write(conn, k->str, nread);
|
||||
else
|
||||
#endif /* CURL_DISABLE_POP3 */
|
||||
|
||||
result = Curl_client_write(conn, CLIENTWRITE_BODY, k->str,
|
||||
nread);
|
||||
}
|
||||
#ifdef HAVE_LIBZ
|
||||
break;
|
||||
|
||||
case DEFLATE:
|
||||
/* Assume CLIENTWRITE_BODY; headers are not encoded. */
|
||||
if(!k->ignorebody)
|
||||
result = Curl_unencode_deflate_write(conn, k, nread);
|
||||
break;
|
||||
|
||||
case GZIP:
|
||||
/* Assume CLIENTWRITE_BODY; headers are not encoded. */
|
||||
if(!k->ignorebody)
|
||||
result = Curl_unencode_gzip_write(conn, k, nread);
|
||||
break;
|
||||
|
||||
default:
|
||||
failf(data, "Unrecognized content encoding type. "
|
||||
"libcurl understands `identity', `deflate' and `gzip' "
|
||||
"content encodings.");
|
||||
result = CURLE_BAD_CONTENT_ENCODING;
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
result = Curl_unencode_write(conn, k->writer_stack, k->str, nread);
|
||||
}
|
||||
k->badheader = HEADER_NORMAL; /* taken care of now */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue