From cebc645e2143bd41410d90334748002b8aab03f6 Mon Sep 17 00:00:00 2001 From: Kp Date: Sun, 23 Oct 2022 23:00:24 +0000 Subject: [PATCH] Pass std::span to net_udp_process_pdata --- similar/main/net_udp.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/similar/main/net_udp.cpp b/similar/main/net_udp.cpp index 42a2e7889..a268e8494 100644 --- a/similar/main/net_udp.cpp +++ b/similar/main/net_udp.cpp @@ -463,7 +463,7 @@ static void net_udp_read_endlevel_packet(const uint8_t *data, const _sockaddr &s static void net_udp_send_mdata(int needack, fix64 time); static void net_udp_process_mdata(const d_level_shared_robot_info_state &LevelSharedRobotInfoState, uint8_t *data, uint_fast32_t data_len, const _sockaddr &sender_addr, int needack); static void net_udp_send_pdata(); -static void net_udp_process_pdata (const uint8_t *data, uint_fast32_t data_len, const _sockaddr &sender_addr); +static void net_udp_process_pdata (std::span data, const _sockaddr &sender_addr); static void net_udp_read_pdata_packet(UDP_frame_info *pd); static void net_udp_timeout_check(fix64 time); static int net_udp_get_new_player_num (); @@ -3483,7 +3483,8 @@ static void net_udp_process_packet(const d_level_shared_robot_info_state &LevelS net_udp_read_endlevel_packet(data, sender_addr); break; case upid::pdata: - net_udp_process_pdata( data, length, sender_addr ); + if (const auto s = build_upid_rspan(buf)) + net_udp_process_pdata(*s, sender_addr); break; case upid::mdata_pnorm: net_udp_process_mdata(LevelSharedRobotInfoState, data, length, sender_addr, 0); @@ -5896,7 +5897,7 @@ void net_udp_send_pdata() } } -void net_udp_process_pdata(const uint8_t *data, uint_fast32_t data_len, const _sockaddr &sender_addr) +void net_udp_process_pdata(const std::span data, const _sockaddr &sender_addr) { UDP_frame_info pd; int len = 0; @@ -5907,14 +5908,13 @@ void net_udp_process_pdata(const uint8_t *data, uint_fast32_t data_len, const _s len++; pd = {}; - - if (data_len != upid_length) + const playernum_t playernum = data[len]; + if (playernum >= std::size(Netgame.players)) + return; + if (sender_addr != Netgame.players[multi_i_am_master() ? playernum : 0].protocol.udp.addr) return; - if (sender_addr != Netgame.players[((multi_i_am_master())?(data[len]):(0))].protocol.udp.addr) - return; - - pd.Player_num = data[len]; len++; + pd.Player_num = playernum; len++; pd.connected = player_connection_status{data[len]}; len++; pd.qpp.orient.w = GET_INTEL_SHORT(&data[len]); len += 2; pd.qpp.orient.x = GET_INTEL_SHORT(&data[len]); len += 2; @@ -5946,7 +5946,7 @@ void net_udp_process_pdata(const uint8_t *data, uint_fast32_t data_len, const _s continue; auto &iplr = *vcplayerptr(i); if (iplr.connected != player_connection_status::disconnected && iplr.connected != player_connection_status::waiting) - dxx_sendto(UDP_Socket[0], {data, data_len}, 0, Netgame.players[i].protocol.udp.addr); + dxx_sendto(UDP_Socket[0], data, 0, Netgame.players[i].protocol.udp.addr); } } }