#pragma once #include #include #include #include namespace saw { namespace net { template struct Tls {}; } class tls; /** * 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; }; impl &get_impl(); private: options options_; }; template class network> { public: virtual ~network() = default; /** * Resolve the provided string and uint16 to the preferred storage method */ virtual conveyor>>> resolve_address(const std::string &addr, uint16_t port_hint = 0) = 0; /** * Parse the provided string and uint16 to the preferred storage method * Since no dns request is made here, no async conveyors have to be used. */ virtual error_or>>> parse_address(const std::string &addr, uint16_t port_hint = 0) = 0; /** * Set up a listener on this address */ virtual error_or>> listen(network_address &bind_addr) = 0; /** * Connect to a remote address */ virtual conveyor>> connect(network_address &address) = 0; }; template error_or>>> setup_tls_network(network &network); } // namespace saw