Line data Source code
1 : #include "source/extensions/transport_sockets/starttls/starttls_socket.h" 2 : 3 : namespace Envoy { 4 : namespace Extensions { 5 : namespace TransportSockets { 6 : namespace StartTls { 7 : 8 : // Switch clear-text to secure transport. 9 0 : bool StartTlsSocket::startSecureTransport() { 10 0 : if (!using_tls_) { 11 0 : tls_socket_->setTransportSocketCallbacks(callbacks_); 12 0 : tls_socket_->onConnected(); 13 : // TODO(cpakulski): deleting active_socket_ assumes 14 : // that active_socket_ does not contain any buffered data. 15 : // Currently, active_socket_ is initialized to raw_buffer, which does not 16 : // buffer. If active_socket_ is initialized to a transport socket which 17 : // does buffering, it should be flushed before destroying or 18 : // flush should be called from destructor. 19 0 : active_socket_ = std::move(tls_socket_); 20 0 : callbacks_.connection().connectionInfoSetter().setSslConnection(active_socket_->ssl()); 21 0 : using_tls_ = true; 22 0 : } 23 0 : return true; 24 0 : } 25 : 26 : Network::TransportSocketPtr StartTlsSocketFactory::createTransportSocket( 27 : Network::TransportSocketOptionsConstSharedPtr transport_socket_options, 28 0 : Upstream::HostDescriptionConstSharedPtr host) const { 29 0 : return std::make_unique<StartTlsSocket>( 30 0 : raw_socket_factory_->createTransportSocket(transport_socket_options, host), 31 0 : tls_socket_factory_->createTransportSocket(transport_socket_options, host), 32 0 : transport_socket_options); 33 0 : } 34 : 35 : Network::TransportSocketPtr 36 0 : StartTlsDownstreamSocketFactory::createDownstreamTransportSocket() const { 37 0 : return std::make_unique<StartTlsSocket>(raw_socket_factory_->createDownstreamTransportSocket(), 38 0 : tls_socket_factory_->createDownstreamTransportSocket(), 39 0 : nullptr); 40 0 : } 41 : 42 : } // namespace StartTls 43 : } // namespace TransportSockets 44 : } // namespace Extensions 45 : } // namespace Envoy