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
6
bool StartTlsSocket::startSecureTransport() {
10
6
  if (!using_tls_) {
11
5
    tls_socket_->setTransportSocketCallbacks(callbacks_);
12
5
    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
5
    active_socket_ = std::move(tls_socket_);
20
5
    callbacks_.connection().connectionInfoSetter().setSslConnection(active_socket_->ssl());
21
5
    using_tls_ = true;
22
5
  }
23
6
  return true;
24
6
}
25

            
26
Network::TransportSocketPtr StartTlsSocketFactory::createTransportSocket(
27
    Network::TransportSocketOptionsConstSharedPtr transport_socket_options,
28
2
    Upstream::HostDescriptionConstSharedPtr host) const {
29
2
  return std::make_unique<StartTlsSocket>(
30
2
      raw_socket_factory_->createTransportSocket(transport_socket_options, host),
31
2
      tls_socket_factory_->createTransportSocket(transport_socket_options, host),
32
2
      transport_socket_options);
33
2
}
34

            
35
Network::TransportSocketPtr
36
2
StartTlsDownstreamSocketFactory::createDownstreamTransportSocket() const {
37
2
  return std::make_unique<StartTlsSocket>(raw_socket_factory_->createDownstreamTransportSocket(),
38
2
                                          tls_socket_factory_->createDownstreamTransportSocket(),
39
2
                                          nullptr);
40
2
}
41

            
42
} // namespace StartTls
43
} // namespace TransportSockets
44
} // namespace Extensions
45
} // namespace Envoy