LCOV - code coverage report
Current view: top level - http_proto/impl - error.ipp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 61 65 93.8 %
Date: 2023-02-27 20:43:06 Functions: 9 9 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             : 
      18             : namespace boost {
      19             : namespace http_proto {
      20             : 
      21             : system::error_code
      22       18047 : make_error_code(
      23             :     error ev) noexcept
      24             : {
      25             :     struct cat_type
      26             :         : system::error_category
      27             :     {
      28           6 :         cat_type() noexcept
      29           6 :             : error_category(
      30           6 :                 0x3663257e7585fbfd)
      31             :         {
      32           6 :         }
      33             : 
      34             :         const char*
      35          29 :         name() const noexcept override
      36             :         {
      37          29 :             return "boost.http.proto";
      38             :         }
      39             : 
      40             :         std::string
      41          29 :         message(int code) const override
      42             :         {
      43          29 :             switch(static_cast<error>(code))
      44             :             {
      45           1 :             case error::expect_100_continue: return "expect continue";
      46           1 :             case error::end_of_message: return "end of message";
      47           1 :             case error::end_of_stream: return "end of stream";
      48           1 :             case error::need_data: return "need data";
      49             : 
      50           1 :             case error::bad_connection: return "bad Connection";
      51           1 :             case error::bad_content_length: return "bad Content-Length";
      52           1 :             case error::bad_expect: return "bad Expect";
      53           1 :             case error::bad_field_name: return "bad field name";
      54           1 :             case error::bad_field_value: return "bad field value";
      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           0 :             default:
      78           0 :                 return "unknown";
      79             :             }
      80             :         }
      81             :     };
      82             : 
      83       18047 :     static cat_type const cat{};
      84             :     return system::error_code{static_cast<
      85             :         std::underlying_type<
      86       18047 :             error>::type>(ev), cat};
      87             : }
      88             : 
      89             : system::error_condition
      90       41213 : make_error_condition(
      91             :     condition cv) noexcept
      92             : {
      93             :     struct cat_type
      94             :         : system::error_category
      95             :     {
      96           3 :         cat_type() noexcept
      97           3 :             : error_category(
      98           3 :                 0xa36e10f16c666a7)
      99             :         {
     100           3 :         }
     101             : 
     102             :         const char*
     103           1 :         name() const noexcept override
     104             :         {
     105           1 :             return "boost.http.proto";
     106             :         }
     107             : 
     108             :         std::string
     109           1 :         message(int code) const override
     110             :         {
     111             :             switch(static_cast<condition>(code))
     112             :             {
     113             :             default:
     114           1 :             case condition::need_more_input: return "need more input";
     115             :             }
     116             :         }
     117             : 
     118             :         bool
     119       41211 :         equivalent(
     120             :             system::error_code const& ec,
     121             :             int code) const noexcept override
     122             :         {
     123       41211 :             switch(static_cast<condition>(code))
     124             :             {
     125       41211 :             case condition::need_more_input:
     126       56791 :                 if( ec == urls::grammar::error::need_more ||
     127       56791 :                     ec == error::need_data)
     128       27978 :                     return true;
     129       13233 :                 break;
     130             : 
     131           0 :             default:
     132           0 :                 break;
     133             :             }
     134             :             return
     135       13233 :                 *this == ec.category() &&
     136       13233 :                 ec.value() == code;
     137             :         }
     138             :     };
     139             : 
     140       41213 :     static cat_type const cat{};
     141       41213 :     return system::error_condition{
     142             :         static_cast<std::underlying_type<
     143       41213 :             error>::type>(cv), cat};
     144             : }
     145             : 
     146             : } // http_proto
     147             : } // boost
     148             : 
     149             : #endif

Generated by: LCOV version 1.15