Skip to content

Commit 110a7bf

Browse files
committed
Switch to -list-all
1 parent c01bf3c commit 110a7bf

4 files changed

Lines changed: 141 additions & 40 deletions

File tree

SimpleDnsCrypt/AppBootstrapper.cs

Lines changed: 50 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,51 @@
77
using System.Linq;
88
using System.Windows;
99
using Caliburn.Micro;
10+
using SimpleDnsCrypt.Helper;
1011
using SimpleDnsCrypt.Logger;
1112
using SimpleDnsCrypt.ViewModels;
1213

1314
namespace SimpleDnsCrypt {
1415

1516
public class AppBootstrapper : BootstrapperBase {
1617
private CompositionContainer _container;
18+
private static readonly ILog Log = LogManagerHelper.Factory();
1719

18-
public AppBootstrapper() {
20+
public AppBootstrapper() {
1921
LogManager.GetLog = type => new NLogLogger(type);
2022
Initialize();
2123
}
2224

2325
protected override void Configure() {
24-
_container = new CompositionContainer(
25-
new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>())
26-
);
27-
var batch = new CompositionBatch();
28-
batch.AddExportedValue<IWindowManager>(new AppWindowManager());
29-
batch.AddExportedValue<IEventAggregator>(new EventAggregator());
30-
batch.AddExportedValue(_container);
31-
_container.Compose(batch);
26+
try
27+
{
28+
_container = new CompositionContainer(
29+
new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x))
30+
.OfType<ComposablePartCatalog>())
31+
);
32+
var batch = new CompositionBatch();
33+
batch.AddExportedValue<IWindowManager>(new AppWindowManager());
34+
batch.AddExportedValue<IEventAggregator>(new EventAggregator());
35+
batch.AddExportedValue(_container);
36+
_container.Compose(batch);
37+
}
38+
catch (Exception exception)
39+
{
40+
Log.Error(exception);
41+
}
3242
}
3343

34-
protected override object GetInstance(Type service, string key) {
35-
var contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(service) : key;
36-
var exports = _container.GetExportedValues<object>(contract);
44+
protected override object GetInstance(Type service, string key)
45+
{
46+
var contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(service) : key;
47+
var exports = _container.GetExportedValues<object>(contract);
3748

38-
if (exports.Any()) return exports.First();
39-
throw new Exception($"Could not locate any instances of contract {contract}.");
40-
}
49+
if (exports.Any())
50+
{
51+
return exports.First();
52+
}
53+
throw new Exception($"Could not locate any instances of contract {contract}.");
54+
}
4155

4256
protected override IEnumerable<object> GetAllInstances(Type service) {
4357
return _container.GetExportedValues<object>(AttributedModelServices.GetContractName(service));
@@ -49,25 +63,33 @@ protected override void BuildUp(object instance) {
4963

5064
protected override void OnStartup(object sender, StartupEventArgs e)
5165
{
52-
if (e.Args.Length == 1)
53-
{
54-
if (e.Args[0].Equals("-debug"))
55-
{
56-
LogMode.Debug = true;
57-
}
58-
}
59-
var loader = _container.GetExportedValue<LoaderViewModel>();
60-
var windowManager = IoC.Get<IWindowManager>();
61-
windowManager.ShowDialog(loader);
62-
}
66+
try
67+
{
68+
if (e.Args.Length == 1)
69+
{
70+
if (e.Args[0].Equals("-debug"))
71+
{
72+
LogMode.Debug = true;
73+
}
74+
}
75+
76+
var loader = _container.GetExportedValue<LoaderViewModel>();
77+
var windowManager = IoC.Get<IWindowManager>();
78+
windowManager.ShowDialog(loader);
79+
}
80+
catch (Exception exception)
81+
{
82+
Log.Error(exception);
83+
}
84+
}
6385

6486
protected override void OnUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
6587
{
66-
88+
Log.Error(e.Exception);
6789
Execute.OnUIThread(
6890
() =>
6991
MessageBox.Show(
70-
$"Message: {e.Exception.Message}\nStackTrace: {e.Exception.StackTrace}", "Error", MessageBoxButton.OK, MessageBoxImage.Error));
92+
"There was an UnhandledException. Check the log entries for further information.", "Error", MessageBoxButton.OK, MessageBoxImage.Error));
7193
}
7294
}
7395
}

SimpleDnsCrypt/Helper/DnsCryptProxyManager.cs

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,6 @@ public static bool Start()
148148
}
149149
}
150150

151-
152-
153151
public static string GetVersion()
154152
{
155153
var result = ExecuteWithArguments("-version");
@@ -181,11 +179,37 @@ public static List<AvailableResolver> GetAvailableResolvers()
181179
return resolvers;
182180
}
183181

