Repository navigation
Expand file tree
/
Copy pathIPScannerDetectionMethodToStringConverter.cs
More file actions
77 lines (64 loc) · 2.9 KB
/
Copy pathIPScannerDetectionMethodToStringConverter.cs
File metadata and controls
77 lines (64 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Windows.Data;
using NETworkManager.Localization.Resources;
using NETworkManager.Models.Network;
namespace NETworkManager.Converters;
/// <summary>
/// Convert the <see cref="IPScannerDetectionMethod" /> of a host to a translated <see cref="string" />
/// (e.g. "Ping, TCP").
/// </summary>
public sealed class IPScannerDetectionMethodToStringConverter : IValueConverter
{
/// <summary>
/// Convert the <see cref="IPScannerDetectionMethod" /> of a host to a translated <see cref="string" />.
/// </summary>
/// <param name="value">Probes the host answered as <see cref="IPScannerDetectionMethod" />.</param>
/// <param name="targetType"></param>
/// <param name="parameter">"Status" to get the status of the host ("Up (detected by Ping, TCP)" / "Down").</param>
/// <param name="culture"></param>
/// <returns>Translated, comma-separated probes, "-/-" if the host didn't answer any probe.</returns>
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var detectedBy = value is IPScannerDetectionMethod method ? method : IPScannerDetectionMethod.None;
var names = GetNames(detectedBy);
if (parameter as string == "Status")
return detectedBy == IPScannerDetectionMethod.None
? Strings.Down
: string.Format(Strings.UpDetectedByX, string.Join(", ", names));
return detectedBy == IPScannerDetectionMethod.None ? "-/-" : string.Join(", ", names);
}
/// <summary>
/// Gets the translated names of the probes a host answered.
/// </summary>
/// <param name="detectedBy">Probes the host answered.</param>
/// <returns>Translated names, empty if the host didn't answer any probe.</returns>
private static List<string> GetNames(IPScannerDetectionMethod detectedBy)
{
var names = new List<string>(5);
if (detectedBy.HasFlag(IPScannerDetectionMethod.ICMP))
names.Add(Strings.Ping);
if (detectedBy.HasFlag(IPScannerDetectionMethod.TCP))
names.Add(Strings.TCP);
if (detectedBy.HasFlag(IPScannerDetectionMethod.NetBIOS))
names.Add(Strings.NetBIOS);
if (detectedBy.HasFlag(IPScannerDetectionMethod.SNMP))
names.Add(Strings.SNMP);
if (detectedBy.HasFlag(IPScannerDetectionMethod.ARP))
names.Add(Strings.ARPNDP);
return names;
}
/// <summary>
/// !!! Method not implemented !!!
/// </summary>
/// <param name="value"></param>
/// <param name="targetType"></param>
/// <param name="parameter"></param>
/// <param name="culture"></param>
/// <returns></returns>
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}