LCOV - code coverage report
Current view: top level - boost/http_proto/metadata.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 39 39
Test Date: 2025-09-21 18:08:14 Functions: 100.0 % 13 13

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com)
       3              : // Copyright (c) 2024 Mohammad Nejati
       4              : //
       5              : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       6              : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       7              : //
       8              : // Official repository: https://github.com/cppalliance/http_proto
       9              : //
      10              : 
      11              : #ifndef BOOST_HTTP_PROTO_METADATA_HPP
      12              : #define BOOST_HTTP_PROTO_METADATA_HPP
      13              : 
      14              : #include <boost/http_proto/detail/config.hpp>
      15              : #include <boost/system/error_code.hpp>
      16              : #include <cstdint>
      17              : #include <cstdlib>
      18              : 
      19              : namespace boost {
      20              : namespace http_proto {
      21              : 
      22              : /** Identifies the payload type of a message.
      23              : */
      24              : enum class payload
      25              : {
      26              :     /** This message has no payload.
      27              :     */
      28              :     none,
      29              : 
      30              :     /** The payload is unknown due to errors.
      31              :     */
      32              :     error,
      33              : 
      34              :     /** This message has a known payload size.
      35              :     */
      36              :     size,
      37              : 
      38              :     /** This message contains a chunked payload.
      39              :     */
      40              :     chunked,
      41              : 
      42              :     /** The payload for this message continues until EOF.
      43              :     */
      44              :     to_eof
      45              : };
      46              : 
      47              : /** Standard content-codings for HTTP message bodies.
      48              : */
      49              : enum class content_coding
      50              : {
      51              :     unknown,
      52              :     br,
      53              :     compress,
      54              :     dcb,
      55              :     dcz,
      56              :     deflate,
      57              :     gzip,
      58              :     identity,
      59              :     zstd,
      60              : };
      61              : 
      62              : /** Metadata about a request or response.
      63              : */
      64              : struct metadata
      65              : {
      66              :     /** Metadata for the Connection field.
      67              :     */
      68              :     struct connection_t
      69              :     {
      70              :         /** Error status of Connection.
      71              :         */
      72              :         system::error_code ec;
      73              : 
      74              :         /** The total number of fields.
      75              :         */
      76              :         std::size_t count = 0;
      77              : 
      78              :         /** true if a close token is present.
      79              :         */
      80              :         bool close = false;
      81              : 
      82              :         /** true if a keep-alive token is present.
      83              :         */
      84              :         bool keep_alive = false;
      85              : 
      86              :         /** true if an upgrade token is present.
      87              :         */
      88              :         bool upgrade = false;
      89              : 
      90              :     #ifdef BOOST_HTTP_PROTO_AGGREGATE_WORKAROUND
      91              :         constexpr
      92        11974 :         connection_t() = default;
      93              : 
      94              :         constexpr
      95           15 :         connection_t(
      96              :             system::error_code ec_,
      97              :             std::size_t count_,
      98              :             bool close_,
      99              :             bool keep_alive_,
     100              :             bool upgrade_) noexcept
     101           15 :             : ec(ec_)
     102           15 :             , count(count_)
     103           15 :             , close(close_)
     104           15 :             , keep_alive(keep_alive_)
     105           15 :             , upgrade(upgrade_)
     106              :         {
     107           15 :         }
     108              :     #endif
     109              :     };
     110              : 
     111              :     //--------------------------------------------
     112              : 
     113              :     /** Metadata for the Content-Encoding field.
     114              :     */
     115              :     struct content_encoding_t
     116              :     {
     117              :         /** Error status of Content-Encoding.
     118              :         */
     119              :         system::error_code ec;
     120              : 
     121              :         /** The total number of fields.
     122              :         */
     123              :         std::size_t count = 0;
     124              : 
     125              :         /** The body encoding.
     126              :         */
     127              :         content_coding coding =
     128              :             content_coding::identity;
     129              : 
     130              :     #ifdef BOOST_HTTP_PROTO_AGGREGATE_WORKAROUND
     131              :         constexpr
     132        11962 :         content_encoding_t() = default;
     133              : 
     134              :         constexpr
     135            5 :         content_encoding_t(
     136              :             system::error_code ec_,
     137              :             std::size_t count_,
     138              :             content_coding coding_) noexcept
     139            5 :             : ec(ec_)
     140            5 :             , count(count_)
     141            5 :             , coding(coding_)
     142              :         {
     143            5 :         }
     144              :     #endif
     145              :     };
     146              : 
     147              :     //--------------------------------------------
     148              : 
     149              :     /** Metadata for the Content-Length field.
     150              :     */
     151              :     struct content_length_t
     152              :     {
     153              :         /** Error status of Content-Length.
     154              :         */
     155              :         system::error_code ec;
     156              : 
     157              :         /** The total number of fields.
     158              :         */
     159              :         std::size_t count = 0;
     160              : 
     161              :         /** The value as an integer.
     162              : 
     163              :             This is only valid when ec does
     164              :             not hold a failure, and when
     165              :             count is greater than zero.
     166              :         */
     167              :         std::uint64_t value = 0;
     168              : 
     169              :     #ifdef BOOST_HTTP_PROTO_AGGREGATE_WORKAROUND
     170              :         constexpr
     171        11966 :         content_length_t() = default;
     172              : 
     173              :         constexpr
     174           11 :         content_length_t(
     175              :             system::error_code ec_,
     176              :             std::size_t count_,
     177              :             std::uint64_t value_) noexcept
     178           11 :             : ec(ec_)
     179           11 :             , count(count_)
     180           11 :             , value(value_)
     181              :         {
     182           11 :         }
     183              :     #endif
     184              :     };
     185              : 
     186              :     //--------------------------------------------
     187              : 
     188              :     /** Metadata for the Expect field.
     189              :     */
     190              :     struct expect_t
     191              :     {
     192              :         /** Error status of Expect.
     193              :         */
     194              :         system::error_code ec;
     195              : 
     196              :         /** The total number of fields.
     197              :         */
     198              :         std::size_t count = 0;
     199              : 
     200              :         /** True if Expect is 100-continue.
     201              :         */
     202              :         bool is_100_continue = false;
     203              : 
     204              :     #ifdef BOOST_HTTP_PROTO_AGGREGATE_WORKAROUND
     205              :         constexpr
     206        11981 :         expect_t() = default;
     207              : 
     208              :         constexpr
     209           14 :         expect_t(
     210              :             system::error_code ec_,
     211              :             std::size_t count_,
     212              :             bool is_100_continue_) noexcept
     213           14 :             : ec(ec_)
     214           14 :             , count(count_)
     215           14 :             , is_100_continue(is_100_continue_)
     216              :         {
     217           14 :         }
     218              :     #endif
     219              :     };
     220              : 
     221              :     //--------------------------------------------
     222              : 
     223              :     /** Metadata for the Transfer-Encoding field.
     224              :     */
     225              :     struct transfer_encoding_t
     226              :     {
     227              :         /** Error status of Content-Length.
     228              :         */
     229              :         system::error_code ec;
     230              : 
     231              :         /** The total number of fields.
     232              :         */
     233              :         std::size_t count = 0;
     234              : 
     235              :         /** True if valid and chunked is specified last.
     236              :         */
     237              :         bool is_chunked = false;
     238              : 
     239              :     #ifdef BOOST_HTTP_PROTO_AGGREGATE_WORKAROUND
     240              :         constexpr
     241        11967 :         transfer_encoding_t() = default;
     242              : 
     243              :         constexpr
     244           19 :         transfer_encoding_t(
     245              :             system::error_code ec_,
     246              :             std::size_t count_,
     247              :             bool is_chunked_) noexcept
     248           19 :             : ec(ec_)
     249           19 :             , count(count_)
     250           19 :             , is_chunked(is_chunked_)
     251              :         {
     252           19 :         }
     253              :     #endif
     254              :     };
     255              : 
     256              :     //--------------------------------------------
     257              : 
     258              :     /** Metadata for Upgrade field.
     259              :     */
     260              :     struct upgrade_t
     261              :     {
     262              :         /** Error status of Upgrade.
     263              :         */
     264              :         system::error_code ec;
     265              : 
     266              :         /** The total number of fields.
     267              :         */
     268              :         std::size_t count = 0;
     269              : 
     270              :         /** True if websocket appears at least once.
     271              :         */
     272              :         bool websocket = false;
     273              : 
     274              :     #ifdef BOOST_HTTP_PROTO_AGGREGATE_WORKAROUND
     275              :         constexpr
     276        11967 :         upgrade_t() = default;
     277              : 
     278              :         constexpr
     279           15 :         upgrade_t(
     280              :             system::error_code ec_,
     281              :             std::size_t count_,
     282              :             bool websocket_) noexcept
     283           15 :             : ec(ec_)
     284           15 :             , count(count_)
     285           15 :             , websocket(websocket_)
     286              :         {
     287           15 :         }
     288              :     #endif
     289              :     };
     290              : 
     291              :     //--------------------------------------------
     292              : 
     293              :     /** True if payload is manually specified.
     294              : 
     295              :         This flag is used to allow the caller
     296              :         to resolve problems with non-compliant
     297              :         values for Content-Length.
     298              :     */
     299              :     bool payload_override = false;
     300              : 
     301              :     /** The type of payload.
     302              :     */
     303              :     http_proto::payload payload =
     304              :         http_proto::payload::none;
     305              : 
     306              :     /** The size of the payload if known.
     307              : 
     308              :         This is only valid when @ref payload
     309              :         equals @ref http_proto::payload::size.
     310              :     */
     311              :     std::uint64_t payload_size = 0;
     312              : 
     313              :     //--------------------------------------------
     314              : 
     315              :     // header metadata
     316              : 
     317              :     /** Metadata for the Connection field.
     318              :     */
     319              :     connection_t connection;
     320              : 
     321              :     /** Metadata for the Content-Encoding field.
     322              :     */
     323              :     content_encoding_t content_encoding;
     324              : 
     325              :     /** Metadata for the Content-Length field.
     326              :     */
     327              :     content_length_t content_length;
     328              : 
     329              :     /** Metadata for the Expect field.
     330              :     */
     331              :     expect_t expect;
     332              : 
     333              :     /** Metadata for the Transfer-Encoding field.
     334              :     */
     335              :     transfer_encoding_t transfer_encoding;
     336              : 
     337              :     /** Metadata for the Upgrade field.
     338              :     */
     339              :     upgrade_t upgrade;
     340              : 
     341              :     //--------------------------------------------
     342              : 
     343              :     /** Constructor.
     344              :     */
     345        11962 :     constexpr metadata() = default;
     346              : };
     347              : 
     348              : } // http_proto
     349              : } // boost
     350              : 
     351              : #endif
        

Generated by: LCOV version 2.1