Annotation of embedaddon/curl/lib/http_chunks.h, revision 1.1.1.1

1.1       misho       1: #ifndef HEADER_CURL_HTTP_CHUNKS_H
                      2: #define HEADER_CURL_HTTP_CHUNKS_H
                      3: /***************************************************************************
                      4:  *                                  _   _ ____  _
                      5:  *  Project                     ___| | | |  _ \| |
                      6:  *                             / __| | | | |_) | |
                      7:  *                            | (__| |_| |  _ <| |___
                      8:  *                             \___|\___/|_| \_\_____|
                      9:  *
                     10:  * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
                     11:  *
                     12:  * This software is licensed as described in the file COPYING, which
                     13:  * you should have received as part of this distribution. The terms
                     14:  * are also available at https://curl.haxx.se/docs/copyright.html.
                     15:  *
                     16:  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
                     17:  * copies of the Software, and permit persons to whom the Software is
                     18:  * furnished to do so, under the terms of the COPYING file.
                     19:  *
                     20:  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
                     21:  * KIND, either express or implied.
                     22:  *
                     23:  ***************************************************************************/
                     24: 
                     25: struct connectdata;
                     26: 
                     27: /*
                     28:  * The longest possible hexadecimal number we support in a chunked transfer.
                     29:  * Weird enough, RFC2616 doesn't set a maximum size! Since we use strtoul()
                     30:  * to convert it, we "only" support 2^32 bytes chunk data.
                     31:  */
                     32: #define MAXNUM_SIZE 16
                     33: 
                     34: typedef enum {
                     35:   /* await and buffer all hexadecimal digits until we get one that isn't a
                     36:      hexadecimal digit. When done, we go CHUNK_LF */
                     37:   CHUNK_HEX,
                     38: 
                     39:   /* wait for LF, ignore all else */
                     40:   CHUNK_LF,
                     41: 
                     42:   /* We eat the amount of data specified. When done, we move on to the
                     43:      POST_CR state. */
                     44:   CHUNK_DATA,
                     45: 
                     46:   /* POSTLF should get a CR and then a LF and nothing else, then move back to
                     47:      HEX as the CRLF combination marks the end of a chunk. A missing CR is no
                     48:      big deal. */
                     49:   CHUNK_POSTLF,
                     50: 
                     51:   /* Used to mark that we're out of the game.  NOTE: that there's a 'dataleft'
                     52:      field in the struct that will tell how many bytes that were not passed to
                     53:      the client in the end of the last buffer! */
                     54:   CHUNK_STOP,
                     55: 
                     56:   /* At this point optional trailer headers can be found, unless the next line
                     57:      is CRLF */
                     58:   CHUNK_TRAILER,
                     59: 
                     60:   /* A trailer CR has been found - next state is CHUNK_TRAILER_POSTCR.
                     61:      Next char must be a LF */
                     62:   CHUNK_TRAILER_CR,
                     63: 
                     64:   /* A trailer LF must be found now, otherwise CHUNKE_BAD_CHUNK will be
                     65:      signalled If this is an empty trailer CHUNKE_STOP will be signalled.
                     66:      Otherwise the trailer will be broadcasted via Curl_client_write() and the
                     67:      next state will be CHUNK_TRAILER */
                     68:   CHUNK_TRAILER_POSTCR
                     69: } ChunkyState;
                     70: 
                     71: typedef enum {
                     72:   CHUNKE_STOP = -1,
                     73:   CHUNKE_OK = 0,
                     74:   CHUNKE_TOO_LONG_HEX = 1,
                     75:   CHUNKE_ILLEGAL_HEX,
                     76:   CHUNKE_BAD_CHUNK,
                     77:   CHUNKE_BAD_ENCODING,
                     78:   CHUNKE_OUT_OF_MEMORY,
                     79:   CHUNKE_PASSTHRU_ERROR, /* Curl_httpchunk_read() returns a CURLcode to use */
                     80:   CHUNKE_LAST
                     81: } CHUNKcode;
                     82: 
                     83: const char *Curl_chunked_strerror(CHUNKcode code);
                     84: 
                     85: struct Curl_chunker {
                     86:   char hexbuffer[ MAXNUM_SIZE + 1];
                     87:   int hexindex;
                     88:   ChunkyState state;
                     89:   curl_off_t datasize;
                     90:   size_t dataleft; /* untouched data amount at the end of the last buffer */
                     91: };
                     92: 
                     93: /* The following functions are defined in http_chunks.c */
                     94: void Curl_httpchunk_init(struct connectdata *conn);
                     95: CHUNKcode Curl_httpchunk_read(struct connectdata *conn, char *datap,
                     96:                               ssize_t length, ssize_t *wrote,
                     97:                               CURLcode *passthru);
                     98: 
                     99: #endif /* HEADER_CURL_HTTP_CHUNKS_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>