From f80c7c4cd5c090b9a31f89a0eb3d86cbe928c50b Mon Sep 17 00:00:00 2001 From: FearlessTobi Date: Sat, 30 Jul 2022 05:58:23 +0200 Subject: core, network: Add ability to proxy socket packets --- src/core/internal_network/socket_proxy.h | 102 +++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/core/internal_network/socket_proxy.h (limited to 'src/core/internal_network/socket_proxy.h') diff --git a/src/core/internal_network/socket_proxy.h b/src/core/internal_network/socket_proxy.h new file mode 100644 index 000000000..ef7d5b554 --- /dev/null +++ b/src/core/internal_network/socket_proxy.h @@ -0,0 +1,102 @@ +// Copyright 2022 yuzu emulator team +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include +#include + +#include "core/internal_network/sockets.h" +#include "network/network.h" + +namespace Network { + +class ProxySocket : public SocketBase { +public: + ProxySocket(RoomNetwork& room_network_) noexcept; + ~ProxySocket() override; + + ProxySocket(const ProxySocket&) = delete; + ProxySocket& operator=(const ProxySocket&) = delete; + + ProxySocket(ProxySocket&& rhs) noexcept; + + // Avoid closing sockets implicitly + ProxySocket& operator=(ProxySocket&&) noexcept = delete; + + void HandleProxyPacket(const ProxyPacket& packet); + + Errno Initialize(Domain domain, Type type, Protocol socket_protocol) override; + + Errno Close() override; + + std::pair Accept() override; + + Errno Connect(SockAddrIn addr_in) override; + + std::pair GetPeerName() override; + + std::pair GetSockName() override; + + Errno Bind(SockAddrIn addr) override; + + Errno Listen(s32 backlog) override; + + Errno Shutdown(ShutdownHow how) override; + + std::pair Recv(int flags, std::vector& message) override; + + std::pair RecvFrom(int flags, std::vector& message, SockAddrIn* addr) override; + + std::pair ReceivePacket(int flags, std::vector& message, SockAddrIn* addr, + std::size_t max_length); + + std::pair Send(const std::vector& message, int flags) override; + + void SendPacket(ProxyPacket& packet); + + std::pair SendTo(u32 flags, const std::vector& message, + const SockAddrIn* addr) override; + + Errno SetLinger(bool enable, u32 linger) override; + + Errno SetReuseAddr(bool enable) override; + + Errno SetBroadcast(bool enable) override; + + Errno SetKeepAlive(bool enable) override; + + Errno SetSndBuf(u32 value) override; + + Errno SetRcvBuf(u32 value) override; + + Errno SetSndTimeo(u32 value) override; + + Errno SetRcvTimeo(u32 value) override; + + Errno SetNonBlock(bool enable) override; + + template + Errno SetSockOpt(SOCKET fd, int option, T value); + + bool IsOpened() const override; + + bool broadcast = false; + bool closed = false; + u32 send_timeout = 0; + u32 receive_timeout = 0; + std::map socket_options; + bool is_bound = false; + SockAddrIn local_endpoint{}; + bool blocking = true; + std::queue received_packets; + Protocol protocol; + + std::mutex packets_mutex; + + RoomNetwork& room_network; +}; + +} // namespace Network -- cgit v1.2.3 From bb84f5353927e473f39fc5fac741a623b48a1ef1 Mon Sep 17 00:00:00 2001 From: FearlessTobi Date: Sat, 30 Jul 2022 20:16:47 +0200 Subject: Make copyright headers SPDX-compliant --- src/core/internal_network/socket_proxy.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src/core/internal_network/socket_proxy.h') diff --git a/src/core/internal_network/socket_proxy.h b/src/core/internal_network/socket_proxy.h index ef7d5b554..614f91e99 100644 --- a/src/core/internal_network/socket_proxy.h +++ b/src/core/internal_network/socket_proxy.h @@ -1,6 +1,5 @@ -// Copyright 2022 yuzu emulator team -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. +// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later #pragma once -- cgit v1.2.3 From a5cd639cb627013c22d14331bd0e91228ac44e84 Mon Sep 17 00:00:00 2001 From: FearlessTobi Date: Sat, 30 Jul 2022 21:27:31 +0200 Subject: core/socket_proxy: Fix compilation --- src/core/internal_network/socket_proxy.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/core/internal_network/socket_proxy.h') diff --git a/src/core/internal_network/socket_proxy.h b/src/core/internal_network/socket_proxy.h index 614f91e99..c9155f1af 100644 --- a/src/core/internal_network/socket_proxy.h +++ b/src/core/internal_network/socket_proxy.h @@ -25,7 +25,7 @@ public: // Avoid closing sockets implicitly ProxySocket& operator=(ProxySocket&&) noexcept = delete; - void HandleProxyPacket(const ProxyPacket& packet); + void HandleProxyPacket(const ProxyPacket& packet) override; Errno Initialize(Domain domain, Type type, Protocol socket_protocol) override; -- cgit v1.2.3 From 6d41088153b4b932b4f2524d4252993a5642f998 Mon Sep 17 00:00:00 2001 From: FearlessTobi Date: Mon, 1 Aug 2022 22:47:39 +0200 Subject: core, yuzu: Address first part of review comments --- src/core/internal_network/socket_proxy.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/core/internal_network/socket_proxy.h') diff --git a/src/core/internal_network/socket_proxy.h b/src/core/internal_network/socket_proxy.h index c9155f1af..ad917cac3 100644 --- a/src/core/internal_network/socket_proxy.h +++ b/src/core/internal_network/socket_proxy.h @@ -14,7 +14,7 @@ namespace Network { class ProxySocket : public SocketBase { public: - ProxySocket(RoomNetwork& room_network_) noexcept; + explicit ProxySocket(RoomNetwork& room_network_) noexcept; ~ProxySocket() override; ProxySocket(const ProxySocket&) = delete; @@ -82,6 +82,7 @@ public: bool IsOpened() const override; +private: bool broadcast = false; bool closed = false; u32 send_timeout = 0; -- cgit v1.2.3 From 72b90a5bbf7a9308f7172f38be88e29bab58a21b Mon Sep 17 00:00:00 2001 From: german77 Date: Sat, 13 Aug 2022 13:11:01 -0500 Subject: core: network: Address review comments --- src/core/internal_network/socket_proxy.h | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'src/core/internal_network/socket_proxy.h') diff --git a/src/core/internal_network/socket_proxy.h b/src/core/internal_network/socket_proxy.h index ad917cac3..f12b5f567 100644 --- a/src/core/internal_network/socket_proxy.h +++ b/src/core/internal_network/socket_proxy.h @@ -7,6 +7,7 @@ #include #include +#include "common/common_funcs.h" #include "core/internal_network/sockets.h" #include "network/network.h" @@ -14,17 +15,12 @@ namespace Network { class ProxySocket : public SocketBase { public: + YUZU_NON_COPYABLE(ProxySocket); + YUZU_NON_MOVEABLE(ProxySocket); + explicit ProxySocket(RoomNetwork& room_network_) noexcept; ~ProxySocket() override; - ProxySocket(const ProxySocket&) = delete; - ProxySocket& operator=(const ProxySocket&) = delete; - - ProxySocket(ProxySocket&& rhs) noexcept; - - // Avoid closing sockets implicitly - ProxySocket& operator=(ProxySocket&&) noexcept = delete; - void HandleProxyPacket(const ProxyPacket& packet) override; Errno Initialize(Domain domain, Type type, Protocol socket_protocol) override; @@ -87,7 +83,6 @@ private: bool closed = false; u32 send_timeout = 0; u32 receive_timeout = 0; - std::map socket_options; bool is_bound = false; SockAddrIn local_endpoint{}; bool blocking = true; -- cgit v1.2.3