示例#1
0
        public static void SendInform(int requestId, VersionCode version, IPEndPoint receiver, OctetString community, ObjectIdentifier enterprise, uint timestamp, IList <Variable> variables, int timeout, IPrivacyProvider privacy, ISnmpMessage report)
        {
            InformRequestMessage message = version == VersionCode.V3
                                    ? new InformRequestMessage(
                version,
                MessageCounter.NextId,
                requestId,
                community,
                enterprise,
                timestamp,
                variables,
                privacy,
                MaxMessageSize,
                report)
                                    : new InformRequestMessage(
                requestId,
                version,
                community,
                enterprise,
                timestamp,
                variables);

            ISnmpMessage response = message.GetResponse(timeout, receiver);

            if (response.Pdu().ErrorStatus.ToInt32() != 0)
            {
                throw Error.Create(
                          "error in response",
                          receiver.Address,
                          response);
            }
        }
        /// <summary>
        /// Processes the message.
        /// </summary>
        /// <param name="message">Message.</param>
        /// <param name="sender">Sender.</param>
        /// <param name="binding">The binding.</param>
        public void Process(ISnmpMessage message, System.Net.IPEndPoint sender, ListenerBinding binding)
        {
            if (binding == null)
            {
                throw new ArgumentNullException("binding");
            }

            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            if (sender == null)
            {
                throw new ArgumentNullException("sender");
            }

            if (message.Version != VersionCode.V3)
            {
                return;
            }

            switch (message.Pdu.TypeCode)
            {
            case SnmpType.TrapV2Pdu:
            {
                EventHandler <MessageReceivedEventArgs <TrapV2Message> > handler = TrapV2Received;
                if (handler != null)
                {
                    handler(this, new MessageReceivedEventArgs <TrapV2Message>(sender, (TrapV2Message)message, binding));
                }

                break;
            }

            case SnmpType.InformRequestPdu:
            {
                InformRequestMessage inform = (InformRequestMessage)message;
                binding.SendResponse(inform.GenerateResponse(), sender);

                EventHandler <MessageReceivedEventArgs <InformRequestMessage> > handler = InformRequestReceived;
                if (handler != null)
                {
                    handler(this, new MessageReceivedEventArgs <InformRequestMessage>(sender, inform, binding));
                }

                break;
            }

            default:
                break;
            }
        }
 public void Test()
 {
     var mock = new Mock<ISnmpContext>();
     var mock2 = new Mock<IListenerBinding>();
     IList<Variable> v = new List<Variable>();
     var message = new InformRequestMessage(0, VersionCode.V1, new OctetString("community"), new ObjectIdentifier("1.3.6"), 0, v);
     mock.Setup(foo => foo.Binding).Returns(mock2.Object);
     mock.Setup(foo => foo.Request).Returns(message);
     mock.Setup(foo => foo.Sender).Returns(new IPEndPoint(IPAddress.Any, 0));
     mock.Setup(foo => foo.CopyRequest(ErrorCode.NoError, 0)).Verifiable("this must be called");
     var handler = new InformRequestMessageHandler();
     Assert.Throws<ArgumentNullException>(() => handler.Handle(null, null));
     Assert.Throws<ArgumentNullException>(() => handler.Handle(mock.Object, null));
     handler.MessageReceived += delegate(object args, InformRequestMessageReceivedEventArgs e)
                                    {
                                        Assert.AreEqual(mock2.Object, e.Binding);
                                        Assert.AreEqual(message, e.InformRequestMessage);
                                        Assert.IsTrue(new IPEndPoint(IPAddress.Any, 0).Equals(e.Sender));
                                    }; 
     handler.Handle(mock.Object, new ObjectStore());
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="InformRequestMessageReceivedEventArgs"/> class.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="request">The request.</param>
        /// <param name="binding">The binding.</param>
        public InformRequestMessageReceivedEventArgs(IPEndPoint sender, InformRequestMessage request, IListenerBinding binding)
        {
            if (sender == null)
            {
                throw new ArgumentNullException("sender");
            }

            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            if (binding == null)
            {
                throw new ArgumentNullException("binding");
            }

            Sender = sender;
            InformRequestMessage = request;
            Binding = binding;
        }