94.25% Lines (82/87) 80.00% Functions (4/5)
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/status.hpp> 10   #include <boost/http/status.hpp>
11   #include <boost/http/detail/except.hpp> 11   #include <boost/http/detail/except.hpp>
12   //#include <boost/throw_exception.hpp> 12   //#include <boost/throw_exception.hpp>
13   #include <ostream> 13   #include <ostream>
14   14  
15   namespace boost { 15   namespace boost {
16   namespace http { 16   namespace http {
17   17  
18   status 18   status
HITCBC 19   5095 int_to_status(unsigned v) 19   5104 int_to_status(unsigned v)
20   { 20   {
HITCBC 21   5095 switch(static_cast<status>(v)) 21   5104 switch(static_cast<status>(v))
22   { 22   {
23   // 1xx 23   // 1xx
HITCBC 24   5089 case status::continue_: 24   5098 case status::continue_:
25   case status::switching_protocols: 25   case status::switching_protocols:
26   case status::processing: 26   case status::processing:
27   case status::early_hints: 27   case status::early_hints:
28   BOOST_FALLTHROUGH; 28   BOOST_FALLTHROUGH;
29   29  
30   // 2xx 30   // 2xx
31   case status::ok: 31   case status::ok:
32   case status::created: 32   case status::created:
33   case status::accepted: 33   case status::accepted:
34   case status::non_authoritative_information: 34   case status::non_authoritative_information:
35   case status::no_content: 35   case status::no_content:
36   case status::reset_content: 36   case status::reset_content:
37   case status::partial_content: 37   case status::partial_content:
38   case status::multi_status: 38   case status::multi_status:
39   case status::already_reported: 39   case status::already_reported:
40   case status::im_used: 40   case status::im_used:
41   BOOST_FALLTHROUGH; 41   BOOST_FALLTHROUGH;
42   42  
43   // 3xx 43   // 3xx
44   case status::multiple_choices: 44   case status::multiple_choices:
45   case status::moved_permanently: 45   case status::moved_permanently:
46   case status::found: 46   case status::found:
47   case status::see_other: 47   case status::see_other:
48   case status::not_modified: 48   case status::not_modified:
49   case status::use_proxy: 49   case status::use_proxy:
50   case status::temporary_redirect: 50   case status::temporary_redirect:
51   case status::permanent_redirect: 51   case status::permanent_redirect:
52   BOOST_FALLTHROUGH; 52   BOOST_FALLTHROUGH;
53   53  
54   // 4xx 54   // 4xx
55   case status::bad_request: 55   case status::bad_request:
56   case status::unauthorized: 56   case status::unauthorized:
57   case status::payment_required: 57   case status::payment_required:
58   case status::forbidden: 58   case status::forbidden:
59   case status::not_found: 59   case status::not_found:
60   case status::method_not_allowed: 60   case status::method_not_allowed:
61   case status::not_acceptable: 61   case status::not_acceptable:
62   case status::proxy_authentication_required: 62   case status::proxy_authentication_required:
63   case status::request_timeout: 63   case status::request_timeout:
64   case status::conflict: 64   case status::conflict:
65   case status::gone: 65   case status::gone:
66   case status::length_required: 66   case status::length_required:
67   case status::precondition_failed: 67   case status::precondition_failed:
68   case status::payload_too_large: 68   case status::payload_too_large:
69   case status::uri_too_long: 69   case status::uri_too_long:
70   case status::unsupported_media_type: 70   case status::unsupported_media_type:
71   case status::range_not_satisfiable: 71   case status::range_not_satisfiable:
72   case status::expectation_failed: 72   case status::expectation_failed:
73   case status::misdirected_request: 73   case status::misdirected_request:
74   case status::unprocessable_entity: 74   case status::unprocessable_entity:
75   case status::locked: 75   case status::locked:
76   case status::failed_dependency: 76   case status::failed_dependency:
77   case status::too_early: 77   case status::too_early:
78   case status::upgrade_required: 78   case status::upgrade_required:
79   case status::precondition_required: 79   case status::precondition_required:
80   case status::too_many_requests: 80   case status::too_many_requests:
81   case status::request_header_fields_too_large: 81   case status::request_header_fields_too_large:
82   case status::unavailable_for_legal_reasons: 82   case status::unavailable_for_legal_reasons:
83   BOOST_FALLTHROUGH; 83   BOOST_FALLTHROUGH;
84   84  
85   // 5xx 85   // 5xx
86   case status::internal_server_error: 86   case status::internal_server_error:
87   case status::not_implemented: 87   case status::not_implemented:
88   case status::bad_gateway: 88   case status::bad_gateway:
89   case status::service_unavailable: 89   case status::service_unavailable:
90   case status::gateway_timeout: 90   case status::gateway_timeout:
91   case status::http_version_not_supported: 91   case status::http_version_not_supported:
92   case status::variant_also_negotiates: 92   case status::variant_also_negotiates:
93   case status::insufficient_storage: 93   case status::insufficient_storage:
94   case status::loop_detected: 94   case status::loop_detected:
95   case status::not_extended: 95   case status::not_extended:
96   case status::network_authentication_required: 96   case status::network_authentication_required:
HITCBC 97   5089 return static_cast<status>(v); 97   5098 return static_cast<status>(v);
98   98  
HITCBC 99   6 default: 99   6 default:
HITCBC 100   6 break; 100   6 break;
101   } 101   }
HITCBC 102   6 return status::unknown; 102   6 return status::unknown;
103   } 103   }
104   104  
105   status_class 105   status_class
HITCBC 106   124 to_status_class(unsigned v) 106   124 to_status_class(unsigned v)
107   { 107   {
HITCBC 108   124 switch(v / 100) 108   124 switch(v / 100)
109   { 109   {
HITCBC 110   8 case 1: return status_class::informational; 110   8 case 1: return status_class::informational;
HITCBC 111   20 case 2: return status_class::successful; 111   20 case 2: return status_class::successful;
HITCBC 112   16 case 3: return status_class::redirection; 112   16 case 3: return status_class::redirection;
HITCBC 113   56 case 4: return status_class::client_error; 113   56 case 4: return status_class::client_error;
HITCBC 114   22 case 5: return status_class::server_error; 114   22 case 5: return status_class::server_error;
HITCBC 115   2 default: 115   2 default:
HITCBC 116   2 break; 116   2 break;
117   } 117   }
HITCBC 118   2 return status_class::unknown; 118   2 return status_class::unknown;
119   } 119   }
120   120  
121   status_class 121   status_class
HITCBC 122   62 to_status_class(status v) 122   62 to_status_class(status v)
123   { 123   {
HITCBC 124   62 return to_status_class(static_cast<int>(v)); 124   62 return to_status_class(static_cast<int>(v));
125   } 125   }
126   126  
127   core::string_view 127   core::string_view
HITCBC 128   78 to_string( 128   78 to_string(
129   status v) 129   status v)
130   { 130   {
HITCBC 131   78 switch(static_cast<status>(v)) 131   78 switch(static_cast<status>(v))
132   { 132   {
133   // 1xx 133   // 1xx
HITCBC 134   1 case status::continue_: return "Continue"; 134   1 case status::continue_: return "Continue";
HITCBC 135   2 case status::switching_protocols: return "Switching Protocols"; 135   2 case status::switching_protocols: return "Switching Protocols";
HITCBC 136   1 case status::processing: return "Processing"; 136   1 case status::processing: return "Processing";
HITCBC 137   1 case status::early_hints: return "Early Hints"; 137   1 case status::early_hints: return "Early Hints";
138   138  
139   // 2xx 139   // 2xx
HITCBC 140   4 case status::ok: return "OK"; 140   4 case status::ok: return "OK";
HITCBC 141   1 case status::created: return "Created"; 141   1 case status::created: return "Created";
HITCBC 142   1 case status::accepted: return "Accepted"; 142   1 case status::accepted: return "Accepted";
HITCBC 143   1 case status::non_authoritative_information: return "Non-Authoritative Information"; 143   1 case status::non_authoritative_information: return "Non-Authoritative Information";
HITCBC 144   1 case status::no_content: return "No Content"; 144   1 case status::no_content: return "No Content";
HITCBC 145   1 case status::reset_content: return "Reset Content"; 145   1 case status::reset_content: return "Reset Content";
HITCBC 146   1 case status::partial_content: return "Partial Content"; 146   1 case status::partial_content: return "Partial Content";
HITCBC 147   1 case status::multi_status: return "Multi-Status"; 147   1 case status::multi_status: return "Multi-Status";
HITCBC 148   1 case status::already_reported: return "Already Reported"; 148   1 case status::already_reported: return "Already Reported";
HITCBC 149   1 case status::im_used: return "IM Used"; 149   1 case status::im_used: return "IM Used";
150   150  
151   // 3xx 151   // 3xx
HITCBC 152   1 case status::multiple_choices: return "Multiple Choices"; 152   1 case status::multiple_choices: return "Multiple Choices";
HITCBC 153   1 case status::moved_permanently: return "Moved Permanently"; 153   1 case status::moved_permanently: return "Moved Permanently";
HITCBC 154   1 case status::found: return "Found"; 154   1 case status::found: return "Found";
HITCBC 155   1 case status::see_other: return "See Other"; 155   1 case status::see_other: return "See Other";
HITCBC 156   1 case status::not_modified: return "Not Modified"; 156   1 case status::not_modified: return "Not Modified";
HITCBC 157   1 case status::use_proxy: return "Use Proxy"; 157   1 case status::use_proxy: return "Use Proxy";
HITCBC 158   1 case status::temporary_redirect: return "Temporary Redirect"; 158   1 case status::temporary_redirect: return "Temporary Redirect";
HITCBC 159   1 case status::permanent_redirect: return "Permanent Redirect"; 159   1 case status::permanent_redirect: return "Permanent Redirect";
160   160  
161   // 4xx 161   // 4xx
HITCBC 162   2 case status::bad_request: return "Bad Request"; 162   2 case status::bad_request: return "Bad Request";
HITCBC 163   1 case status::unauthorized: return "Unauthorized"; 163   1 case status::unauthorized: return "Unauthorized";
HITCBC 164   1 case status::payment_required: return "Payment Required"; 164   1 case status::payment_required: return "Payment Required";
HITCBC 165   1 case status::forbidden: return "Forbidden"; 165   1 case status::forbidden: return "Forbidden";
HITCBC 166   13 case status::not_found: return "Not Found"; 166   13 case status::not_found: return "Not Found";
HITCBC 167   1 case status::method_not_allowed: return "Method Not Allowed"; 167   1 case status::method_not_allowed: return "Method Not Allowed";
HITCBC 168   1 case status::not_acceptable: return "Not Acceptable"; 168   1 case status::not_acceptable: return "Not Acceptable";
HITCBC 169   1 case status::proxy_authentication_required: return "Proxy Authentication Required"; 169   1 case status::proxy_authentication_required: return "Proxy Authentication Required";
HITCBC 170   1 case status::request_timeout: return "Request Timeout"; 170   1 case status::request_timeout: return "Request Timeout";
HITCBC 171   1 case status::conflict: return "Conflict"; 171   1 case status::conflict: return "Conflict";
HITCBC 172   1 case status::gone: return "Gone"; 172   1 case status::gone: return "Gone";
HITCBC 173   1 case status::length_required: return "Length Required"; 173   1 case status::length_required: return "Length Required";
HITCBC 174   1 case status::precondition_failed: return "Precondition Failed"; 174   1 case status::precondition_failed: return "Precondition Failed";
HITCBC 175   1 case status::payload_too_large: return "Payload Too Large"; 175   1 case status::payload_too_large: return "Payload Too Large";
HITCBC 176   1 case status::uri_too_long: return "URI Too Long"; 176   1 case status::uri_too_long: return "URI Too Long";
HITCBC 177   1 case status::unsupported_media_type: return "Unsupported Media Type"; 177   1 case status::unsupported_media_type: return "Unsupported Media Type";
HITCBC 178   1 case status::range_not_satisfiable: return "Range Not Satisfiable"; 178   1 case status::range_not_satisfiable: return "Range Not Satisfiable";
HITCBC 179   1 case status::expectation_failed: return "Expectation Failed"; 179   1 case status::expectation_failed: return "Expectation Failed";
HITCBC 180   1 case status::misdirected_request: return "Misdirected Request"; 180   1 case status::misdirected_request: return "Misdirected Request";
HITCBC 181   1 case status::unprocessable_entity: return "Unprocessable Entity"; 181   1 case status::unprocessable_entity: return "Unprocessable Entity";
HITCBC 182   1 case status::locked: return "Locked"; 182   1 case status::locked: return "Locked";
HITCBC 183   1 case status::failed_dependency: return "Failed Dependency"; 183   1 case status::failed_dependency: return "Failed Dependency";
HITCBC 184   1 case status::too_early: return "Too Early"; 184   1 case status::too_early: return "Too Early";
HITCBC 185   1 case status::upgrade_required: return "Upgrade Required"; 185   1 case status::upgrade_required: return "Upgrade Required";
HITCBC 186   1 case status::precondition_required: return "Precondition Required"; 186   1 case status::precondition_required: return "Precondition Required";
HITCBC 187   1 case status::too_many_requests: return "Too Many Requests"; 187   1 case status::too_many_requests: return "Too Many Requests";
HITCBC 188   1 case status::request_header_fields_too_large: return "Request Header Fields Too Large"; 188   1 case status::request_header_fields_too_large: return "Request Header Fields Too Large";
HITCBC 189   1 case status::unavailable_for_legal_reasons: return "Unavailable For Legal Reasons"; 189   1 case status::unavailable_for_legal_reasons: return "Unavailable For Legal Reasons";
190   190  
191   // 5xx 191   // 5xx
HITCBC 192   1 case status::internal_server_error: return "Internal Server Error"; 192   1 case status::internal_server_error: return "Internal Server Error";
HITCBC 193   1 case status::not_implemented: return "Not Implemented"; 193   1 case status::not_implemented: return "Not Implemented";
HITCBC 194   1 case status::bad_gateway: return "Bad Gateway"; 194   1 case status::bad_gateway: return "Bad Gateway";
HITCBC 195   1 case status::service_unavailable: return "Service Unavailable"; 195   1 case status::service_unavailable: return "Service Unavailable";
HITCBC 196   1 case status::gateway_timeout: return "Gateway Timeout"; 196   1 case status::gateway_timeout: return "Gateway Timeout";
HITCBC 197   1 case status::http_version_not_supported: return "HTTP Version Not Supported"; 197   1 case status::http_version_not_supported: return "HTTP Version Not Supported";
HITCBC 198   1 case status::variant_also_negotiates: return "Variant Also Negotiates"; 198   1 case status::variant_also_negotiates: return "Variant Also Negotiates";
HITCBC 199   1 case status::insufficient_storage: return "Insufficient Storage"; 199   1 case status::insufficient_storage: return "Insufficient Storage";
HITCBC 200   1 case status::loop_detected: return "Loop Detected"; 200   1 case status::loop_detected: return "Loop Detected";
HITCBC 201   1 case status::not_extended: return "Not Extended"; 201   1 case status::not_extended: return "Not Extended";
HITCBC 202   1 case status::network_authentication_required: return "Network Authentication Required"; 202   1 case status::network_authentication_required: return "Network Authentication Required";
203   203  
MISUBC 204   default: 204   default:
MISUBC 205   break; 205   break;
206   } 206   }
MISUBC 207   return "<unknown-status>"; 207   return "<unknown-status>";
208   } 208   }
209   209  
210   std::ostream& 210   std::ostream&
MISUBC 211   operator<<(std::ostream& os, status v) 211   operator<<(std::ostream& os, status v)
212   { 212   {
MISUBC 213   return os << to_string(v); 213   return os << to_string(v);
214   } 214   }
215   215  
216   } // http 216   } // http
217   } // boost 217   } // boost