aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authorauth <[email protected]>2020-06-30 23:31:36 +0200
committerauth <[email protected]>2020-06-30 23:31:36 +0200
commitd96c27220ad100b61332a0ac91bdb0300ef7e3be (patch)
tree3cd6289e6aa4c2a16621a2914ab68c2f723c6f00 /server/src
parentAdded json. (diff)
downloadloader-d96c27220ad100b61332a0ac91bdb0300ef7e3be.tar.xz
loader-d96c27220ad100b61332a0ac91bdb0300ef7e3be.zip
Added json implementation for packets.
Added useful operators for packet and server class for easier access.
Diffstat (limited to 'server/src')
-rw-r--r--server/src/main.cpp25
-rw-r--r--server/src/server/packet.h30
-rw-r--r--server/src/server/server.h3
3 files changed, 27 insertions, 31 deletions
diff --git a/server/src/main.cpp b/server/src/main.cpp
index 7b96ff3..f5b58be 100644
--- a/server/src/main.cpp
+++ b/server/src/main.cpp
@@ -9,15 +9,6 @@ constexpr std::string_view client_version{"0.1.0"};
int main(int argc, char* argv[]) {
io::init(false);
- pe::image test("out");
-
- for(auto&[mod, imports] : test.imports()) {
- io::logger->info(mod);
- for(auto &i : imports) {
- io::logger->info(" {}->{:x}", i.name, i.rva);
- }
- }
-
tcp::server client_server("6666");
client_server.start();
@@ -32,12 +23,12 @@ int main(int argc, char* argv[]) {
});
client_server.disconnect_event.add([&](tcp::client& client) {
- auto it = std::find_if(client_server.client_stack.begin(),
- client_server.client_stack.end(), [&](tcp::client& c) {
- return client.get_socket() == client.get_socket();
+ auto it = std::find_if(client_server().begin(),
+ client_server().end(), [&](tcp::client& c) {
+ return client.get_socket() == c.get_socket();
});
- client_server.client_stack.erase(it);
+ client_server().erase(it);
client.cleanup();
io::logger->info("{} disconnected", client.get_ip());
@@ -47,10 +38,10 @@ int main(int argc, char* argv[]) {
auto session = client.get_session();
auto packet_session = packet.session_id;
auto ip = client.get_ip();
- auto message = packet.message;
+ auto message = packet();
if (!packet) {
- io::logger->info("{} sent invalid packet", ip);
+ io::logger->info("{} sent invalid packet, id {}", ip, packet.id);
return;
}
@@ -59,9 +50,9 @@ int main(int argc, char* argv[]) {
return;
}
- io::logger->info("{} : {}", packet_session, packet.message);
+ io::logger->info("{} : {}", packet_session, message);
- tcp::packet_t resp(packet.message, tcp::packet_type::write,
+ tcp::packet_t resp(message, tcp::packet_type::write,
client.get_session());
client.write(resp);
diff --git a/server/src/server/packet.h b/server/src/server/packet.h
index 3c27c2d..a385960 100644
--- a/server/src/server/packet.h
+++ b/server/src/server/packet.h
@@ -1,41 +1,44 @@
#pragma once
#include "enc.h"
+#include <json.hpp>
+
namespace tcp {
constexpr size_t session_id_len = 10;
-constexpr size_t message_len = 256 + session_id_len;
+constexpr size_t message_len = 1024;
enum packet_type : int { write = 0, read };
struct packet_t {
std::string message;
- char action;
std::string session_id;
+ int id;
packet_t() {}
packet_t(const std::string_view msg, const packet_type& type,
std::string_view session = "") {
if (type == read) {
- if (msg.size() < session_id_len) {
- io::logger->error("packet message invalid!");
- return;
- }
+ ++id;
message = msg;
enc::decrypt_message(message);
- session_id = message.substr(0, session_id_len);
- action = message[session_id_len];
- message = message.substr(session_id_len);
- } else {
- if (msg.size() > message_len) {
- io::logger->error("packet message exceeds limit");
+ if (!nlohmann::json::accept(message)) {
+ io::logger->error("message isn't valid json");
return;
}
+ auto json = nlohmann::json::parse(message);
+ message = json["message"];
+ session_id = json["session_id"];
+ } else {
+ nlohmann::json json;
+ json["session_id"] = session;
+ json["message"] = msg.data();
+
+ message = json.dump();
session_id = session;
- message = fmt::format("{}{}", session_id, msg);
enc::encrypt_message(message);
}
}
@@ -46,5 +49,6 @@ struct packet_t {
}
operator bool() const { return !message.empty() && !session_id.empty(); }
+ auto &operator()() { return message; }
};
}; // namespace tcp
diff --git a/server/src/server/server.h b/server/src/server/server.h
index 9d594a0..90c31f7 100644
--- a/server/src/server/server.h
+++ b/server/src/server/server.h
@@ -17,8 +17,8 @@ class server {
std::atomic<bool> m_active;
- public:
std::vector<tcp::client> client_stack;
+ public:
event<client&> connect_event;
event<packet_t&, client&> receive_event;
@@ -34,6 +34,7 @@ class server {
void stop();
operator bool() const { return m_active; }
+ auto &operator()() { return client_stack; }
static void monitor(server& srv) {
while (srv) {