diff options
author | Håvard Pettersen <havardpe@oath.com> | 2018-09-28 10:57:39 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@oath.com> | 2018-09-28 10:57:39 +0000 |
commit | 56560fa1425f13b9bb225c15536157f67239db31 (patch) | |
tree | d8c7945617efc8c5d4c9ef90b7b829a846118ad4 | |
parent | 763f8e2f35a76bbc15df66843162400fbe136a56 (diff) |
avoid dynamic cast
3 files changed, 9 insertions, 7 deletions
diff --git a/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.cpp b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.cpp index 2c3b2e0bdcc..7d9e0a88a2c 100644 --- a/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.cpp +++ b/vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.cpp @@ -51,10 +51,8 @@ public: } if (looksLikeTlsToMe(src.data)) { CryptoSocket::UP &self = _self; // need copy due to self destruction - auto tls_socket = _factory->create_crypto_socket(std::move(_socket), true); - TlsCryptoSocket *covariant = dynamic_cast<TlsCryptoSocket*>(tls_socket.get()); - assert(covariant != nullptr); - covariant->inject_read_data(src.data, src.size); + auto tls_socket = _factory->create_tls_crypto_socket(std::move(_socket), true); + tls_socket->inject_read_data(src.data, src.size); self = std::move(tls_socket); return self->handshake(); } else { diff --git a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp index 72d9eacf37c..285a53dabc5 100644 --- a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp +++ b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp @@ -11,8 +11,8 @@ TlsCryptoEngine::TlsCryptoEngine(net::tls::TransportSecurityOptions tls_opts) { } -CryptoSocket::UP -TlsCryptoEngine::create_crypto_socket(SocketHandle socket, bool is_server) +std::unique_ptr<TlsCryptoSocket> +TlsCryptoEngine::create_tls_crypto_socket(SocketHandle socket, bool is_server) { auto mode = is_server ? net::tls::CryptoCodec::Mode::Server : net::tls::CryptoCodec::Mode::Client; auto codec = net::tls::CryptoCodec::create_default_codec(*_tls_ctx, mode); diff --git a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h index 58fda2b3b21..b6fda7fd577 100644 --- a/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h +++ b/vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h @@ -3,6 +3,7 @@ #pragma once #include <vespa/vespalib/net/crypto_engine.h> +#include "tls_crypto_socket.h" #include "transport_security_options.h" #include "tls_context.h" @@ -17,7 +18,10 @@ private: std::unique_ptr<net::tls::TlsContext> _tls_ctx; public: TlsCryptoEngine(net::tls::TransportSecurityOptions tls_opts); - CryptoSocket::UP create_crypto_socket(SocketHandle socket, bool is_server) override; + std::unique_ptr<TlsCryptoSocket> create_tls_crypto_socket(SocketHandle socket, bool is_server); + CryptoSocket::UP create_crypto_socket(SocketHandle socket, bool is_server) override { + return create_tls_crypto_socket(std::move(socket), is_server); + } }; } // namespace vespalib |