From e915f990bb973c6d5ef4f5fd3f836161a1c1af3c Mon Sep 17 00:00:00 2001 From: Sepalani Date: Sat, 3 Feb 2024 11:18:40 +0400 Subject: [PATCH 1/7] BBA/HLE: Make network_ref into a class --- Source/Core/Core/HW/EXI/BBA/BuiltIn.h | 18 ++++++++++++++++++ Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h | 3 +-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.h b/Source/Core/Core/HW/EXI/BBA/BuiltIn.h index 981b2e46e2ba..3edfbd784006 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.h +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.h @@ -92,3 +92,21 @@ struct StackRef BbaTcpSocket tcp_socket; u64 poke_time; }; + +// Max 10 at same time, I think most gc game had a +// limit of 8 in the GC framework +using StackRefs = std::array; + +class NetworkRef +{ +public: + StackRefs& data() { return m_stacks; } + const StackRefs& data() const { return m_stacks; } + auto begin() { return m_stacks.begin(); } + auto begin() const { return m_stacks.cbegin(); } + auto end() { return m_stacks.end(); } + auto end() const { return m_stacks.cend(); } + +private: + StackRefs m_stacks; +}; diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h index 465f050521e1..4dde4e8a065a 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h +++ b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h @@ -456,8 +456,7 @@ class CEXIETHERNET : public IEXIDevice sf::TcpListener m_upnp_httpd; #if defined(WIN32) || defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \ defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__) - std::array network_ref{}; // max 10 at same time, i think most gc game had a - // limit of 8 in the gc framework + NetworkRef network_ref; std::thread m_read_thread; Common::Flag m_read_enabled; Common::Flag m_read_thread_shutdown; From 5388f35cc4008b4ce7353b532bc938a47c3dc8c9 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Sat, 3 Feb 2024 11:34:00 +0400 Subject: [PATCH 2/7] BBA/HLE: Add NetworkRef::Clear method --- Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp | 38 ++++++++++--------------- Source/Core/Core/HW/EXI/BBA/BuiltIn.h | 4 ++- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp index be77eb6d59ae..785a67677bdf 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp @@ -91,11 +91,7 @@ bool CEXIETHERNET::BuiltInBBAInterface::Activate() m_router_mac = Common::GenerateMacAddress(Common::MACConsumer::BBA); m_arp_table[m_router_ip] = m_router_mac; - // clear all ref - for (auto& ref : network_ref) - { - ref.ip = 0; - } + network_ref.Clear(); m_upnp_httpd.listen(Common::SSDP_PORT, sf::IpAddress(ip)); m_upnp_httpd.setBlocking(false); @@ -113,16 +109,7 @@ void CEXIETHERNET::BuiltInBBAInterface::Deactivate() m_read_thread_shutdown.Set(); m_active = false; - // kill all active socket - for (auto& ref : network_ref) - { - if (ref.ip != 0) - { - ref.type == IPPROTO_TCP ? ref.tcp_socket.disconnect() : ref.udp_socket.unbind(); - } - ref.ip = 0; - } - + network_ref.Clear(); m_arp_table.clear(); m_upnp_httpd.close(); @@ -778,14 +765,7 @@ void CEXIETHERNET::BuiltInBBAInterface::RecvStart() void CEXIETHERNET::BuiltInBBAInterface::RecvStop() { m_read_enabled.Clear(); - for (auto& net_ref : network_ref) - { - if (net_ref.ip != 0) - { - net_ref.type == IPPROTO_TCP ? net_ref.tcp_socket.disconnect() : net_ref.udp_socket.unbind(); - } - net_ref.ip = 0; - } + network_ref.Clear(); m_queue_read = 0; m_queue_write = 0; } @@ -986,3 +966,15 @@ sf::Socket::Status BbaUdpSocket::Bind(u16 port, u32 net_ip) INFO_LOG_FMT(SP1, "SSDP multicast membership successful"); return sf::Socket::Status::Done; } + +void NetworkRef::Clear() +{ + for (auto& ref : m_stacks) + { + if (ref.ip != 0) + { + ref.type == IPPROTO_TCP ? ref.tcp_socket.disconnect() : ref.udp_socket.unbind(); + } + ref.ip = 0; + } +} diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.h b/Source/Core/Core/HW/EXI/BBA/BuiltIn.h index 3edfbd784006..697c73b8a0e2 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.h +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.h @@ -72,7 +72,7 @@ class BbaUdpSocket : public sf::UdpSocket struct StackRef { - u32 ip; + u32 ip = 0; u16 local; u16 remote; u16 type; @@ -107,6 +107,8 @@ class NetworkRef auto end() { return m_stacks.end(); } auto end() const { return m_stacks.cend(); } + void Clear(); + private: StackRefs m_stacks; }; From 9e0bf2932923f59357786f1d442c05aaeaaa7059 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Sat, 3 Feb 2024 12:06:47 +0400 Subject: [PATCH 3/7] BBA/HLE: Move GetSlot methods --- Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp | 72 ++++++++++---------- Source/Core/Core/HW/EXI/BBA/BuiltIn.h | 3 + Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h | 2 - 3 files changed, 39 insertions(+), 38 deletions(-) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp index 785a67677bdf..ba5da0248ed4 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp @@ -190,36 +190,6 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleDHCP(const Common::UDPPacket& pack WriteToQueue(response.Build()); } -StackRef* CEXIETHERNET::BuiltInBBAInterface::GetAvailableSlot(u16 port) -{ - if (port > 0) // existing connection? - { - for (auto& ref : network_ref) - { - if (ref.ip != 0 && ref.local == port) - return &ref; - } - } - for (auto& ref : network_ref) - { - if (ref.ip == 0) - return &ref; - } - return nullptr; -} - -StackRef* CEXIETHERNET::BuiltInBBAInterface::GetTCPSlot(u16 src_port, u16 dst_port, u32 ip) -{ - for (auto& ref : network_ref) - { - if (ref.ip == ip && ref.remote == dst_port && ref.local == src_port) - { - return &ref; - } - } - return nullptr; -} - std::optional> CEXIETHERNET::BuiltInBBAInterface::TryGetDataFromSocket(StackRef* ref) { @@ -301,8 +271,8 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleTCPFrame(const Common::TCPPacket& { const auto& [hwdata, ip_header, tcp_header, ip_options, tcp_options, data] = packet; sf::IpAddress target; - StackRef* ref = GetTCPSlot(tcp_header.source_port, tcp_header.destination_port, - Common::BitCast(ip_header.destination_addr)); + StackRef* ref = network_ref.GetTCPSlot(tcp_header.source_port, tcp_header.destination_port, + Common::BitCast(ip_header.destination_addr)); const u16 flags = ntohs(tcp_header.properties) & 0xfff; if (flags & (TCP_FLAG_FIN | TCP_FLAG_RST)) { @@ -331,7 +301,7 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleTCPFrame(const Common::TCPPacket& // new connection if (ref != nullptr) return; - ref = GetAvailableSlot(0); + ref = network_ref.GetAvailableSlot(0); ref->delay = GetTickCountStd(); ref->local = tcp_header.source_port; @@ -421,7 +391,7 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleTCPFrame(const Common::TCPPacket& // and listen to it. We open it on our side manually. void CEXIETHERNET::BuiltInBBAInterface::InitUDPPort(u16 port) { - StackRef* ref = GetAvailableSlot(htons(port)); + StackRef* ref = network_ref.GetAvailableSlot(htons(port)); if (ref == nullptr || ref->ip != 0) return; ref->ip = m_router_ip; // change for ip @@ -451,7 +421,7 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleUDPFrame(const Common::UDPPacket& m_router_ip : // dns request Common::BitCast(ip_header.destination_addr); - StackRef* ref = GetAvailableSlot(udp_header.source_port); + StackRef* ref = network_ref.GetAvailableSlot(udp_header.source_port); if (ref->ip == 0) { ref->ip = destination_addr; // change for ip @@ -496,7 +466,7 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleUDPFrame(const Common::UDPPacket& void CEXIETHERNET::BuiltInBBAInterface::HandleUPnPClient() { - StackRef* ref = GetAvailableSlot(0); + StackRef* ref = network_ref.GetAvailableSlot(0); if (ref == nullptr || m_upnp_httpd.accept(ref->tcp_socket) != sf::Socket::Done) return; @@ -967,6 +937,36 @@ sf::Socket::Status BbaUdpSocket::Bind(u16 port, u32 net_ip) return sf::Socket::Status::Done; } +StackRef* NetworkRef::GetAvailableSlot(u16 port) +{ + if (port > 0) // existing connection? + { + for (auto& ref : m_stacks) + { + if (ref.ip != 0 && ref.local == port) + return &ref; + } + } + for (auto& ref : m_stacks) + { + if (ref.ip == 0) + return &ref; + } + return nullptr; +} + +StackRef* NetworkRef::GetTCPSlot(u16 src_port, u16 dst_port, u32 ip) +{ + for (auto& ref : m_stacks) + { + if (ref.ip == ip && ref.remote == dst_port && ref.local == src_port) + { + return &ref; + } + } + return nullptr; +} + void NetworkRef::Clear() { for (auto& ref : m_stacks) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.h b/Source/Core/Core/HW/EXI/BBA/BuiltIn.h index 697c73b8a0e2..5cef0034506e 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.h +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.h @@ -107,6 +107,9 @@ class NetworkRef auto end() { return m_stacks.end(); } auto end() const { return m_stacks.cend(); } + StackRef* GetAvailableSlot(u16 port); + StackRef* GetTCPSlot(u16 src_port, u16 dst_port, u32 ip); + void Clear(); private: diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h index 4dde4e8a065a..18bb70c2390f 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h +++ b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h @@ -463,8 +463,6 @@ class CEXIETHERNET : public IEXIDevice static void ReadThreadHandler(BuiltInBBAInterface* self); #endif void WriteToQueue(const std::vector& data); - StackRef* GetAvailableSlot(u16 port); - StackRef* GetTCPSlot(u16 src_port, u16 dst_port, u32 ip); std::optional> TryGetDataFromSocket(StackRef* ref); void HandleARP(const Common::ARPPacket& packet); From 6e2a081cb9a10cc757da17c7cf3eba8ecd7837b5 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Sat, 3 Feb 2024 12:19:29 +0400 Subject: [PATCH 4/7] BBA/HLE: Loop over network_ref once --- Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp | 49 ++++++++++++------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp index ba5da0248ed4..8e44804d19f3 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp @@ -658,39 +658,38 @@ void CEXIETHERNET::BuiltInBBAInterface::ReadThreadHandler(CEXIETHERNET::BuiltInB self->m_queue_read++; self->m_queue_read &= 15; } - else + + // Check network stack references + for (auto& net_ref : self->network_ref) { - // test connections data - for (auto& net_ref : self->network_ref) + if (net_ref.ip == 0) + continue; + + // Check for sleeping TCP data + if (net_ref.type == IPPROTO_TCP) { - if (net_ref.ip == 0) - continue; - const auto socket_data = self->TryGetDataFromSocket(&net_ref); - if (socket_data.has_value()) + for (auto& tcp_buf : net_ref.tcp_buffers) { - datasize = socket_data->size(); - std::memcpy(self->m_eth_ref->mRecvBuffer.get(), socket_data->data(), datasize); - break; + if (!tcp_buf.used || (GetTickCountStd() - tcp_buf.tick) <= 1000) + continue; + + tcp_buf.tick = GetTickCountStd(); + // Timed out packet, resend + if (((self->m_queue_write + 1) & 15) != self->m_queue_read) + { + self->WriteToQueue(tcp_buf.data); + } } } - } - // test and add any sleeping tcp data - for (auto& net_ref : self->network_ref) - { - if (net_ref.ip == 0 || net_ref.type != IPPROTO_TCP) + // Check for connection data + if (datasize != 0) continue; - for (auto& tcp_buf : net_ref.tcp_buffers) + const auto socket_data = self->TryGetDataFromSocket(&net_ref); + if (socket_data.has_value()) { - if (!tcp_buf.used || (GetTickCountStd() - tcp_buf.tick) <= 1000) - continue; - - tcp_buf.tick = GetTickCountStd(); - // timmed out packet, resend - if (((self->m_queue_write + 1) & 15) != self->m_queue_read) - { - self->WriteToQueue(tcp_buf.data); - } + datasize = socket_data->size(); + std::memcpy(self->m_eth_ref->mRecvBuffer.get(), socket_data->data(), datasize); } } From fbebbcc0fd2053e513c284d76848f19f6f10c488 Mon Sep 17 00:00:00 2001 From: Sepalani Date: Sat, 3 Feb 2024 12:53:41 +0400 Subject: [PATCH 5/7] BBA/HLE: Move functions to anonymous namespace --- Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp index 8e44804d19f3..e44df89a0b1c 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp @@ -26,12 +26,7 @@ u64 GetTickCountStd() using namespace std::chrono; return duration_cast(steady_clock::now().time_since_epoch()).count(); } -} // namespace -namespace ExpansionInterface -{ -namespace -{ std::vector BuildFINFrame(StackRef* ref) { const Common::TCPPacket result(ref->bba_mac, ref->my_mac, ref->from, ref->to, ref->seq_num, @@ -70,6 +65,8 @@ void SetIPIdentification(u8* ptr, std::size_t size, u16 value) } } // namespace +namespace ExpansionInterface +{ bool CEXIETHERNET::BuiltInBBAInterface::Activate() { if (IsActivated()) From f3194b777b104b2f003cb995141c18c5605b1aaa Mon Sep 17 00:00:00 2001 From: Sepalani Date: Sat, 3 Feb 2024 13:25:00 +0400 Subject: [PATCH 6/7] BBA/HLE: Move polling data logic into a method --- Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp | 67 ++++++++++---------- Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h | 1 + 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp index e44df89a0b1c..8d63ad64059c 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp @@ -128,6 +128,40 @@ void CEXIETHERNET::BuiltInBBAInterface::WriteToQueue(const std::vector& data m_queue_write = next_write_index; } +void CEXIETHERNET::BuiltInBBAInterface::PollData(std::size_t* datasize) +{ + for (auto& net_ref : network_ref) + { + if (net_ref.ip == 0) + continue; + + // Check for sleeping TCP data + if (net_ref.type == IPPROTO_TCP) + { + for (auto& tcp_buf : net_ref.tcp_buffers) + { + if (!tcp_buf.used || (GetTickCountStd() - tcp_buf.tick) <= 1000) + continue; + + tcp_buf.tick = GetTickCountStd(); + // Timed out packet, resend + if (((m_queue_write + 1) & 15) != m_queue_read) + WriteToQueue(tcp_buf.data); + } + } + + // Check for connection data + if (*datasize != 0) + continue; + const auto socket_data = TryGetDataFromSocket(&net_ref); + if (socket_data.has_value()) + { + *datasize = socket_data->size(); + std::memcpy(m_eth_ref->mRecvBuffer.get(), socket_data->data(), *datasize); + } + } +} + void CEXIETHERNET::BuiltInBBAInterface::HandleARP(const Common::ARPPacket& packet) { const auto& [hwdata, arpdata] = packet; @@ -657,38 +691,7 @@ void CEXIETHERNET::BuiltInBBAInterface::ReadThreadHandler(CEXIETHERNET::BuiltInB } // Check network stack references - for (auto& net_ref : self->network_ref) - { - if (net_ref.ip == 0) - continue; - - // Check for sleeping TCP data - if (net_ref.type == IPPROTO_TCP) - { - for (auto& tcp_buf : net_ref.tcp_buffers) - { - if (!tcp_buf.used || (GetTickCountStd() - tcp_buf.tick) <= 1000) - continue; - - tcp_buf.tick = GetTickCountStd(); - // Timed out packet, resend - if (((self->m_queue_write + 1) & 15) != self->m_queue_read) - { - self->WriteToQueue(tcp_buf.data); - } - } - } - - // Check for connection data - if (datasize != 0) - continue; - const auto socket_data = self->TryGetDataFromSocket(&net_ref); - if (socket_data.has_value()) - { - datasize = socket_data->size(); - std::memcpy(self->m_eth_ref->mRecvBuffer.get(), socket_data->data(), datasize); - } - } + self->PollData(&datasize); // Check for new UPnP client self->HandleUPnPClient(); diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h index 18bb70c2390f..76b6aeea07c0 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h +++ b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h @@ -463,6 +463,7 @@ class CEXIETHERNET : public IEXIDevice static void ReadThreadHandler(BuiltInBBAInterface* self); #endif void WriteToQueue(const std::vector& data); + void PollData(std::size_t* datasize); std::optional> TryGetDataFromSocket(StackRef* ref); void HandleARP(const Common::ARPPacket& packet); From 07a24293671a3d7a748ee627a2f32520502faa0e Mon Sep 17 00:00:00 2001 From: Sepalani Date: Sat, 3 Feb 2024 13:29:21 +0400 Subject: [PATCH 7/7] BBA/HLE: Fix network_ref coding style --- Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp | 20 ++++++++++---------- Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp index 8d63ad64059c..733053b6a627 100644 --- a/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp +++ b/Source/Core/Core/HW/EXI/BBA/BuiltIn.cpp @@ -88,7 +88,7 @@ bool CEXIETHERNET::BuiltInBBAInterface::Activate() m_router_mac = Common::GenerateMacAddress(Common::MACConsumer::BBA); m_arp_table[m_router_ip] = m_router_mac; - network_ref.Clear(); + m_network_ref.Clear(); m_upnp_httpd.listen(Common::SSDP_PORT, sf::IpAddress(ip)); m_upnp_httpd.setBlocking(false); @@ -106,7 +106,7 @@ void CEXIETHERNET::BuiltInBBAInterface::Deactivate() m_read_thread_shutdown.Set(); m_active = false; - network_ref.Clear(); + m_network_ref.Clear(); m_arp_table.clear(); m_upnp_httpd.close(); @@ -130,7 +130,7 @@ void CEXIETHERNET::BuiltInBBAInterface::WriteToQueue(const std::vector& data void CEXIETHERNET::BuiltInBBAInterface::PollData(std::size_t* datasize) { - for (auto& net_ref : network_ref) + for (auto& net_ref : m_network_ref) { if (net_ref.ip == 0) continue; @@ -302,8 +302,8 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleTCPFrame(const Common::TCPPacket& { const auto& [hwdata, ip_header, tcp_header, ip_options, tcp_options, data] = packet; sf::IpAddress target; - StackRef* ref = network_ref.GetTCPSlot(tcp_header.source_port, tcp_header.destination_port, - Common::BitCast(ip_header.destination_addr)); + StackRef* ref = m_network_ref.GetTCPSlot(tcp_header.source_port, tcp_header.destination_port, + Common::BitCast(ip_header.destination_addr)); const u16 flags = ntohs(tcp_header.properties) & 0xfff; if (flags & (TCP_FLAG_FIN | TCP_FLAG_RST)) { @@ -332,7 +332,7 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleTCPFrame(const Common::TCPPacket& // new connection if (ref != nullptr) return; - ref = network_ref.GetAvailableSlot(0); + ref = m_network_ref.GetAvailableSlot(0); ref->delay = GetTickCountStd(); ref->local = tcp_header.source_port; @@ -422,7 +422,7 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleTCPFrame(const Common::TCPPacket& // and listen to it. We open it on our side manually. void CEXIETHERNET::BuiltInBBAInterface::InitUDPPort(u16 port) { - StackRef* ref = network_ref.GetAvailableSlot(htons(port)); + StackRef* ref = m_network_ref.GetAvailableSlot(htons(port)); if (ref == nullptr || ref->ip != 0) return; ref->ip = m_router_ip; // change for ip @@ -452,7 +452,7 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleUDPFrame(const Common::UDPPacket& m_router_ip : // dns request Common::BitCast(ip_header.destination_addr); - StackRef* ref = network_ref.GetAvailableSlot(udp_header.source_port); + StackRef* ref = m_network_ref.GetAvailableSlot(udp_header.source_port); if (ref->ip == 0) { ref->ip = destination_addr; // change for ip @@ -497,7 +497,7 @@ void CEXIETHERNET::BuiltInBBAInterface::HandleUDPFrame(const Common::UDPPacket& void CEXIETHERNET::BuiltInBBAInterface::HandleUPnPClient() { - StackRef* ref = network_ref.GetAvailableSlot(0); + StackRef* ref = m_network_ref.GetAvailableSlot(0); if (ref == nullptr || m_upnp_httpd.accept(ref->tcp_socket) != sf::Socket::Done) return; @@ -734,7 +734,7 @@ void CEXIETHERNET::BuiltInBBAInterface::RecvStart() void CEXIETHERNET::BuiltInBBAInterface::RecvStop() { m_read_enabled.Clear(); - network_ref.Clear(); + m_network_ref.Clear(); m_queue_read = 0; m_queue_write = 0; } diff --git a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h index 76b6aeea07c0..094487c9e9c9 100644 --- a/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h +++ b/Source/Core/Core/HW/EXI/EXI_DeviceEthernet.h @@ -456,7 +456,7 @@ class CEXIETHERNET : public IEXIDevice sf::TcpListener m_upnp_httpd; #if defined(WIN32) || defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \ defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__) - NetworkRef network_ref; + NetworkRef m_network_ref; std::thread m_read_thread; Common::Flag m_read_enabled; Common::Flag m_read_thread_shutdown;