Compare commits
1 Commits
a114657c8a
...
Canary-1.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6fe4cee7c0 |
@@ -110,10 +110,24 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy
|
||||
_broadcastAddress = config.ProxyIp | (~config.ProxySubnetMask);
|
||||
}
|
||||
|
||||
private async Task<ushort> NatPunchForDevice(NatDevice device)
|
||||
public async Task<ushort> NatPunch()
|
||||
{
|
||||
Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Attempting to map port using {device.ToString()}");
|
||||
NatDiscoverer discoverer = new();
|
||||
CancellationTokenSource cts = new(5000);
|
||||
|
||||
NatDevice device;
|
||||
|
||||
try
|
||||
{
|
||||
device = await discoverer.DiscoverDeviceAsync(PortMapper.Upnp, cts);
|
||||
}
|
||||
catch (NatDeviceNotFoundException)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
_publicPort = PublicPortBase;
|
||||
|
||||
for (int i = 0; i < PublicPortRange; i++)
|
||||
{
|
||||
try
|
||||
@@ -124,14 +138,12 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy
|
||||
|
||||
break;
|
||||
}
|
||||
catch (MappingException ex)
|
||||
catch (MappingException)
|
||||
{
|
||||
Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Failed to map port {_publicPort}: {ex.Message}");
|
||||
_publicPort++;
|
||||
}
|
||||
catch (Exception ex)
|
||||
catch (Exception)
|
||||
{
|
||||
Logger.Info?.PrintMsg(LogClass.ServiceLdn, $"Failed to map port {_publicPort}: {ex.GetType().Name}: {ex.Message}");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -143,52 +155,17 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu.Proxy
|
||||
|
||||
if (_publicPort != 0)
|
||||
{
|
||||
_natDevice = device;
|
||||
_ = Executor.ExecuteAfterDelayAsync(
|
||||
PortLeaseRenew.Seconds(),
|
||||
PortLeaseRenew.Seconds(),
|
||||
_disposedCancellation.Token,
|
||||
RefreshLease);
|
||||
}
|
||||
|
||||
_natDevice = device;
|
||||
|
||||
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
|
||||
|
||||
private void RouteMessage(P2pProxySession sender, ref ProxyInfo info, Action<P2pProxySession> action)
|
||||
|
||||
@@ -3368,7 +3368,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "检查更新",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3393,7 +3393,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "关闭",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3418,7 +3418,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "提示",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3443,7 +3443,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "背景",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3468,7 +3468,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "当模拟器在后台时:",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3493,7 +3493,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "什么事情也不做",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3518,7 +3518,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "禁用输入",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3543,7 +3543,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "静音",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3568,7 +3568,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "阻止输入且静音",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3593,7 +3593,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "暂停模拟",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -3668,7 +3668,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "在后台时禁用输入",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -4643,7 +4643,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "瑞典语",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -4668,7 +4668,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "挪威语",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -6018,7 +6018,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "启用 UI 日志",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -17018,7 +17018,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "在控制台显示 Avalonia (UI) 的日志信息",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -17943,7 +17943,7 @@
|
||||
"th_TH": "",
|
||||
"tr_TR": "",
|
||||
"uk_UA": "",
|
||||
"zh_CN": "",
|
||||
"zh_CN": "有可用的更新!",
|
||||
"zh_TW": ""
|
||||
}
|
||||
},
|
||||
@@ -24073,4 +24073,4 @@
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user