xrpld
Loading...
Searching...
No Matches
WorkSSL.cpp
1#include <xrpld/app/misc/detail/WorkSSL.h>
2
3#include <xrpld/app/misc/detail/WorkBase.h>
4#include <xrpld/core/Config.h>
5
6#include <xrpl/basics/contract.h>
7#include <xrpl/beast/utility/Journal.h>
8
9#include <boost/asio/bind_executor.hpp>
10#include <boost/asio/io_context.hpp>
11#include <boost/asio/ssl/context.hpp>
12#include <boost/asio/ssl/stream_base.hpp>
13#include <boost/format/free_funcs.hpp>
14
15#include <functional>
16#include <stdexcept>
17#include <string>
18
19namespace xrpl::detail {
20
22 std::string const& host,
23 std::string const& path,
24 std::string const& port,
25 boost::asio::io_context& ios,
27 Config const& config,
28 endpoint_type const& lastEndpoint,
29 bool lastStatus,
31 : WorkBase(host, path, port, ios, lastEndpoint, lastStatus, cb)
32 , context_(
33 config.sslVerifyDir,
34 config.sslVerifyFile,
35 config.sslVerify,
36 j,
37 boost::asio::ssl::context::tlsv12_client)
38 , stream_(socket_, context_.context())
39{
40 auto ec = context_.preConnectVerify(stream_, host_);
41 if (ec)
42 Throw<std::runtime_error>(boost::str(boost::format("preConnectVerify: %s") % ec.message()));
43}
44
45void
47{
48 auto err = ec ? ec : context_.postConnectVerify(stream_, host_);
49 if (err)
50 {
51 fail(err);
52 return;
53 }
54
55 stream_.async_handshake(
56 boost::asio::ssl::stream_base::client,
57 boost::asio::bind_executor(
58 strand_, std::bind(&WorkSSL::onHandshake, shared_from_this(), std::placeholders::_1)));
59}
60
61void
63{
64 if (ec)
65 {
66 fail(ec);
67 return;
68 }
69
70 onStart();
71}
72
73} // namespace xrpl::detail
T bind(T... args)
A generic endpoint for log messages.
Definition Journal.h:38
void fail(error_code const &ec)
Definition WorkBase.h:176
std::function< void(error_code const &, endpoint_type const &, response_type &&)> callback_type
Definition WorkBase.h:27
boost::asio::ip::tcp::endpoint endpoint_type
Definition WorkBase.h:24
boost::system::error_code error_code
Definition WorkBase.h:23
boost::asio::strand< boost::asio::io_context::executor_type > strand_
Definition WorkBase.h:41
WorkBase(std::string host, std::string path, std::string port, boost::asio::io_context &ios, endpoint_type lastEndpoint, bool lastStatus, callback_type cb)
Definition WorkBase.h:103
WorkSSL(std::string const &host, std::string const &path, std::string const &port, boost::asio::io_context &ios, beast::Journal j, Config const &config, endpoint_type const &lastEndpoint, bool lastStatus, callback_type cb)
Definition WorkSSL.cpp:21
HTTPClientSSLContext context_
Definition WorkSSL.h:24
void onConnect(error_code const &ec)
Definition WorkSSL.cpp:46
void onHandshake(error_code const &ec)
Definition WorkSSL.cpp:62
stream_type stream_
Definition WorkSSL.h:25
XRPL_NO_SANITIZE_ADDRESS void Throw(Args &&... args)
Definition contract.h:49