aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/curl/lib/http_chunks.h
diff options
context:
space:
mode:
authorMaxim Yurchuk <maxim-yurchuk@ydb.tech>2024-10-18 20:31:38 +0300
committerGitHub <noreply@github.com>2024-10-18 20:31:38 +0300
commit2a74bac2d2d3bccb4e10120f1ead805640ec9dd0 (patch)
tree047e4818ced5aaf73f58517629e5260b5291f9f0 /contrib/libs/curl/lib/http_chunks.h
parent2d9656823e9521d8c29ea4c9a1d0eab78391abfc (diff)
parent3d834a1923bbf9403cd4a448e7f32b670aa4124f (diff)
downloadydb-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.h77
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 */