Compare commits
5 Commits
Canary-1.2
...
a6b7bda7e1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a6b7bda7e1 | ||
|
|
91f73a4891 | ||
|
|
883d4d863a | ||
|
|
bcbe589964 | ||
|
|
d406c42e15 |
@@ -110,24 +110,10 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy
|
|||||||
_broadcastAddress = config.ProxyIp | (~config.ProxySubnetMask);
|
_broadcastAddress = config.ProxyIp | (~config.ProxySubnetMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ushort> NatPunch()
|
private async Task<ushort> NatPunchForDevice(NatDevice device)
|
||||||
{
|
{
|
||||||
NatDiscoverer discoverer = new();
|
Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Attempting to map port using {device.ToString()}");
|
||||||
CancellationTokenSource cts = new(5000);
|
|
||||||
|
|
||||||
NatDevice device;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
device = await discoverer.DiscoverDeviceAsync(PortMapper.Upnp, cts);
|
|
||||||
}
|
|
||||||
catch (NatDeviceNotFoundException)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
_publicPort = PublicPortBase;
|
_publicPort = PublicPortBase;
|
||||||
|
|
||||||
for (int i = 0; i < PublicPortRange; i++)
|
for (int i = 0; i < PublicPortRange; i++)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -138,12 +124,14 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
catch (MappingException)
|
catch (MappingException ex)
|
||||||
{
|
{
|
||||||
|
Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Failed to map port {_publicPort}: {ex.Message}");
|
||||||
_publicPort++;
|
_publicPort++;
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Failed to map port {_publicPort}: {ex.GetType().Name}: {ex.Message}");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,17 +143,52 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy
|
|||||||
|
|
||||||
if (_publicPort != 0)
|
if (_publicPort != 0)
|
||||||
{
|
{
|
||||||
|
_natDevice = device;
|
||||||
_ = Executor.ExecuteAfterDelayAsync(
|
_ = Executor.ExecuteAfterDelayAsync(
|
||||||
PortLeaseRenew.Seconds(),
|
PortLeaseRenew.Seconds(),
|
||||||
_disposedCancellation.Token,
|
_disposedCancellation.Token,
|
||||||
RefreshLease);
|
RefreshLease);
|
||||||
}
|
}
|
||||||
|
|
||||||
_natDevice = device;
|
|
||||||
|
|
||||||
return _publicPort;
|
return _publicPort;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<ushort> NatPunch()
|
||||||
|
{
|
||||||
|
NatDiscoverer discoverer = new();
|
||||||
|
CancellationTokenSource cts = new(500);
|
||||||
|
|
||||||
|
NatDevice[] devices;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
devices = (await discoverer.DiscoverDevicesAsync(PortMapper.Upnp, cts)).ToArray();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.Error?.PrintMsg(LogClass.ServiceLdn, $"Failed to discover UPnP devices: {ex.Message}");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (devices.Length == 0)
|
||||||
|
{
|
||||||
|
Logger.Error?.PrintMsg(LogClass.ServiceLdn, "No UPnP devices found.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var device in devices)
|
||||||
|
{
|
||||||
|
ushort port = await NatPunchForDevice(device);
|
||||||
|
if (port != 0)
|
||||||
|
{
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Failed to map port using any device");
|
||||||
|
_publicPort = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Proxy handlers
|
// Proxy handlers
|
||||||
|
|
||||||
private void RouteMessage(P2pProxySession sender, ref ProxyInfo info, Action<P2pProxySession> action)
|
private void RouteMessage(P2pProxySession sender, ref ProxyInfo info, Action<P2pProxySession> action)
|
||||||
|
|||||||
@@ -589,7 +589,7 @@
|
|||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "Iniciar jogos ocultando a interface",
|
"pt_BR": "Iniciar jogos ocultando a interface",
|
||||||
"ru_RU": "",
|
"ru_RU": "",
|
||||||
"sv_SE": "",
|
"sv_SE": "Starta spel med dolt användargränssnitt",
|
||||||
"th_TH": "",
|
"th_TH": "",
|
||||||
"tr_TR": "",
|
"tr_TR": "",
|
||||||
"uk_UA": "",
|
"uk_UA": "",
|
||||||
@@ -2614,7 +2614,7 @@
|
|||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "Extraia o RomFS de um arquivo DLC selecionado",
|
"pt_BR": "Extraia o RomFS de um arquivo DLC selecionado",
|
||||||
"ru_RU": "",
|
"ru_RU": "",
|
||||||
"sv_SE": "",
|
"sv_SE": "Extrahera RomFS från en vald DLC-fil",
|
||||||
"th_TH": "",
|
"th_TH": "",
|
||||||
"tr_TR": "",
|
"tr_TR": "",
|
||||||
"uk_UA": "",
|
"uk_UA": "",
|
||||||
@@ -3062,7 +3062,7 @@
|
|||||||
"ko_KR": "XCI 파일 '{0}' 트리밍",
|
"ko_KR": "XCI 파일 '{0}' 트리밍",
|
||||||
"no_NO": "Trimming av XCI-filen '{0}'",
|
"no_NO": "Trimming av XCI-filen '{0}'",
|
||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "Reduzindo arquivo XCI '{0}",
|
"pt_BR": "Reduzindo arquivo XCI '{0}'",
|
||||||
"ru_RU": "Обрезается XCI файл '{0}'",
|
"ru_RU": "Обрезается XCI файл '{0}'",
|
||||||
"sv_SE": "Optimerar XCI-filen '{0}'",
|
"sv_SE": "Optimerar XCI-filen '{0}'",
|
||||||
"th_TH": "",
|
"th_TH": "",
|
||||||
@@ -4621,7 +4621,7 @@
|
|||||||
"zh_CN": "繁体中文(推荐)",
|
"zh_CN": "繁体中文(推荐)",
|
||||||
"zh_TW": "正體中文 (建議)"
|
"zh_TW": "正體中文 (建議)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ID": "SettingsTabSystemSystemLanguageSwedish",
|
"ID": "SettingsTabSystemSystemLanguageSwedish",
|
||||||
"Translations": {
|
"Translations": {
|
||||||
@@ -4646,7 +4646,7 @@
|
|||||||
"zh_CN": "瑞典语",
|
"zh_CN": "瑞典语",
|
||||||
"zh_TW": ""
|
"zh_TW": ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ID": "SettingsTabSystemSystemLanguageNorwegian",
|
"ID": "SettingsTabSystemSystemLanguageNorwegian",
|
||||||
"Translations": {
|
"Translations": {
|
||||||
@@ -6464,7 +6464,7 @@
|
|||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "",
|
"pt_BR": "",
|
||||||
"ru_RU": "",
|
"ru_RU": "",
|
||||||
"sv_SE": "",
|
"sv_SE": "Ok",
|
||||||
"th_TH": "ตกลง",
|
"th_TH": "ตกลง",
|
||||||
"tr_TR": "Tamam",
|
"tr_TR": "Tamam",
|
||||||
"uk_UA": "",
|
"uk_UA": "",
|
||||||
@@ -8364,7 +8364,7 @@
|
|||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "",
|
"pt_BR": "",
|
||||||
"ru_RU": "",
|
"ru_RU": "",
|
||||||
"sv_SE": "",
|
"sv_SE": "Inaktivera",
|
||||||
"th_TH": "",
|
"th_TH": "",
|
||||||
"tr_TR": "",
|
"tr_TR": "",
|
||||||
"uk_UA": "",
|
"uk_UA": "",
|
||||||
@@ -8389,7 +8389,7 @@
|
|||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "",
|
"pt_BR": "",
|
||||||
"ru_RU": "",
|
"ru_RU": "",
|
||||||
"sv_SE": "",
|
"sv_SE": "Regnbåge",
|
||||||
"th_TH": "",
|
"th_TH": "",
|
||||||
"tr_TR": "",
|
"tr_TR": "",
|
||||||
"uk_UA": "",
|
"uk_UA": "",
|
||||||
@@ -8439,7 +8439,7 @@
|
|||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "",
|
"pt_BR": "",
|
||||||
"ru_RU": "",
|
"ru_RU": "",
|
||||||
"sv_SE": "",
|
"sv_SE": "Färg",
|
||||||
"th_TH": "",
|
"th_TH": "",
|
||||||
"tr_TR": "",
|
"tr_TR": "",
|
||||||
"uk_UA": "",
|
"uk_UA": "",
|
||||||
@@ -15239,7 +15239,7 @@
|
|||||||
"pl_PL": "Seria Amiibo",
|
"pl_PL": "Seria Amiibo",
|
||||||
"pt_BR": "Franquia Amiibo",
|
"pt_BR": "Franquia Amiibo",
|
||||||
"ru_RU": "Серия Amiibo",
|
"ru_RU": "Серия Amiibo",
|
||||||
"sv_SE": "",
|
"sv_SE": "Amiibo-serie",
|
||||||
"th_TH": "",
|
"th_TH": "",
|
||||||
"tr_TR": "Amiibo Serisi",
|
"tr_TR": "Amiibo Serisi",
|
||||||
"uk_UA": "Серія Amiibo",
|
"uk_UA": "Серія Amiibo",
|
||||||
@@ -18664,7 +18664,7 @@
|
|||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "{0} - Informação",
|
"pt_BR": "{0} - Informação",
|
||||||
"ru_RU": "{0} - Информация",
|
"ru_RU": "{0} - Информация",
|
||||||
"sv_SE": "",
|
"sv_SE": "{0} - Information",
|
||||||
"th_TH": "{0} – ข้อมูล",
|
"th_TH": "{0} – ข้อมูล",
|
||||||
"tr_TR": "{0} - Bilgi",
|
"tr_TR": "{0} - Bilgi",
|
||||||
"uk_UA": "{0} - Інформація",
|
"uk_UA": "{0} - Інформація",
|
||||||
@@ -19739,7 +19739,7 @@
|
|||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "Configurações de LED",
|
"pt_BR": "Configurações de LED",
|
||||||
"ru_RU": "",
|
"ru_RU": "",
|
||||||
"sv_SE": "",
|
"sv_SE": "LED-inställningar",
|
||||||
"th_TH": "",
|
"th_TH": "",
|
||||||
"tr_TR": "",
|
"tr_TR": "",
|
||||||
"uk_UA": "",
|
"uk_UA": "",
|
||||||
@@ -21939,7 +21939,7 @@
|
|||||||
"pl_PL": "Głoś",
|
"pl_PL": "Głoś",
|
||||||
"pt_BR": "",
|
"pt_BR": "",
|
||||||
"ru_RU": "Громкость",
|
"ru_RU": "Громкость",
|
||||||
"sv_SE": "",
|
"sv_SE": "Volym",
|
||||||
"th_TH": "ระดับเสียง",
|
"th_TH": "ระดับเสียง",
|
||||||
"tr_TR": "Ses",
|
"tr_TR": "Ses",
|
||||||
"uk_UA": "Гуч.",
|
"uk_UA": "Гуч.",
|
||||||
@@ -24014,7 +24014,7 @@
|
|||||||
"pl_PL": "",
|
"pl_PL": "",
|
||||||
"pt_BR": "Selecione um DLC para extrair",
|
"pt_BR": "Selecione um DLC para extrair",
|
||||||
"ru_RU": "",
|
"ru_RU": "",
|
||||||
"sv_SE": "",
|
"sv_SE": "Välj en DLC att extrahera",
|
||||||
"th_TH": "",
|
"th_TH": "",
|
||||||
"tr_TR": "",
|
"tr_TR": "",
|
||||||
"uk_UA": "",
|
"uk_UA": "",
|
||||||
|
|||||||
Reference in New Issue
Block a user