Skip to content

Commit 9807fe2

Browse files
committed
Some changes
1 parent 78abc9b commit 9807fe2

5 files changed

Lines changed: 162 additions & 13 deletions

File tree

Source/NETworkManager/Models/Network/SNMP.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
using Lextm.SharpSnmpLib.Security;
44
using System;
55
using System.Collections.Generic;
6+
using System.Diagnostics;
67
using System.Net;
78
using System.Threading.Tasks;
9+
using System.Windows;
810

911
namespace NETworkManager.Models.Network
1012
{
@@ -180,6 +182,27 @@ public void Walkv3Async(IPAddress ipAddress, string oid, SNMPv3Security security
180182
});
181183
}
182184

185+
public void Setv1v2cAsync(SNMPVersion version, IPAddress ipAddress, string communtiy, string oid, string data, SNMPOptions options)
186+
{
187+
/* Task.Run(() =>
188+
{
189+
try
190+
{*/
191+
var result = Messenger.Set(version == SNMPVersion.v1 ? VersionCode.V1 : VersionCode.V2, new IPEndPoint(ipAddress, options.Port), new OctetString(communtiy), new List<Variable> { new Variable(new ObjectIdentifier(oid), new OctetString(data)) }, options.Timeout);
192+
Debug.Write(result);
193+
OnComplete();
194+
/*}
195+
catch (Lextm.SharpSnmpLib.Messaging.TimeoutException)
196+
{
197+
OnTimeout();
198+
}
199+
catch (ErrorException)
200+
{
201+
OnError();
202+
}
203+
});*/
204+
}
205+
183206
// noAuthNoPriv
184207
private IPrivacyProvider GetPrivacy()
185208
{

Source/NETworkManager/Resources/Localization/Resources.de-DE.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@
477477
<system:String x:Key="String_Watermark_ExampleSuffix">fritz.box</system:String>
478478
<system:String x:Key="String_Watermark_NotChanged">(nicht geändert)</system:String>
479479
<system:String x:Key="String_Watermark_ExampleSNMPOID">1.3.6.1.2.1.1</system:String>
480-
<system:String x:Key="String_Watermark_ExampleSNMPCommunity">Public</system:String>
480+
<system:String x:Key="String_Watermark_ExampleSNMPCommunity">public</system:String>
481481
<system:String x:Key="String_Watermark_ExampleSNMPUsername">snmp-user</system:String>
482482

483483
<!-- ShowProgress -->

Source/NETworkManager/Resources/Localization/Resources.en-US.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@
477477
<system:String x:Key="String_Watermark_ExampleSuffix">fritz.box</system:String>
478478
<system:String x:Key="String_Watermark_NotChanged">(not changed)</system:String>
479479
<system:String x:Key="String_Watermark_ExampleSNMPOID">1.3.6.1.2.1.1</system:String>
480-
<system:String x:Key="String_Watermark_ExampleSNMPCommunity">Public</system:String>
480+
<system:String x:Key="String_Watermark_ExampleSNMPCommunity">public</system:String>
481481
<system:String x:Key="String_Watermark_ExampleSNMPUsername">snmp-user</system:String>
482482

483483
<!-- ShowProgress -->

Source/NETworkManager/ViewModels/Applications/SNMPv1v2cViewModel.cs

Lines changed: 107 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public string Community
117117
}
118118
}
119119

120-
private string _data;
120+
private string _data = string.Empty;
121121
public string Data
122122
{
123123
get { return _data; }
@@ -321,6 +321,16 @@ private void QueryAction()
321321
Query();
322322
}
323323

