92.06% Lines (58/63) 100.00% Functions (7/7)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com) 2   // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com)
3   // 3   //
4   // Distributed under the Boost Software License, Version 1.0. (See accompanying 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) 5   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6   // 6   //
7   // Official repository: https://github.com/cppalliance/http 7   // Official repository: https://github.com/cppalliance/http
8   // 8   //
9   9  
10   #include <boost/http/error.hpp> 10   #include <boost/http/error.hpp>
11   #include <boost/url/grammar/error.hpp> 11   #include <boost/url/grammar/error.hpp>
12   #include <boost/assert.hpp> 12   #include <boost/assert.hpp>
13   #include <cstring> 13   #include <cstring>
14   14  
15   namespace boost { 15   namespace boost {
16   namespace http { 16   namespace http {
17   17  
18   namespace detail { 18   namespace detail {
19   19  
20   const char* 20   const char*
HITCBC 21   47 error_cat_type:: 21   47 error_cat_type::
22   name() const noexcept 22   name() const noexcept
23   { 23   {
HITCBC 24   47 return "boost.http"; 24   47 return "boost.http";
25   } 25   }
26   26  
27   std::string 27   std::string
HITCBC 28   110 error_cat_type:: 28   110 error_cat_type::
29   message(int code) const 29   message(int code) const
30   { 30   {
HITCBC 31   220 return message(code, nullptr, 0); 31   220 return message(code, nullptr, 0);
32   } 32   }
33   33  
34   char const* 34   char const*
HITCBC 35   110 error_cat_type:: 35   110 error_cat_type::
36   message( 36   message(
37   int code, 37   int code,
38   char*, 38   char*,
39   std::size_t) const noexcept 39   std::size_t) const noexcept
40   { 40   {
HITCBC 41   110 switch(static_cast<error>(code)) 41   110 switch(static_cast<error>(code))
42   { 42   {
HITCBC 43   1 case error::expect_100_continue: return "expect 100 continue"; 43   1 case error::expect_100_continue: return "expect 100 continue";
HITCBC 44   1 case error::end_of_message: return "end of message"; 44   1 case error::end_of_message: return "end of message";
HITCBC 45   1 case error::end_of_stream: return "end of stream"; 45   1 case error::end_of_stream: return "end of stream";
HITCBC 46   1 case error::in_place_overflow: return "in-place overflow"; 46   1 case error::in_place_overflow: return "in-place overflow";
HITCBC 47   1 case error::need_data: return "need data"; 47   1 case error::need_data: return "need data";
48   48  
HITCBC 49   1 case error::bad_connection: return "bad Connection"; 49   1 case error::bad_connection: return "bad Connection";
HITCBC 50   1 case error::bad_content_length: return "bad Content-Length"; 50   1 case error::bad_content_length: return "bad Content-Length";
HITCBC 51   1 case error::bad_expect: return "bad Expect"; 51   1 case error::bad_expect: return "bad Expect";
HITCBC 52   67 case error::bad_field_name: return "bad field name"; 52   67 case error::bad_field_name: return "bad field name";
HITCBC 53   3 case error::bad_field_value: return "bad field value"; 53   3 case error::bad_field_value: return "bad field value";
HITCBC 54   10 case error::bad_field_smuggle: return "bad field smuggle"; 54   10 case error::bad_field_smuggle: return "bad field smuggle";
HITCBC 55   1 case error::bad_line_ending: return "bad line ending"; 55   1 case error::bad_line_ending: return "bad line ending";
HITCBC 56   1 case error::bad_list: return "bad list"; 56   1 case error::bad_list: return "bad list";
HITCBC 57   1 case error::bad_method: return "bad method"; 57   1 case error::bad_method: return "bad method";
HITCBC 58   1 case error::bad_number: return "bad number"; 58   1 case error::bad_number: return "bad number";
HITCBC 59   2 case error::bad_payload: return "bad payload"; 59   2 case error::bad_payload: return "bad payload";
HITCBC 60   1 case error::bad_version: return "bad version"; 60   1 case error::bad_version: return "bad version";
HITCBC 61   1 case error::bad_reason: return "bad reason-phrase"; 61   1 case error::bad_reason: return "bad reason-phrase";
HITCBC 62   1 case error::bad_request_target: return "bad request-target"; 62   1 case error::bad_request_target: return "bad request-target";
HITCBC 63   1 case error::bad_status_code: return "bad status-code"; 63   1 case error::bad_status_code: return "bad status-code";
HITCBC 64   1 case error::bad_status_line: return "bad status-line"; 64   1 case error::bad_status_line: return "bad status-line";
HITCBC 65   1 case error::bad_transfer_encoding: return "bad Transfer-Encoding"; 65   1 case error::bad_transfer_encoding: return "bad Transfer-Encoding";
HITCBC 66   1 case error::bad_upgrade: return "bad Upgrade"; 66   1 case error::bad_upgrade: return "bad Upgrade";
67   67  
HITCBC 68   1 case error::body_too_large: return "body too large"; 68   1 case error::body_too_large: return "body too large";
HITCBC 69   1 case error::headers_limit: return "headers limit"; 69   1 case error::headers_limit: return "headers limit";
HITCBC 70   1 case error::start_line_limit: return "start line limit"; 70   1 case error::start_line_limit: return "start line limit";
HITCBC 71   1 case error::field_size_limit: return "field size limit"; 71   1 case error::field_size_limit: return "field size limit";
HITCBC 72   1 case error::fields_limit: return "fields limit"; 72   1 case error::fields_limit: return "fields limit";
HITCBC 73   1 case error::incomplete: return "incomplete"; 73   1 case error::incomplete: return "incomplete";
74   74  
HITCBC 75   1 case error::numeric_overflow: return "numeric overflow"; 75   1 case error::numeric_overflow: return "numeric overflow";
HITCBC 76   1 case error::multiple_content_length: return "multiple Content-Length"; 76   1 case error::multiple_content_length: return "multiple Content-Length";
HITCBC 77   1 case error::buffer_overflow: return "buffer overflow"; 77   1 case error::buffer_overflow: return "buffer overflow";
MISUBC 78   case error::unhandled_exception: return "unhandled exception"; 78   case error::unhandled_exception: return "unhandled exception";
MISUBC 79   default: 79   default:
MISUBC 80   return "unknown"; 80   return "unknown";
81   } 81   }
82   } 82   }
83   83  
84   //----------------------------------------------- 84   //-----------------------------------------------
85   85  
86   const char* 86   const char*
HITCBC 87   2 condition_cat_type:: 87   2 condition_cat_type::
88   name() const noexcept 88   name() const noexcept
89   { 89   {
HITCBC 90   2 return "boost.http"; 90   2 return "boost.http";
91   } 91   }
92   92  
93   std::string 93   std::string
HITCBC 94   2 condition_cat_type:: 94   2 condition_cat_type::
95   message(int code) const 95   message(int code) const
96   { 96   {
HITCBC 97   4 return message(code, nullptr, 0); 97   4 return message(code, nullptr, 0);
98   } 98   }
99   99  
100   char const* 100   char const*
HITCBC 101   2 condition_cat_type:: 101   2 condition_cat_type::
102   message( 102   message(
103   int code, 103   int code,
104   char*, 104   char*,
105   std::size_t) const noexcept 105   std::size_t) const noexcept
106   { 106   {
HITCBC 107   2 switch(static_cast<condition>(code)) 107   2 switch(static_cast<condition>(code))
108   { 108   {
HITCBC 109   1 default: 109   1 default:
HITCBC 110   1 case condition::need_more_input: return "need more input"; 110   1 case condition::need_more_input: return "need more input";
HITCBC 111   1 case condition::invalid_payload: return "invalid body octets received"; 111   1 case condition::invalid_payload: return "invalid body octets received";
112   } 112   }
113   } 113   }
114   114  
115   bool 115   bool
HITCBC 116   149262 condition_cat_type:: 116   149271 condition_cat_type::
117   equivalent( 117   equivalent(
118   system::error_code const& ec, 118   system::error_code const& ec,
119   int code) const noexcept 119   int code) const noexcept
120   { 120   {
HITCBC 121   149262 switch(static_cast<condition>(code)) 121   149271 switch(static_cast<condition>(code))
122   { 122   {
HITCBC 123   10 case condition::invalid_payload: 123   10 case condition::invalid_payload:
HITCBC 124   10 return (ec == error::bad_payload); 124   10 return (ec == error::bad_payload);
125   125  
HITCBC 126   149252 case condition::need_more_input: 126   149261 case condition::need_more_input:
HITCBC 127   225887 if( ec == urls::grammar::error::need_more || 127   225905 if( ec == urls::grammar::error::need_more ||
HITCBC 128   76635 ec == error::need_data ) 128   76644 ec == error::need_data )
HITCBC 129   136734 return true; 129   136734 return true;
HITCBC 130   12518 break; 130   12527 break;
131   131  
MISUBC 132   default: 132   default:
MISUBC 133   break; 133   break;
134   } 134   }
135   return 135   return
HITCBC 136   12518 *this == ec.category() && 136   12527 *this == ec.category() &&
HITCBC 137   12518 ec.value() == code; 137   12527 ec.value() == code;
138   } 138   }
139   139  
140   //----------------------------------------------- 140   //-----------------------------------------------
141   141  
142   // msvc 14.0 has a bug that warns about inability 142   // msvc 14.0 has a bug that warns about inability
143   // to use constexpr construction here, even though 143   // to use constexpr construction here, even though
144   // there's no constexpr construction 144   // there's no constexpr construction
145   #if defined(_MSC_VER) && _MSC_VER <= 1900 145   #if defined(_MSC_VER) && _MSC_VER <= 1900
146   # pragma warning( push ) 146   # pragma warning( push )
147   # pragma warning( disable : 4592 ) 147   # pragma warning( disable : 4592 )
148   #endif 148   #endif
149   149  
150   #if defined(__cpp_constinit) && __cpp_constinit >= 201907L 150   #if defined(__cpp_constinit) && __cpp_constinit >= 201907L
151   constinit error_cat_type error_cat; 151   constinit error_cat_type error_cat;
152   constinit condition_cat_type condition_cat; 152   constinit condition_cat_type condition_cat;
153   #else 153   #else
154   error_cat_type error_cat; 154   error_cat_type error_cat;
155   condition_cat_type condition_cat; 155   condition_cat_type condition_cat;
156   #endif 156   #endif
157   157  
158   #if defined(_MSC_VER) && _MSC_VER <= 1900 158   #if defined(_MSC_VER) && _MSC_VER <= 1900
159   # pragma warning( pop ) 159   # pragma warning( pop )
160   #endif 160   #endif
161   161  
162   } // detail 162   } // detail
163   163  
164   } // http 164   } // http
165   } // boost 165   } // boost