Skip to content

Commit

Permalink
Fix 0.3.8
Browse files Browse the repository at this point in the history
- Fix #85
- Fix #87
  • Loading branch information
bitbeans committed Jan 4, 2017
1 parent 84aed21 commit 651315f
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 38 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ Feel free to report your success or failure: [here](https://github.com/bitbeans/

# ![Alt text](img/icons/32x32.png "Requirements") Requirements

- This software targets .NET 4.5.
- This software targets .NET 4.6.
- It also requires Visual C++ Redistributable for Visual Studio 2015 x86.

# ![Alt text](img/icons/32x32.png "Translations") Translations
Expand Down
55 changes: 41 additions & 14 deletions SimpleDnsCrypt/Models/DnsCryptProxyEntry.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
using Caliburn.Micro;
using System;
using Caliburn.Micro;
using SimpleDnsCrypt.Tools;

namespace SimpleDnsCrypt.Models
{
/// <summary>
/// Class to represent an entry in the resolver list.
/// </summary>
public class DnsCryptProxyEntry : PropertyChangedBase
{
public class DnsCryptProxyEntry : PropertyChangedBase, IEquatable<DnsCryptProxyEntry>
{
/// <summary>
/// The short name of the resolver.
/// </summary>
Expand Down Expand Up @@ -84,10 +85,13 @@ public class DnsCryptProxyEntry : PropertyChangedBase
public int LocalPort { get; set; }

/// <summary>
/// Some optional data.
/// Some optional data.
/// </summary>
public DnsCryptProxyEntryExtra Extra { get; set; }

/// <summary>
/// Formatted display name.
/// </summary>
public string DisplayName
{
get
Expand All @@ -96,18 +100,41 @@ public string DisplayName
{
if (DnssecValidation)
{
return string.Format("{0}ms - {1} [DNSSEC]", Extra.ResponseTime, FullName);
return $"{Extra.ResponseTime}ms - {FullName} [DNSSEC]";
}
else
{
return string.Format("{0}ms - {1}", Extra.ResponseTime, FullName);
}
}
else
{
return FullName;
return $"{Extra.ResponseTime}ms - {FullName}";
}
return FullName;
}
}
}

public bool Equals(DnsCryptProxyEntry other)
{
if (ReferenceEquals(other, null)) return false;
if (ReferenceEquals(other, this)) return true;
return Name == other.Name;
}

public sealed override bool Equals(object obj)
{
var otherMyItem = obj as DnsCryptProxyEntry;
if (ReferenceEquals(otherMyItem, null)) return false;
return otherMyItem.Equals(this);
}

public override int GetHashCode()
{
return Name.GetHashCode();
}

public static bool operator ==(DnsCryptProxyEntry entry1, DnsCryptProxyEntry entry2)
{
return Equals(entry1, entry2);
}

public static bool operator !=(DnsCryptProxyEntry entry1, DnsCryptProxyEntry entry2)
{
return !(entry1 == entry2);
}
}
}
32 changes: 23 additions & 9 deletions SimpleDnsCrypt/Tools/AnalyseProxy.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using DNS.Client;
using DNS.Protocol;
Expand Down Expand Up @@ -54,33 +56,45 @@ public static DnsCryptProxyEntryExtra Analyse(DnsCryptProxyEntry dnsCryptProxyEn
var sw = Stopwatch.StartNew();
var response = request.Resolve();
sw.Stop();
var data = response.AnswerRecords[0].Data;

if (Encoding.ASCII.GetString(ArrayHelper.SubArray(data, 0, 9)).Equals("|DNSC\0\u0001\0\0"))
foreach (var answerRecord in response.AnswerRecords)
{
var certificate = ExtractCertificate(ArrayHelper.SubArray(data, 9), providerKey);
if (certificate != null)
var certificates = new List<Certificate>();
var tr = Encoding.ASCII.GetString(ArrayHelper.SubArray(answerRecord.Data, 0, 9));
if (tr.Equals("|DNSC\0\u0001\0\0") || tr.Equals("|DNSC\0\u0002\0\0"))
{
dnsCryptProxyEntryExtra.Certificate = certificate;
if (certificate.Valid)
var certificate = ExtractCertificate(ArrayHelper.SubArray(answerRecord.Data, 9), providerKey);
if (certificate != null)
{
if (certificate.Valid)
{
certificates.Add(certificate);
}
}
}
if (certificates.Count > 0)
{
var newestCertificate = certificates.OrderByDescending(item => item.Serial).FirstOrDefault();
if (newestCertificate != null)
{
dnsCryptProxyEntryExtra.Certificate = newestCertificate;
dnsCryptProxyEntryExtra.Succeeded = true;
}
else
{
dnsCryptProxyEntryExtra.Succeeded = false;
return null;
}
}
else
{
dnsCryptProxyEntryExtra.Succeeded = false;
return null;
}
}
dnsCryptProxyEntryExtra.ResponseTime = sw.ElapsedMilliseconds;
}
catch (Exception)
{
dnsCryptProxyEntryExtra.Succeeded = false;
return null;
}
return dnsCryptProxyEntryExtra;
}
Expand Down
30 changes: 16 additions & 14 deletions SimpleDnsCrypt/ViewModels/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ public sealed class MainViewModel : Screen, IShell
{
public static MainViewModel Instance { get; set; }


private readonly BindableCollection<LocalNetworkInterface> _localNetworkInterfaces =
new BindableCollection<LocalNetworkInterface>();

Expand All @@ -49,7 +48,7 @@ public sealed class MainViewModel : Screen, IShell
private List<string> _plugins;
private DnsCryptProxyEntry _primaryResolver;
private string _primaryResolverTitle;
private ObservableCollection<DnsCryptProxyEntry> _resolvers;
private List<DnsCryptProxyEntry> _resolvers;
private DnsCryptProxyEntry _secondaryResolver;
private string _secondaryResolverTitle;
private Language _selectedLanguage;
Expand Down Expand Up @@ -99,6 +98,7 @@ private MainViewModel(IWindowManager windowManager, IEventAggregator eventAggreg
MessageBoxButton.OK, BoxType.Error);
Environment.Exit(1);
}

