diff options
| author | auth <[email protected]> | 2020-06-30 23:31:36 +0200 |
|---|---|---|
| committer | auth <[email protected]> | 2020-06-30 23:31:36 +0200 |
| commit | d96c27220ad100b61332a0ac91bdb0300ef7e3be (patch) | |
| tree | 3cd6289e6aa4c2a16621a2914ab68c2f723c6f00 /server | |
| parent | Added json. (diff) | |
| download | loader-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')
| -rw-r--r-- | server/src/main.cpp | 25 | ||||
| -rw-r--r-- | server/src/server/packet.h | 30 | ||||
| -rw-r--r-- | server/src/server/server.h | 3 |
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) { |