aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.HLE/OsHle/Services/Nifm/IGeneralService.cs29
1 files changed, 27 insertions, 2 deletions
diff --git a/Ryujinx.HLE/OsHle/Services/Nifm/IGeneralService.cs b/Ryujinx.HLE/OsHle/Services/Nifm/IGeneralService.cs
index e289a8db..66b1f1b6 100644
--- a/Ryujinx.HLE/OsHle/Services/Nifm/IGeneralService.cs
+++ b/Ryujinx.HLE/OsHle/Services/Nifm/IGeneralService.cs
@@ -1,6 +1,11 @@
using Ryujinx.HLE.Logging;
using Ryujinx.HLE.OsHle.Ipc;
+using System;
using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Sockets;
+using System.Net.NetworkInformation;
namespace Ryujinx.HLE.OsHle.Services.Nifm
{
@@ -14,10 +19,13 @@ namespace Ryujinx.HLE.OsHle.Services.Nifm
{
m_Commands = new Dictionary<int, ServiceProcessRequest>()
{
- { 4, CreateRequest }
+ { 4, CreateRequest },
+ { 12, GetCurrentIpAddress }
};
}
+ public const int NoInternetConnection = 0x2586e;
+
//CreateRequest(i32)
public long CreateRequest(ServiceCtx Context)
{
@@ -29,5 +37,22 @@ namespace Ryujinx.HLE.OsHle.Services.Nifm
return 0;
}
+
+ public long GetCurrentIpAddress(ServiceCtx Context)
+ {
+ if (!NetworkInterface.GetIsNetworkAvailable())
+ {
+ return NoInternetConnection;
+ }
+
+ IPHostEntry Host = Dns.GetHostEntry(Dns.GetHostName());
+ IPAddress Address = Host.AddressList.FirstOrDefault(A => A.AddressFamily == AddressFamily.InterNetwork);
+
+ Context.ResponseData.Write(BitConverter.ToUInt32(Address.GetAddressBytes()));
+
+ Context.Ns.Log.PrintInfo(LogClass.ServiceNifm, "Console's local IP is " + Address.ToString());
+
+ return 0;
+ }
}
-} \ No newline at end of file
+}