// do a simple check, if all needed files are available
if (!ValidateDnsCryptProxyFolder())
{
Expand All @@ -119,7 +119,7 @@ private MainViewModel(IWindowManager windowManager, IEventAggregator eventAggreg
LocalizationEx.GetUiString("global_ipv6_disabled", Thread.CurrentThread.CurrentCulture));
}

_resolvers = new ObservableCollection<DnsCryptProxyEntry>();
_resolvers = new List<DnsCryptProxyEntry>();
_updateResolverListOnStart = _userData.UpdateResolverListOnStart;
_isWorkingOnPrimaryService = false;
_isWorkingOnSecondaryService = false;
Expand Down Expand Up @@ -355,7 +355,7 @@ public bool IsOverlayVisible
/// <summary>
/// The list of loaded resolvers.
/// </summary>
public ObservableCollection<DnsCryptProxyEntry> Resolvers
public List<DnsCryptProxyEntry> Resolvers
{
get { return _resolvers; }
set
Expand Down Expand Up @@ -852,31 +852,31 @@ public async void AnalyseResolvers()
try
{
IsAnalysing = true;
var tmpResolvers = new List<DnsCryptProxyEntry>();
await Task.Run(() =>
{
var tmpResolvers = _resolvers.ToList();
for (var r = 0; r < tmpResolvers.Count; r++)
for (var r = 0; r < _resolvers.Count; r++)
{
var dnsCryptProxyEntryExtra = AnalyseProxy.Analyse(tmpResolvers[r]);
var dnsCryptProxyEntryExtra = AnalyseProxy.Analyse(_resolvers[r]);
if (dnsCryptProxyEntryExtra != null)
{
tmpResolvers[r].Extra = dnsCryptProxyEntryExtra;
if (!dnsCryptProxyEntryExtra.Succeeded)
if (dnsCryptProxyEntryExtra.Succeeded && (dnsCryptProxyEntryExtra.ResponseTime > 0))
{
tmpResolvers.RemoveAt(r);
var dnsCryptProxyEntry = _resolvers[r];
dnsCryptProxyEntry.Extra = dnsCryptProxyEntryExtra;
tmpResolvers.Add(dnsCryptProxyEntry);
}
}
}
tmpResolvers.Sort((a, b) => a.Extra.ResponseTime.CompareTo(b.Extra.ResponseTime));
Resolvers = new ObservableCollection<DnsCryptProxyEntry>(tmpResolvers);
}).ConfigureAwait(false);
Resolvers = tmpResolvers;
IsAnalysing = false;
}
catch (Exception)
{
IsAnalysing = false;
}
NotifyOfPropertyChange(() => Resolvers);
}

#region Helper
Expand Down Expand Up @@ -1000,13 +1000,14 @@ await Task.Run(() =>
DnsCryptProxyListManager.ReadProxyList(proxyList, proxyListSignature, _userData.UseIpv6);
if (dnsProxyList != null && dnsProxyList.Any())
{
Resolvers.Clear();
var tmpResolvers = new List<DnsCryptProxyEntry>();
foreach (var dnsProxy in dnsProxyList)
{
if (
dnsProxy.ProviderPublicKey.Equals(
PrimaryDnsCryptProxyManager.DnsCryptProxy.Parameter.ProviderKey))
{

_primaryResolver = dnsProxy;
// restore the local port
_primaryResolver.LocalPort = PrimaryDnsCryptProxyManager.DnsCryptProxy.Parameter.LocalPort;
Expand All @@ -1017,8 +1018,9 @@ await Task.Run(() =>
{
_secondaryResolver = dnsProxy;
}
Resolvers.Add(dnsProxy);
tmpResolvers.Add(dnsProxy);
}
Resolvers = tmpResolvers;
}
}
else
Expand Down

0 comments on commit 651315f

Please sign in to comment.