• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1//
2// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot 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/boostorg/beast
8//
9
10#ifndef BOOST_BEAST_HTTP_IMPL_ERROR_IPP
11#define BOOST_BEAST_HTTP_IMPL_ERROR_IPP
12
13#include <boost/beast/http/error.hpp>
14#include <type_traits>
15
16namespace boost {
17namespace beast {
18namespace http {
19namespace detail {
20
21class http_error_category : public error_category
22{
23public:
24    const char*
25    name() const noexcept override
26    {
27        return "beast.http";
28    }
29
30    std::string
31    message(int ev) const override
32    {
33        switch(static_cast<error>(ev))
34        {
35        case error::end_of_stream: return "end of stream";
36        case error::partial_message: return "partial message";
37        case error::need_more: return "need more";
38        case error::unexpected_body: return "unexpected body";
39        case error::need_buffer: return "need buffer";
40        case error::end_of_chunk: return "end of chunk";
41        case error::buffer_overflow: return "buffer overflow";
42        case error::header_limit: return "header limit exceeded";
43        case error::body_limit: return "body limit exceeded";
44        case error::bad_alloc: return "bad alloc";
45        case error::bad_line_ending: return "bad line ending";
46        case error::bad_method: return "bad method";
47        case error::bad_target: return "bad target";
48        case error::bad_version: return "bad version";
49        case error::bad_status: return "bad status";
50        case error::bad_reason: return "bad reason";
51        case error::bad_field: return "bad field";
52        case error::bad_value: return "bad value";
53        case error::bad_content_length: return "bad Content-Length";
54        case error::bad_transfer_encoding: return "bad Transfer-Encoding";
55        case error::bad_chunk: return "bad chunk";
56        case error::bad_chunk_extension: return "bad chunk extension";
57        case error::bad_obs_fold: return "bad obs-fold";
58        case error::stale_parser: return "stale parser";
59        case error::short_read: return "unexpected eof in body";
60
61        default:
62            return "beast.http error";
63        }
64    }
65
66    error_condition
67    default_error_condition(
68        int ev) const noexcept override
69    {
70        return error_condition{ev, *this};
71    }
72
73    bool
74    equivalent(int ev,
75        error_condition const& condition
76            ) const noexcept override
77    {
78        return condition.value() == ev &&
79            &condition.category() == this;
80    }
81
82    bool
83    equivalent(error_code const& error,
84        int ev) const noexcept override
85    {
86        return error.value() == ev &&
87            &error.category() == this;
88    }
89};
90
91} // detail
92
93error_code
94make_error_code(error ev)
95{
96    static detail::http_error_category const cat{};
97    return error_code{static_cast<
98        std::underlying_type<error>::type>(ev), cat};
99}
100
101} // http
102} // beast
103} // boost
104
105#endif
106