summaryrefslogtreecommitdiff
path: root/src/io-tls/tls.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/io-tls/tls.h')
-rw-r--r--src/io-tls/tls.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/io-tls/tls.h b/src/io-tls/tls.h
new file mode 100644
index 0000000..74b39ff
--- /dev/null
+++ b/src/io-tls/tls.h
@@ -0,0 +1,68 @@
+#pragma once
+
+#include <forstio/core/common.h>
+#include <forstio/io/io.h>
+
+#include <optional>
+#include <variant>
+
+namespace saw {
+class tls;
+
+class tls_server final : public server {
+private:
+ own<server> internal;
+
+public:
+ tls_server(own<server> srv);
+
+ conveyor<own<io_stream>> accept() override;
+};
+
+class tls_network final : public network {
+private:
+ tls& tls_;
+ network &internal;
+public:
+ tls_network(tls& tls_, network &network_);
+
+ conveyor<own<network_address>> resolve_address(const std::string &addr, uint16_t port = 0) override;
+
+ own<server> listen(network_address& address) override;
+
+ conveyor<own<io_stream>> connect(network_address& address) override;
+
+ own<class datagram> 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> 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_;
+};
+
+std::optional<own<tls_network>> setup_tls_network(network &network);
+
+} // namespace saw