Просмотр исходного кода

Implement GetCurrentIpAddress() and stub GetCurrentNetworkProfile() (#271)

* Implement GetCurrentIpAddress()

...and stub GetCurrentNetworkProfile()

* Update IGeneralService.cs

* Actually implement it properly this time...

* <snip>

* Made some requested changes

* Added requested changes.

* Added more requested changes.

* oof

* Local > Address

* Cyuubumped

* Change PrintInfo > PrintDebug

* Revert change
simonmkwii-dev 7 лет назад
Родитель
Сommit
2795af038d
1 измененных файлов с 27 добавлено и 2 удалено
  1. 27 2
      Ryujinx.HLE/OsHle/Services/Nifm/IGeneralService.cs

+ 27 - 2
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;
+        }
     }
-}
+}