master
Harald Wolff 2019-04-04 19:34:21 +02:00
parent 677729f638
commit e258540edb
1 changed files with 34 additions and 0 deletions

View File

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Linq;
using ln.snmp.endpoint;
using System.Reflection;
using ln.types;
namespace ln.snmp
{
@ -12,6 +13,39 @@ namespace ln.snmp
public abstract class SnmpInterface : IDisposable
{
public static SnmpInterface FromURI(URI uri) => FromURI(uri, SNMPEngine.DefaultEngine);
public static SnmpInterface FromURI(URI uri,SNMPEngine engine)
{
if (uri.Scheme.Equals("snmp"))
{
switch (uri.Fragment)
{
case "1":
return new SnmpV1Endpoint(engine, new IPEndPoint(IPAddress.Parse(uri.Host), 161), uri.UserInfo[0]);
case "2":
return new SnmpV2Endpoint(engine, new IPEndPoint(IPAddress.Parse(uri.Host), 161), uri.UserInfo[0]);
case "3":
string[] auth = uri.UserInfo;
USMEndpoint endpoint = new USMEndpoint(engine, new IPEndPoint(IPAddress.Parse(uri.Host), 161));
if (auth.Length > 0)
endpoint.Username = auth[0];
if (auth.Length > 1)
{
endpoint.AuthMethod = SnmpV3AuthMethod.SHA;
endpoint.AuthKeyPhrase = auth[1];
}
if (auth.Length > 2)
{
endpoint.PrivMethod = SnmpV3PrivMethod.DES;
endpoint.PrivKeyPhrase = auth[2];
}
return endpoint;
}
}
throw new NotSupportedException();
}
public abstract SnmpVersion SnmpVersion { get; }
public SnmpInterface()