aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn')
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/DisabledLdnClient.cs62
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/INetworkClient.cs24
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/NetworkChangeEventArgs.cs24
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/ConnectPrivateRequest.cs16
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/CreateAccessPointPrivateRequest.cs18
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/NetworkError.cs22
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/NetworkErrorMessage.cs10
7 files changed, 176 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/DisabledLdnClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/DisabledLdnClient.cs
new file mode 100644
index 00000000..75a1e35f
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/DisabledLdnClient.cs
@@ -0,0 +1,62 @@
+using Ryujinx.HLE.HOS.Services.Ldn.Types;
+using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Network.Types;
+using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.RyuLdn.Types;
+using System;
+
+namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.RyuLdn
+{
+ class DisabledLdnClient : INetworkClient
+ {
+ public event EventHandler<NetworkChangeEventArgs> NetworkChange;
+
+ public NetworkError Connect(ConnectRequest request)
+ {
+ NetworkChange?.Invoke(this, new NetworkChangeEventArgs(new NetworkInfo(), false));
+
+ return NetworkError.None;
+ }
+
+ public NetworkError ConnectPrivate(ConnectPrivateRequest request)
+ {
+ NetworkChange?.Invoke(this, new NetworkChangeEventArgs(new NetworkInfo(), false));
+
+ return NetworkError.None;
+ }
+
+ public bool CreateNetwork(CreateAccessPointRequest request, byte[] advertiseData)
+ {
+ NetworkChange?.Invoke(this, new NetworkChangeEventArgs(new NetworkInfo(), false));
+
+ return true;
+ }
+
+ public bool CreateNetworkPrivate(CreateAccessPointPrivateRequest request, byte[] advertiseData)
+ {
+ NetworkChange?.Invoke(this, new NetworkChangeEventArgs(new NetworkInfo(), false));
+
+ return true;
+ }
+
+ public void DisconnectAndStop() { }
+
+ public void DisconnectNetwork() { }
+
+ public ResultCode Reject(DisconnectReason disconnectReason, uint nodeId)
+ {
+ return ResultCode.Success;
+ }
+
+ public NetworkInfo[] Scan(ushort channel, ScanFilter scanFilter)
+ {
+ return Array.Empty<NetworkInfo>();
+ }
+
+ public void SetAdvertiseData(byte[] data) { }
+
+ public void SetGameVersion(byte[] versionString) { }
+
+ public void SetStationAcceptPolicy(AcceptPolicy acceptPolicy) { }
+
+ public void Dispose() { }
+ }
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/INetworkClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/INetworkClient.cs
new file mode 100644
index 00000000..ff342d27
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/INetworkClient.cs
@@ -0,0 +1,24 @@
+using Ryujinx.HLE.HOS.Services.Ldn.Types;
+using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Network.Types;
+using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.RyuLdn.Types;
+using System;
+
+namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.RyuLdn
+{
+ interface INetworkClient : IDisposable
+ {
+ event EventHandler<NetworkChangeEventArgs> NetworkChange;
+
+ void DisconnectNetwork();
+ void DisconnectAndStop();
+ NetworkError Connect(ConnectRequest request);
+ NetworkError ConnectPrivate(ConnectPrivateRequest request);
+ ResultCode Reject(DisconnectReason disconnectReason, uint nodeId);
+ NetworkInfo[] Scan(ushort channel, ScanFilter scanFilter);
+ void SetGameVersion(byte[] versionString);
+ void SetStationAcceptPolicy(AcceptPolicy acceptPolicy);
+ void SetAdvertiseData(byte[] data);
+ bool CreateNetwork(CreateAccessPointRequest request, byte[] advertiseData);
+ bool CreateNetworkPrivate(CreateAccessPointPrivateRequest request, byte[] advertiseData);
+ }
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/NetworkChangeEventArgs.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/NetworkChangeEventArgs.cs
new file mode 100644
index 00000000..1cc09c00
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/NetworkChangeEventArgs.cs
@@ -0,0 +1,24 @@
+using Ryujinx.HLE.HOS.Services.Ldn.Types;
+using System;
+
+namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.RyuLdn
+{
+ class NetworkChangeEventArgs : EventArgs
+ {
+ public NetworkInfo Info;
+ public bool Connected;
+ public DisconnectReason DisconnectReason;
+
+ public NetworkChangeEventArgs(NetworkInfo info, bool connected, DisconnectReason disconnectReason = DisconnectReason.None)
+ {
+ Info = info;
+ Connected = connected;
+ DisconnectReason = disconnectReason;
+ }
+
+ public DisconnectReason DisconnectReasonOrDefault(DisconnectReason defaultReason)
+ {
+ return DisconnectReason == DisconnectReason.None ? defaultReason : DisconnectReason;
+ }
+ }
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/ConnectPrivateRequest.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/ConnectPrivateRequest.cs
new file mode 100644
index 00000000..47e48d0a
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/ConnectPrivateRequest.cs
@@ -0,0 +1,16 @@
+using Ryujinx.HLE.HOS.Services.Ldn.Types;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.RyuLdn.Types
+{
+ [StructLayout(LayoutKind.Sequential, Size = 0xBC)]
+ struct ConnectPrivateRequest
+ {
+ public SecurityConfig SecurityConfig;
+ public SecurityParameter SecurityParameter;
+ public UserConfig UserConfig;
+ public uint LocalCommunicationVersion;
+ public uint OptionUnknown;
+ public NetworkConfig NetworkConfig;
+ }
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/CreateAccessPointPrivateRequest.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/CreateAccessPointPrivateRequest.cs
new file mode 100644
index 00000000..6e890618
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/CreateAccessPointPrivateRequest.cs
@@ -0,0 +1,18 @@
+using Ryujinx.HLE.HOS.Services.Ldn.Types;
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.RyuLdn.Types
+{
+ /// <remarks>
+ /// Advertise data is appended separately (remaining data in the buffer).
+ /// </remarks>
+ [StructLayout(LayoutKind.Sequential, Size = 0x13C, Pack = 1)]
+ struct CreateAccessPointPrivateRequest
+ {
+ public SecurityConfig SecurityConfig;
+ public SecurityParameter SecurityParameter;
+ public UserConfig UserConfig;
+ public NetworkConfig NetworkConfig;
+ public AddressList AddressList;
+ }
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/NetworkError.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/NetworkError.cs
new file mode 100644
index 00000000..70ebf7e3
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/NetworkError.cs
@@ -0,0 +1,22 @@
+namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.RyuLdn.Types
+{
+ enum NetworkError : int
+ {
+ None,
+
+ PortUnreachable,
+
+ TooManyPlayers,
+ VersionTooLow,
+ VersionTooHigh,
+
+ ConnectFailure,
+ ConnectNotFound,
+ ConnectTimeout,
+ ConnectRejected,
+
+ RejectFailed,
+
+ Unknown = -1,
+ }
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/NetworkErrorMessage.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/NetworkErrorMessage.cs
new file mode 100644
index 00000000..acb0b36a
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/RyuLdn/Types/NetworkErrorMessage.cs
@@ -0,0 +1,10 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.RyuLdn.Types
+{
+ [StructLayout(LayoutKind.Sequential, Size = 0x4)]
+ struct NetworkErrorMessage
+ {
+ public NetworkError Error;
+ }
+}