Ignore broadcast messages from own PC

This commit is contained in:
Stone_Red
2022-11-25 12:05:34 +01:00
parent 1f770ce131
commit 7d662dc113
2 changed files with 14 additions and 14 deletions
@@ -35,10 +35,10 @@ public class ApiManager
if (device is not null) if (device is not null)
{ {
ipAddress = (device.GetExternalIPAsync()).GetAwaiter().GetResult()?.ToString(); ipAddress = device.GetExternalIPAsync().GetAwaiter().GetResult()?.ToString();
} }
if (ipAddress is null || ipAddress == "0.0.0.0") if (ipAddress is null or "0.0.0.0")
{ {
ipAddress = NetworkUtilities.GetIP4Adress()?.ToString(); ipAddress = NetworkUtilities.GetIP4Adress()?.ToString();
port = ApiConfiguration.PrivatePort; port = ApiConfiguration.PrivatePort;
@@ -136,24 +136,27 @@ public class ApiManager
private async void BroadcastClient_OnBroadcastRecived(object? sender, BroadcastRecivedEventArgs recivedEventArgs) private async void BroadcastClient_OnBroadcastRecived(object? sender, BroadcastRecivedEventArgs recivedEventArgs)
{ {
Debug.WriteLine($"Received broadcast \"{recivedEventArgs.Message}\" from {recivedEventArgs.IPEndPoint.Address}"); IPAddress remoteIpAddress = recivedEventArgs.IPEndPoint.Address;
Debug.WriteLine($"Received broadcast \"{recivedEventArgs.Message}\" from {remoteIpAddress}");
List<NetworkSocket> hostsToSend = HostsManager.ToList(); List<NetworkSocket> hostsToSend = HostsManager.ToList();
NetworkSocket? localSocket = GetLocalSocket(); NetworkSocket? localSocket = GetLocalSocket();
if (localSocket is null) if (localSocket is null || remoteIpAddress.Equals(PublicIpAddress) || remoteIpAddress.Equals(NetworkUtilities.GetIP4Adress()))
{ {
Debug.WriteLine("Invalid broadcast!");
return; return;
} }
hostsToSend.RemoveAll(x => x.IPAddress == recivedEventArgs.IPEndPoint.Address.ToString()); _ = hostsToSend.RemoveAll(x => x.IPAddress == recivedEventArgs.IPEndPoint.Address.ToString());
hostsToSend.Add(localSocket); hostsToSend.Add(localSocket);
bool success = int.TryParse(recivedEventArgs.Message, out int remotePort); bool success = int.TryParse(recivedEventArgs.Message, out int remotePort);
if (success) if (success)
{ {
HostsManager.Add(new NetworkSocket(recivedEventArgs.IPEndPoint.Address.ToString(), remotePort, DateTime.Now)); HostsManager.Add(new NetworkSocket(remoteIpAddress.ToString(), remotePort, DateTime.Now));
try try
{ {
await NetworkClient.SendAsync(recivedEventArgs.IPEndPoint.Address, remotePort, "DiscoverAnswer", hostsToSend); await NetworkClient.SendAsync(recivedEventArgs.IPEndPoint.Address, remotePort, "DiscoverAnswer", hostsToSend);
@@ -182,7 +185,7 @@ public class ApiManager
return; return;
} }
hostsToSend.RemoveAll(x => x.IPAddress == recivedEventArgs.IpAddress.ToString()); _ = hostsToSend.RemoveAll(x => x.IPAddress == recivedEventArgs.IpAddress.ToString());
hostsToSend.Add(localSocket); hostsToSend.Add(localSocket);
if (recivedEventArgs.Data.Port != 0) if (recivedEventArgs.Data.Port != 0)
@@ -14,10 +14,7 @@ public class HostsManager
{ {
foreach (NetworkSocket host in hosts) foreach (NetworkSocket host in hosts)
{ {
if (!Contains(host)) Add(host);
{
this.hosts.Add(host);
}
} }
SaveHosts(); SaveHosts();
@@ -36,7 +33,7 @@ public class HostsManager
{ {
if (DateTime.Now - host.LastActive >= new TimeSpan(24, 0, 0) || forceRemove) if (DateTime.Now - host.LastActive >= new TimeSpan(24, 0, 0) || forceRemove)
{ {
hosts.RemoveAll(x => x.IPAddress == host.IPAddress && x.Port == host.Port); _ = hosts.RemoveAll(x => x.IPAddress == host.IPAddress && x.Port == host.Port);
} }
SaveHosts(); SaveHosts();
} }
@@ -57,7 +54,7 @@ public class HostsManager
try try
{ {
tcpClient.ConnectAsync(host.IPAddress, host.Port).Wait(500); _ = tcpClient.ConnectAsync(host.IPAddress, host.Port).Wait(500);
Console.CursorLeft = 0; Console.CursorLeft = 0;
if (tcpClient.Connected) if (tcpClient.Connected)
{ {
@@ -87,7 +84,7 @@ public class HostsManager
foreach (NetworkSocket host in hostsToRemove) foreach (NetworkSocket host in hostsToRemove)
{ {
hosts.Remove(host); _ = hosts.Remove(host);
} }
SaveHosts(); SaveHosts();