From 16f958c0e928a10a789a480c9495304d7f4ddbff Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Wed, 3 Jun 2020 08:44:35 +0200 Subject: [PATCH] REORG: include: split common/htx.h into haproxy/htx{,-t}.h Most of the file was a large set of HTX elements manipulation functions and few types, so splitting them allowed to further reduce dependencies and shrink the build time. Doing so revealed that a few files (h2.c, mux_pt.c) needed haproxy/buf.h and were previously getting it through htx.h. They were fixed. --- .../prometheus-exporter/service-prometheus.c | 2 +- include/common/h2.h | 2 +- include/haproxy/htx-t.h | 229 ++++++++++++++++++ include/{common => haproxy}/htx.h | 207 +--------------- include/proto/channel.h | 2 +- include/proto/fcgi-app.h | 2 +- include/proto/http_ana.h | 2 +- include/proto/http_fetch.h | 2 +- include/types/http_htx.h | 2 +- src/backend.c | 2 +- src/cache.c | 2 +- src/checks.c | 2 +- src/filters.c | 2 +- src/flt_http_comp.c | 2 +- src/flt_trace.c | 2 +- src/h1_htx.c | 2 +- src/h2.c | 1 + src/http_ana.c | 2 +- src/http_fetch.c | 2 +- src/http_htx.c | 2 +- src/htx.c | 2 +- src/mux_fcgi.c | 2 +- src/mux_h1.c | 2 +- src/mux_h2.c | 2 +- src/mux_pt.c | 1 + src/payload.c | 2 +- src/sample.c | 1 + src/stats.c | 2 +- src/stream.c | 2 +- 29 files changed, 262 insertions(+), 225 deletions(-) create mode 100644 include/haproxy/htx-t.h rename include/{common => haproxy}/htx.h (71%) diff --git a/contrib/prometheus-exporter/service-prometheus.c b/contrib/prometheus-exporter/service-prometheus.c index a07727e2e..916e5c706 100644 --- a/contrib/prometheus-exporter/service-prometheus.c +++ b/contrib/prometheus-exporter/service-prometheus.c @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include #include diff --git a/include/common/h2.h b/include/common/h2.h index 42c3c5a01..751989d7f 100644 --- a/include/common/h2.h +++ b/include/common/h2.h @@ -31,7 +31,7 @@ #include #include -#include +#include #include diff --git a/include/haproxy/htx-t.h b/include/haproxy/htx-t.h new file mode 100644 index 000000000..49797d2ff --- /dev/null +++ b/include/haproxy/htx-t.h @@ -0,0 +1,229 @@ +/* + * include/haproxy/htx-t.h + * This file declares the types and constants used the internal HTTP messages + * + * Copyright (C) 2018 HAProxy Technologies, Christopher Faulet + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, version 2.1 + * exclusively. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef _HAPROXY_HTX_T_H +#define _HAPROXY_HTX_T_H + +#include +#include + +/* + * The internal representation of an HTTP message, called HTX, is a structure + * with useful information on the message followed by a contiguous array + * containing parts of the message, called blocks. A block is composed of + * metadata (htx_blk) and the associated payload. Blocks' metadata are stored + * starting from the end of the array while their payload are stored at the + * beginning. Blocks' metadata are often simply called blocks. it is a misuse of + * language that's simplify explanations. + * + * + * +-----+---------------+------------------------------+--------------+ + * | HTX | PAYLOADS ==> | | <== HTX_BLKs | + * +-----+---------------+------------------------------+--------------+ + * ^ + * blocks[] (the beginning of the bocks array) + * + * + * The blocks part remains linear and sorted. You may think about it as an array + * with negative indexes. But, instead of using negative indexes, we use + * positive positions to identify a block. This position is then converted to a + * address relatively to the beginning of the blocks array. + * + * + * .....--+------------------------------+-----+-----+ + * | ... | BLK | BLK | + * .....--+------------------------------+-----+-----+ + * ^ ^ + * Addr of the block Addr of the block + * at the position 1 at the position 0 + * + * + * The payloads part is a raw space that may wrap. You never access to a block's + * payload directly. Instead you get a block to retrieve the address of its + * payload. When no more space left between blocks and payloads parts, the free + * space at the beginning, if any, is used. + * + * + * +----------- WRAPPING ------------------------+ + * | | + * V | + * +-----+-------------+---------------+---------------++--------------+ + * | HTX | PAYLOAD ==> | | PAYLOADS ==X || X== HTX_BLKs | + * +-----+-------------+---------------+---------------++--------------+ + * + * + * The blocks part, on its side, never wrap. If we have no space to allocate a + * new block and if there is a hole at the beginning of the blocks part (so at + * the end of the blocks array), we move back all blocks.x + * + * + * ...+--------------+----------+ blocks ...+----------+--------------+ + * | X== HTX_BLKS | | defrag | | <== HTX_BLKS | + * ...+--------------+----------+ =====> ...+----------+--------------+ + * + * + * At the end, if payload wrapping or blocks defragmenation is not enough, some + * free space may be get back with a full defragmenation. This way, the holes in + * the middle are not reusable but count in the available free space. The only + * way to reuse this lost space is to fully defragmenate the HTX message. + * + * - * - + * + * An HTX block is as well a header as a body part or a trailer. For all these + * types of block, a payload is attached to the block. It can also be a mark, + * like the end-of-headers or end-of-message. For these blocks, there is no + * payload but it count for a byte. It is important to not skip it when data are + * forwarded. Metadata of an HTX block are composed of 2 fields : + * + * - .info : It a 32 bits field containing the block's type on 4 bits + * followed by the payload length. See below for details. + * + * - .addr : The payload's address, if any, relatively to the beginning the + * array used to store the HTX message itself. + * + * htx_blk.info representation : + * + * 0b 0000 0000 0000 0000 0000 0000 0000 0000 + * ---- ------------------------ --------- + * type value (1 MB max) name length (header/trailer) + * ---------------------------------- + * data length (256 MB max) + * (body, method, path, version, status, reason) + * + * types : + * - 0000 = request start-line + * - 0001 = response start-line + * - 0010 = header + * - 0011 = pseudo-header ou "special" header + * - 0100 = end-of-headers + * - 0101 = data + * - 0110 = trailer + * - 0111 = end-of-trailers + * - 1000 = end-of-message + * ... + * - 1111 = unused + * + */ + +/* HTX start-line flags */ +#define HTX_SL_F_NONE 0x00000000 +#define HTX_SL_F_IS_RESP 0x00000001 /* It is the response start-line (unset means the request one) */ +#define HTX_SL_F_XFER_LEN 0x00000002 /* The message xfer size can be dertermined */ +#define HTX_SL_F_XFER_ENC 0x00000004 /* The transfer-encoding header was found in message */ +#define HTX_SL_F_CLEN 0x00000008 /* The content-length header was found in message */ +#define HTX_SL_F_CHNK 0x00000010 /* The message payload is chunked */ +#define HTX_SL_F_VER_11 0x00000020 /* The message indicates version 1.1 or above */ +#define HTX_SL_F_BODYLESS 0x00000040 /* The message has no body (content-length = 0) */ +#define HTX_SL_F_HAS_SCHM 0x00000080 /* The scheme is explicitly specified */ +#define HTX_SL_F_SCHM_HTTP 0x00000100 /* The scheme HTTP should be used */ +#define HTX_SL_F_SCHM_HTTPS 0x00000200 /* The scheme HTTPS should be used */ +#define HTX_SL_F_HAS_AUTHORITY 0x00000400 /* The request authority is explicitly specified */ +#define HTX_SL_F_NORMALIZED_URI 0x00000800 /* The received URI is normalized (an implicit absolute-uri form) */ + + +/* HTX flags */ +#define HTX_FL_NONE 0x00000000 +#define HTX_FL_PARSING_ERROR 0x00000001 /* Set when a parsing error occurred */ +#define HTX_FL_PROCESSING_ERROR 0x00000002 /* Set when a processing error occurred */ +#define HTX_FL_UPGRADE 0x00000004 /* Set when an upgrade is in progress */ +#define HTX_FL_PROXY_RESP 0x00000008 /* Set when the response was generated by HAProxy */ + + +/* HTX block's type (max 15). */ +enum htx_blk_type { + HTX_BLK_REQ_SL = 0, /* Request start-line */ + HTX_BLK_RES_SL = 1, /* Response start-line */ + HTX_BLK_HDR = 2, /* header name/value block */ + HTX_BLK_EOH = 3, /* end-of-headers block */ + HTX_BLK_DATA = 4, /* data block */ + HTX_BLK_TLR = 5, /* trailer name/value block */ + HTX_BLK_EOT = 6, /* end-of-trailers block */ + HTX_BLK_EOM = 7, /* end-of-message block */ + /* 8 .. 14 unused */ + HTX_BLK_UNUSED = 15, /* unused/removed block */ +}; + +/* One HTX block descriptor */ +struct htx_blk { + uint32_t addr; /* relative storage address of the block's payload */ + uint32_t info; /* information about the block (type, length) */ +}; + +/* Composite return value used by some HTX functions */ +struct htx_ret { + int32_t ret; /* A numerical value */ + struct htx_blk *blk; /* An HTX block */ +}; + +/* HTX start-line */ +struct htx_sl { + unsigned int flags; /* HTX_SL_F_* */ + union { + struct { + enum http_meth_t meth; /* method */ + } req; + struct { + uint16_t status; /* status code */ + } res; + } info; + + /* XXX 2 bytes unused */ + + int32_t hdrs_bytes; /* Bytes held by all headers, as seen by the mux + * during parsing, from this start-line to the + * corresponding EOH. -1 if unknown */ + + unsigned int len[3]; /* length of different parts of the start-line */ + char l[0]; +}; + +/* Internal representation of an HTTP message */ +struct htx { + uint32_t size; /* the array size, in bytes, used to store the HTTP message itself */ + uint32_t data; /* the data size, in bytes. To known to total size used by all allocated + * blocks (blocks and their contents), you need to add size used by blocks, + * i.e. [ used * sizeof(struct htx_blk *) ] */ + + int32_t tail; /* newest inserted block. -1 if the HTX message is empty */ + int32_t head; /* oldest inserted block. -1 if the HTX message is empty */ + int32_t first; /* position of the first block to (re)start the analyse. -1 if unset. */ + + uint32_t tail_addr; /* start address of the free space in front of the the blocks table */ + uint32_t head_addr; /* start address of the free space at the beginning */ + uint32_t end_addr; /* end address of the free space at the beginning */ + + uint64_t extra; /* known bytes amount remaining to receive */ + uint32_t flags; /* HTX_FL_* */ + + /* XXX 4 bytes unused */ + + /* Blocks representing the HTTP message itself */ + char blocks[0] __attribute__((aligned(8))); +}; + +#endif /* _HAPROXY_HTX_T_H */ + +/* + * Local variables: + * c-indent-level: 8 + * c-basic-offset: 8 + * End: + */ diff --git a/include/common/htx.h b/include/haproxy/htx.h similarity index 71% rename from include/common/htx.h rename to include/haproxy/htx.h index 1b111a40e..c0b566663 100644 --- a/include/common/htx.h +++ b/include/haproxy/htx.h @@ -1,5 +1,5 @@ /* - * include/common/htx.h + * include/haproxy/htx.h * This file defines everything related to the internal HTTP messages. * * Copyright (C) 2018 HAProxy Technologies, Christopher Faulet @@ -19,211 +19,16 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef _COMMON_HTX_H -#define _COMMON_HTX_H +#ifndef _HAPROXY_HTX_H +#define _HAPROXY_HTX_H -#include +#include #include #include -#include #include #include #include - -/* - * The internal representation of an HTTP message, called HTX, is a structure - * with useful information on the message followed by a contiguous array - * containing parts of the message, called blocks. A block is composed of - * metadata (htx_blk) and the associated payload. Blocks' metadata are stored - * starting from the end of the array while their payload are stored at the - * beginning. Blocks' metadata are often simply called blocks. it is a misuse of - * language that's simplify explanations. - * - * - * +-----+---------------+------------------------------+--------------+ - * | HTX | PAYLOADS ==> | | <== HTX_BLKs | - * +-----+---------------+------------------------------+--------------+ - * ^ - * blocks[] (the beginning of the bocks array) - * - * - * The blocks part remains linear and sorted. You may think about it as an array - * with negative indexes. But, instead of using negative indexes, we use - * positive positions to identify a block. This position is then converted to a - * address relatively to the beginning of the blocks array. - * - * - * .....--+------------------------------+-----+-----+ - * | ... | BLK | BLK | - * .....--+------------------------------+-----+-----+ - * ^ ^ - * Addr of the block Addr of the block - * at the position 1 at the position 0 - * - * - * The payloads part is a raw space that may wrap. You never access to a block's - * payload directly. Instead you get a block to retrieve the address of its - * payload. When no more space left between blocks and payloads parts, the free - * space at the beginning, if any, is used. - * - * - * +----------- WRAPPING ------------------------+ - * | | - * V | - * +-----+-------------+---------------+---------------++--------------+ - * | HTX | PAYLOAD ==> | | PAYLOADS ==X || X== HTX_BLKs | - * +-----+-------------+---------------+---------------++--------------+ - * - * - * The blocks part, on its side, never wrap. If we have no space to allocate a - * new block and if there is a hole at the beginning of the blocks part (so at - * the end of the blocks array), we move back all blocks.x - * - * - * ...+--------------+----------+ blocks ...+----------+--------------+ - * | X== HTX_BLKS | | defrag | | <== HTX_BLKS | - * ...+--------------+----------+ =====> ...+----------+--------------+ - * - * - * At the end, if payload wrapping or blocks defragmenation is not enough, some - * free space may be get back with a full defragmenation. This way, the holes in - * the middle are not reusable but count in the available free space. The only - * way to reuse this lost space is to fully defragmenate the HTX message. - * - * - * - - * - * An HTX block is as well a header as a body part or a trailer. For all these - * types of block, a payload is attached to the block. It can also be a mark, - * like the end-of-headers or end-of-message. For these blocks, there is no - * payload but it count for a byte. It is important to not skip it when data are - * forwarded. Metadata of an HTX block are composed of 2 fields : - * - * - .info : It a 32 bits field containing the block's type on 4 bits - * followed by the payload length. See below for details. - * - * - .addr : The payload's address, if any, relatively to the beginning the - * array used to store the HTX message itself. - * - * htx_blk.info representation : - * - * 0b 0000 0000 0000 0000 0000 0000 0000 0000 - * ---- ------------------------ --------- - * type value (1 MB max) name length (header/trailer) - * ---------------------------------- - * data length (256 MB max) - * (body, method, path, version, status, reason) - * - * types : - * - 0000 = request start-line - * - 0001 = response start-line - * - 0010 = header - * - 0011 = pseudo-header ou "special" header - * - 0100 = end-of-headers - * - 0101 = data - * - 0110 = trailer - * - 0111 = end-of-trailers - * - 1000 = end-of-message - * ... - * - 1111 = unused - * - */ - -/* HTX start-line flags */ -#define HTX_SL_F_NONE 0x00000000 -#define HTX_SL_F_IS_RESP 0x00000001 /* It is the response start-line (unset means the request one) */ -#define HTX_SL_F_XFER_LEN 0x00000002 /* The message xfer size can be dertermined */ -#define HTX_SL_F_XFER_ENC 0x00000004 /* The transfer-encoding header was found in message */ -#define HTX_SL_F_CLEN 0x00000008 /* The content-length header was found in message */ -#define HTX_SL_F_CHNK 0x00000010 /* The message payload is chunked */ -#define HTX_SL_F_VER_11 0x00000020 /* The message indicates version 1.1 or above */ -#define HTX_SL_F_BODYLESS 0x00000040 /* The message has no body (content-length = 0) */ -#define HTX_SL_F_HAS_SCHM 0x00000080 /* The scheme is explicitly specified */ -#define HTX_SL_F_SCHM_HTTP 0x00000100 /* The scheme HTTP should be used */ -#define HTX_SL_F_SCHM_HTTPS 0x00000200 /* The scheme HTTPS should be used */ -#define HTX_SL_F_HAS_AUTHORITY 0x00000400 /* The request authority is explicitly specified */ -#define HTX_SL_F_NORMALIZED_URI 0x00000800 /* The received URI is normalized (an implicit absolute-uri form) */ - - -/* HTX flags */ -#define HTX_FL_NONE 0x00000000 -#define HTX_FL_PARSING_ERROR 0x00000001 /* Set when a parsing error occurred */ -#define HTX_FL_PROCESSING_ERROR 0x00000002 /* Set when a processing error occurred */ -#define HTX_FL_UPGRADE 0x00000004 /* Set when an upgrade is in progress */ -#define HTX_FL_PROXY_RESP 0x00000008 /* Set when the response was generated by HAProxy */ - - -/* HTX block's type (max 15). */ -enum htx_blk_type { - HTX_BLK_REQ_SL = 0, /* Request start-line */ - HTX_BLK_RES_SL = 1, /* Response start-line */ - HTX_BLK_HDR = 2, /* header name/value block */ - HTX_BLK_EOH = 3, /* end-of-headers block */ - HTX_BLK_DATA = 4, /* data block */ - HTX_BLK_TLR = 5, /* trailer name/value block */ - HTX_BLK_EOT = 6, /* end-of-trailers block */ - HTX_BLK_EOM = 7, /* end-of-message block */ - /* 8 .. 14 unused */ - HTX_BLK_UNUSED = 15, /* unused/removed block */ -}; - -/* One HTX block descriptor */ -struct htx_blk { - uint32_t addr; /* relative storage address of the block's payload */ - uint32_t info; /* information about the block (type, length) */ -}; - -/* Composite return value used by some HTX functions */ -struct htx_ret { - int32_t ret; /* A numerical value */ - struct htx_blk *blk; /* An HTX block */ -}; - -/* HTX start-line */ -struct htx_sl { - unsigned int flags; /* HTX_SL_F_* */ - union { - struct { - enum http_meth_t meth; /* method */ - } req; - struct { - uint16_t status; /* status code */ - } res; - } info; - - /* XXX 2 bytes unused */ - - int32_t hdrs_bytes; /* Bytes held by all headers, as seen by the mux - * during parsing, from this start-line to the - * corresponding EOH. -1 if unknown */ - - unsigned int len[3]; /* length of different parts of the start-line */ - char l[0]; -}; - -/* Internal representation of an HTTP message */ -struct htx { - uint32_t size; /* the array size, in bytes, used to store the HTTP message itself */ - uint32_t data; /* the data size, in bytes. To known to total size used by all allocated - * blocks (blocks and their contents), you need to add size used by blocks, - * i.e. [ used * sizeof(struct htx_blk *) ] */ - - int32_t tail; /* newest inserted block. -1 if the HTX message is empty */ - int32_t head; /* oldest inserted block. -1 if the HTX message is empty */ - int32_t first; /* position of the first block to (re)start the analyse. -1 if unset. */ - - uint32_t tail_addr; /* start address of the free space in front of the the blocks table */ - uint32_t head_addr; /* start address of the free space at the beginning */ - uint32_t end_addr; /* end address of the free space at the beginning */ - - uint64_t extra; /* known bytes amount remaining to receive */ - uint32_t flags; /* HTX_FL_* */ - - /* XXX 4 bytes unused */ - - /* Blocks representing the HTTP message itself */ - char blocks[0] __attribute__((aligned(8))); -}; - +#include extern struct htx htx_empty; @@ -866,7 +671,7 @@ static inline void htx_dump(struct buffer *chunk, const struct htx *htx, int ful } } -#endif /* _COMMON_HTX_H */ +#endif /* _HAPROXY_HTX_H */ /* * Local variables: diff --git a/include/proto/channel.h b/include/proto/channel.h index 8e19562d0..d391a4ae0 100644 --- a/include/proto/channel.h +++ b/include/proto/channel.h @@ -30,7 +30,7 @@ #include #include #include -#include +#include #include #include diff --git a/include/proto/fcgi-app.h b/include/proto/fcgi-app.h index aad0d616b..424d018a4 100644 --- a/include/proto/fcgi-app.h +++ b/include/proto/fcgi-app.h @@ -22,7 +22,7 @@ #ifndef _PROTO_HTTP_FCGI_H #define _PROTO_HTTP_FCGI_H -#include +#include #include #include diff --git a/include/proto/http_ana.h b/include/proto/http_ana.h index cdfa87e1e..00a38121b 100644 --- a/include/proto/http_ana.h +++ b/include/proto/http_ana.h @@ -23,7 +23,7 @@ #define _PROTO_PROTO_HTTP_H #include -#include +#include #include #include #include diff --git a/include/proto/http_fetch.h b/include/proto/http_fetch.h index 22c793fb0..8df991c20 100644 --- a/include/proto/http_fetch.h +++ b/include/proto/http_fetch.h @@ -23,7 +23,7 @@ #define _PROTO_HTTP_FETCH_H #include -#include +#include #include #include #include diff --git a/include/types/http_htx.h b/include/types/http_htx.h index 2f6b10b52..b3af77e3c 100644 --- a/include/types/http_htx.h +++ b/include/types/http_htx.h @@ -27,7 +27,7 @@ #include #include -#include +#include #include /* Context used to find/remove an HTTP header. */ diff --git a/src/backend.c b/src/backend.c index 6d8596735..e5ceda9eb 100644 --- a/src/backend.c +++ b/src/backend.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/cache.c b/src/cache.c index 51e0d866d..754cb4427 100644 --- a/src/cache.c +++ b/src/cache.c @@ -35,7 +35,7 @@ #include #include -#include +#include #include #define CACHE_FLT_F_IMPLICIT_DECL 0x00000001 /* The cache filtre was implicitly declared (ie without diff --git a/src/checks.c b/src/checks.c index 6f409e3aa..2b7aa8c79 100644 --- a/src/checks.c +++ b/src/checks.c @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/filters.c b/src/filters.c index 50d1c8a4c..5cfac4039 100644 --- a/src/filters.c +++ b/src/filters.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/flt_http_comp.c b/src/flt_http_comp.c index 5f0853a6d..ac4a3bf2e 100644 --- a/src/flt_http_comp.c +++ b/src/flt_http_comp.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/flt_trace.c b/src/flt_trace.c index 69862aec7..94aef8cb3 100644 --- a/src/flt_trace.c +++ b/src/flt_trace.c @@ -13,7 +13,7 @@ #include #include -#include +#include #include #include diff --git a/src/h1_htx.c b/src/h1_htx.c index 69472a612..1f0dddbd8 100644 --- a/src/h1_htx.c +++ b/src/h1_htx.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include diff --git a/src/h2.c b/src/h2.c index c59c3f2a5..14eeabc2e 100644 --- a/src/h2.c +++ b/src/h2.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include diff --git a/src/http_ana.c b/src/http_ana.c index d89bcf54b..3065e3837 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/http_fetch.c b/src/http_fetch.c index 3f30797f5..221ac9417 100644 --- a/src/http_fetch.c +++ b/src/http_fetch.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/http_htx.c b/src/http_htx.c index d410f03a9..f345b4b14 100644 --- a/src/http_htx.c +++ b/src/http_htx.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/htx.c b/src/htx.c index d1679a280..4d9ef6845 100644 --- a/src/htx.c +++ b/src/htx.c @@ -11,7 +11,7 @@ */ #include -#include +#include struct htx htx_empty = { .size = 0, .data = 0, .head = -1, .tail = -1, .first = -1 }; diff --git a/src/mux_fcgi.c b/src/mux_fcgi.c index f58609ec6..aa6c018df 100644 --- a/src/mux_fcgi.c +++ b/src/mux_fcgi.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/mux_h1.c b/src/mux_h1.c index 09bf87142..4afaa29c5 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include diff --git a/src/mux_h2.c b/src/mux_h2.c index d672f997b..8c72f8165 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/mux_pt.c b/src/mux_pt.c index 1543f46d8..43b0da4aa 100644 --- a/src/mux_pt.c +++ b/src/mux_pt.c @@ -11,6 +11,7 @@ */ #include +#include #include #include #include diff --git a/src/payload.c b/src/payload.c index ca9c9d715..7d7cb3656 100644 --- a/src/payload.c +++ b/src/payload.c @@ -15,7 +15,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/sample.c b/src/sample.c index 380dd6fb0..e1e4d9cca 100644 --- a/src/sample.c +++ b/src/sample.c @@ -19,6 +19,7 @@ #include #include +#include #include #include #include diff --git a/src/stats.c b/src/stats.c index 4820d3b8b..d7d581d4e 100644 --- a/src/stats.c +++ b/src/stats.c @@ -28,7 +28,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/stream.c b/src/stream.c index 4af498602..27030eaef 100644 --- a/src/stream.c +++ b/src/stream.c @@ -19,7 +19,7 @@ #include #include #include -#include +#include #include #include