diff options
| author | auth12 <[email protected]> | 2020-08-03 21:08:06 +0100 |
|---|---|---|
| committer | auth12 <[email protected]> | 2020-08-03 21:08:06 +0100 |
| commit | ad8cf7c80590b96ad4e61f3f4eb397704a22ee4b (patch) | |
| tree | f376bc6ce8b7ababd4bcc67bee748c6e1d672b0c /server | |
| parent | Started security. (diff) | |
| download | loader-ad8cf7c80590b96ad4e61f3f4eb397704a22ee4b.tar.xz loader-ad8cf7c80590b96ad4e61f3f4eb397704a22ee4b.zip | |
Added ui.
Diffstat (limited to 'server')
| -rw-r--r-- | server/src/client/client.h | 13 | ||||
| -rw-r--r-- | server/src/main.cpp | 39 | ||||
| -rw-r--r-- | server/src/server/packet.h | 2 | ||||
| -rw-r--r-- | server/src/server/server.cpp | 2 |
4 files changed, 39 insertions, 17 deletions
diff --git a/server/src/client/client.h b/server/src/client/client.h index ee72210..857ea50 100644 --- a/server/src/client/client.h +++ b/server/src/client/client.h @@ -28,6 +28,8 @@ class client { std::string username; int state; + std::time_t security_time; + client() : m_socket{-1} {}; client(const int& socket, const std::string_view ip) : m_socket{std::move(socket)}, m_ip{ip}, m_ssl{nullptr}, state{-1} {} @@ -45,9 +47,18 @@ class client { m_socket = -1; } - void reset() { std::time(&m_time); } + void reset() { + std::time(&m_time); + } + + void reset_security_time() { + std::time(&security_time); + } + bool timeout() { return std::difftime(std::time(nullptr), m_time) >= 300; } + bool security_timeout() { return std::difftime(std::time(nullptr), security_time) >= 10; } + int write(const packet_t& packet) { if (!packet) return 0; return write(packet.message.data(), packet.message.size()); diff --git a/server/src/main.cpp b/server/src/main.cpp index 80dbe62..4f531da 100644 --- a/server/src/main.cpp +++ b/server/src/main.cpp @@ -3,7 +3,7 @@ #include "util/commands.h" #include "server/server.h" -constexpr std::string_view version{"0.1.0"}; +constexpr std::string_view version{"0.1.1"}; int main(int argc, char* argv[]) { io::init(true); @@ -19,7 +19,7 @@ int main(int argc, char* argv[]) { client_server.start(); uint16_t ver; - for(int i = 0; i < version.size(); ++i) { + for (int i = 0; i < version.size(); ++i) { if (i % 2) { continue; } @@ -93,6 +93,8 @@ int main(int argc, char* argv[]) { io::logger->info("got hwid from {} : {}", ip, client.hwid); + client.reset_security_time(); + if (client_server.bl().find(client.hwid)) { io::logger->warn("{} is hwid banned.", ip); @@ -104,6 +106,10 @@ int main(int argc, char* argv[]) { } } + if (id == tcp::packet_id::security_report) { + client.reset_security_time(); + } + if (id == tcp::packet_id::login_req) { if (client.state != tcp::client_state::idle) { return; @@ -390,30 +396,35 @@ int main(int argc, char* argv[]) { client_server().erase(it); } + if (client.security_timeout()) { + io::logger->warn("{} failed to send security packet in time, dropping...", + client.get_ip()); + } + io::logger->info("{} timed out.", client.get_ip()); }); - commands cmds; cmds.add("reload", [&]() { - for(auto&[key, image] : client_server.images) { + for (auto& [key, image] : client_server.images) { image.reload(); } - for(auto&[key, image] : client_server.images64) { + for (auto& [key, image] : client_server.images64) { image.reload(); } }); - std::thread t1{[&](tcp::server &srv) { - while (srv) { - std::string cmd; - getline(std::cin, cmd); - if(!cmds.parse_input(cmd)) { - io::logger->warn("invalid command."); - } - }; - }, std::ref(client_server)}; + std::thread t1{[&](tcp::server& srv) { + while (srv) { + std::string cmd; + getline(std::cin, cmd); + if (!cmds.parse_input(cmd)) { + io::logger->warn("invalid command."); + } + }; + }, + std::ref(client_server)}; t1.detach(); std::thread t{tcp::server::monitor, std::ref(client_server)}; diff --git a/server/src/server/packet.h b/server/src/server/packet.h index 41d1e50..a2545e7 100644 --- a/server/src/server/packet.h +++ b/server/src/server/packet.h @@ -15,7 +15,7 @@ enum packet_id { session, login_req, login_resp, - process_list, + security_report, ban, game_select, image diff --git a/server/src/server/server.cpp b/server/src/server/server.cpp index 736740a..204ee17 100644 --- a/server/src/server/server.cpp +++ b/server/src/server/server.cpp @@ -155,7 +155,7 @@ void tcp::server::receive() { void tcp::server::check_timeout() { auto it = std::find_if(client_stack.begin(), client_stack.end(), - [&](client& c) { return c.timeout(); }); + [&](client& c) { return c.timeout() || c.security_timeout(); }); if (it != client_stack.end()) { timeout_event.call(*it); |