aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs')
-rw-r--r--src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs
new file mode 100644
index 00000000..06801305
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs
@@ -0,0 +1,104 @@
+using Ryujinx.Common.Logging;
+using Ryujinx.Common.Utilities;
+using Ryujinx.HLE.HOS.Services.Ldn.Types;
+using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types;
+using System;
+using System.Net.NetworkInformation;
+
+namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm
+{
+ /// <summary>
+ /// Client implementation for <a href="https://github.com/spacemeowx2/ldn_mitm">ldn_mitm</a>
+ /// </summary>
+ internal class LdnMitmClient : INetworkClient
+ {
+ public bool NeedsRealId => false;
+
+ public event EventHandler<NetworkChangeEventArgs> NetworkChange;
+
+ private readonly LanDiscovery _lanDiscovery;
+
+ public LdnMitmClient(HLEConfiguration config)
+ {
+ UnicastIPAddressInformation localIpInterface = NetworkHelpers.GetLocalInterface(config.MultiplayerLanInterfaceId).Item2;
+
+ _lanDiscovery = new LanDiscovery(this, localIpInterface.Address, localIpInterface.IPv4Mask);
+ }
+
+ internal void InvokeNetworkChange(NetworkInfo info, bool connected, DisconnectReason reason = DisconnectReason.None)
+ {
+ NetworkChange?.Invoke(this, new NetworkChangeEventArgs(info, connected: connected, disconnectReason: reason));
+ }
+
+ public NetworkError Connect(ConnectRequest request)
+ {
+ return _lanDiscovery.Connect(request.NetworkInfo, request.UserConfig, request.LocalCommunicationVersion);
+ }
+
+ public NetworkError ConnectPrivate(ConnectPrivateRequest request)
+ {
+ // NOTE: This method is not implemented in ldn_mitm
+ Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient ConnectPrivate");
+
+ return NetworkError.None;
+ }
+
+ public bool CreateNetwork(CreateAccessPointRequest request, byte[] advertiseData)
+ {
+ return _lanDiscovery.CreateNetwork(request.SecurityConfig, request.UserConfig, request.NetworkConfig);
+ }
+
+ public bool CreateNetworkPrivate(CreateAccessPointPrivateRequest request, byte[] advertiseData)
+ {
+ // NOTE: This method is not implemented in ldn_mitm
+ Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient CreateNetworkPrivate");
+
+ return true;
+ }
+
+ public void DisconnectAndStop()
+ {
+ _lanDiscovery.DisconnectAndStop();
+ }
+
+ public void DisconnectNetwork()
+ {
+ _lanDiscovery.DestroyNetwork();
+ }
+
+ public ResultCode Reject(DisconnectReason disconnectReason, uint nodeId)
+ {
+ // NOTE: This method is not implemented in ldn_mitm
+ Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient Reject");
+
+ return ResultCode.Success;
+ }
+
+ public NetworkInfo[] Scan(ushort channel, ScanFilter scanFilter)
+ {
+ return _lanDiscovery.Scan(channel, scanFilter);
+ }
+
+ public void SetAdvertiseData(byte[] data)
+ {
+ _lanDiscovery.SetAdvertiseData(data);
+ }
+
+ public void SetGameVersion(byte[] versionString)
+ {
+ // NOTE: This method is not implemented in ldn_mitm
+ Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient SetGameVersion");
+ }
+
+ public void SetStationAcceptPolicy(AcceptPolicy acceptPolicy)
+ {
+ // NOTE: This method is not implemented in ldn_mitm
+ Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient SetStationAcceptPolicy");
+ }
+
+ public void Dispose()
+ {
+ _lanDiscovery.Dispose();
+ }
+ }
+}