summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@oath.com>2018-09-28 10:57:39 +0000
committerHåvard Pettersen <havardpe@oath.com>2018-09-28 10:57:39 +0000
commit56560fa1425f13b9bb225c15536157f67239db31 (patch)
treed8c7945617efc8c5d4c9ef90b7b829a846118ad4
parent763f8e2f35a76bbc15df66843162400fbe136a56 (diff)
avoid dynamic cast
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/maybe_tls_crypto_socket.cpp6
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.cpp4
-rw-r--r--vespalib/src/vespa/vespalib/net/tls/tls_crypto_engine.h6
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