AMQP-CPP/src/linux_tcp/sslerrorprinter.h

74 lines
1.4 KiB
C++

/**
* SslErrorPrinter.h
*
* Flushes the SSL error stack to a BIO.
* You can get at the string content via the data() and size() methods.
* After constructing an instance of this class, the SSL error stack
* is empty.
*
* @copyright 2021 copernica BV
*/
/**
* Include guard
*/
#pragma once
/**
* Dependencies
*/
#include "openssl.h"
#include <memory>
/**
* Begin namespace
*/
namespace AMQP {
/**
* Class declaration
*/
class SslErrorPrinter final
{
public:
/**
* Constructor
* @param retval return value of SSL_get_error (must be a proper error)
* @throw std::bad_alloc if the BIO couldn't be allocated
*/
SslErrorPrinter(int retval);
/**
* data ptr (guaranteed null-terminated)
* @return const char *
*/
const char *data() const noexcept;
/**
* length of the string
* @return size_t
*/
std::size_t size() const noexcept;
private:
/**
* The error message
* @var std::string
*/
std::string _message;
/**
* Callback used for ERR_print_errors_cb
* @param str The string
* @param len The length
* @param ctx The context (this ptr)
* @return always 1 to signal to OpenSSL to continue
*/
friend int sslerrorprintercallback(const char *str, size_t len, void *ctx);
};
/**
* End of namespace AMQP
*/
}