diff --git a/SourceX/dvlnet/abstract_net.h b/SourceX/dvlnet/abstract_net.h index ba3f89634..fd79e25ca 100644 --- a/SourceX/dvlnet/abstract_net.h +++ b/SourceX/dvlnet/abstract_net.h @@ -2,6 +2,8 @@ #include #include +#include +#include #include "devilution.h" diff --git a/SourceX/dvlnet/base.cpp b/SourceX/dvlnet/base.cpp index 13986fcdf..8f848b53b 100644 --- a/SourceX/dvlnet/base.cpp +++ b/SourceX/dvlnet/base.cpp @@ -18,7 +18,7 @@ void base::setup_password(std::string pw) void base::run_event_handler(_SNETEVENT& ev) { auto f = registered_handlers[static_cast(ev.eventid)]; - if(f) { + if (f) { f(&ev); } } @@ -56,7 +56,7 @@ void base::clear_msg(plr_t plr) void base::recv_local(packet& pkt) { - if(pkt.src() < MAX_PLRS) { + if (pkt.src() < MAX_PLRS) { connected_table[pkt.src()] = true; } switch (pkt.type()) { @@ -74,7 +74,7 @@ void base::recv_local(packet& pkt) break; case PT_DISCONNECT: if (pkt.newplr() != plr_self) { - if(connected_table[pkt.newplr()]) { + if (connected_table[pkt.newplr()]) { auto leaveinfo = pkt.leaveinfo(); _SNETEVENT ev; ev.eventid = EVENT_TYPE_PLAYER_LEAVE_GAME; @@ -123,7 +123,7 @@ bool base::SNetSendMessage(int playerID, void* data, unsigned int size) dest = PLR_BROADCAST; else dest = playerID; - if(dest != plr_self) { + if (dest != plr_self) { auto pkt = pktfty->make_packet(plr_self, dest, message); send(*pkt); } @@ -134,17 +134,17 @@ bool base::SNetReceiveTurns(char** data, unsigned int* size, DWORD* status) { poll(); bool all_turns_arrived = true; - for(auto i = 0; i < MAX_PLRS; ++i) { + for (auto i = 0; i < MAX_PLRS; ++i) { status[i] = 0; - if(connected_table[i]) { + if (connected_table[i]) { status[i] |= PS_CONNECTED; - if(turn_queue[i].empty()) + if (turn_queue[i].empty()) all_turns_arrived = false; } } - if(all_turns_arrived) { + if (all_turns_arrived) { for (auto i = 0; i < MAX_PLRS; ++i) { - if(connected_table[i]) { + if (connected_table[i]) { size[i] = sizeof(turn_t); status[i] |= PS_ACTIVE; status[i] |= PS_TURN_ARRIVED; @@ -156,8 +156,8 @@ bool base::SNetReceiveTurns(char** data, unsigned int* size, DWORD* status) return true; } else { for (auto i = 0; i < MAX_PLRS; ++i) { - if(connected_table[i]) { - if(!turn_queue[i].empty()) { + if (connected_table[i]) { + if (!turn_queue[i].empty()) { status[i] |= PS_ACTIVE; } } @@ -202,12 +202,12 @@ void* base::SNetUnregisterEventHandler(event_type evtype, snet_event_func func) void* base::SNetRegisterEventHandler(event_type evtype, snet_event_func func) { /* - engine registers handler for: - EVENT_TYPE_PLAYER_LEAVE_GAME - EVENT_TYPE_PLAYER_CREATE_GAME (should be raised during SNetCreateGame - for non-creating player) - EVENT_TYPE_PLAYER_MESSAGE (for bnet? not implemented) - (engine uses same function for all three) + engine registers handler for: + EVENT_TYPE_PLAYER_LEAVE_GAME + EVENT_TYPE_PLAYER_CREATE_GAME (should be raised during SNetCreateGame + for non-creating player) + EVENT_TYPE_PLAYER_MESSAGE (for bnet? not implemented) + (engine uses same function for all three) */ registered_handlers[evtype] = func; return (void*)func; @@ -234,8 +234,8 @@ bool base::SNetDropPlayer(int playerid, DWORD flags) plr_t base::get_owner() { - for(auto i = 0; i < MAX_PLRS; ++i) { - if(connected_table[i]) { + for (auto i = 0; i < MAX_PLRS; ++i) { + if (connected_table[i]) { return i; } } diff --git a/SourceX/dvlnet/base.h b/SourceX/dvlnet/base.h index ebcab5349..eb1600cb5 100644 --- a/SourceX/dvlnet/base.h +++ b/SourceX/dvlnet/base.h @@ -51,7 +51,7 @@ namespace dvlnet { int sender; // change int to something else in devilution code later buffer_t payload; message_t() : sender(-1), payload({}) {} - message_t(int s, buffer_t p) : sender(s), payload(p) {} + message_t(int s, buffer_t p) : sender(s), payload(p) {} }; message_t message_last; diff --git a/SourceX/dvlnet/frame_queue.cpp b/SourceX/dvlnet/frame_queue.cpp index 0cf128d0e..907c84c55 100644 --- a/SourceX/dvlnet/frame_queue.cpp +++ b/SourceX/dvlnet/frame_queue.cpp @@ -14,7 +14,7 @@ buffer_t frame_queue::read(size_t s) if(current_size < s) throw frame_queue_exception(); buffer_t ret; - while(s > 0 && s >= buffer_deque.front().size()) { + while (s > 0 && s >= buffer_deque.front().size()) { s -= buffer_deque.front().size(); current_size -= buffer_deque.front().size(); ret.insert(ret.end(), @@ -50,7 +50,7 @@ bool frame_queue::packet_ready() throw frame_queue_exception(); } if(size() >= nextsize) - return true; + return true; else return false; } diff --git a/SourceX/dvlnet/packet.cpp b/SourceX/dvlnet/packet.cpp index 242a17b4e..52d031b82 100644 --- a/SourceX/dvlnet/packet.cpp +++ b/SourceX/dvlnet/packet.cpp @@ -102,8 +102,9 @@ void packet_in::decrypt() if (have_decrypted) return; if (!disable_encryption) { - if (encrypted_buffer.size() < crypto_secretbox_NONCEBYTES + - crypto_secretbox_MACBYTES + sizeof(packet_type) + 2 * sizeof(plr_t)) + if (encrypted_buffer.size() < crypto_secretbox_NONCEBYTES + + crypto_secretbox_MACBYTES + + sizeof(packet_type) + 2*sizeof(plr_t)) throw packet_exception(); auto pktlen = (encrypted_buffer.size() - crypto_secretbox_NONCEBYTES @@ -118,7 +119,7 @@ void packet_in::decrypt() key.data())) throw packet_exception(); } else { - if (encrypted_buffer.size() < sizeof(packet_type) + 2 * sizeof(plr_t)) + if (encrypted_buffer.size() < sizeof(packet_type) + 2*sizeof(plr_t)) throw packet_exception(); decrypted_buffer = encrypted_buffer; } diff --git a/SourceX/dvlnet/tcp_client.cpp b/SourceX/dvlnet/tcp_client.cpp index 6cfee72a8..2ec72e9e2 100644 --- a/SourceX/dvlnet/tcp_client.cpp +++ b/SourceX/dvlnet/tcp_client.cpp @@ -2,7 +2,10 @@ #include #include +#include +#include #include +#include #include using namespace dvlnet; @@ -61,19 +64,19 @@ void tcp_client::poll() void tcp_client::handle_recv(const asio::error_code& error, size_t bytes_read) { - if(error) { + if (error) { // error in recv from server // returning and doing nothing should be the same // as if all connections to other clients were lost return; } - if(bytes_read == 0) { + if (bytes_read == 0) { throw std::runtime_error("error: read 0 bytes from server"); } recv_buffer.resize(bytes_read); recv_queue.write(std::move(recv_buffer)); recv_buffer.resize(frame_queue::max_frame_size); - while(recv_queue.packet_ready()) { + while (recv_queue.packet_ready()) { auto pkt = pktfty->make_packet(recv_queue.read_packet()); recv_local(*pkt); } diff --git a/SourceX/dvlnet/tcp_server.cpp b/SourceX/dvlnet/tcp_server.cpp index b8e7d16ef..ee5690597 100644 --- a/SourceX/dvlnet/tcp_server.cpp +++ b/SourceX/dvlnet/tcp_server.cpp @@ -1,5 +1,7 @@ #include "dvlnet/tcp_server.h" + #include +#include #include "dvlnet/base.h" @@ -18,10 +20,10 @@ tcp_server::tcp_server(asio::io_context& ioc, std::string bindaddr, std::string tcp_server::localhost_self() { auto addr = acceptor->local_endpoint().address(); - if(addr.is_unspecified()) { - if(addr.is_v4()) { + if (addr.is_unspecified()) { + if (addr.is_v4()) { return asio::ip::address_v4::loopback().to_string(); - } else if(addr.is_v6()) { + } else if (addr.is_v6()) { return asio::ip::address_v6::loopback().to_string(); } else { ABORT(); @@ -38,16 +40,16 @@ tcp_server::scc tcp_server::make_connection() plr_t tcp_server::next_free() { - for(plr_t i = 0; i < MAX_PLRS; ++i) - if(!connections[i]) + for (plr_t i = 0; i < MAX_PLRS; ++i) + if (!connections[i]) return i; return PLR_BROADCAST; } bool tcp_server::empty() { - for(plr_t i = 0; i < MAX_PLRS; ++i) - if(connections[i]) + for (plr_t i = 0; i < MAX_PLRS; ++i) + if (connections[i]) return false; return true; } @@ -63,28 +65,28 @@ void tcp_server::start_recv(scc con) void tcp_server::handle_recv(scc con, const asio::error_code& ec, size_t bytes_read) { - if(ec || bytes_read == 0) { + if (ec || bytes_read == 0) { drop_connection(con); return; } con->recv_buffer.resize(bytes_read); con->recv_queue.write(std::move(con->recv_buffer)); - con->recv_buffer.resize(frame_queue::max_frame_size); - while(con->recv_queue.packet_ready()) { - try { - auto pkt = pktfty.make_packet(con->recv_queue.read_packet()); - if(con->plr == PLR_BROADCAST) { - handle_recv_newplr(con, *pkt); - } else { - con->timeout = timeout_active; - handle_recv_packet(*pkt); - } - } catch (dvlnet_exception e) { - drop_connection(con); - return; - } - } - start_recv(con); + con->recv_buffer.resize(frame_queue::max_frame_size); + while (con->recv_queue.packet_ready()) { + try { + auto pkt = pktfty.make_packet(con->recv_queue.read_packet()); + if (con->plr == PLR_BROADCAST) { + handle_recv_newplr(con, *pkt); + } else { + con->timeout = timeout_active; + handle_recv_packet(*pkt); + } + } catch (dvlnet_exception e) { + drop_connection(con); + return; + } + } + start_recv(con); } void tcp_server::send_connect(scc con) @@ -97,9 +99,9 @@ void tcp_server::send_connect(scc con) void tcp_server::handle_recv_newplr(scc con, packet& pkt) { auto newplr = next_free(); - if(newplr == PLR_BROADCAST) + if (newplr == PLR_BROADCAST) throw server_exception(); - if(empty()) + if (empty()) game_init_info = pkt.info(); auto reply = pktfty.make_packet(PLR_MASTER, PLR_BROADCAST, pkt.cookie(), newplr, @@ -118,14 +120,14 @@ void tcp_server::handle_recv_packet(packet& pkt) void tcp_server::send_packet(packet& pkt) { - if(pkt.dest() == PLR_BROADCAST) { - for(auto i = 0; i < MAX_PLRS; ++i) - if(i != pkt.src() && connections[i]) + if (pkt.dest() == PLR_BROADCAST) { + for (auto i = 0; i < MAX_PLRS; ++i) + if (i != pkt.src() && connections[i]) start_send(connections[i], pkt); } else { - if(pkt.dest() >= MAX_PLRS) + if (pkt.dest() >= MAX_PLRS) throw server_exception(); - if((pkt.dest() != pkt.src()) && connections[pkt.dest()]) + if ((pkt.dest() != pkt.src()) && connections[pkt.dest()]) start_send(connections[pkt.dest()], pkt); } } @@ -156,7 +158,7 @@ void tcp_server::start_accept() void tcp_server::handle_accept(scc con, const asio::error_code& ec) { - if(next_free() == PLR_BROADCAST) { + if (next_free() == PLR_BROADCAST) { drop_connection(con); } else { asio::ip::tcp::no_delay option(true); @@ -177,15 +179,15 @@ void tcp_server::start_timeout(scc con) void tcp_server::handle_timeout(scc con, const asio::error_code& ec) { - if(ec) { + if (ec) { drop_connection(con); return; } - if(con->timeout > 0) + if (con->timeout > 0) con->timeout -= 1; - if(con->timeout < 0) + if (con->timeout < 0) con->timeout = 0; - if(!con->timeout) { + if (!con->timeout) { drop_connection(con); return; } @@ -194,7 +196,7 @@ void tcp_server::handle_timeout(scc con, const asio::error_code& ec) void tcp_server::drop_connection(scc con) { - if(con->plr != PLR_BROADCAST) { + if (con->plr != PLR_BROADCAST) { auto pkt = pktfty.make_packet(PLR_MASTER, PLR_BROADCAST, con->plr, LEAVE_DROP); connections[con->plr] = nullptr; diff --git a/SourceX/dvlnet/udp_p2p.cpp b/SourceX/dvlnet/udp_p2p.cpp index 1e1a5002c..fc4afab8c 100644 --- a/SourceX/dvlnet/udp_p2p.cpp +++ b/SourceX/dvlnet/udp_p2p.cpp @@ -16,7 +16,7 @@ int udp_p2p::create(std::string addrstr, std::string passwd) sock.non_blocking(true); unsigned short port = default_port; /* - while(port <= default_port+try_ports) { + while (port <= default_port+try_ports) { try { sock.bind(asio::ip::udp::endpoint(asio::ip::address_v6(), port)); } catch (std::exception e) { @@ -50,7 +50,7 @@ int udp_p2p::join(std::string addrstr, std::string passwd) master = themaster; { // hack: try to join for 5 seconds randombytes_buf(reinterpret_cast(&cookie_self), - sizeof(cookie_t)); + sizeof(cookie_t)); auto pkt = pktfty->make_packet(PLR_BROADCAST, PLR_MASTER, cookie_self, game_init_info);