1// 2// ssl/impl/error.ipp 3// ~~~~~~~~~~~~~~~~~~ 4// 5// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6// 7// Distributed under the Boost Software License, Version 1.0. (See accompanying 8// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9// 10 11#ifndef BOOST_ASIO_SSL_IMPL_ERROR_IPP 12#define BOOST_ASIO_SSL_IMPL_ERROR_IPP 13 14#if defined(_MSC_VER) && (_MSC_VER >= 1200) 15# pragma once 16#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 17 18#include <boost/asio/detail/config.hpp> 19#include <boost/asio/ssl/error.hpp> 20#include <boost/asio/ssl/detail/openssl_init.hpp> 21 22#include <boost/asio/detail/push_options.hpp> 23 24namespace boost { 25namespace asio { 26namespace error { 27namespace detail { 28 29class ssl_category : public boost::system::error_category 30{ 31public: 32 const char* name() const BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT 33 { 34 return "asio.ssl"; 35 } 36 37 std::string message(int value) const 38 { 39 const char* s = ::ERR_reason_error_string(value); 40 return s ? s : "asio.ssl error"; 41 } 42}; 43 44} // namespace detail 45 46const boost::system::error_category& get_ssl_category() 47{ 48 static detail::ssl_category instance; 49 return instance; 50} 51 52} // namespace error 53namespace ssl { 54namespace error { 55 56#if (OPENSSL_VERSION_NUMBER < 0x10100000L) && !defined(OPENSSL_IS_BORINGSSL) 57 58const boost::system::error_category& get_stream_category() 59{ 60 return boost::asio::error::get_ssl_category(); 61} 62 63#else 64 65namespace detail { 66 67class stream_category : public boost::system::error_category 68{ 69public: 70 const char* name() const BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT 71 { 72 return "asio.ssl.stream"; 73 } 74 75 std::string message(int value) const 76 { 77 switch (value) 78 { 79 case stream_truncated: return "stream truncated"; 80 case unspecified_system_error: return "unspecified system error"; 81 case unexpected_result: return "unexpected result"; 82 default: return "asio.ssl.stream error"; 83 } 84 } 85}; 86 87} // namespace detail 88 89const boost::system::error_category& get_stream_category() 90{ 91 static detail::stream_category instance; 92 return instance; 93} 94 95#endif 96 97} // namespace error 98} // namespace ssl 99} // namespace asio 100} // namespace boost 101 102#include <boost/asio/detail/pop_options.hpp> 103 104#endif // BOOST_ASIO_SSL_IMPL_ERROR_IPP 105