diff --git a/include/proto/http_htx.h b/include/proto/http_htx.h index 4b980e2cf..617417ad5 100644 --- a/include/proto/http_htx.h +++ b/include/proto/http_htx.h @@ -32,6 +32,7 @@ extern struct buffer http_err_chunks[HTTP_ERR_SIZE]; extern struct list http_errors_list; struct htx_sl *http_get_stline(struct htx *htx); +size_t http_get_hdrs_size(struct htx *htx); int http_find_header(const struct htx *htx, const struct ist name, struct http_hdr_ctx *ctx, int full); int http_add_header(struct htx *htx, const struct ist n, const struct ist v); int http_replace_stline(struct htx *htx, const struct ist p1, const struct ist p2, const struct ist p3); diff --git a/src/http_htx.c b/src/http_htx.c index 587b9a548..f2f0a0c18 100644 --- a/src/http_htx.c +++ b/src/http_htx.c @@ -72,6 +72,24 @@ struct htx_sl *http_get_stline(struct htx *htx) return htx_get_blk_ptr(htx, blk); } +/* Returns the headers size in the HTX message */ +size_t http_get_hdrs_size(struct htx *htx) +{ + struct htx_blk *blk; + size_t sz = 0; + + blk = htx_get_first_blk(htx); + if (!blk || htx_get_blk_type(blk) > HTX_BLK_EOH) + return sz; + + for (; blk; blk = htx_get_next_blk(htx, blk)) { + sz += htx_get_blksz(blk); + if (htx_get_blk_type(blk) == HTX_BLK_EOH) + break; + } + return sz; +} + /* Finds the first or next occurrence of header in the HTX message * using the context . This structure holds everything necessary to use the * header and find next occurrence. If its member is NULL, the header is