diff options
author | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-10-19 18:41:26 +0200 |
---|---|---|
committer | Claudius 'keldu' Holeksa <mail@keldu.de> | 2024-10-19 18:41:26 +0200 |
commit | ab8371327296d3435308b21b463fbdb4569d8763 (patch) | |
tree | df1856a6b3e2cbb110bf2f6869289c3930a8c412 | |
parent | 7ea851ddceafb03a6a789451063c0158f2df25a7 (diff) |
Preparing for tls server example
-rw-r--r-- | modules/io-tls/c++/tls.hpp | 4 | ||||
-rw-r--r-- | modules/io-tls/c++/tls.tmpl.hpp | 20 | ||||
-rw-r--r-- | modules/io-tls/examples/tls_echo_server.cpp | 21 |
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; +} |