LCOV - code coverage report
Current view: top level - libs/http_proto/src - error.cpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 53 57 93.0 %
Date: 2024-04-04 20:17:10 Functions: 7 7 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/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 1.15