aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authoralpine <[email protected]>2020-06-15 22:15:02 +0200
committeralpine <[email protected]>2020-06-15 22:15:02 +0200
commitede39016d04b661c7102d8d26c800acb08aa629c (patch)
tree85f82718ab91934f57d15a6860ebdec6cf46be54 /server
parentRemoved xor as it was slowing down everything alot. (diff)
downloadloader-ede39016d04b661c7102d8d26c800acb08aa629c.tar.xz
loader-ede39016d04b661c7102d8d26c800acb08aa629c.zip
Finished session/user id generation.
Diffstat (limited to 'server')
-rw-r--r--server/src/client/client.cpp86
-rw-r--r--server/src/client/client.h13
-rw-r--r--server/src/main.cpp20
-rw-r--r--server/src/server/server.cpp2
4 files changed, 69 insertions, 52 deletions
diff --git a/server/src/client/client.cpp b/server/src/client/client.cpp
index 782017f..c4b4ed6 100644
--- a/server/src/client/client.cpp
+++ b/server/src/client/client.cpp
@@ -17,67 +17,73 @@ 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,
- err);
+ err);
return false;
}
return true;
}
-int tcp::client::stream(std::vector<char> &data) {
- auto size = data.size();
+void tcp::client::gen_uid() {
+ std::random_device r;
+ std::default_random_engine e1(r());
+ std::uniform_int_distribution<int> gen(33, 126);
- auto networked_size = htonl(size);
- write(&networked_size, sizeof(networked_size));
+ for(int i = 0; i < uid_len; i++) {
+ auto k = static_cast<char>(gen(e1));
+ m_uid.insert(m_uid.end(), k);
+ }
+}
- // with 4kb chunk size, speed peaks at 90mb/s
- constexpr size_t chunk_size = 4096;
- size_t sent = 0;
+int tcp::client::stream(std::vector<char> &data) {
+ auto size = data.size();
- while(size > 0) {
- auto to_send = std::min(size, chunk_size);
+ auto networked_size = htonl(size);
+ write(&networked_size, sizeof(networked_size));
- int ret = write(&data[sent], to_send);
- if(ret <= 0) {
- break;
- }
+ // with 4kb chunk size, speed peaks at 90mb/s
+ constexpr size_t chunk_size = 4096;
+ size_t sent = 0;
- sent += ret;
- size -= ret;
+ while (size > 0) {
+ auto to_send = std::min(size, chunk_size);
+
+ int ret = write(&data[sent], to_send);
+ if (ret <= 0) {
+ break;
}
- return sent;
+ sent += ret;
+ size -= ret;
}
- int tcp::client::read_stream(std::vector<char> &out) {
- size_t size;
- read(&size, sizeof(size));
+ return sent;
+}
+
+int tcp::client::read_stream(std::vector<char> &out) {
+ size_t size;
+ read(&size, sizeof(size));
- size = ntohl(size);
- out.resize(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);
+ constexpr size_t chunk_size = 4096;
+ size_t total = 0;
- int ret = read(&out[total], to_read);
- if(ret <= 0) {
- break;
- }
+ while (size > 0) {
+ auto to_read = std::min(size, chunk_size);
- size -= ret;
- total += ret;
+ int ret = read(&out[total], to_read);
+ if (ret <= 0) {
+ break;
}
- return total;
- } \ No newline at end of file
+ size -= ret;
+ total += ret;
+ }
+
+ return total;
+} \ No newline at end of file
diff --git a/server/src/client/client.h b/server/src/client/client.h
index 28094ba..106b2c1 100644
--- a/server/src/client/client.h
+++ b/server/src/client/client.h
@@ -28,17 +28,18 @@ class client {
}
int write(void *data, size_t size) { return SSL_write(m_ssl, data, size); }
-
+ int write(const packet_t &packet) {
+ return SSL_write(m_ssl, 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 read_stream(std::vector<char> &out);
- void set_uid(const std::string_view uid_str) { m_uid = uid_str; }
+ void gen_uid();
- int &get_socket() { return m_socket; }
- auto &get_ip() { return m_ip; }
- auto &get_uid() { return m_uid; }
+ int get_socket() { return m_socket; }
+ auto get_ip() { return m_ip; }
+ auto get_uid() { return m_uid; }
};
}; // namespace tcp \ No newline at end of file
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 21cad38..1dfdb39 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -12,12 +12,23 @@ int main(int argc, char *argv[]) {
server.connect_event.add([&](tcp::client &client) {
io::logger->info("{} connected.", client.get_ip());
+
+ // generate unique client uid
+ client.gen_uid();
+
+ io::logger->info("generated session id {} for {}", client.get_uid(),
+ client.get_ip());
+
+ // send the assigned uid to client
+ tcp::packet_t packet(client.get_uid(), tcp::packet_type::write);
+ client.write(packet);
});
server.disconnect_event.add([&](tcp::client &client) {
- auto it = std::find_if(server.client_stack.begin(), server.client_stack.end(), [&](tcp::client &c) {
- return client.get_socket() == client.get_socket();
- });
+ auto it = std::find_if(server.client_stack.begin(),
+ server.client_stack.end(), [&](tcp::client &c) {
+ return client.get_socket() == client.get_socket();
+ });
server.client_stack.erase(it);
client.cleanup();
@@ -31,12 +42,11 @@ int main(int argc, char *argv[]) {
io::logger->info("{} : {}", packet.uid.data(), packet.message);
tcp::packet_t resp("stream", tcp::packet_type::write, "1234567890");
- client.write(resp.message.data(), resp.message.size());
+ client.write(resp);
std::vector<char> out;
io::read_file("test.dll", out);
client.stream(out);
-
});
std::thread t{tcp::server::monitor, std::ref(server)};
diff --git a/server/src/server/server.cpp b/server/src/server/server.cpp
index b140665..e0262d7 100644
--- a/server/src/server/server.cpp
+++ b/server/src/server/server.cpp
@@ -128,7 +128,7 @@ void tcp::server::receive() {
const int read = c.read(&buf[0], buf.size());
if (read > 0) {
std::string msg(buf.data(), read);
-
+
tcp::packet_t packet(msg, tcp::packet_type::read);
receive_event.call(packet, c);