LCOV - code coverage report
Current view: top level - libs/http_proto/src/error.cpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 93.0 % 57 53
Test Date: 2024-06-18 18:03:13 Functions: 100.0 % 7 7

            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/error.hpp>
      11              : #include <boost/url/grammar/error.hpp>
      12              : #include <boost/assert.hpp>
      13              : #include <cstring>
      14              : 
      15              : namespace boost {
      16              : namespace http_proto {
      17              : 
      18              : namespace detail {
      19              : 
      20              : const char*
      21           32 : error_cat_type::
      22              : name() const noexcept
      23              : {
      24           32 :     return "boost.http.proto";
      25              : }
      26              : 
      27              : std::string
      28           95 : error_cat_type::
      29              : message(int code) const
      30              : {
      31           95 :     return message(code, nullptr, 0);
      32              : }
      33              : 
      34              : char const*
      35           95 : error_cat_type::
      36              : message(
      37              :     int code,
      38              :     char*,
      39              :     std::size_t) const noexcept
      40              : {
      41           95 :     switch(static_cast<error>(code))
      42              :     {
      43            1 :     case error::expect_100_continue: return "expect continue";
      44            1 :     case error::end_of_message: return "end of message";
      45            1 :     case error::end_of_stream: return "end of stream";
      46            1 :     case error::in_place_overflow: return "in place overflow";
      47            1 :     case error::need_data: return "need data";
      48              : 
      49            1 :     case error::bad_connection: return "bad Connection";
      50            1 :     case error::bad_content_length: return "bad Content-Length";
      51            1 :     case error::bad_expect: return "bad Expect";
      52           64 :     case error::bad_field_name: return "bad field name";
      53            1 :     case error::bad_field_value: return "bad field value";
      54            1 :     case error::bad_field_smuggle: return "bad field smuggle";
      55            1 :     case error::bad_line_ending: return "bad line ending";
      56            1 :     case error::bad_list: return "bad list";
      57            1 :     case error::bad_method: return "bad method";
      58            1 :     case error::bad_number: return "bad number";
      59            1 :     case error::bad_payload: return "bad payload";
      60            1 :     case error::bad_version: return "bad version";
      61            1 :     case error::bad_reason: return "bad reason-phrase";
      62            1 :     case error::bad_request_target: return "bad request-target";
      63            1 :     case error::bad_status_code: return "bad status-code";
      64            1 :     case error::bad_status_line: return "bad status-line";
      65            1 :     case error::bad_transfer_encoding: return "bad Transfer-Encoding";
      66            1 :     case error::bad_upgrade: return "bad Upgrade";
      67              : 
      68            1 :     case error::body_too_large: return "body too large";
      69            1 :     case error::headers_limit: return "headers limit";
      70            1 :     case error::start_line_limit: return "start line limit";
      71            1 :     case error::field_size_limit: return "field size limit";
      72            1 :     case error::fields_limit: return "fields limit";
      73            1 :     case error::incomplete: return "incomplete";
      74              : 
      75            1 :     case error::numeric_overflow: return "numeric overflow";
      76            1 :     case error::multiple_content_length: return "multiple Content-Length";
      77            1 :     case error::buffer_overflow: return "buffer overflow";
      78            0 :     default:
      79            0 :         return "unknown";
      80              :     }
      81              : }
      82              : 
      83              : //-----------------------------------------------
      84              : 
      85              : const char*
      86            1 : condition_cat_type::
      87              : name() const noexcept
      88              : {
      89            1 :     return "boost.http.proto";
      90              : }
      91              : 
      92              : std::string
      93            1 : condition_cat_type::
      94              : message(int code) const
      95              : {
      96            1 :     return message(code, nullptr, 0);
      97              : }
      98              : 
      99              : char const*
     100            1 : condition_cat_type::
     101              : message(
     102              :     int code,
     103              :     char*,
     104              :     std::size_t) const noexcept
     105              : {
     106              :     switch(static_cast<condition>(code))
     107              :     {
     108              :     default:
     109            1 :     case condition::need_more_input: return "need more input";
     110              :     }
     111              : }
     112              : 
     113              : bool
     114        11332 : condition_cat_type::
     115              : equivalent(
     116              :     system::error_code const& ec,
     117              :     int code) const noexcept
     118              : {
     119        11332 :     switch(static_cast<condition>(code))
     120              :     {
     121        11332 :     case condition::need_more_input:
     122        15091 :         if( ec == urls::grammar::error::need_more ||
     123        15091 :             ec == error::need_data)
     124         7846 :             return true;
     125         3486 :         break;
     126              : 
     127            0 :     default:
     128            0 :         break;
     129              :     }
     130              :     return
     131         3486 :         *this == ec.category() &&
     132         3486 :         ec.value() == code;
     133              : }
     134              : 
     135              : //-----------------------------------------------
     136              : 
     137              : // msvc 14.0 has a bug that warns about inability
     138              : // to use constexpr construction here, even though
     139              : // there's no constexpr construction
     140              : #if defined(_MSC_VER) && _MSC_VER <= 1900
     141              : # pragma warning( push )
     142              : # pragma warning( disable : 4592 )
     143              : #endif
     144              : 
     145              : #if defined(__cpp_constinit) && __cpp_constinit >= 201907L
     146              : constinit error_cat_type error_cat;
     147              : constinit condition_cat_type condition_cat;
     148              : #else
     149              : error_cat_type error_cat;
     150              : condition_cat_type condition_cat;
     151              : #endif
     152              : 
     153              : #if defined(_MSC_VER) && _MSC_VER <= 1900
     154              : # pragma warning( pop )
     155              : #endif
     156              : 
     157              : } // detail
     158              : 
     159              : } // http_proto
     160              : } // boost
        

Generated by: LCOV version 2.1