public void NoError() { var handler = new GetNextV1MessageHandler(); var context = SnmpContextFactory.Create( new GetNextRequestMessage( 300, VersionCode.V1, new OctetString("lextm"), new List<Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0")) } ), new IPEndPoint(IPAddress.Loopback, 100), new UserRegistry(), null, null); var store = new ObjectStore(); store.Add(new SysDescr()); store.Add(new SysObjectId()); handler.Handle(context, store); var noerror = (ResponseMessage)context.Response; Assert.AreEqual(ErrorCode.NoError, noerror.ErrorStatus); Assert.AreEqual(new ObjectIdentifier("1.3.6.1.2.1.1.2.0"), noerror.Variables[0].Id); }
public void EndOfMibViewNonRepeater0() { var handler = new GetBulkMessageHandler(); var store = new ObjectStore(); store.Add(new SysDescr()); var context = SnmpContextFactory.Create( new GetBulkRequestMessage( 300, VersionCode.V2, new OctetString("lextm"), 0, 2, new List<Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.2.0")) } ), new IPEndPoint(IPAddress.Loopback, 100), new UserRegistry(), null, null); handler.Handle(context, store); var endOfMibView = (ResponseMessage)context.Response; Assert.AreEqual(new ObjectIdentifier("1.3.6.1.2.1.1.2.0"), endOfMibView.Variables[0].Id); Assert.AreEqual(new EndOfMibView(), endOfMibView.Variables[0].Data); }
public void GenError() { var handler = new GetMessageHandler(); var mock = new Mock<ScalarObject>(new ObjectIdentifier("1.3.6.1.2.1.1.2.0")); mock.Setup(foo => foo.Data).Throws<Exception>(); mock.Setup(foo => foo.MatchGet(new ObjectIdentifier("1.3.6.1.2.1.1.2.0"))).Returns(mock.Object); var store = new ObjectStore(); store.Add(mock.Object); var context = SnmpContextFactory.Create( new GetRequestMessage( 300, VersionCode.V1, new OctetString("lextm"), new List<Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.2.0")) } ), new IPEndPoint(IPAddress.Loopback, 100), new UserRegistry(), null, null); handler.Handle(context, store); var genError = (ResponseMessage)context.Response; Assert.AreEqual(ErrorCode.GenError, genError.ErrorStatus); }
/// <summary> /// Initializes a new instance of the <see cref="SnmpApplicationFactory"/> class. /// </summary> /// <param name="logger">The logger.</param> /// <param name="store">The store.</param> /// <param name="membershipProvider">The membership provider.</param> /// <param name="factory">The factory.</param> public SnmpApplicationFactory(ILogger logger, ObjectStore store, IMembershipProvider membershipProvider, MessageHandlerFactory factory) { _logger = logger; _membershipProvider = membershipProvider; _store = store; _factory = factory; }
public void Handle(SnmpContext context, ObjectStore store) { if (store == null) { throw new ArgumentNullException("store"); } if (context == null) { throw new ArgumentNullException("context"); } int index = 0; IList<Variable> result = new List<Variable>(); foreach (Variable v in context.Request.Pdu.Variables) { index++; try { ScalarObject next = store.GetNextObject(v.Id); result.Add(next == null ? new Variable(v.Id, new EndOfMibView()) : next.Variable); } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } } context.GenerateResponse(result); }
public void Handle(SnmpContext context, ObjectStore store) { if (store == null) { throw new ArgumentNullException("store"); } if (context == null) { throw new ArgumentNullException("context"); } int index = 0; ErrorCode status = ErrorCode.NoError; IList<Variable> result = new List<Variable>(); foreach (Variable v in context.Request.Pdu.Variables) { index++; ScalarObject obj = store.GetObject(v.Id); if (obj != null) { try { obj.Data = v.Data; } catch (AccessFailureException) { status = ErrorCode.NoSuchName; } catch (ArgumentException) { status = ErrorCode.BadValue; } catch (Exception) { status = ErrorCode.GenError; } } else { status = ErrorCode.NoSuchName; } if (status != ErrorCode.NoError) { context.CopyRequest(status, index); return; } result.Add(v); } context.GenerateResponse(result); }
/// <summary> /// Handles the specified message. /// </summary> /// <param name="context">The context.</param> /// <param name="store">The object store.</param> /// <returns></returns> public void Handle(ISnmpContext context, ObjectStore store) { if (context == null) { throw new ArgumentNullException("context"); } if (store == null) { throw new ArgumentNullException("store"); } }
public void Handle(ISnmpContext context, ObjectStore store) { if (context == null) { throw new ArgumentNullException("context"); } if (store == null) { throw new ArgumentNullException("store"); } var status = ErrorCode.NoError; var index = 0; IList<Variable> result = new List<Variable>(); foreach (var v in context.Request.Pdu().Variables) { index++; var obj = store.GetObject(v.Id); if (obj != null) { try { var item = obj.Variable; result.Add(item); } catch (AccessFailureException) { status = ErrorCode.NoSuchName; } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } } else { status = ErrorCode.NoSuchName; } if (status == ErrorCode.NoError) { continue; } context.CopyRequest(status, index); return; } context.GenerateResponse(result); }
/// <summary> /// Handles the specified message. /// </summary> /// <param name="context">The context.</param> /// <param name="store">The object store.</param> /// <returns></returns> public void Handle(SnmpContext context, ObjectStore store) { if (store == null) { throw new ArgumentNullException("store"); } if (context == null) { throw new ArgumentNullException("context"); } InvokeMessageReceived(new MessageReceivedEventArgs<TrapV2Message>(context.Sender, (TrapV2Message)context.Request, context.Binding)); }
/// <summary> /// Handles the specified message. /// </summary> /// <param name="context">The context.</param> /// <param name="store">The object store.</param> /// <returns></returns> public void Handle(SnmpContext context, ObjectStore store) { if (store == null) { throw new ArgumentNullException("store"); } if (context == null) { throw new ArgumentNullException("context"); } InvokeMessageReceived(new MessageReceivedEventArgs<InformRequestMessage>(context.Sender, (InformRequestMessage)context.Request, context.Binding)); context.CopyRequest(ErrorCode.NoError, 0); }
public void Handle(ISnmpContext context, ObjectStore store) { if (context == null) { throw new ArgumentNullException("context"); } if (store == null) { throw new ArgumentNullException("store"); } var status = ErrorCode.NoError; var index = 0; IList<Variable> result = new List<Variable>(); foreach (var v in context.Request.Pdu().Variables) { index++; try { var next = store.GetNextObject(v.Id); if (next == null) { status = ErrorCode.NoSuchName; } else { // TODO: how to handle write only object here? result.Add(next.Variable); } } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } if (status == ErrorCode.NoError) { continue; } context.CopyRequest(status, index); return; } context.GenerateResponse(result); }
public static void Main(string[] args) { if (args.Length != 0) { return; } var users = new UserRegistry(); users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair); users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication")))); users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication")))); var trapv1 = new TrapV1MessageHandler(); trapv1.MessageReceived += WatcherTrapV1Received; var trapv1Mapping = new HandlerMapping("v1", "TRAPV1", trapv1); var trapv2 = new TrapV2MessageHandler(); trapv2.MessageReceived += WatcherTrapV2Received; var trapv2Mapping = new HandlerMapping("v2,v3", "TRAPV2", trapv2); var inform = new InformRequestMessageHandler(); inform.MessageReceived += WatcherInformRequestReceived; var informMapping = new HandlerMapping("v2,v3", "INFORM", inform); var store = new ObjectStore(); var v1 = new Version1MembershipProvider(new OctetString("public"), new OctetString("public")); var v2 = new Version2MembershipProvider(new OctetString("public"), new OctetString("public")); var v3 = new Version3MembershipProvider(); var membership = new ComposedMembershipProvider(new IMembershipProvider[] {v1, v2, v3}); var handlerFactory = new MessageHandlerFactory(new[] {trapv1Mapping, trapv2Mapping, informMapping}); var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory); using (var engine = new SnmpEngine(pipelineFactory, new Listener { Users = users }, new EngineGroup())) { engine.Listener.AddBinding(new IPEndPoint(IPAddress.Any, 162)); engine.Start(); Console.WriteLine("#SNMP is available at http://sharpsnmplib.codeplex.com"); Console.WriteLine("Press any key to stop . . . "); Console.Read(); engine.Stop(); } }
public void Handle(SnmpContext context, ObjectStore store) { if (store == null) { throw new ArgumentNullException("store"); } if (context == null) { throw new ArgumentNullException("context"); } int index = 0; IList<Variable> result = new List<Variable>(); foreach (Variable v in context.Request.Pdu.Variables) { index++; try { ScalarObject obj = store.GetObject(v.Id); if (obj == null) { result.Add(new Variable(v.Id, new NoSuchInstance())); } else { Variable item = obj.Variable; result.Add(item); } } catch (AccessFailureException) { result.Add(new Variable(v.Id, new NoSuchObject())); } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } } context.GenerateResponse(result); }
public void NoSuchInstance() { var handler = new GetMessageHandler(); var context = SnmpContextFactory.Create( new GetRequestMessage( 300, VersionCode.V1, new OctetString("lextm"), new List<Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.1.0")) } ), new IPEndPoint(IPAddress.Loopback, 100), new UserRegistry(), null, null); var store = new ObjectStore(); handler.Handle(context, store); var nosuchinstance = (ResponseMessage)context.Response; Assert.AreEqual(new NoSuchInstance(), nosuchinstance.Variables[0].Data); }
public void Handle(ISnmpContext context, ObjectStore store) { if (context == null) { throw new ArgumentNullException("context"); } if (store == null) { throw new ArgumentNullException("store"); } var pdu = context.Request.Pdu(); IList<Variable> result = new List<Variable>(); var index = 0; var nonrepeaters = pdu.ErrorStatus.ToInt32(); var variables = pdu.Variables; for (var i = 0; i < nonrepeaters; i++) { var v = variables[i]; index++; try { var next = store.GetNextObject(v.Id); result.Add(next == null ? new Variable(v.Id, new EndOfMibView()) : next.Variable); } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } } for (var j = nonrepeaters; j < variables.Count; j++) { var v = variables[j]; index++; var temp = v; var repetition = pdu.ErrorIndex.ToInt32(); while (repetition-- > 0) { try { var next = store.GetNextObject(temp.Id); if (next == null) { temp = new Variable(temp.Id, new EndOfMibView()); result.Add(temp); break; } // TODO: how to handle write only object here? result.Add(next.Variable); temp = next.Variable; } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } } } context.GenerateResponse(result); }
public void Handle(ISnmpContext context, ObjectStore store) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (store == null) { throw new ArgumentNullException(nameof(store)); } var pdu = context.Request.Pdu(); List <Variable> result = Pools.GetVariableList(); var index = 0; var nonrepeaters = pdu.ErrorStatus.ToInt32(); var variables = pdu.Variables; for (var i = 0; i < nonrepeaters; i++) { var v = variables[i]; index++; try { var next = store.GetNextObject(v.Id); result.Add(next == null ? new Variable(v.Id, new EndOfMibView()) : next.Variable); } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } } for (var j = nonrepeaters; j < variables.Count; j++) { var v = variables[j]; index++; var temp = v; var repetition = pdu.ErrorIndex.ToInt32(); while (repetition-- > 0) { try { var next = store.GetNextObject(temp.Id); if (next == null) { temp = new Variable(temp.Id, new EndOfMibView()); result.Add(temp); break; } // TODO: how to handle write only object here? result.Add(next.Variable); temp = next.Variable; } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } } } context.GenerateResponse(result); }
public void Handle(ISnmpContext context, ObjectStore store) { if (context == null) { throw new ArgumentNullException("context"); } if (store == null) { throw new ArgumentNullException("store"); } context.CopyRequest(ErrorCode.InconsistentName, int.MaxValue); if (context.TooBig) { context.GenerateTooBig(); return; } var index = 0; var status = ErrorCode.NoError; IList <Variable> result = new List <Variable>(); foreach (var v in context.Request.Pdu().Variables) { index++; var obj = store.GetObject(v.Id); if (obj != null) { try { obj.Data = v.Data; } catch (AccessFailureException) { status = ErrorCode.NoAccess; } catch (ArgumentException) { status = ErrorCode.WrongType; } catch (Exception) { status = ErrorCode.GenError; } } else { status = ErrorCode.NotWritable; } if (status != ErrorCode.NoError) { context.CopyRequest(status, index); return; } result.Add(v); } context.GenerateResponse(result); }
/// <summary> /// Initializes a new instance of the <see cref="SnmpApplicationFactory"/> class. /// </summary> /// <param name="store">The store.</param> /// <param name="membershipProvider">The membership provider.</param> /// <param name="factory">The factory.</param> public SnmpApplicationFactory(ObjectStore store, IMembershipProvider membershipProvider, MessageHandlerFactory factory) : this(null, store, membershipProvider, factory) // TODO: handle the null case in the future. { }
public void Handle(ISnmpContext context, ObjectStore store) { if (context == null) { throw new ArgumentNullException("context"); } if (store == null) { throw new ArgumentNullException("store"); } context.CopyRequest(ErrorCode.InconsistentName, int.MaxValue); if (context.TooBig) { context.GenerateTooBig(); return; } var index = 0; var status = ErrorCode.NoError; IList<Variable> result = new List<Variable>(); foreach (var v in context.Request.Pdu().Variables) { index++; var obj = store.GetObject(v.Id); if (obj != null) { try { obj.Data = v.Data; } catch (AccessFailureException) { status = ErrorCode.NoAccess; } catch (ArgumentException) { status = ErrorCode.WrongType; } catch (Exception) { status = ErrorCode.GenError; } } else { status = ErrorCode.NotWritable; } if (status != ErrorCode.NoError) { context.CopyRequest(status, index); return; } result.Add(v); } context.GenerateResponse(result); }
/// <summary> /// Handles the specified message. /// </summary> /// <param name="context">The context.</param> /// <param name="store">The object store.</param> /// <returns></returns> public void Handle(SnmpContext context, ObjectStore store) { }
public MainForm() { // TODO: this is a hack. review it later. var store = new ObjectStore(); store.Add(new SysDescr()); store.Add(new SysObjectId()); store.Add(new SysUpTime()); store.Add(new SysContact()); store.Add(new SysName()); store.Add(new SysLocation()); store.Add(new SysServices()); store.Add(new SysORLastChange()); store.Add(new SysORTable()); store.Add(new IfNumber()); store.Add(new IfTable()); var users = new UserRegistry(); users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair); users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication")))); users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication")))); var getv1 = new GetV1MessageHandler(); var getv1Mapping = new HandlerMapping("v1", "GET", getv1); var getv23 = new GetMessageHandler(); var getv23Mapping = new HandlerMapping("v2,v3", "GET", getv23); var setv1 = new SetV1MessageHandler(); var setv1Mapping = new HandlerMapping("v1", "SET", setv1); var setv23 = new SetMessageHandler(); var setv23Mapping = new HandlerMapping("v2,v3", "SET", setv23); var getnextv1 = new GetNextV1MessageHandler(); var getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1); var getnextv23 = new GetNextMessageHandler(); var getnextv23Mapping = new HandlerMapping("v2,v3", "GETNEXT", getnextv23); var getbulk = new GetBulkMessageHandler(); var getbulkMapping = new HandlerMapping("v2,v3", "GETBULK", getbulk); var v1 = new Version1MembershipProvider(new OctetString("public"), new OctetString("public")); var v2 = new Version2MembershipProvider(new OctetString("public"), new OctetString("public")); var v3 = new Version3MembershipProvider(); var membership = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 }); var handlerFactory = new MessageHandlerFactory(new[] { getv1Mapping, getv23Mapping, setv1Mapping, setv23Mapping, getnextv1Mapping, getnextv23Mapping, getbulkMapping }); var pipelineFactory = new SnmpApplicationFactory(new RollingLogger(), store, membership, handlerFactory); _engine = new SnmpEngine(pipelineFactory, new Listener { Users = users }, new EngineGroup()); _engine.ExceptionRaised += (sender, e) => MessageBox.Show(e.Exception.ToString()); InitializeComponent(); if (PlatformSupport.Platform == PlatformType.Windows) { // FIXME: work around a Mono WinForms issue. Icon = Properties.Resources.network_server; } actEnabled.Image = Properties.Resources.media_playback_start; tstxtPort.Text = @"161"; tscbIP.Items.Add(StrAllUnassigned); foreach (IPAddress address in Dns.GetHostEntry(string.Empty).AddressList.Where(address => !address.IsIPv6LinkLocal)) { tscbIP.Items.Add(address); } tscbIP.SelectedIndex = 0; }
public void NotWritable() { var handler = new SetMessageHandler(); var context = SnmpContextFactory.Create( new SetRequestMessage( 300, VersionCode.V1, new OctetString("lextm"), new List<Variable> { new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.4.0"), new OctetString("test")) } ), new IPEndPoint(IPAddress.Loopback, 100), new UserRegistry(), null, null); var store = new ObjectStore(); handler.Handle(context, store); var notWritable = (ResponseMessage)context.Response; Assert.AreEqual(ErrorCode.NotWritable, notWritable.ErrorStatus); }
private SnmpEngine CreateEngine() { // TODO: this is a hack. review it later. var store = new ObjectStore(); store.Add(new SysDescr()); store.Add(new SysObjectId()); store.Add(new SysUpTime()); store.Add(new SysContact()); store.Add(new SysName()); store.Add(new SysLocation()); store.Add(new SysServices()); store.Add(new SysORLastChange()); store.Add(new SysORTable()); store.Add(new IfNumber()); store.Add(new IfTable()); var users = new UserRegistry(); users.Add(new OctetString("neither"), DefaultPrivacyProvider.DefaultPair); users.Add(new OctetString("authen"), new DefaultPrivacyProvider(new MD5AuthenticationProvider(new OctetString("authentication")))); users.Add(new OctetString("privacy"), new DESPrivacyProvider(new OctetString("privacyphrase"), new MD5AuthenticationProvider(new OctetString("authentication")))); var getv1 = new GetV1MessageHandler(); var getv1Mapping = new HandlerMapping("v1", "GET", getv1); var getv23 = new GetMessageHandler(); var getv23Mapping = new HandlerMapping("v2,v3", "GET", getv23); var setv1 = new SetV1MessageHandler(); var setv1Mapping = new HandlerMapping("v1", "SET", setv1); var setv23 = new SetMessageHandler(); var setv23Mapping = new HandlerMapping("v2,v3", "SET", setv23); var getnextv1 = new GetNextV1MessageHandler(); var getnextv1Mapping = new HandlerMapping("v1", "GETNEXT", getnextv1); var getnextv23 = new GetNextMessageHandler(); var getnextv23Mapping = new HandlerMapping("v2,v3", "GETNEXT", getnextv23); var getbulk = new GetBulkMessageHandler(); var getbulkMapping = new HandlerMapping("v2,v3", "GETBULK", getbulk); var v1 = new Version1MembershipProvider(new OctetString("public"), new OctetString("public")); var v2 = new Version2MembershipProvider(new OctetString("public"), new OctetString("public")); var v3 = new Version3MembershipProvider(); var membership = new ComposedMembershipProvider(new IMembershipProvider[] { v1, v2, v3 }); var handlerFactory = new MessageHandlerFactory(new[] { getv1Mapping, getv23Mapping, setv1Mapping, setv23Mapping, getnextv1Mapping, getnextv23Mapping, getbulkMapping }); var pipelineFactory = new SnmpApplicationFactory(store, membership, handlerFactory); return new SnmpEngine(pipelineFactory, new Listener { Users = users }, new EngineGroup()); }
public void Handle(SnmpContext context, ObjectStore store) { if (store == null) { throw new ArgumentNullException("store"); } if (context == null) { throw new ArgumentNullException("context"); } ISnmpPdu pdu = context.Request.Pdu; IList <Variable> result = new List <Variable>(); int index = 0; int nonrepeaters = pdu.ErrorStatus.ToInt32(); var variables = pdu.Variables; for (int i = 0; i < nonrepeaters; i++) { Variable v = variables[i]; index++; try { ScalarObject next = store.GetNextObject(v.Id); result.Add(next == null ? new Variable(v.Id, new EndOfMibView()) : next.Variable); } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } } for (int j = nonrepeaters; j < variables.Count; j++) { Variable v = variables[j]; index++; Variable temp = v; int repetition = pdu.ErrorIndex.ToInt32(); while (repetition-- > 0) { try { ScalarObject next = store.GetNextObject(temp.Id); if (next == null) { temp = new Variable(temp.Id, new EndOfMibView()); result.Add(temp); break; } // TODO: how to handle write only object here? result.Add(next.Variable); temp = next.Variable; } catch (Exception) { context.CopyRequest(ErrorCode.GenError, index); return; } } } context.GenerateResponse(result); }