protected override bool TryParse()

in Source/Tx.Network/Snmp/SnmpTrapListener.cs [14:52]


        protected override bool TryParse(IpPacket packet, out IEnvelope envelope)
        {
            envelope = null;

            if (!packet.PacketHeader.DestinationIpAddress.Equals(this.ListenEndPoint.Address))
            {
                return false;
            }

            var upacket = packet.ToUdpDatagram(false);

            var isValid = upacket.UdpDatagramHeader.DestinationPort == this.ListenEndPoint.Port;

            if (isValid)
            {
                SnmpDatagram datagram;
                if (upacket.TryParseSnmpDatagram(out datagram))
                {
                    isValid = datagram.Header.Version == SnmpVersion.V1 || datagram.Header.Version == SnmpVersion.V2C;

                    if (isValid)
                    {
                        envelope = new SnmpTrapEnvelope
                        {
                            OccurrenceTime = packet.ReceivedTime,
                            ReceivedTime = packet.ReceivedTime,
                            Payload = upacket.UdpData.Array,
                            PayloadInstance = new SnmpDatagram(
                                packet.ReceivedTime,
                                packet.PacketHeader.SourceIpAddress.ToString(),
                                datagram.Header,
                                datagram.VarBinds),
                        };
                    }
                }
            }

            return isValid;
        }