182+
/// <summary>
183+
/// Get the list of all resolvers.
184+
/// </summary>
185+
/// <returns></returns>
186+
public static List<AvailableResolver> GetAllResolversWithoutFilters()
187+
{
188+
var resolvers = new List<AvailableResolver>();
189+
var result = ExecuteWithArguments("-list-all -json");
190+
if (!result.Success) return resolvers;
191+
if (string.IsNullOrEmpty(result.StandardOutput)) return resolvers;
192+
try
193+
{
194+
var res = JsonConvert.DeserializeObject<List<AvailableResolver>>(result.StandardOutput);
195+
if (res.Count > 0)
196+
{
197+
resolvers = res;
198+
}
199+
}
200+
catch (Exception)
201+
{
202+
203+
}
204+
return resolvers;
205+
}
206+
184207
/// <summary>
185208
/// Get the list of available (inactive) resolvers for the enabled filters.
186209
/// </summary>
187210
/// <returns></returns>
188-
public static List<AvailableResolver> GetAllResolvers()
211+
[Obsolete("Use GetAllResolversWithoutFilters instead.")]
212+
public static List<AvailableResolver> GetAllResolversWithFilters()
189213
{
190214
var resolvers = new List<AvailableResolver>();
191215
var dnscryptFolder = Path.Combine(Directory.GetCurrentDirectory(), Global.DnsCryptProxyFolder);

SimpleDnsCrypt/Models/AvailableResolver.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Caliburn.Micro;
1+
using System.Collections.Generic;
2+
using Caliburn.Micro;
23
using Newtonsoft.Json;
34

45
namespace SimpleDnsCrypt.Models
@@ -12,6 +13,8 @@ public class AvailableResolver : PropertyChangedBase
1213
private bool _noLog;
1314
private bool _noFilter;
1415
private string _description;
16+
private bool _ipv6;
17+
private List<int> _ports;
1518

1619
[JsonIgnore]
1720
public string ToolTip => $"empty";
@@ -49,6 +52,28 @@ public string Protocol
4952
}
5053
}
5154

55+
[JsonProperty("ports")]
56+
public List<int> Ports
57+
{
58+
get => _ports;
59+
set
60+
{
61+
_ports = value;
62+
NotifyOfPropertyChange(() => Ports);
63+
}
64+
}
65+
66+
[JsonProperty("ipv6")]
67+
public bool Ipv6
68+
{
69+
get => _ipv6;
70+
set
71+
{
72+
_ipv6 = value;
73+
NotifyOfPropertyChange(() => Ipv6);
74+
}
75+
}
76+
5277
[JsonProperty("dnssec")]
5378
public bool DnsSec
5479
{

SimpleDnsCrypt/ViewModels/MainViewModel.cs

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public enum Tabs
3232
[Export(typeof(MainViewModel))]
3333
public class MainViewModel : PropertyChangedBase
3434
{
35+
private static readonly ILog Log = LogManagerHelper.Factory();
3536
private readonly IWindowManager _windowManager;
3637
private readonly IEventAggregator _events;
3738
private string _windowTitle;
@@ -306,7 +307,7 @@ public void TabControl_SelectionChanged(SelectionChangedEventArgs selectionChang
306307
var tabItem = (TabItem) selectionChangedEventArgs.AddedItems[0];
307308
if (string.IsNullOrEmpty((string) tabItem.Tag)) return;
308309

309-
switch ((string)tabItem.Tag)
310+
switch ((string) tabItem.Tag)
310311
{
311312
case "mainTab":
312313
SelectedTab = Tabs.MainTab;
@@ -338,7 +339,10 @@ public void TabControl_SelectionChanged(SelectionChangedEventArgs selectionChang
338339
break;
339340
}
340341
}
341-
catch(Exception) { }
342+
catch (Exception exception)
343+
{
344+
Log.Error(exception);
345+
}
342346
}
343347

344348
public void About()
@@ -403,9 +407,9 @@ public async void SaveDnsCryptConfiguration()
403407
_isResolverRunning = DnsCryptProxyManager.IsDnsCryptProxyRunning();
404408
NotifyOfPropertyChange(() => IsResolverRunning);
405409
}
406-
catch (Exception)
410+
catch (Exception exception)
407411
{
408-
412+
Log.Error(exception);
409413
}
410414
finally
411415
{
@@ -657,12 +661,38 @@ public void ResolverClicked(AvailableResolver resolver)
657661
/// <remarks>Current solution is not very effective.</remarks>
658662
private void LoadResolvers()
659663
{
660-
var allResolvers = DnsCryptProxyManager.GetAllResolvers();
661664
var availableResolvers = DnsCryptProxyManager.GetAvailableResolvers();
665+
var allResolversWithoutFilters = DnsCryptProxyManager.GetAllResolversWithoutFilters();
666+
var allResolversWithFilters = new List<AvailableResolver>();
667+
668+
foreach (var resolver in allResolversWithoutFilters)
669+
{
670+
if (_dnscryptProxyConfiguration.require_dnssec)
671+
{
672+
if (!resolver.DnsSec) continue;
673+
}
674+
675+
if (_dnscryptProxyConfiguration.require_nofilter)
676+
{
677+
if (!resolver.NoFilter) continue;
678+
}
679+
680+
if (_dnscryptProxyConfiguration.require_nolog)
681+
{
682+
if (!resolver.NoLog) continue;
683+
}
684+
685+
if (resolver.Ipv6)
686+
{
687+
if (!_dnscryptProxyConfiguration.ipv6_servers) continue;
688+
}
689+
allResolversWithFilters.Add(resolver);
690+
}
691+
662692
foreach (var resolver in availableResolvers)
663693
{
664694
AvailableResolver first = null;
665-
foreach (var r in allResolvers)
695+
foreach (var r in allResolversWithFilters)
666696
{
667697
if (!r.Name.Equals(resolver.Name)) continue;
668698
first = r;
@@ -675,12 +705,12 @@ private void LoadResolvers()
675705

676706
if (_isDnsCryptAutomaticModeEnabled)
677707
{
678-
foreach (var resolver in allResolvers)
708+
foreach (var resolver in allResolversWithFilters)
679709
{
680710
resolver.IsInServerList = false;
681711
}
682712
}
683-
_resolvers.AddRange(allResolvers);
713+
_resolvers.AddRange(allResolversWithFilters);
684714
}
685715

686716
#endregion

0 commit comments

Comments
 (0)