aboutsummaryrefslogtreecommitdiff
path: root/server/src/client/client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/client/client.cpp')
-rw-r--r--server/src/client/client.cpp58
1 files changed, 57 insertions, 1 deletions
diff --git a/server/src/client/client.cpp b/server/src/client/client.cpp
index 4c458c8..782017f 100644
--- a/server/src/client/client.cpp
+++ b/server/src/client/client.cpp
@@ -16,6 +16,12 @@ bool tcp::client::init_ssl(SSL_CTX *server_ctx) {
}
ret = SSL_accept(m_ssl);
+
+ long result = SSL_get_verify_result(m_ssl);
+
+ auto str = X509_verify_cert_error_string(result);
+ io::logger->info("verify returned {}", str);
+
if (ret <= 0) {
int err = SSL_get_error(m_ssl, ret);
io::logger->error("client {} failed to accept ssl, return code {}", m_ip,
@@ -24,4 +30,54 @@ bool tcp::client::init_ssl(SSL_CTX *server_ctx) {
}
return true;
-} \ No newline at end of file
+}
+
+int tcp::client::stream(std::vector<char> &data) {
+ auto size = data.size();
+
+ auto networked_size = htonl(size);
+ write(&networked_size, sizeof(networked_size));
+
+ // with 4kb chunk size, speed peaks at 90mb/s
+ constexpr size_t chunk_size = 4096;
+ size_t sent = 0;
+
+ while(size > 0) {
+ auto to_send = std::min(size, chunk_size);
+
+ int ret = write(&data[sent], to_send);
+ if(ret <= 0) {
+ break;
+ }
+
+ sent += ret;
+ size -= ret;
+ }
+
+ return sent;
+ }
+
+ int tcp::client::read_stream(std::vector<char> &out) {
+ size_t size;
+ read(&size, sizeof(size));
+
+ size = ntohl(size);
+ out.resize(size);
+
+ constexpr size_t chunk_size = 4096;
+ size_t total = 0;
+
+ while(size > 0) {
+ auto to_read = std::min(size, chunk_size);
+
+ int ret = read(&out[total], to_read);
+ if(ret <= 0) {
+ break;
+ }
+
+ size -= ret;
+ total += ret;
+ }
+
+ return total;
+ } \ No newline at end of file