324+
public ICommand SendCommand
325+
{
326+
get { return new RelayCommand(p => SendAction()); }
327+
}
328+
329+
private void SendAction()
330+
{
331+
Send();
332+
}
333+
324334
public ICommand CopySelectedOIDCommand
325335
{
326336
get { return new RelayCommand(p => CopySelectedOIDAction()); }
@@ -397,7 +407,7 @@ private async void Query()
397407
}
398408
catch (SocketException) // This will catch DNS resolve errors
399409
{
400-
QueryFinished();
410+
Finished();
401411

402412
StatusMessage = string.Format(Application.Current.Resources["String_CouldNotResolveHostnameFor"] as string, Host);
403413
DisplayStatusMessage = true;
@@ -435,7 +445,97 @@ private async void Query()
435445
AddOIDToHistory(OID);
436446
}
437447

438-
private void QueryFinished()
448+
private async void Send()
449+
{
450+
DisplayStatusMessage = false;
451+
IsWorking = true;
452+
453+
// Measure time
454+
StartTime = DateTime.Now;
455+
stopwatch.Start();
456+
dispatcherTimer.Tick += DispatcherTimer_Tick;
457+
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
458+
dispatcherTimer.Start();
459+
EndTime = null;
460+
461+
QueryResult.Clear();
462+
Responses = 0;
463+
464+
// Try to parse the string into an IP-Address
465+
IPAddress.TryParse(Host, out IPAddress ipAddress);
466+
467+
try
468+
{
469+
// Try to resolve the hostname
470+
if (ipAddress == null)
471+
{
472+
IPHostEntry ipHostEntrys = await Dns.GetHostEntryAsync(Host);
473+
474+
foreach (IPAddress ipAddr in ipHostEntrys.AddressList)
475+
{
476+
if (ipAddr.AddressFamily == AddressFamily.InterNetwork && SettingsManager.Current.SNMP_ResolveHostnamePreferIPv4)
477+
{
478+
ipAddress = ipAddr;
479+
continue;
480+
}
481+
else if (ipAddr.AddressFamily == AddressFamily.InterNetworkV6 && !SettingsManager.Current.SNMP_ResolveHostnamePreferIPv4)
482+
{
483+
ipAddress = ipAddr;
484+
continue;
485+
}
486+
}
487+
488+
// Fallback --> If we could not resolve our prefered ip protocol for the hostname
489+
if (ipAddress == null)
490+
{
491+
foreach (IPAddress ipAddr in ipHostEntrys.AddressList)
492+
{
493+
ipAddress = ipAddr;
494+
continue;
495+
}
496+
}
497+
}
498+
}
499+
catch (SocketException) // This will catch DNS resolve errors
500+
{
501+
Finished();
502+
503+
StatusMessage = string.Format(Application.Current.Resources["String_CouldNotResolveHostnameFor"] as string, Host);
504+
DisplayStatusMessage = true;
505+
506+
return;
507+
}
508+
509+
// SNMP...
510+
SNMPOptions snmpOptions = new SNMPOptions()
511+
{
512+
Port = SettingsManager.Current.SNMP_Port,
513+
Timeout = SettingsManager.Current.SNMP_Timeout
514+
};
515+
516+
SNMP snmp = new SNMP();
517+
518+
snmp.Timeout += Snmp_Timeout;
519+
snmp.Error += Snmp_Error;
520+
snmp.UserHasCanceled += Snmp_UserHasCanceled;
521+
snmp.Complete += Snmp_Complete;
522+
523+
switch (Mode)
524+
{
525+
case SNMPMode.Set:
526+
snmp.Setv1v2cAsync(Version, ipAddress, Community, OID, Data, snmpOptions);
527+
break;
528+
case SNMPMode.Trap:
529+
break;
530+
}
531+
532+
// Add to history...
533+
AddHostToHistory(Host);
534+
AddOIDToHistory(OID);
535+
}
536+
537+
538+
private void Finished()
439539
{
440540
IsWorking = false;
441541

@@ -474,7 +574,6 @@ private void AddOIDToHistory(string oid)
474574
// Fill with the new items
475575
list.ForEach(x => SettingsManager.Current.SNMP_v1v2c_OIDHistory.Add(x));
476576
}
477-
478577
#endregion
479578

