#pragma once #include #include #include #include namespace saw { class Tls; class TlsServer final : public server { private: own internal; public: TlsServer(own srv); conveyor> accept() override; }; class TlsNetwork final : public network { private: Tls& tls; network &internal; public: TlsNetwork(Tls& tls_, network &network_); conveyor> resolve_address(const std::string &addr, uint16_t port = 0) override; own listen(network_address& address) override; conveyor> connect(network_address& address) override; own datagram(network_address& address) override; }; /** * Tls context class. * Provides tls network class which ensures the usage of tls encrypted connections */ class Tls { private: class Impl; own impl; public: Tls(); ~Tls(); struct Version { struct Tls_1_0{}; struct Tls_1_1{}; struct Tls_1_2{}; }; struct Options { public: Version version; }; network& tlsNetwork(); Impl &getImpl(); private: Options options; }; std::optional> setupTlsNetwork(network &network); } // namespace saw