diff options
Diffstat (limited to 'src/cli/tls_server.cpp')
-rw-r--r-- | src/cli/tls_server.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/cli/tls_server.cpp b/src/cli/tls_server.cpp index 0ec45dc42..fba0aa95f 100644 --- a/src/cli/tls_server.cpp +++ b/src/cli/tls_server.cpp @@ -12,6 +12,7 @@ #include <botan/tls_server.h> #include <botan/hex.h> +#include <botan/internal/os_utils.h> #include "credentials.h" #include <list> @@ -46,7 +47,7 @@ namespace Botan_CLI { class TLS_Server final : public Command { public: - TLS_Server() : Command("tls_server cert key --port=443 --type=tcp --policy=") + TLS_Server() : Command("tls_server cert key --port=443 --type=tcp --policy= --dump-traces=") { #if defined(BOTAN_TARGET_OS_IS_WINDOWS) WSAData wsa_data; @@ -78,6 +79,7 @@ class TLS_Server final : public Command const std::string server_key = get_arg("key"); const int port = get_arg_sz("port"); const std::string transport = get_arg("type"); + const std::string dump_traces_to = get_arg("dump-traces"); if(transport != "tcp" && transport != "udp") { @@ -179,6 +181,16 @@ class TLS_Server final : public Command protocol_chooser, !is_tcp); + std::unique_ptr<std::ostream> dump_stream; + + if(!dump_traces_to.empty()) + { + uint64_t timestamp = Botan::OS::get_high_resolution_clock(); + const std::string dump_file = + dump_traces_to + "/tls_" + std::to_string(timestamp) + ".bin"; + dump_stream.reset(new std::ofstream(dump_file.c_str())); + } + try { while(!server.is_closed()) @@ -188,6 +200,11 @@ class TLS_Server final : public Command uint8_t buf[4 * 1024] = { 0 }; ssize_t got = ::read(fd, buf, sizeof(buf)); + if(dump_stream) + { + dump_stream->write(reinterpret_cast<const char*>(buf), got); + } + if(got == -1) { error_output() << "Error in socket read - " << strerror(errno) << std::endl; |