480579
#region Events
@@ -495,28 +594,28 @@ private void Snmp_Timeout(object sender, EventArgs e)
495594
StatusMessage = Application.Current.Resources["String_TimeoutOnSNMPQuery"] as string;
496595
DisplayStatusMessage = true;
497596

498-
QueryFinished();
597+
Finished();
499598
}
500599

501600
private void Snmp_Error(object sender, EventArgs e)
502601
{
503602
StatusMessage = Application.Current.Resources["String_ErrorInResponse"] as string;
504603
DisplayStatusMessage = true;
505604

506-
QueryFinished();
605+
Finished();
507606
}
508607

509608
private void Snmp_UserHasCanceled(object sender, EventArgs e)
510609
{
511610
StatusMessage = Application.Current.Resources["String_CanceledByUser"] as string;
512611
DisplayStatusMessage = true;
513612

514-
QueryFinished();
613+
Finished();
515614
}
516615

517616
private void Snmp_Complete(object sender, EventArgs e)
518617
{
519-
QueryFinished();
618+
Finished();
520619
}
521620

522621
private void DispatcherTimer_Tick(object sender, EventArgs e)

Source/NETworkManager/Views/Applications/SNMPv1v2cView.xaml

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
66
xmlns:Converter="clr-namespace:NETworkManager.Converters"
77
xmlns:Validator="clr-namespace:NETworkManager.Validators"
8-
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
98
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
109
xmlns:IconPacks="http://metro.mahapps.com/winfx/xaml/iconpacks"
1110
mc:Ignorable="d">
@@ -331,8 +330,36 @@
331330
<TextBox Grid.Column="1" Grid.Row="1" Text="{Binding Duration, StringFormat={}{0:hh}h {0:mm}m {0:ss}s {0:ff}ms}" />
332331
<TextBlock Grid.Column="0" Grid.Row="2" Text="{DynamicResource String_EndTime}" />
333332
<TextBox Grid.Column="1" Grid.Row="2" Text="{Binding EndTime, Converter={StaticResource NullableDateTimeToStringConverter}}" />
334-
<TextBlock Grid.Column="3" Grid.Row="0" Text="{DynamicResource String_Responses}" />
335-
<TextBox Grid.Column="4" Grid.Row="0" Text="{Binding Responses, Converter={StaticResource IntToStringConverter}}" />
333+
<TextBlock Grid.Column="3" Grid.Row="0" Text="{DynamicResource String_Responses}">
334+
<TextBlock.Style>
335+
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource CenterTextBlock}">
336+
<Setter Property="Visibility" Value="Visible" />
337+
<Style.Triggers>
338+
<DataTrigger Binding="{Binding Mode}" Value="Set">
339+
<Setter Property="Visibility" Value="Hidden" />
340+
</DataTrigger>
341+
<DataTrigger Binding="{Binding Mode}" Value="Trap">
342+
<Setter Property="Visibility" Value="Hidden" />
343+
</DataTrigger>
344+
</Style.Triggers>
345+
</Style>
346+
</TextBlock.Style>
347+
</TextBlock>
348+
<TextBox Grid.Column="4" Grid.Row="0" Text="{Binding Responses, Converter={StaticResource IntToStringConverter}}">
349+
<TextBox.Style>
350+
<Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource TextBlockAsTextBox}">
351+
<Setter Property="Visibility" Value="Visible" />
352+
<Style.Triggers>
353+
<DataTrigger Binding="{Binding Mode}" Value="Set">
354+
<Setter Property="Visibility" Value="Hidden" />
355+
</DataTrigger>
356+
<DataTrigger Binding="{Binding Mode}" Value="Trap">
357+
<Setter Property="Visibility" Value="Hidden" />
358+
</DataTrigger>
359+
</Style.Triggers>
360+
</Style>
361+
</TextBox.Style>
362+
</TextBox>
336363
</Grid>
337364
</StackPanel>
338365
</Expander>

0 commit comments

Comments
 (0)