From a5b377745116de2b269cdfc5b90f08f46d0432d2 Mon Sep 17 00:00:00 2001 From: hovertank3d Date: Thu, 13 Nov 2025 23:02:56 +0100 Subject: initial commit --- src/kill_proxy.cpp | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/kill_proxy.cpp (limited to 'src/kill_proxy.cpp') diff --git a/src/kill_proxy.cpp b/src/kill_proxy.cpp new file mode 100644 index 0000000..a2a2e27 --- /dev/null +++ b/src/kill_proxy.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "net/client.hpp" +#include "net/conn.hpp" +#include "net/server.hpp" +#include "net/types.hpp" + +using net::packet::operator""_ns; + +template +void forward_packets(net::conn &dst, net::conn &src, std::integer_sequence int_seq) { + (src.reg_handler>([&dst](auto &a) { + dst.send_packet(a); + return true; + }), ...); +} + +int main(int argc, char* argv[]) +{ + auto server = net::client("localhost", 7777); + auto proxy = net::server("localhost", 8888); + + proxy.bind(); + proxy.listen(1); + + auto server_conn = server.connect(); + auto proxy_conn = proxy.accept(); + + uint8_t slot; + server_conn.reg_handler([=, &slot](auto& a) { + slot = a.client_id; + return false; + }); + + proxy_conn.reg_handler([&slot, &server_conn](auto &dmg) { + if (dmg.client_id != slot) { + dmg.damage *= 100; + dmg.reason.reasons.at(0) = 0; + + dmg.reason.reasons[net::packet::death_reason::reason::Custom] = true; + dmg.reason.custom = "killed by server insecurity"; + + server_conn.send_packet(dmg); + return true; + } + return false; + }); + + forward_packets(server_conn, proxy_conn, std::make_integer_sequence{}); + forward_packets(proxy_conn, server_conn, std::make_integer_sequence{}); + + auto handle_loop = [] (net::conn &c) { + for(;;) { + c.handle(); + } + }; + + std::thread server_thread(handle_loop, std::ref(server_conn)); + std::thread proxy_thread(handle_loop, std::ref(proxy_conn)); + + return 0; +} \ No newline at end of file -- cgit v1.2.3