diff options
author | Maxim Yurchuk <maxim-yurchuk@ydb.tech> | 2024-10-18 20:31:38 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-18 20:31:38 +0300 |
commit | 2a74bac2d2d3bccb4e10120f1ead805640ec9dd0 (patch) | |
tree | 047e4818ced5aaf73f58517629e5260b5291f9f0 /contrib/libs/curl/lib/http_chunks.h | |
parent | 2d9656823e9521d8c29ea4c9a1d0eab78391abfc (diff) | |
parent | 3d834a1923bbf9403cd4a448e7f32b670aa4124f (diff) | |
download | ydb-2a74bac2d2d3bccb4e10120f1ead805640ec9dd0.tar.gz |
Merge pull request #10502 from ydb-platform/mergelibs-241016-1210
Library import 241016-1210
Diffstat (limited to 'contrib/libs/curl/lib/http_chunks.h')
-rw-r--r-- | contrib/libs/curl/lib/http_chunks.h | 77 |
1 files changed, 16 insertions, 61 deletions
diff --git a/contrib/libs/curl/lib/http_chunks.h b/contrib/libs/curl/lib/http_chunks.h index 34951ea0f4..0a36f379b1 100644 --- a/contrib/libs/curl/lib/http_chunks.h +++ b/contrib/libs/curl/lib/http_chunks.h @@ -24,21 +24,17 @@ * ***************************************************************************/ -#ifndef CURL_DISABLE_HTTP - -#include "dynbuf.h" - struct connectdata; /* * The longest possible hexadecimal number we support in a chunked transfer. * Neither RFC2616 nor the later HTTP specs define a maximum chunk size. - * For 64-bit curl_off_t we support 16 digits. For 32-bit, 8 digits. + * For 64 bit curl_off_t we support 16 digits. For 32 bit, 8 digits. */ #define CHUNK_MAXNUM_LEN (SIZEOF_CURL_OFF_T * 2) typedef enum { - /* await and buffer all hexadecimal digits until we get one that is not a + /* await and buffer all hexadecimal digits until we get one that isn't a hexadecimal digit. When done, we go CHUNK_LF */ CHUNK_HEX, @@ -54,9 +50,9 @@ typedef enum { big deal. */ CHUNK_POSTLF, - /* Used to mark that we are out of the game. NOTE: that there is a - 'datasize' field in the struct that will tell how many bytes that were - not passed to the client in the end of the last buffer! */ + /* Used to mark that we're out of the game. NOTE: that there's a 'datasize' + field in the struct that will tell how many bytes that were not passed to + the client in the end of the last buffer! */ CHUNK_STOP, /* At this point optional trailer headers can be found, unless the next line @@ -71,75 +67,34 @@ typedef enum { signalled If this is an empty trailer CHUNKE_STOP will be signalled. Otherwise the trailer will be broadcasted via Curl_client_write() and the next state will be CHUNK_TRAILER */ - CHUNK_TRAILER_POSTCR, - - /* Successfully de-chunked everything */ - CHUNK_DONE, - - /* Failed on seeing a bad or not correctly terminated chunk */ - CHUNK_FAILED + CHUNK_TRAILER_POSTCR } ChunkyState; typedef enum { + CHUNKE_STOP = -1, CHUNKE_OK = 0, CHUNKE_TOO_LONG_HEX = 1, CHUNKE_ILLEGAL_HEX, CHUNKE_BAD_CHUNK, CHUNKE_BAD_ENCODING, CHUNKE_OUT_OF_MEMORY, - CHUNKE_PASSTHRU_ERROR /* Curl_httpchunk_read() returns a CURLcode to use */ + CHUNKE_PASSTHRU_ERROR, /* Curl_httpchunk_read() returns a CURLcode to use */ + CHUNKE_LAST } CHUNKcode; +const char *Curl_chunked_strerror(CHUNKcode code); + struct Curl_chunker { curl_off_t datasize; ChunkyState state; - CHUNKcode last_code; - struct dynbuf trailer; /* for chunked-encoded trailer */ unsigned char hexindex; - char hexbuffer[CHUNK_MAXNUM_LEN + 1]; /* +1 for null-terminator */ - BIT(ignore_body); /* never write response body data */ + char hexbuffer[ CHUNK_MAXNUM_LEN + 1]; /* +1 for null-terminator */ }; /* The following functions are defined in http_chunks.c */ -void Curl_httpchunk_init(struct Curl_easy *data, struct Curl_chunker *ch, - bool ignore_body); -void Curl_httpchunk_free(struct Curl_easy *data, struct Curl_chunker *ch); -void Curl_httpchunk_reset(struct Curl_easy *data, struct Curl_chunker *ch, - bool ignore_body); - -/* - * Read BODY bytes in HTTP/1.1 chunked encoding from `buf` and return - * the amount of bytes consumed. The actual response bytes and trailer - * headers are written out to the client. - * On success, this will consume all bytes up to the end of the response, - * e.g. the last chunk, has been processed. - * @param data the transfer involved - * @param ch the chunker instance keeping state across calls - * @param buf the response data - * @param blen amount of bytes in `buf` - * @param pconsumed on successful return, the number of bytes in `buf` - * consumed - * - * This function always uses ASCII hex values to accommodate non-ASCII hosts. - * For example, 0x0d and 0x0a are used instead of '\r' and '\n'. - */ -CURLcode Curl_httpchunk_read(struct Curl_easy *data, struct Curl_chunker *ch, - char *buf, size_t blen, size_t *pconsumed); - -/** - * @return TRUE iff chunked decoded has finished successfully. - */ -bool Curl_httpchunk_is_done(struct Curl_easy *data, struct Curl_chunker *ch); - -extern const struct Curl_cwtype Curl_httpchunk_unencoder; - -extern const struct Curl_crtype Curl_httpchunk_encoder; - -/** - * Add a transfer-encoding "chunked" reader to the transfers reader stack - */ -CURLcode Curl_httpchunk_add_reader(struct Curl_easy *data); - -#endif /* !CURL_DISABLE_HTTP */ +void Curl_httpchunk_init(struct Curl_easy *data); +CHUNKcode Curl_httpchunk_read(struct Curl_easy *data, char *buf, + size_t blen, size_t *pconsumed, + CURLcode *passthru); #endif /* HEADER_CURL_HTTP_CHUNKS_H */ |