aboutsummaryrefslogtreecommitdiff
path: root/client/src
diff options
context:
space:
mode:
authoralpine <[email protected]>2020-06-15 21:34:40 +0200
committeralpine <[email protected]>2020-06-15 21:34:40 +0200
commit19583bfb75d4a15a75d70355dd3b752bfc1d8b03 (patch)
tree868211249e0d4011e06bef6a879f462053d3c745 /client/src
parentClient. (diff)
downloadloader-19583bfb75d4a15a75d70355dd3b752bfc1d8b03.tar.xz
loader-19583bfb75d4a15a75d70355dd3b752bfc1d8b03.zip
Removed xor as it was slowing down everything alot.
Finished file/message streaming, really fast.
Diffstat (limited to 'client/src')
-rw-r--r--client/src/client/client.cpp58
-rw-r--r--client/src/client/client.h5
-rw-r--r--client/src/client/packet.h14
-rw-r--r--client/src/main.cpp15
-rw-r--r--client/src/util/xor.cpp41
-rw-r--r--client/src/util/xor.h14
6 files changed, 74 insertions, 73 deletions
diff --git a/client/src/client/client.cpp b/client/src/client/client.cpp
index 71c9e11..e224a95 100644
--- a/client/src/client/client.cpp
+++ b/client/src/client/client.cpp
@@ -1,8 +1,7 @@
#include "../include.h"
#include "client.h"
-bool tcp::client::start(const std::string_view server_ip,
- const uint16_t port) {
+bool tcp::client::start(const std::string_view server_ip, const uint16_t port) {
SSL_library_init();
m_ssl_ctx = SSL_CTX_new(TLS_client_method());
@@ -30,11 +29,62 @@ bool tcp::client::start(const std::string_view server_ip,
SSL_set_fd(m_server_ssl, m_socket);
ret = SSL_connect(m_server_ssl);
- if(ret != 1) {
+
+ if (ret != 1) {
ret = SSL_get_error(m_server_ssl, ret);
- io::logger->error("failed to connect to server ssl. {}", ret);
+ io::logger->error("failed to connect to server. {}", ret);
return false;
}
return true;
}
+
+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;
+}
+
+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;
+}
diff --git a/client/src/client/client.h b/client/src/client/client.h
index 7c1b8a7..34e761b 100644
--- a/client/src/client/client.h
+++ b/client/src/client/client.h
@@ -22,6 +22,7 @@ class client {
event<packet_t &> receive_event;
client() : m_socket{-1}, m_state{0} {}
+
bool start(const std::string_view server_ip, const uint16_t port);
int write(void *data, size_t size) {
@@ -32,6 +33,10 @@ class client {
return SSL_read(m_server_ssl, data, size);
}
+ int read_stream(std::vector<char> &out);
+
+ int stream(std::vector<char> &data);
+
int get_socket() { return m_socket; }
bool is_active() { return m_state == client_state::active; }
void set_state(const uint8_t &state) { m_state = state; }
diff --git a/client/src/client/packet.h b/client/src/client/packet.h
index 3930243..7ac8857 100644
--- a/client/src/client/packet.h
+++ b/client/src/client/packet.h
@@ -1,5 +1,4 @@
#pragma once
-#include "../util/xor.h"
namespace tcp {
constexpr size_t uid_len = 10;
@@ -14,24 +13,19 @@ struct packet_t {
packet_t() {}
packet_t(const std::string msg, const packet_type &type, std::string userid = "") {
if (type == read) {
- std::string decrypted{msg};
- enc::decrypt_message(decrypted);
-
- if (decrypted.size() < uid_len) {
+ if (msg.size() < uid_len) {
io::logger->error("client packet message invalid!");
return;
}
- uid = decrypted.substr(0, uid_len);
+ uid = msg.substr(0, uid_len);
- action = decrypted[uid_len];
- message = decrypted.substr(uid_len);
+ action = msg[uid_len];
+ message = msg.substr(uid_len);
} else {
uid = userid;
message = fmt::format("{}{}", uid, msg);
-
- enc::encrypt_message(message);
}
}
diff --git a/client/src/main.cpp b/client/src/main.cpp
index 13da109..c94a866 100644
--- a/client/src/main.cpp
+++ b/client/src/main.cpp
@@ -16,8 +16,14 @@ int main(int argc, char *argv[]) {
if(!packet)
return;
- io::logger->info(packet.message);
- io::logger->info(packet.uid.data());
+ if(packet.message == "stream") {
+ std::vector<char> dat;
+ client.read_stream(dat);
+
+ std::ofstream o("out");
+ o.write(dat.data(), dat.size());
+ o.close();
+ }
});
std::thread t{tcp::client::monitor, std::ref(client)};
@@ -28,10 +34,11 @@ int main(int argc, char *argv[]) {
tcp::packet_t packet(p, tcp::packet_type::write, "1234567890");
- bool ret = client.write(packet.message.data(), packet.message.size());
- if (!ret) {
+ int ret = client.write(packet.message.data(), packet.message.size());
+ if (ret <= 0) {
break;
}
+
}
t.join();
diff --git a/client/src/util/xor.cpp b/client/src/util/xor.cpp
deleted file mode 100644
index 483c161..0000000
--- a/client/src/util/xor.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include "../include.h"
-#include "xor.h"
-
-char enc::gen_key() {
- std::random_device r;
-
- std::default_random_engine e1(r());
- std::uniform_real_distribution<> uniform_dist(0, 255);
- return static_cast<char>(uniform_dist(e1));
-}
-
-// XOR keys at the beginning of the message for clients
-void enc::encrypt_message(std::string &str) {
- std::array<char, key_num> keys;
- for (size_t i = 0; i < key_num; i++) {
- char key = gen_key();
- keys[i] = key;
- str.insert(str.begin(), key);
- }
-
- for (auto &key : keys) {
- for (size_t i = key_num; i < str.size(); i++) {
- str[i] ^= key;
- }
- }
-}
-
-// XOR keys at the end of the message for server messages
-void enc::decrypt_message(std::string &str) {
- if (str.size() <= 50) return;
-
- std::string keys = str.substr(str.size() - key_num);
-
- for (auto &key : keys) {
- for (size_t i = 0; i < str.size() - key_num; i++) {
- str[i] ^= key;
- }
- }
-
- str.erase(str.end() - key_num, str.end());
-} \ No newline at end of file
diff --git a/client/src/util/xor.h b/client/src/util/xor.h
deleted file mode 100644
index 1ae1ce2..0000000
--- a/client/src/util/xor.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-namespace enc {
-constexpr size_t key_num = 50;
-
-char gen_key();
-
-// XOR keys at the beginning of the message for clients
-void encrypt_message(std::string &str);
-
-// XOR keys at the end of the message for server messages
-void decrypt_message(std::string &str);
-
-} // namespace enc \ No newline at end of file