LCOV - code coverage report
Current view: top level - http_proto/impl - header_limits.ipp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 5 5 100.0 %
Date: 2023-12-22 17:54:30 Functions: 1 1 100.0 %

          Line data    Source code
       1             : //
       2             : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com)
       3             : //
       4             : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       5             : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6             : //
       7             : // Official repository: https://github.com/CPPAlliance/http_proto
       8             : //
       9             : 
      10             : #ifndef BOOST_HTTP_PROTO_IMPL_HEADER_LIMITS_IPP
      11             : #define BOOST_HTTP_PROTO_IMPL_HEADER_LIMITS_IPP
      12             : 
      13             : #include <boost/http_proto/header_limits.hpp>
      14             : #include <boost/http_proto/detail/except.hpp>
      15             : #include <boost/http_proto/detail/header.hpp>
      16             : 
      17             : namespace boost {
      18             : namespace http_proto {
      19             : 
      20             : std::size_t
      21          31 : header_limits::
      22             : valid_space_needed() const
      23             : {
      24             : /*
      25             :     // "HTTP/1.1 200 OK\r\n\r\n" = 19
      26             :     // "X / HTTP/1.1\r\n"        = 14
      27             :     // "HTTP/1.1 200\r\n"        = 14
      28             :     // "X:\r\n"                  =  4
      29             : 
      30             :     // make sure `size` is big enough
      31             :     // to hold the largest default buffer:
      32             :     //if( max_size < 19)
      33             :         //max_size = 19;
      34             : 
      35             :     // max_size too small
      36             :     if( max_size < 19)
      37             :         detail::throw_invalid_argument();
      38             : 
      39             :     // max_size too large
      40             :     if( max_size >
      41             :         BOOST_HTTP_PROTO_MAX_HEADER)
      42             :         detail::throw_invalid_argument();
      43             : 
      44             :     // max_start_line too small
      45             :     if( max_start_line < 14)
      46             :         detail::throw_invalid_argument();
      47             : 
      48             :     // max_start_line too large
      49             :     if( max_start_line >
      50             :         max_size - 2)
      51             :         detail::throw_invalid_argument();
      52             : 
      53             :     // max_field too small
      54             :     if( max_field < 4)
      55             :         detail::throw_invalid_argument();
      56             : 
      57             :     // max_field too large
      58             :     if( max_field >
      59             :         max_size)
      60             :         detail::throw_invalid_argument();
      61             : 
      62             :     // max_fields too large
      63             :     if( max_fields >
      64             :         max_size / 4)
      65             :         detail::throw_invalid_argument();
      66             : */
      67             :     static constexpr auto Align =
      68             :         alignof(detail::header::entry);
      69             :     // round up to alignof(A)
      70          31 :     return Align * (
      71          31 :         (max_size + Align - 1) / Align) + (
      72          31 :             max_fields * sizeof(
      73          31 :                 detail::header::entry));
      74             : }
      75             : 
      76             : } // http_proto
      77             : } // boost
      78             : 
      79             : #endif

Generated by: LCOV version 1.15