LCOV - code coverage report
Current view: top level - libs/http_proto/src - header_limits.cpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 5 5 100.0 %
Date: 2024-03-04 19:17:05 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             : #include <boost/http_proto/header_limits.hpp>
      11             : #include <boost/http_proto/detail/except.hpp>
      12             : #include <boost/http_proto/detail/header.hpp>
      13             : 
      14             : namespace boost {
      15             : namespace http_proto {
      16             : 
      17             : std::size_t
      18          31 : header_limits::
      19             : valid_space_needed() const
      20             : {
      21             : /*
      22             :     // "HTTP/1.1 200 OK\r\n\r\n" = 19
      23             :     // "X / HTTP/1.1\r\n"        = 14
      24             :     // "HTTP/1.1 200\r\n"        = 14
      25             :     // "X:\r\n"                  =  4
      26             : 
      27             :     // make sure `size` is big enough
      28             :     // to hold the largest default buffer:
      29             :     //if( max_size < 19)
      30             :         //max_size = 19;
      31             : 
      32             :     // max_size too small
      33             :     if( max_size < 19)
      34             :         detail::throw_invalid_argument();
      35             : 
      36             :     // max_size too large
      37             :     if( max_size >
      38             :         BOOST_HTTP_PROTO_MAX_HEADER)
      39             :         detail::throw_invalid_argument();
      40             : 
      41             :     // max_start_line too small
      42             :     if( max_start_line < 14)
      43             :         detail::throw_invalid_argument();
      44             : 
      45             :     // max_start_line too large
      46             :     if( max_start_line >
      47             :         max_size - 2)
      48             :         detail::throw_invalid_argument();
      49             : 
      50             :     // max_field too small
      51             :     if( max_field < 4)
      52             :         detail::throw_invalid_argument();
      53             : 
      54             :     // max_field too large
      55             :     if( max_field >
      56             :         max_size)
      57             :         detail::throw_invalid_argument();
      58             : 
      59             :     // max_fields too large
      60             :     if( max_fields >
      61             :         max_size / 4)
      62             :         detail::throw_invalid_argument();
      63             : */
      64             :     static constexpr auto Align =
      65             :         alignof(detail::header::entry);
      66             :     // round up to alignof(A)
      67          31 :     return Align * (
      68          31 :         (max_size + Align - 1) / Align) + (
      69          31 :             max_fields * sizeof(
      70          31 :                 detail::header::entry));
      71             : }
      72             : 
      73             : } // http_proto
      74             : } // boost

Generated by: LCOV version 1.15