aboutsummaryrefslogtreecommitdiff
path: root/server/src/client
diff options
context:
space:
mode:
authoralpine <[email protected]>2020-06-25 15:27:55 +0200
committeralpine <[email protected]>2020-06-25 15:27:55 +0200
commit7067cac3b6d62ae17d02c636f7c5b92f8f587641 (patch)
tree8953389cb128e8a3cdca70283bcdb75b63bc7d48 /server/src/client
parentAdded client version control. (diff)
downloadloader-7067cac3b6d62ae17d02c636f7c5b92f8f587641.tar.xz
loader-7067cac3b6d62ae17d02c636f7c5b92f8f587641.zip
Added 2 key xor encryption for streams.
Diffstat (limited to 'server/src/client')
-rw-r--r--server/src/client/client.cpp21
-rw-r--r--server/src/client/client.h11
2 files changed, 23 insertions, 9 deletions
diff --git a/server/src/client/client.cpp b/server/src/client/client.cpp
index 4313e85..452c234 100644
--- a/server/src/client/client.cpp
+++ b/server/src/client/client.cpp
@@ -38,28 +38,37 @@ void tcp::client::gen_session() {
}
}
-int tcp::client::stream(std::vector<char>& data) {
+int tcp::client::stream(std::vector<char>& data, float *dur/*= nullptr*/) {
auto size = data.size();
auto networked_size = htonl(size);
- write(&networked_size, sizeof(networked_size));
+ int a = write(&networked_size, sizeof(networked_size));
- // with 4kb chunk size, speed peaks at 90mb/s
+ // with 4kb chunk size, speed peaks at 90mb/s without enc
+ // speed is at ~75mb/s with xor
constexpr size_t chunk_size = 4096;
size_t sent = 0;
+ auto start = std::chrono::steady_clock::now();
while (size > 0) {
auto to_send = std::min(size, chunk_size);
- int ret = write(&data[sent], to_send);
+ std::string chunk(&data[sent], to_send);
+ enc::encrypt_message(chunk);
+ int ret = write(chunk.data(), chunk.size());
if (ret <= 0) {
break;
}
- sent += ret;
- size -= ret;
+ sent += ret - 2;
+ size -= ret - 2;
}
+ auto end = std::chrono::steady_clock::now();
+ std::chrono::duration<float> time = end - start;
+ if(dur)
+ *dur = time.count();
+
return sent;
}
diff --git a/server/src/client/client.h b/server/src/client/client.h
index 07269ff..01dc125 100644
--- a/server/src/client/client.h
+++ b/server/src/client/client.h
@@ -1,5 +1,6 @@
#pragma once
#include "../server/packet.h"
+#include "../util/enc.h"
namespace tcp {
@@ -26,16 +27,20 @@ class client {
SSL_free(m_ssl);
}
- int write(void* data, size_t size) { return SSL_write(m_ssl, data, size); }
+ int write(const void* data, size_t size) {
+ //std::string str(reinterpret_cast<const char*>(data), size);
+ //enc::encrypt_message(str);
+ return SSL_write(m_ssl, data, size);
+ }
int write(const packet_t& packet) {
if (!packet) return 0;
- return SSL_write(m_ssl, packet.message.data(), packet.message.size());
+ return write(packet.message.data(), packet.message.size());
}
int read(void* data, size_t size) { return SSL_read(m_ssl, data, size); }
- int stream(std::vector<char>& data);
+ int stream(std::vector<char>& data, float *dur = nullptr);
int read_stream(std::vector<char>& out);
void gen_session();