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

Generated by: LCOV version 1.15