Skip to content

Commit d4a7fcc

Browse files
authored
remove tls dependency on tcp (#183)
Signed-off-by: turuslan <[email protected]>
1 parent b195aa5 commit d4a7fcc

5 files changed

Lines changed: 15 additions & 37 deletions

File tree

include/libp2p/security/tls/tls_errors.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ namespace libp2p::security {
1010

1111
enum class TlsError : int {
1212
TLS_CTX_INIT_FAILED = 1,
13-
TLS_INCOMPATIBLE_TRANSPORT,
1413
TLS_NO_CERTIFICATE,
1514
TLS_INCOMPATIBLE_CERTIFICATE_EXTENSION,
1615
TLS_PEER_VERIFY_FAILED,

src/security/tls/tls_adaptor.cpp

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
#include <libp2p/security/tls/ssl_context.hpp>
1111
#include <libp2p/security/tls/tls_details.hpp>
1212
#include <libp2p/security/tls/tls_errors.hpp>
13-
#include <libp2p/transport/tcp/tcp_connection.hpp>
1413

1514
#include "tls_connection.hpp"
1615

@@ -63,27 +62,12 @@ namespace libp2p::security {
6362
SL_DEBUG(log(), "securing inbound connection");
6463
}
6564

66-
std::optional<std::error_code> ec;
67-
68-
transport::TcpConnection *tcp_conn = nullptr;
69-
70-
if (!ec) {
71-
tcp_conn = dynamic_cast<transport::TcpConnection *>(conn.get());
72-
if (tcp_conn == nullptr) {
73-
ec = TlsError::TLS_INCOMPATIBLE_TRANSPORT;
74-
} else {
75-
auto tls_conn = std::make_shared<TlsConnection>(std::move(conn),
76-
ssl_context_,
77-
*idmgr_,
78-
tcp_conn->socket_,
79-
std::move(remote_peer));
80-
tls_conn->asyncHandshake(std::move(cb), key_marshaller_);
81-
}
82-
}
83-
84-
if (ec) {
85-
io_context_->post([cb, ec] { cb(*ec); });
86-
}
65+
auto tls_conn = std::make_shared<TlsConnection>(std::move(conn),
66+
ssl_context_,
67+
*idmgr_,
68+
io_context_,
69+
std::move(remote_peer));
70+
tls_conn->asyncHandshake(std::move(cb), key_marshaller_);
8771
}
8872

8973
} // namespace libp2p::security

src/security/tls/tls_connection.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ namespace libp2p::connection {
2020
std::shared_ptr<LayerConnection> original_connection,
2121
std::shared_ptr<boost::asio::ssl::context> ssl_context,
2222
const peer::IdentityManager &idmgr,
23-
tcp_socket_t &tcp_socket,
23+
std::shared_ptr<boost::asio::io_context> io_context,
2424
boost::optional<peer::PeerId> remote_peer)
2525
: local_peer_(idmgr.getId()),
2626
original_connection_(std::move(original_connection)),
2727
ssl_context_(std::move(ssl_context)),
28-
socket_(std::ref(tcp_socket), *ssl_context_),
28+
socket_{AsAsioReadWrite{std::move(io_context), original_connection_},
29+
*ssl_context_},
2930
remote_peer_(std::move(remote_peer)) {}
3031

3132
void TlsConnection::asyncHandshake(

src/security/tls/tls_connection.hpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <boost/noncopyable.hpp>
1414

1515
#include <libp2p/common/metrics/instance_count.hpp>
16+
#include <libp2p/connection/as_asio_read_write.hpp>
1617
#include <libp2p/connection/secure_connection.hpp>
1718
#include <libp2p/crypto/key_marshaller.hpp>
1819
#include <libp2p/peer/identity_manager.hpp>
@@ -25,28 +26,23 @@ namespace libp2p::connection {
2526
public std::enable_shared_from_this<TlsConnection>,
2627
private boost::noncopyable {
2728
public:
28-
/// lower level socket type is TCP
29-
using tcp_socket_t = boost::asio::ip::tcp::socket;
30-
31-
/// reference as a parameter here allows to upgrade established TCP
32-
/// connection
33-
using ssl_socket_t = boost::asio::ssl::stream<tcp_socket_t &>;
29+
using ssl_socket_t = boost::asio::ssl::stream<AsAsioReadWrite>;
3430

3531
/// Upgraded connection passed to this callback
3632
using HandshakeCallback = std::function<void(
3733
outcome::result<std::shared_ptr<connection::SecureConnection>>)>;
3834

3935
/// Ctor.
40-
/// \param original_connection TCP connection, established at the moment
36+
/// \param original_connection connection, established at the moment
4137
/// \param ssl_context Wrapper around SSL_CTX
4238
/// \param idmgr Identity manager, contains this host's keys
43-
/// \param tcp_socket Raw socket extracted from raw connection
39+
/// \param io_context Asio io context
4440
/// \param remote_peer Expected peer id of remote peer, has value for
4541
/// outbound connections
4642
TlsConnection(std::shared_ptr<LayerConnection> original_connection,
4743
std::shared_ptr<boost::asio::ssl::context> ssl_context,
4844
const peer::IdentityManager &idmgr,
49-
tcp_socket_t &tcp_socket,
45+
std::shared_ptr<boost::asio::io_context> io_context,
5046
boost::optional<peer::PeerId> remote_peer);
5147

5248
/// Performs async handshake and passes its result into callback. This fn is
@@ -113,7 +109,7 @@ namespace libp2p::connection {
113109
/// Local peer id
114110
const peer::PeerId local_peer_;
115111

116-
/// Raw TCP connection
112+
/// Raw connection
117113
std::shared_ptr<LayerConnection> original_connection_;
118114

119115
/// SSL context, shared among connections

src/security/tls/tls_details.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -522,8 +522,6 @@ OUTCOME_CPP_DEFINE_CATEGORY(libp2p::security, TlsError, e) {
522522
switch (e) {
523523
case E::TLS_CTX_INIT_FAILED:
524524
return "Cannot initialize SSL context";
525-
case E::TLS_INCOMPATIBLE_TRANSPORT:
526-
return "Incompatible underlying transport";
527525
case E::TLS_NO_CERTIFICATE:
528526
return "No peer certificate";
529527
case E::TLS_INCOMPATIBLE_CERTIFICATE_EXTENSION:

0 commit comments

Comments
 (0)