aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorauth12 <[email protected]>2020-08-03 21:08:06 +0100
committerauth12 <[email protected]>2020-08-03 21:08:06 +0100
commitad8cf7c80590b96ad4e61f3f4eb397704a22ee4b (patch)
treef376bc6ce8b7ababd4bcc67bee748c6e1d672b0c /server
parentStarted security. (diff)
downloadloader-ad8cf7c80590b96ad4e61f3f4eb397704a22ee4b.tar.xz
loader-ad8cf7c80590b96ad4e61f3f4eb397704a22ee4b.zip
Added ui.
Diffstat (limited to 'server')
-rw-r--r--server/src/client/client.h13
-rw-r--r--server/src/main.cpp39
-rw-r--r--server/src/server/packet.h2
-rw-r--r--server/src/server/server.cpp2
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);