summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudius 'keldu' Holeksa <mail@keldu.de>2024-10-19 18:41:26 +0200
committerClaudius 'keldu' Holeksa <mail@keldu.de>2024-10-19 18:41:26 +0200
commitab8371327296d3435308b21b463fbdb4569d8763 (patch)
treedf1856a6b3e2cbb110bf2f6869289c3930a8c412
parent7ea851ddceafb03a6a789451063c0158f2df25a7 (diff)
Preparing for tls server example
-rw-r--r--modules/io-tls/c++/tls.hpp4
-rw-r--r--modules/io-tls/c++/tls.tmpl.hpp20
-rw-r--r--modules/io-tls/examples/tls_echo_server.cpp21
3 files changed, 34 insertions, 11 deletions
diff --git a/modules/io-tls/c++/tls.hpp b/modules/io-tls/c++/tls.hpp
index df21c81..4126a9f 100644
--- a/modules/io-tls/c++/tls.hpp
+++ b/modules/io-tls/c++/tls.hpp
@@ -77,7 +77,9 @@ public:
/**
* Set up a listener on this address
*/
- virtual error_or<own<server<net::Tls<T>>>> listen(network_address<net::Tls<T>> &bind_addr, const std::string& key_file) = 0;
+ virtual error_or<own<server<net::Tls<T>>>> listen(network_address<net::Tls<T>> &bind_addr,
+ const std::string& key_file, const std::string& cert_file, const std::string& crl_file, const std::string& ca_file
+ ) = 0;
/**
* Connect to a remote address
diff --git a/modules/io-tls/c++/tls.tmpl.hpp b/modules/io-tls/c++/tls.tmpl.hpp
index 8c2ba83..46b00d4 100644
--- a/modules/io-tls/c++/tls.tmpl.hpp
+++ b/modules/io-tls/c++/tls.tmpl.hpp
@@ -134,7 +134,9 @@ public:
return make_error<err::not_implemented>();
}
- error_or<own<server<net::Tls<T>>>> listen(network_address<net::Tls<T>>& address) override;
+ error_or<own<server<net::Tls<T>>>> listen(network_address<net::Tls<T>>& address,
+ const std::string& key_file, const std::string& cert_file, const std::string& crl_file, const std::string& ca_file
+ ) override;
conveyor<own<io_stream<net::Tls<T>>>> connect(network_address<net::Tls<T>>& address) override;
};
@@ -198,25 +200,23 @@ public:
}
template<typename T>
-error_or<own<server<net::Tls<T>>>> tls_network<T>::listen(network_address<net::Tls<T>>& address) {
+error_or<own<server<net::Tls<T>>>> tls_network<T>::listen(network_address<net::Tls<T>>& address,
+ const std::string& key_file, const std::string& cert_file, const std::string& crl_file, const std::string& ca_file
+ ) {
gnutls_certificate_credentials_t x509_cred;
gnutls_certificate_allocate_credentials(&x509_cred);
- std::string KEYFILE = "key.pem";
- std::string CERTFILE = "cert.pem";
- std::string CAFILE = "/etc/ssl/certs/ca-certificates.crt";
- std::string CRLFILE = "crl.pem";
std::string OCSP_STATUS_FILE = "ocsp-status.der";
- gnutls_certificate_set_x509_trust_file(x509_cred, CAFILE.c_str(), GNUTLS_X509_FMT_PEM);
- gnutls_certificate_set_x509_crl_file(x509_cred, CRLFILE.c_str(), GNUTLS_X509_FMT_PEM);
- gnutls_certificate_set_x509_key_file(x509_cred, CERTFILE.c_str(), KEYFILE.c_str(), GNUTLS_X509_FMT_PEM);
+ gnutls_certificate_set_x509_trust_file(x509_cred, ca_file.c_str(), GNUTLS_X509_FMT_PEM);
+ gnutls_certificate_set_x509_crl_file(x509_cred, crl_file.c_str(), GNUTLS_X509_FMT_PEM);
+ gnutls_certificate_set_x509_key_file(x509_cred, cert_file.c_str(), key_file.c_str(), GNUTLS_X509_FMT_PEM);
gnutls_certificate_set_ocsp_status_request_file(x509_cred, OCSP_STATUS_FILE.c_str(), 0);
auto int_srv = internal_().listen(address.get_handle());
- own<server<net::Tls<T>>> tls_srv = heap<tls_server<T>>(std::move(int_srv), x509_cred);
+ own<server<net::Tls<T>>> tls_srv = heap<tls_server<T>>(std::move(int_srv), x509_cred, key_file, cert_file, crl_file, ca_file);
return tls_srv;
}
diff --git a/modules/io-tls/examples/tls_echo_server.cpp b/modules/io-tls/examples/tls_echo_server.cpp
new file mode 100644
index 0000000..7ceacb5
--- /dev/null
+++ b/modules/io-tls/examples/tls_echo_server.cpp
@@ -0,0 +1,21 @@
+#include <forstio/error.hpp>
+
+#include "../c++/tls.hpp"
+
+saw::error_or<void> real_main(){
+ using namespace saw;
+
+
+
+ return make_void();
+}
+
+int main(){
+ auto eov = real_main();
+ if(eov.is_error()){
+ auto& err = eov.get_error();
+ std::cerr<<"[Error]: "<<err.get_category()<<" - "<<err.get_message()<<std::endl;
+ return err.get_id();
+ }
+ return 0;
+}