Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/network/connection.h" 4 : #include "envoy/network/transport_socket.h" 5 : 6 : #include "source/common/buffer/buffer_impl.h" 7 : #include "source/common/network/transport_socket_options_impl.h" 8 : #include "source/common/runtime/runtime_features.h" 9 : 10 : namespace Envoy { 11 : namespace Extensions { 12 : namespace TransportSockets { 13 : 14 : class PassthroughFactory : public Network::CommonUpstreamTransportSocketFactory { 15 : public: 16 : PassthroughFactory(Network::UpstreamTransportSocketFactoryPtr&& transport_socket_factory) 17 0 : : transport_socket_factory_(std::move(transport_socket_factory)) { 18 0 : ASSERT(transport_socket_factory_ != nullptr); 19 0 : } 20 : 21 0 : bool implementsSecureTransport() const override { 22 0 : return transport_socket_factory_->implementsSecureTransport(); 23 0 : } 24 0 : bool supportsAlpn() const override { return transport_socket_factory_->supportsAlpn(); } 25 0 : absl::string_view defaultServerNameIndication() const override { 26 0 : return transport_socket_factory_->defaultServerNameIndication(); 27 0 : } 28 : void hashKey(std::vector<uint8_t>& key, 29 0 : Network::TransportSocketOptionsConstSharedPtr options) const override { 30 0 : return transport_socket_factory_->hashKey(key, options); 31 0 : } 32 0 : Envoy::Ssl::ClientContextSharedPtr sslCtx() override { 33 0 : return transport_socket_factory_->sslCtx(); 34 0 : } 35 0 : OptRef<const Ssl::ClientContextConfig> clientContextConfig() const override { 36 0 : return transport_socket_factory_->clientContextConfig(); 37 0 : } 38 0 : std::shared_ptr<quic::QuicCryptoClientConfig> getCryptoConfig() override { 39 0 : return transport_socket_factory_->getCryptoConfig(); 40 0 : } 41 : 42 : protected: 43 : // The wrapped factory. 44 : Network::UpstreamTransportSocketFactoryPtr transport_socket_factory_; 45 : }; 46 : 47 : class DownstreamPassthroughFactory : public Network::DownstreamTransportSocketFactory { 48 : public: 49 : DownstreamPassthroughFactory( 50 : Network::DownstreamTransportSocketFactoryPtr&& transport_socket_factory) 51 0 : : transport_socket_factory_(std::move(transport_socket_factory)) { 52 0 : ASSERT(transport_socket_factory_ != nullptr); 53 0 : } 54 : 55 0 : bool implementsSecureTransport() const override { 56 0 : return transport_socket_factory_->implementsSecureTransport(); 57 0 : } 58 : 59 : protected: 60 : // The wrapped factory. 61 : Network::DownstreamTransportSocketFactoryPtr transport_socket_factory_; 62 : }; 63 : 64 : class PassthroughSocket : public Network::TransportSocket { 65 : public: 66 : PassthroughSocket(Network::TransportSocketPtr&& transport_socket); 67 : 68 : void setTransportSocketCallbacks(Network::TransportSocketCallbacks& callbacks) override; 69 : std::string protocol() const override; 70 : absl::string_view failureReason() const override; 71 : bool canFlushClose() override; 72 : Api::SysCallIntResult connect(Network::ConnectionSocket& socket) override; 73 : void closeSocket(Network::ConnectionEvent event) override; 74 : Network::IoResult doRead(Buffer::Instance& buffer) override; 75 : Network::IoResult doWrite(Buffer::Instance& buffer, bool end_stream) override; 76 : void onConnected() override; 77 : Ssl::ConnectionInfoConstSharedPtr ssl() const override; 78 : // startSecureTransport method should not be called for this transport socket. 79 0 : bool startSecureTransport() override { return false; } 80 : void configureInitialCongestionWindow(uint64_t bandwidth_bits_per_sec, 81 : std::chrono::microseconds rtt) override; 82 : 83 : protected: 84 : Network::TransportSocketPtr transport_socket_; 85 : }; 86 : 87 : } // namespace TransportSockets 88 : } // namespace Extensions 89 : } // namespace Envoy