summaryrefslogtreecommitdiff
path: root/src/network/room.cpp
diff options
context:
space:
mode:
authorGravatar FearlessTobi2022-07-25 19:16:59 +0200
committerGravatar FearlessTobi2022-07-25 21:59:31 +0200
commita41baaa181f30229d3552caa69135be978c1ddb5 (patch)
tree999411f1ca76390654d1034c6d0bd2c47c3f101c /src/network/room.cpp
parentnetwork, yuzu: Make copyright headers SPDX-compliant (diff)
downloadyuzu-a41baaa181f30229d3552caa69135be978c1ddb5.tar.gz
yuzu-a41baaa181f30229d3552caa69135be978c1ddb5.tar.xz
yuzu-a41baaa181f30229d3552caa69135be978c1ddb5.zip
network: Address review comments
Diffstat (limited to '')
-rw-r--r--src/network/room.cpp142
1 files changed, 71 insertions, 71 deletions
diff --git a/src/network/room.cpp b/src/network/room.cpp
index d5f0bb723..3fc3a0383 100644
--- a/src/network/room.cpp
+++ b/src/network/room.cpp
@@ -7,6 +7,7 @@
7#include <mutex> 7#include <mutex>
8#include <random> 8#include <random>
9#include <regex> 9#include <regex>
10#include <shared_mutex>
10#include <sstream> 11#include <sstream>
11#include <thread> 12#include <thread>
12#include "common/logging/log.h" 13#include "common/logging/log.h"
@@ -43,9 +44,8 @@ public:
43 ENetPeer* peer; ///< The remote peer. 44 ENetPeer* peer; ///< The remote peer.
44 }; 45 };
45 using MemberList = std::vector<Member>; 46 using MemberList = std::vector<Member>;
46 MemberList members; ///< Information about the members of this room 47 MemberList members; ///< Information about the members of this room
47 mutable std::mutex member_mutex; ///< Mutex for locking the members list 48 mutable std::shared_mutex member_mutex; ///< Mutex for locking the members list
48 /// This should be a std::shared_mutex as soon as C++17 is supported
49 49
50 UsernameBanList username_ban_list; ///< List of banned usernames 50 UsernameBanList username_ban_list; ///< List of banned usernames
51 IPBanList ip_ban_list; ///< List of banned IP addresses 51 IPBanList ip_ban_list; ///< List of banned IP addresses
@@ -311,22 +311,22 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) {
311 packet.Append(event->packet->data, event->packet->dataLength); 311 packet.Append(event->packet->data, event->packet->dataLength);
312 packet.IgnoreBytes(sizeof(u8)); // Ignore the message type 312 packet.IgnoreBytes(sizeof(u8)); // Ignore the message type
313 std::string nickname; 313 std::string nickname;
314 packet >> nickname; 314 packet.Read(nickname);
315 315
316 std::string console_id_hash; 316 std::string console_id_hash;
317 packet >> console_id_hash; 317 packet.Read(console_id_hash);
318 318
319 MacAddress preferred_mac; 319 MacAddress preferred_mac;
320 packet >> preferred_mac; 320 packet.Read(preferred_mac);
321 321
322 u32 client_version; 322 u32 client_version;
323 packet >> client_version; 323 packet.Read(client_version);
324 324
325 std::string pass; 325 std::string pass;
326 packet >> pass; 326 packet.Read(pass);
327 327
328 std::string token; 328 std::string token;
329 packet >> token; 329 packet.Read(token);
330 330
331 if (pass != password) { 331 if (pass != password) {
332 SendWrongPassword(event->peer); 332 SendWrongPassword(event->peer);
@@ -387,9 +387,9 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) {
387 } 387 }
388 388
389 // Check IP ban 389 // Check IP ban
390 char ip_raw[256]; 390 std::array<char, 256> ip_raw{};
391 enet_address_get_host_ip(&event->peer->address, ip_raw, sizeof(ip_raw) - 1); 391 enet_address_get_host_ip(&event->peer->address, ip_raw.data(), sizeof(ip_raw) - 1);
392 ip = ip_raw; 392 ip = ip_raw.data();
393 393
394 if (std::find(ip_ban_list.begin(), ip_ban_list.end(), ip) != ip_ban_list.end()) { 394 if (std::find(ip_ban_list.begin(), ip_ban_list.end(), ip) != ip_ban_list.end()) {
395 SendUserBanned(event->peer); 395 SendUserBanned(event->peer);
@@ -425,7 +425,7 @@ void Room::RoomImpl::HandleModKickPacket(const ENetEvent* event) {
425 packet.IgnoreBytes(sizeof(u8)); // Ignore the message type 425 packet.IgnoreBytes(sizeof(u8)); // Ignore the message type
426 426
427 std::string nickname; 427 std::string nickname;
428 packet >> nickname; 428 packet.Read(nickname);
429 429
430 std::string username, ip; 430 std::string username, ip;
431 { 431 {
@@ -443,9 +443,9 @@ void Room::RoomImpl::HandleModKickPacket(const ENetEvent* event) {
443 443
444 username = target_member->user_data.username; 444 username = target_member->user_data.username;
445 445
446 char ip_raw[256]; 446 std::array<char, 256> ip_raw{};
447 enet_address_get_host_ip(&target_member->peer->address, ip_raw, sizeof(ip_raw) - 1); 447 enet_address_get_host_ip(&target_member->peer->address, ip_raw.data(), sizeof(ip_raw) - 1);
448 ip = ip_raw; 448 ip = ip_raw.data();
449 449
450 enet_peer_disconnect(target_member->peer, 0); 450 enet_peer_disconnect(target_member->peer, 0);
451 members.erase(target_member); 451 members.erase(target_member);
@@ -467,7 +467,7 @@ void Room::RoomImpl::HandleModBanPacket(const ENetEvent* event) {
467 packet.IgnoreBytes(sizeof(u8)); // Ignore the message type 467 packet.IgnoreBytes(sizeof(u8)); // Ignore the message type
468 468
469 std::string nickname; 469 std::string nickname;
470 packet >> nickname; 470 packet.Read(nickname);
471 471
472 std::string username, ip; 472 std::string username, ip;
473 { 473 {
@@ -486,9 +486,9 @@ void Room::RoomImpl::HandleModBanPacket(const ENetEvent* event) {
486 nickname = target_member->nickname; 486 nickname = target_member->nickname;
487 username = target_member->user_data.username; 487 username = target_member->user_data.username;
488 488
489 char ip_raw[256]; 489 std::array<char, 256> ip_raw{};
490 enet_address_get_host_ip(&target_member->peer->address, ip_raw, sizeof(ip_raw) - 1); 490 enet_address_get_host_ip(&target_member->peer->address, ip_raw.data(), sizeof(ip_raw) - 1);
491 ip = ip_raw; 491 ip = ip_raw.data();
492 492
493 enet_peer_disconnect(target_member->peer, 0); 493 enet_peer_disconnect(target_member->peer, 0);
494 members.erase(target_member); 494 members.erase(target_member);
@@ -528,7 +528,7 @@ void Room::RoomImpl::HandleModUnbanPacket(const ENetEvent* event) {
528 packet.IgnoreBytes(sizeof(u8)); // Ignore the message type 528 packet.IgnoreBytes(sizeof(u8)); // Ignore the message type
529 529
530 std::string address; 530 std::string address;
531 packet >> address; 531 packet.Read(address);
532 532
533 bool unbanned = false; 533 bool unbanned = false;
534 { 534 {
@@ -613,7 +613,7 @@ bool Room::RoomImpl::HasModPermission(const ENetPeer* client) const {
613 613
614void Room::RoomImpl::SendNameCollision(ENetPeer* client) { 614void Room::RoomImpl::SendNameCollision(ENetPeer* client) {
615 Packet packet; 615 Packet packet;
616 packet << static_cast<u8>(IdNameCollision); 616 packet.Write(static_cast<u8>(IdNameCollision));
617 617
618 ENetPacket* enet_packet = 618 ENetPacket* enet_packet =
619 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 619 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -623,7 +623,7 @@ void Room::RoomImpl::SendNameCollision(ENetPeer* client) {
623 623
624void Room::RoomImpl::SendMacCollision(ENetPeer* client) { 624void Room::RoomImpl::SendMacCollision(ENetPeer* client) {
625 Packet packet; 625 Packet packet;
626 packet << static_cast<u8>(IdMacCollision); 626 packet.Write(static_cast<u8>(IdMacCollision));
627 627
628 ENetPacket* enet_packet = 628 ENetPacket* enet_packet =
629 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 629 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -633,7 +633,7 @@ void Room::RoomImpl::SendMacCollision(ENetPeer* client) {
633 633
634void Room::RoomImpl::SendConsoleIdCollision(ENetPeer* client) { 634void Room::RoomImpl::SendConsoleIdCollision(ENetPeer* client) {
635 Packet packet; 635 Packet packet;
636 packet << static_cast<u8>(IdConsoleIdCollision); 636 packet.Write(static_cast<u8>(IdConsoleIdCollision));
637 637
638 ENetPacket* enet_packet = 638 ENetPacket* enet_packet =
639 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 639 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -643,7 +643,7 @@ void Room::RoomImpl::SendConsoleIdCollision(ENetPeer* client) {
643 643
644void Room::RoomImpl::SendWrongPassword(ENetPeer* client) { 644void Room::RoomImpl::SendWrongPassword(ENetPeer* client) {
645 Packet packet; 645 Packet packet;
646 packet << static_cast<u8>(IdWrongPassword); 646 packet.Write(static_cast<u8>(IdWrongPassword));
647 647
648 ENetPacket* enet_packet = 648 ENetPacket* enet_packet =
649 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 649 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -653,7 +653,7 @@ void Room::RoomImpl::SendWrongPassword(ENetPeer* client) {
653 653
654void Room::RoomImpl::SendRoomIsFull(ENetPeer* client) { 654void Room::RoomImpl::SendRoomIsFull(ENetPeer* client) {
655 Packet packet; 655 Packet packet;
656 packet << static_cast<u8>(IdRoomIsFull); 656 packet.Write(static_cast<u8>(IdRoomIsFull));
657 657
658 ENetPacket* enet_packet = 658 ENetPacket* enet_packet =
659 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 659 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -663,8 +663,8 @@ void Room::RoomImpl::SendRoomIsFull(ENetPeer* client) {
663 663
664void Room::RoomImpl::SendVersionMismatch(ENetPeer* client) { 664void Room::RoomImpl::SendVersionMismatch(ENetPeer* client) {
665 Packet packet; 665 Packet packet;
666 packet << static_cast<u8>(IdVersionMismatch); 666 packet.Write(static_cast<u8>(IdVersionMismatch));
667 packet << network_version; 667 packet.Write(network_version);
668 668
669 ENetPacket* enet_packet = 669 ENetPacket* enet_packet =
670 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 670 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -674,8 +674,8 @@ void Room::RoomImpl::SendVersionMismatch(ENetPeer* client) {
674 674
675void Room::RoomImpl::SendJoinSuccess(ENetPeer* client, MacAddress mac_address) { 675void Room::RoomImpl::SendJoinSuccess(ENetPeer* client, MacAddress mac_address) {
676 Packet packet; 676 Packet packet;
677 packet << static_cast<u8>(IdJoinSuccess); 677 packet.Write(static_cast<u8>(IdJoinSuccess));
678 packet << mac_address; 678 packet.Write(mac_address);
679 ENetPacket* enet_packet = 679 ENetPacket* enet_packet =
680 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 680 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
681 enet_peer_send(client, 0, enet_packet); 681 enet_peer_send(client, 0, enet_packet);
@@ -684,8 +684,8 @@ void Room::RoomImpl::SendJoinSuccess(ENetPeer* client, MacAddress mac_address) {
684 684
685void Room::RoomImpl::SendJoinSuccessAsMod(ENetPeer* client, MacAddress mac_address) { 685void Room::RoomImpl::SendJoinSuccessAsMod(ENetPeer* client, MacAddress mac_address) {
686 Packet packet; 686 Packet packet;
687 packet << static_cast<u8>(IdJoinSuccessAsMod); 687 packet.Write(static_cast<u8>(IdJoinSuccessAsMod));
688 packet << mac_address; 688 packet.Write(mac_address);
689 ENetPacket* enet_packet = 689 ENetPacket* enet_packet =
690 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 690 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
691 enet_peer_send(client, 0, enet_packet); 691 enet_peer_send(client, 0, enet_packet);
@@ -694,7 +694,7 @@ void Room::RoomImpl::SendJoinSuccessAsMod(ENetPeer* client, MacAddress mac_addre
694 694
695void Room::RoomImpl::SendUserKicked(ENetPeer* client) { 695void Room::RoomImpl::SendUserKicked(ENetPeer* client) {
696 Packet packet; 696 Packet packet;
697 packet << static_cast<u8>(IdHostKicked); 697 packet.Write(static_cast<u8>(IdHostKicked));
698 698
699 ENetPacket* enet_packet = 699 ENetPacket* enet_packet =
700 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 700 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -704,7 +704,7 @@ void Room::RoomImpl::SendUserKicked(ENetPeer* client) {
704 704
705void Room::RoomImpl::SendUserBanned(ENetPeer* client) { 705void Room::RoomImpl::SendUserBanned(ENetPeer* client) {
706 Packet packet; 706 Packet packet;
707 packet << static_cast<u8>(IdHostBanned); 707 packet.Write(static_cast<u8>(IdHostBanned));
708 708
709 ENetPacket* enet_packet = 709 ENetPacket* enet_packet =
710 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 710 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -714,7 +714,7 @@ void Room::RoomImpl::SendUserBanned(ENetPeer* client) {
714 714
715void Room::RoomImpl::SendModPermissionDenied(ENetPeer* client) { 715void Room::RoomImpl::SendModPermissionDenied(ENetPeer* client) {
716 Packet packet; 716 Packet packet;
717 packet << static_cast<u8>(IdModPermissionDenied); 717 packet.Write(static_cast<u8>(IdModPermissionDenied));
718 718
719 ENetPacket* enet_packet = 719 ENetPacket* enet_packet =
720 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 720 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -724,7 +724,7 @@ void Room::RoomImpl::SendModPermissionDenied(ENetPeer* client) {
724 724
725void Room::RoomImpl::SendModNoSuchUser(ENetPeer* client) { 725void Room::RoomImpl::SendModNoSuchUser(ENetPeer* client) {
726 Packet packet; 726 Packet packet;
727 packet << static_cast<u8>(IdModNoSuchUser); 727 packet.Write(static_cast<u8>(IdModNoSuchUser));
728 728
729 ENetPacket* enet_packet = 729 ENetPacket* enet_packet =
730 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 730 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
@@ -734,11 +734,11 @@ void Room::RoomImpl::SendModNoSuchUser(ENetPeer* client) {
734 734
735void Room::RoomImpl::SendModBanListResponse(ENetPeer* client) { 735void Room::RoomImpl::SendModBanListResponse(ENetPeer* client) {
736 Packet packet; 736 Packet packet;
737 packet << static_cast<u8>(IdModBanListResponse); 737 packet.Write(static_cast<u8>(IdModBanListResponse));
738 { 738 {
739 std::lock_guard lock(ban_list_mutex); 739 std::lock_guard lock(ban_list_mutex);
740 packet << username_ban_list; 740 packet.Write(username_ban_list);
741 packet << ip_ban_list; 741 packet.Write(ip_ban_list);
742 } 742 }
743 743
744 ENetPacket* enet_packet = 744 ENetPacket* enet_packet =
@@ -749,7 +749,7 @@ void Room::RoomImpl::SendModBanListResponse(ENetPeer* client) {
749 749
750void Room::RoomImpl::SendCloseMessage() { 750void Room::RoomImpl::SendCloseMessage() {
751 Packet packet; 751 Packet packet;
752 packet << static_cast<u8>(IdCloseRoom); 752 packet.Write(static_cast<u8>(IdCloseRoom));
753 std::lock_guard lock(member_mutex); 753 std::lock_guard lock(member_mutex);
754 if (!members.empty()) { 754 if (!members.empty()) {
755 ENetPacket* enet_packet = 755 ENetPacket* enet_packet =
@@ -767,10 +767,10 @@ void Room::RoomImpl::SendCloseMessage() {
767void Room::RoomImpl::SendStatusMessage(StatusMessageTypes type, const std::string& nickname, 767void Room::RoomImpl::SendStatusMessage(StatusMessageTypes type, const std::string& nickname,
768 const std::string& username, const std::string& ip) { 768 const std::string& username, const std::string& ip) {
769 Packet packet; 769 Packet packet;
770 packet << static_cast<u8>(IdStatusMessage); 770 packet.Write(static_cast<u8>(IdStatusMessage));
771 packet << static_cast<u8>(type); 771 packet.Write(static_cast<u8>(type));
772 packet << nickname; 772 packet.Write(nickname);
773 packet << username; 773 packet.Write(username);
774 std::lock_guard lock(member_mutex); 774 std::lock_guard lock(member_mutex);
775 if (!members.empty()) { 775 if (!members.empty()) {
776 ENetPacket* enet_packet = 776 ENetPacket* enet_packet =
@@ -805,25 +805,25 @@ void Room::RoomImpl::SendStatusMessage(StatusMessageTypes type, const std::strin
805 805
806void Room::RoomImpl::BroadcastRoomInformation() { 806void Room::RoomImpl::BroadcastRoomInformation() {
807 Packet packet; 807 Packet packet;
808 packet << static_cast<u8>(IdRoomInformation); 808 packet.Write(static_cast<u8>(IdRoomInformation));
809 packet << room_information.name; 809 packet.Write(room_information.name);
810 packet << room_information.description; 810 packet.Write(room_information.description);
811 packet << room_information.member_slots; 811 packet.Write(room_information.member_slots);
812 packet << room_information.port; 812 packet.Write(room_information.port);
813 packet << room_information.preferred_game.name; 813 packet.Write(room_information.preferred_game.name);
814 packet << room_information.host_username; 814 packet.Write(room_information.host_username);
815 815
816 packet << static_cast<u32>(members.size()); 816 packet.Write(static_cast<u32>(members.size()));
817 { 817 {
818 std::lock_guard lock(member_mutex); 818 std::lock_guard lock(member_mutex);
819 for (const auto& member : members) { 819 for (const auto& member : members) {
820 packet << member.nickname; 820 packet.Write(member.nickname);
821 packet << member.mac_address; 821 packet.Write(member.mac_address);
822 packet << member.game_info.name; 822 packet.Write(member.game_info.name);
823 packet << member.game_info.id; 823 packet.Write(member.game_info.id);
824 packet << member.user_data.username; 824 packet.Write(member.user_data.username);
825 packet << member.user_data.display_name; 825 packet.Write(member.user_data.display_name);
826 packet << member.user_data.avatar_url; 826 packet.Write(member.user_data.avatar_url);
827 } 827 }
828 } 828 }
829 829
@@ -853,7 +853,7 @@ void Room::RoomImpl::HandleWifiPacket(const ENetEvent* event) {
853 in_packet.IgnoreBytes(sizeof(u8)); // WifiPacket Channel 853 in_packet.IgnoreBytes(sizeof(u8)); // WifiPacket Channel
854 in_packet.IgnoreBytes(sizeof(MacAddress)); // WifiPacket Transmitter Address 854 in_packet.IgnoreBytes(sizeof(MacAddress)); // WifiPacket Transmitter Address
855 MacAddress destination_address; 855 MacAddress destination_address;
856 in_packet >> destination_address; 856 in_packet.Read(destination_address);
857 857
858 Packet out_packet; 858 Packet out_packet;
859 out_packet.Append(event->packet->data, event->packet->dataLength); 859 out_packet.Append(event->packet->data, event->packet->dataLength);
@@ -899,7 +899,7 @@ void Room::RoomImpl::HandleChatPacket(const ENetEvent* event) {
899 899
900 in_packet.IgnoreBytes(sizeof(u8)); // Ignore the message type 900 in_packet.IgnoreBytes(sizeof(u8)); // Ignore the message type
901 std::string message; 901 std::string message;
902 in_packet >> message; 902 in_packet.Read(message);
903 auto CompareNetworkAddress = [event](const Member member) -> bool { 903 auto CompareNetworkAddress = [event](const Member member) -> bool {
904 return member.peer == event->peer; 904 return member.peer == event->peer;
905 }; 905 };
@@ -914,10 +914,10 @@ void Room::RoomImpl::HandleChatPacket(const ENetEvent* event) {
914 message.resize(std::min(static_cast<u32>(message.size()), MaxMessageSize)); 914 message.resize(std::min(static_cast<u32>(message.size()), MaxMessageSize));
915 915
916 Packet out_packet; 916 Packet out_packet;
917 out_packet << static_cast<u8>(IdChatMessage); 917 out_packet.Write(static_cast<u8>(IdChatMessage));
918 out_packet << sending_member->nickname; 918 out_packet.Write(sending_member->nickname);
919 out_packet << sending_member->user_data.username; 919 out_packet.Write(sending_member->user_data.username);
920 out_packet << message; 920 out_packet.Write(message);
921 921
922 ENetPacket* enet_packet = enet_packet_create(out_packet.GetData(), out_packet.GetDataSize(), 922 ENetPacket* enet_packet = enet_packet_create(out_packet.GetData(), out_packet.GetDataSize(),
923 ENET_PACKET_FLAG_RELIABLE); 923 ENET_PACKET_FLAG_RELIABLE);
@@ -949,8 +949,8 @@ void Room::RoomImpl::HandleGameNamePacket(const ENetEvent* event) {
949 949
950 in_packet.IgnoreBytes(sizeof(u8)); // Ignore the message type 950 in_packet.IgnoreBytes(sizeof(u8)); // Ignore the message type
951 GameInfo game_info; 951 GameInfo game_info;
952 in_packet >> game_info.name; 952 in_packet.Read(game_info.name);
953 in_packet >> game_info.id; 953 in_packet.Read(game_info.id);
954 954
955 { 955 {
956 std::lock_guard lock(member_mutex); 956 std::lock_guard lock(member_mutex);
@@ -989,9 +989,9 @@ void Room::RoomImpl::HandleClientDisconnection(ENetPeer* client) {
989 nickname = member->nickname; 989 nickname = member->nickname;
990 username = member->user_data.username; 990 username = member->user_data.username;
991 991
992 char ip_raw[256]; 992 std::array<char, 256> ip_raw{};
993 enet_address_get_host_ip(&member->peer->address, ip_raw, sizeof(ip_raw) - 1); 993 enet_address_get_host_ip(&member->peer->address, ip_raw.data(), sizeof(ip_raw) - 1);
994 ip = ip_raw; 994 ip = ip_raw.data();
995 995
996 members.erase(member); 996 members.erase(member);
997 } 997 }