aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Sockets/Nsd/Manager
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2019-09-19 02:45:11 +0200
committerjduncanator <1518948+jduncanator@users.noreply.github.com>2019-09-19 10:45:11 +1000
commita0720b5681852f3d786d77bd3793b0359dea321c (patch)
tree9d8f61e540d1d1d827999902dad95e5c0c1e076e /Ryujinx.HLE/HOS/Services/Sockets/Nsd/Manager
parent4af3101b22e6957d6aa48a2768566d658699f4ed (diff)
Refactoring HOS folder structure (#771)
* Refactoring HOS folder structure Refactoring HOS folder structure: - Added some subfolders when needed (Following structure decided in private). - Added some `Types` folders when needed. - Little cleanup here and there. - Add services placeholders for every HOS services (close #766 and #753). * Remove Types namespaces
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Sockets/Nsd/Manager')
-rw-r--r--Ryujinx.HLE/HOS/Services/Sockets/Nsd/Manager/FqdnResolver.cs131
1 files changed, 131 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Sockets/Nsd/Manager/FqdnResolver.cs b/Ryujinx.HLE/HOS/Services/Sockets/Nsd/Manager/FqdnResolver.cs
new file mode 100644
index 00000000..aaab7b3b
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Sockets/Nsd/Manager/FqdnResolver.cs
@@ -0,0 +1,131 @@
+using System.Text;
+
+namespace Ryujinx.HLE.HOS.Services.Sockets.Nsd.Manager
+{
+ class FqdnResolver
+ {
+ private const string _dummyAddress = "unknown.dummy.nintendo.net";
+
+ private NsdSettings _nsdSettings;
+
+ public FqdnResolver(NsdSettings nsdSettings)
+ {
+ _nsdSettings = nsdSettings;
+ }
+
+ public ResultCode GetSettingName(ServiceCtx context, out string settingName)
+ {
+ if (_nsdSettings.TestMode)
+ {
+ settingName = "";
+
+ return ResultCode.NotImplemented;
+ }
+ else
+ {
+ settingName = "";
+
+ if (true) // TODO: Determine field (struct + 0x2C)
+ {
+ settingName = _nsdSettings.Environment;
+
+ return ResultCode.Success;
+ }
+
+ return ResultCode.NullOutputObject;
+ }
+ }
+
+ public ResultCode GetEnvironmentIdentifier(ServiceCtx context, out string identifier)
+ {
+ if (_nsdSettings.TestMode)
+ {
+ identifier = "rre";
+
+ return ResultCode.NotImplemented;
+ }
+ else
+ {
+ identifier = _nsdSettings.Environment;
+ }
+
+ return ResultCode.Success;
+ }
+
+ public ResultCode Resolve(ServiceCtx context, string address, out string resolvedAddress)
+ {
+ if (address != "api.sect.srv.nintendo.net" || address != "conntest.nintendowifi.net")
+ {
+ // TODO: Load Environment from the savedata.
+ address = address.Replace("%", _nsdSettings.Environment);
+
+ resolvedAddress = "";
+
+ if (_nsdSettings == null)
+ {
+ return ResultCode.SettingsNotInitialized;
+ }
+
+ if (!_nsdSettings.Initialized)
+ {
+ return ResultCode.SettingsNotLoaded;
+ }
+
+ switch (address)
+ {
+ case "e97b8a9d672e4ce4845ec6947cd66ef6-sb-api.accounts.nintendo.com": // dp1 environment
+ resolvedAddress = "e97b8a9d672e4ce4845ec6947cd66ef6-sb.baas.nintendo.com";
+ break;
+ case "api.accounts.nintendo.com": // dp1 environment
+ resolvedAddress = "e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com";
+ break;
+ case "e97b8a9d672e4ce4845ec6947cd66ef6-sb.accounts.nintendo.com": // lp1 environment
+ resolvedAddress = "e97b8a9d672e4ce4845ec6947cd66ef6-sb.baas.nintendo.com";
+ break;
+ case "accounts.nintendo.com": // lp1 environment
+ resolvedAddress = "e0d67c509fb203858ebcb2fe3f88c2aa.baas.nintendo.com";
+ break;
+ /*
+ // TODO: Determine fields of the struct.
+ case "": // + 0xEB8 || + 0x2BE8
+ resolvedAddress = ""; // + 0xEB8 + 0x300 || + 0x2BE8 + 0x300
+ break;
+ */
+ default:
+ resolvedAddress = address;
+ break;
+ }
+ }
+ else
+ {
+ resolvedAddress = address;
+ }
+
+ return ResultCode.Success;
+ }
+
+ public ResultCode ResolveEx(ServiceCtx context, out ResultCode resultCode, out string resolvedAddress)
+ {
+ (long inputPosition, long inputSize) = context.Request.GetBufferType0x21();
+
+ byte[] addressBuffer = context.Memory.ReadBytes(inputPosition, inputSize);
+ string address = Encoding.UTF8.GetString(addressBuffer);
+
+ resultCode = Resolve(context, address, out resolvedAddress);
+
+ if (resultCode != ResultCode.Success)
+ {
+ resolvedAddress = _dummyAddress;
+ }
+
+ if (_nsdSettings.TestMode)
+ {
+ return ResultCode.Success;
+ }
+ else
+ {
+ return resultCode;
+ }
+ }
+ }
+} \ No newline at end of file