70 lines
1.1 KiB
C++
70 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "../common.h"
|
|
#include "../io.h"
|
|
|
|
#include <optional>
|
|
#include <variant>
|
|
|
|
namespace saw {
|
|
class Tls {
|
|
private:
|
|
class Impl;
|
|
Own<Impl> impl;
|
|
|
|
public:
|
|
Tls();
|
|
~Tls();
|
|
|
|
class Options {
|
|
public:
|
|
};
|
|
|
|
Impl &getImpl();
|
|
};
|
|
|
|
class TlsServer final : public Server {
|
|
private:
|
|
Own<Server> internal;
|
|
|
|
public:
|
|
TlsServer(Own<Server> srv);
|
|
|
|
Conveyor<Own<IoStream>> accept() override;
|
|
};
|
|
|
|
class TlsNetworkAddress final : public NetworkAddress {
|
|
private:
|
|
Own<NetworkAddress> internal;
|
|
std::string host_name;
|
|
Tls &tls;
|
|
|
|
public:
|
|
TlsNetworkAddress(Own<NetworkAddress> net_addr, const std::string& host_name_, Tls &tls_);
|
|
|
|
Own<Server> listen() override;
|
|
|
|
Conveyor<Own<IoStream>> connect() override;
|
|
|
|
std::string toString() const override;
|
|
|
|
const std::string &address() const override;
|
|
uint16_t port() const override;
|
|
};
|
|
|
|
class TlsNetwork final : public Network {
|
|
private:
|
|
Tls tls;
|
|
Network &internal;
|
|
|
|
public:
|
|
TlsNetwork(Network &network);
|
|
|
|
Conveyor<Own<NetworkAddress>> parseAddress(const std::string &addr,
|
|
uint16_t port = 0) override;
|
|
};
|
|
|
|
std::optional<Own<TlsNetwork>> setupTlsNetwork(Network &network);
|
|
|
|
} // namespace saw
|