aboutsummaryrefslogtreecommitdiff
path: root/server/src/client/client.cpp
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/client.cpp
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/client.cpp')
-rw-r--r--server/src/client/client.cpp21
1 files changed, 15 insertions, 6 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;
}