diff --git a/ShareClipbrd/ShareClipbrd.Core.Tests/Services/AddressResolverTests.cs b/ShareClipbrd/ShareClipbrd.Core.Tests/Services/AddressResolverTests.cs index 0001df5..05a4640 100644 --- a/ShareClipbrd/ShareClipbrd.Core.Tests/Services/AddressResolverTests.cs +++ b/ShareClipbrd/ShareClipbrd.Core.Tests/Services/AddressResolverTests.cs @@ -1,5 +1,4 @@ -using ShareClipbrd.Core.Helpers; -using ShareClipbrd.Core.Services; +using ShareClipbrd.Core.Services; namespace ShareClipbrd.Core.Tests.Services { public class AddressResolverTests { @@ -23,11 +22,11 @@ public void UseAddressDiscoveryService_When_Invalid_Address_Return_False() { Assert.That(id, Is.Empty); Assert.That(mandatoryPort, Is.Null); - Assert.IsFalse(AddressResolver.UseAddressDiscoveryService("mdns:", out id, out mandatoryPort)); + Assert.IsFalse(AddressResolver.UseAddressDiscoveryService("mdns :", out id, out mandatoryPort)); Assert.That(id, Is.Empty); Assert.That(mandatoryPort, Is.Null); - Assert.IsFalse(AddressResolver.UseAddressDiscoveryService("mdns: ", out id, out mandatoryPort)); + Assert.IsFalse(AddressResolver.UseAddressDiscoveryService("mdns : ", out id, out mandatoryPort)); Assert.That(id, Is.Empty); Assert.That(mandatoryPort, Is.Null); } @@ -58,7 +57,17 @@ public void UseAddressDiscoveryService_When_Invalid_Ports_Throws_ArgumentExcepti Assert.Throws(() => AddressResolver.UseAddressDiscoveryService("mdns:abcde:-1", out id, out mandatoryPort)); Assert.Throws(() => AddressResolver.UseAddressDiscoveryService("mdns:abcde:65536", out id, out mandatoryPort)); - Assert.IsFalse(AddressResolver.UseAddressDiscoveryService("mdns::1", out id, out mandatoryPort)); + Assert.IsTrue(AddressResolver.UseAddressDiscoveryService("mdns::1", out id, out mandatoryPort)); + Assert.That(id, Is.Empty); + Assert.That(mandatoryPort, Is.Null); + } + + [Test] + public void UseAddressDiscoveryService_Returns_True_And_Empty_Id_If_Address_Is_Not_Fully_Filled() { + string id; + int? mandatoryPort; + + Assert.IsTrue(AddressResolver.UseAddressDiscoveryService("mdns:", out id, out mandatoryPort)); Assert.That(id, Is.Empty); Assert.That(mandatoryPort, Is.Null); } diff --git a/ShareClipbrd/ShareClipbrd.Core/Services/AddressResolver.cs b/ShareClipbrd/ShareClipbrd.Core/Services/AddressResolver.cs index 75b337f..3598931 100644 --- a/ShareClipbrd/ShareClipbrd.Core/Services/AddressResolver.cs +++ b/ShareClipbrd/ShareClipbrd.Core/Services/AddressResolver.cs @@ -38,7 +38,6 @@ public static bool UseAddressDiscoveryService(string address, out string id, out if(string.IsNullOrEmpty(s)) { id = string.Empty; mandatoryPort = null; - return false; } id = s; return true; diff --git a/ShareClipbrd/ShareClipbrd.Core/Services/DataClient.cs b/ShareClipbrd/ShareClipbrd.Core/Services/DataClient.cs index 372904e..c543379 100644 --- a/ShareClipbrd/ShareClipbrd.Core/Services/DataClient.cs +++ b/ShareClipbrd/ShareClipbrd.Core/Services/DataClient.cs @@ -82,6 +82,9 @@ public async Task SendFileDropList(StringCollection fileDropList) { var cancellationToken = cts.Token; try { await Connect(cancellationToken); + if(!IsSocketConnected(client.Client)) { + return; + } var stream = await Handshake(); var fileTransmitter = new FileTransmitter(progressService, stream); await fileTransmitter.Send(fileDropList, cancellationToken); @@ -125,6 +128,9 @@ public async Task SendData(ClipboardData clipboardData) { var cancellationToken = cts.Token; try { await Connect(cancellationToken); + if(!IsSocketConnected(client.Client)) { + return; + } await using(progressService.Begin(ProgressMode.Send)) { var totalLenght = clipboardData.GetTotalLenght(); progressService.SetMaxTick(totalLenght); @@ -190,6 +196,9 @@ async Task Connect(CancellationToken cancellationToken) { if(mandatoryPort.HasValue) { throw new ArgumentException("mdns port for the partner address is not needed"); } + if(string.IsNullOrEmpty(id)) { + return; + } ipEndPoint = await addressDiscoveryService.Discover(id); } else { ipEndPoint = NetworkHelper.ResolveHostName(systemConfiguration.PartnerAddress);