private static int GetMaxRepetitions(PduType type, SnmpVersion version, int vbCount, int rowCount, int maxRows, int rowsPerQuery) { if (type != PduType.GetBulk) { return(0); } // This is a simple heuristic algorithm that allows to limit // the size of a GetBulk response (to fit in a MTU packet). if (rowsPerQuery <= 0) { int header = version == SnmpVersion.SNMPv3 ? MAX_HEADER_V3_SIZE_ : MAX_HEADER_V1_SIZE_; rowsPerQuery = ((MAX_DATAGRAM_SIZE_ - header) / vbCount) / AVG_VARBIND_SIZE_; } int toRead = maxRows - rowCount; if (toRead < rowsPerQuery && toRead > 0) { rowsPerQuery = toRead; } return(rowsPerQuery); }
public static Vb[] CreateVbs(PduType pduType, string[] oids, int oidsCount, string[] types, int typesCount, string[] values, int valuesCount) { if (typesCount != valuesCount) { throw new ArgumentException( "types and values must be specified the same number of times"); } Vb[] vbs = new Vb[oidsCount]; if (pduType != PduType.Set && typesCount == 0) { for (int i = 0; i < oidsCount; i++) { vbs[i] = new Vb(oids[i]); } } else { if (oidsCount != typesCount) { throw new ArgumentException( "OBJECT IDENTIFIERs and types must be specified" + " the same number of times"); } for (int i = 0; i < oidsCount; i++) { vbs[i] = Vb.Create(oids[i], types[i], values[i]); } } return(vbs); }
/// <summary>Constructor.</summary> /// <remarks> /// Standard constructor that sets ScopedPdu request type and request id. For valid types see <see cref="PduType" />. /// By default, requestId value is set to a random value. Second argument allows caller to specify request /// id for this packet /// </remarks> /// <param name="pduType">Pdu type value.</param> /// <param name="requestId">Request id for the ScopedPdu instance.</param> public ScopedPdu(PduType pduType, int requestId) : base(pduType) { _requestId.Value = requestId; _contextEngineId = new OctetString(); _contextName = new OctetString(); }
/// <summary> /// Initializes a new instance of the <see cref="SnmpV2cPDU"/> struct with decoupling the reference of varBinds /// </summary> /// <param name="pduType">Type of the pdu.</param> /// <param name="requestId">The request identifier.</param> /// <param name="errorStatus">The error status.</param> /// <param name="errorIndex">Index of the error.</param> /// <param name="varBinds">The variable binds.</param> public SnmpV2cPDU(PduType pduType, int requestId, SnmpErrorStatus errorStatus, int errorIndex, VarBind[] varBinds) { PduType = pduType; RequestId = requestId; ErrorStatus = errorStatus; ErrorIndex = errorIndex; VarBinds = new ReadOnlyCollection<VarBind>((VarBind[])varBinds.Clone()); }
/// <summary> /// Initializes a new instance of the <see cref="SnmpV2cPDU"/> struct without decoupling refrence for varbinds. /// </summary> /// <param name="pduType">Type of the pdu.</param> /// <param name="varBinds">The variable binds.</param> /// <param name="requestId">The request identifier.</param> /// <param name="errorStatus">The error status.</param> /// <param name="errorIndex">Index of the error.</param> internal SnmpV2cPDU(PduType pduType, VarBind[] varBinds, int requestId, SnmpErrorStatus errorStatus, int errorIndex) { PduType = pduType; VarBinds = new ReadOnlyCollection<VarBind>(varBinds); RequestId = requestId; ErrorStatus = errorStatus; ErrorIndex = errorIndex; }
/// <summary> /// Initializes a new instance of the <see cref="SnmpPDU"/> struct without decoupling refrence for varbinds. /// </summary> /// <param name="pduType">Type of the pdu.</param> /// <param name="varBinds">The variable binds.</param> /// <param name="requestId">The request identifier.</param> /// <param name="errorStatus">The error status.</param> /// <param name="errorIndex">Index of the error.</param> internal SnmpPDU(PduType pduType, VarBind[] varBinds, int requestId, SnmpErrorStatus errorStatus, int errorIndex) { PduType = pduType; VarBinds = new ReadOnlyCollection <VarBind>(varBinds); RequestId = requestId; ErrorStatus = errorStatus; ErrorIndex = errorIndex; }
/// <summary> /// Initializes a new instance of the <see cref="SnmpPDU"/> struct with decoupling the reference of varBinds /// </summary> /// <param name="pduType">Type of the pdu.</param> /// <param name="requestId">The request identifier.</param> /// <param name="errorStatus">The error status.</param> /// <param name="errorIndex">Index of the error.</param> /// <param name="varBinds">The variable binds.</param> public SnmpPDU(PduType pduType, int requestId, SnmpErrorStatus errorStatus, int errorIndex, VarBind[] varBinds) { PduType = pduType; RequestId = requestId; ErrorStatus = errorStatus; ErrorIndex = errorIndex; VarBinds = new ReadOnlyCollection <VarBind>((VarBind[])varBinds.Clone()); }
private Pdu CreatePDU(PduType pduType) { Pdu result = new Pdu() { Type = pduType, }; return(result); }
/// <summary> /// Constructor. /// </summary> /// <remarks> /// Create Pdu of specific type. /// </remarks> /// <param name="pduType">Pdu type. For available values see <see cref="PduType" /></param> public Pdu(PduType pduType) : this() { _asnType = (byte)pduType; if (_asnType == (byte)PduType.GetBulk) { _errorStatus.Value = 0; _errorIndex.Value = 100; } }
/// <summary> /// Initializes a new instance of the <see cref="SnmpV1PDU"/> struct. /// </summary> /// <param name="pduType">Type of the pdu.</param> /// <param name="enterprise">The enterprise.</param> /// <param name="agentAddress">The agent address.</param> /// <param name="genericV1Trap">The generic v1 trap.</param> /// <param name="specificTrap">The specific trap.</param> /// <param name="timeStamp">The time stamp.</param> /// <param name="varBinds">The variable binds.</param> public SnmpV1PDU(PduType pduType, ObjectIdentifier enterprise, IPAddress agentAddress, GenericTrap genericV1Trap, int specificTrap, uint timeStamp, VarBind[] varBinds) { PduType = pduType; VarBinds = new ReadOnlyCollection <VarBind>((VarBind[])varBinds.Clone()); Enterprise = enterprise; AgentAddress = agentAddress; GenericV1Trap = genericV1Trap; SpecificTrap = specificTrap; TimeStamp = timeStamp; }
/// <summary> /// Converts the Asn.1 encoded byte array to SNMP Datagram. /// </summary> /// <param name="bytes">The asn.1 encoded bytes.</param> /// <returns> /// SnmpPacket /// </returns> /// <exception cref="System.ArgumentNullException">bytes</exception> /// <exception cref="System.IO.InvalidDataException">Snmp Version V3 not supported</exception> /// <exception cref="System.NotImplementedException">SNMP v1 traps are not yet implemented</exception> public static SnmpDatagram ToSnmpDatagram(this byte[] bytes) { if (bytes == null || bytes.Length == 0) { throw new ArgumentNullException("bytes"); } int offset = 0; int length; offset = bytes.NextValueLength(offset, -1, -1, -1, out length); offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); SnmpVersion snmpVersion = (SnmpVersion)bytes.ReadInteger(offset, length); offset += length; if (snmpVersion == SnmpVersion.V3) { throw new InvalidDataException("Snmp Version V3 not supported"); } offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.OctetString, out length); string community = bytes.ReadOctetString(offset, length); offset += length; PduType pduType = (PduType)(bytes[offset++] & 0x1F); if (pduType == PduType.Trap) { throw new NotImplementedException("SNMP v1 traps are not yet implemented"); } offset = bytes.ReadLength(offset, out length); offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); int requestId = bytes.ReadInteger(offset, length); offset += length; offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); SnmpErrorStatus errorStatus = (SnmpErrorStatus)bytes.ReadInteger(offset, length); offset += length; offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); int errorIndex = bytes.ReadInteger(offset, length); offset += length; offset = bytes.NextValueLength(offset, (int)Asn1Class.Universal, (int)ConstructType.Constructed, (int)Asn1Tag.Sequence, out length); VarBind[] varBinds = bytes.ReadVarBinds(offset, length); return(new SnmpDatagram(new SnmpHeader(snmpVersion, community), new SnmpPDU(pduType, varBinds, requestId, errorStatus, errorIndex))); }
private Pdu CreatePDU(PduType pduType) { Pdu result = new Pdu() { Type = pduType, }; result.VbList.Add(new Oid("1.3.6.1.4.1.368.4.1.3.1.4.1.4")); return(result); }
/// <summary> /// 把OidList打包成PDU /// </summary> /// <param name="oidList"></param> /// <returns></returns> private Pdu PacketPdu(PduType pduType, IEnumerable <Vb> vbs) { var pdu = new Pdu(pduType); foreach (Vb vb in vbs) { pdu.VbList.Add(vb); } return(pdu); }
/// <summary> /// Creates the PDU. Supported protocol versions are IEEE 1278.1-1995 and IEEE 1278.1A-1998. /// </summary> /// <param name="type">The type of PDU to be created.</param> /// <param name="version">The version of the PDU to be created</param> /// <returns> /// Returns the corresponding PDU instance or null if PduType.Other is specified. /// </returns> /// <exception cref="NotSupportedException">if the PDU type specified in parameter is not supported.</exception> /// <exception cref="ArgumentException">if the protocol version is not supported</exception> public static IPdu CreatePdu(PduType type, ProtocolVersion version) { if (version == ProtocolVersion.Ieee1278_1_1995) { return(Dis1995.PduFactory.CreatePdu(type)); } else if (version == ProtocolVersion.Ieee1278_1A_1998) { return(Dis1998.PduFactory.CreatePdu(type)); } throw new ArgumentException("Unsupported protocol version."); }
public SnmpDatagramV2C( DateTimeOffset receivedTime, string sourceIpAddress, SnmpHeader header, IReadOnlyList <VarBind> varBinds, PduType pduType, int requestId, SnmpErrorStatus errorStatus, int errorIndex) : base(receivedTime, sourceIpAddress, header, varBinds) { this.PduType = pduType; this.RequestId = requestId; this.ErrorStatus = errorStatus; this.ErrorIndex = errorIndex; }
/// <summary> /// Initializes a new instance of the <see cref="SnmpSimpleDatagram" /> class. /// </summary> /// <param name="snmpDatagramInput">The SNMP datagram input.</param> public SnmpSimpleDatagram(SnmpDatagram snmpDatagramInput) { snmpDatagram = snmpDatagramInput; Version = snmpDatagram.Header.Version; Community = snmpDatagram.Header.Community; PDUType = snmpDatagram.PduV2c.PduType; RequestId = snmpDatagram.PduV2c.RequestId; ErrorStatus = snmpDatagram.PduV2c.ErrorStatus; ErrorIndex = snmpDatagram.PduV2c.ErrorIndex; VarBinds = new List <KeyValuePair <string, object> >(); for (int i = 0; i < snmpDatagram.PduV2c.VarBinds.Count; i++) { var varBind = snmpDatagram.PduV2c.VarBinds[i]; VarBinds.Add(new KeyValuePair <string, object>(varBind.Oid.ToString(), varBind.Value)); } }
/// <summary> /// Initializes a new instance of the <see cref="SnmpSimpleDatagram" /> class. /// </summary> /// <param name="snmpDatagramInput">The SNMP datagram input.</param> public SnmpSimpleDatagram(SnmpDatagram snmpDatagramInput) { snmpDatagram = snmpDatagramInput; Version = snmpDatagram.Header.Version; Community = snmpDatagram.Header.Community; PDUType = snmpDatagram.PduV2c.PduType; RequestId = snmpDatagram.PduV2c.RequestId; ErrorStatus = snmpDatagram.PduV2c.ErrorStatus; ErrorIndex = snmpDatagram.PduV2c.ErrorIndex; VarBinds = new List<KeyValuePair<string, object>>(); for(int i=0 ; i< snmpDatagram.PduV2c.VarBinds.Count; i++) { var varBind = snmpDatagram.PduV2c.VarBinds[i]; VarBinds.Add(new KeyValuePair<string, object>(varBind.Oid.ToString(), varBind.Value)); } }
/// <summary> /// SNMP Operation Execute /// </summary> /// <example>Set operation in SNMP version 1: /// <code> /// </code> /// /// /// </example> /// <param name="version">SNMPAgentInfo. 对端SNMP Agent相关配置信息</param> /// <param name="pdu">PduType. 要执行的操作类型:Get/Set/GetNext/GetBulk</param> /// <param name="pdu">Vb[]. 操作参数</param> /// <returns>Result of the SNMP request in a IEnumerator<vb> </returns> public IEnumerable <Vb> Excute(SnmpAgentInfo peer, PduType pduType, IEnumerable <Vb> vbs) { //验证对端地址信息是否正确 if (!this.ValidPeer(peer)) { Log.Error("SnmpAgentInfo校验失败!"); return(null); } //组装PDU Pdu pdu = this.PacketPdu(pduType, vbs); //GetBulk包需要设置NonRepeaters和MaxRepetitions两个字段 if (PduType.GetBulk == pdu.Type) { pdu.NonRepeaters = peer.NonRepeaters; pdu.MaxRepetitions = peer.MaxRepetitions; } using (var _target = new UdpTarget(peer.PeerAddress, peer.Port, peer.TimeOut, peer.RetryTime)) { SnmpPacket result = null; try { var param = new AgentParameters(peer.Version, new OctetString(peer.Community)); result = _target.Request(pdu, param); } catch (Exception ex) { Log.Error(ex.Message); throw; } if (result != null) { if (result.Pdu.ErrorStatus == 0) { return(result.Pdu); } throw new SnmpErrorStatusException("Agent responded with an error", result.Pdu.ErrorStatus, result.Pdu.ErrorIndex); } } return(null); }
private void comboBoxGetStyle_SelectedIndexChanged(object sender, EventArgs e) { PduType pduType = (PduType)((DictionaryEntry)comboBoxGetStyle.SelectedItem).Value; if (pduType == PduType.GetBulk && snmpObj.Version == SnmpVersion.Ver1) { MessageBox.Show("Ver1不支持Bulk...", "提示"); comboBoxGetStyle.SelectedIndex = 0; pduType = (PduType)((DictionaryEntry)comboBoxGetStyle.SelectedItem).Value; } else if (pduType == PduType.Set && snmpObj.Version == SnmpVersion.Ver3) { MessageBox.Show("后续版本增加Ver3版本SET支持...", "提示"); comboBoxGetStyle.SelectedIndex = 0; pduType = (PduType)((DictionaryEntry)comboBoxGetStyle.SelectedItem).Value; } snmpObj.PduType = pduType; comboBoxAsnType.Visible = snmpObj.PduType == PduType.Set; tAsnType.Visible = snmpObj.PduType == PduType.Set; }
private static void GetOperType(string op, out PduType pduType, out OperType operType) { operType = OperType.Simple; switch (op) { case "walk": pduType = PduType.GetNext; operType = OperType.Walk; break; case "table": pduType = PduType.GetBulk; operType = OperType.Table; break; default: pduType = (PduType)Enum.Parse(typeof(PduType), op, true); break; } }
public TPDU(TPKT tPKT) { TPkt = tPKT; HeaderLength = tPKT.Data[0]; // Header length excluding this length byte if (HeaderLength >= 2) { PDUType = (PduType)tPKT.Data[1]; if (PDUType == PduType.Data) //DT Data { var flags = tPKT.Data[2]; TPDUNumber = flags & 0x7F; LastDataUnit = (flags & 0x80) > 0; Data = new byte[tPKT.Data.Length - HeaderLength - 1]; // substract header length byte + header length. Array.Copy(tPKT.Data, HeaderLength + 1, Data, 0, Data.Length); return; } //TODO: Handle other PDUTypes } Data = new byte[0]; }
/// <summary> /// Creates the PDU. /// </summary> /// <param name="type">The type of PDU to be created.</param> /// <returns>Returns the corresponding PDU instance or null if PduType.Other is specified.</returns> /// <exception cref="NotSupportedException">if the PDU type specified in parameter is not supported.</exception> public static IPdu CreatePdu(PduType type) { IPdu pdu = type switch { PduType.Other => new Pdu(), PduType.EntityState => new EntityStatePdu(), PduType.Fire => new FirePdu(), PduType.Detonation => new DetonationPdu(), PduType.Collision => new CollisionPdu(), PduType.ServiceRequest => new ServiceRequestPdu(), PduType.ResupplyOffer => new ResupplyOfferPdu(), PduType.ResupplyReceived => new ResupplyReceivedPdu(), PduType.ResupplyCancel => new ResupplyCancelPdu(), PduType.RepairComplete => new RepairCompletePdu(), PduType.RepairResponse => new RepairResponsePdu(), PduType.CreateEntity => new CreateEntityPdu(), PduType.RemoveEntity => new RemoveEntityPdu(), PduType.StartResume => new StartResumePdu(), PduType.StopFreeze => new StopFreezePdu(), PduType.Acknowledge => new AcknowledgePdu(), PduType.ActionRequest => new ActionRequestPdu(), PduType.ActionResponse => new ActionResponsePdu(), PduType.DataQuery => new DataQueryPdu(), PduType.SetData => new SetDataPdu(), PduType.Data => new DataPdu(), PduType.EventReport => new EventReportPdu(), PduType.Comment => new CommentPdu(), PduType.ElectromagneticEmission => throw new NotSupportedException(), PduType.Designator => new DesignatorPdu(), PduType.Transmitter => new TransmitterPdu(), PduType.Signal => new SignalPdu(), PduType.Receiver => new ReceiverPdu(), _ => throw new NotSupportedException(), }; return(pdu); }
public SnmpDatagramV2C( DateTimeOffset receivedTime, string sourceIpAddress, SnmpHeader header, IReadOnlyList<VarBind> varBinds, PduType pduType, int requestId, SnmpErrorStatus errorStatus, int errorIndex) : base(receivedTime, sourceIpAddress, header, varBinds) { this.PduType = pduType; this.RequestId = requestId; this.ErrorStatus = errorStatus; this.ErrorIndex = errorIndex; }
/// <summary> /// Initializes a new instance of the <see cref="SnmpDatagram"/> class. /// </summary> /// <param name="pduType">Type of the pdu.</param> /// <param name="snmpVersion">The SNMP version.</param> /// <param name="community">The community.</param> /// <param name="requestId">The request identifier.</param> /// <param name="errorStatus">The error status.</param> /// <param name="errorIndex">Index of the error.</param> /// <param name="varBinds">The variable binds.</param> public SnmpDatagram(PduType pduType, SnmpVersion snmpVersion, string community, int requestId, SnmpErrorStatus errorStatus, int errorIndex, VarBind[] varBinds) { Header = new SnmpHeader(snmpVersion, community); PduV2c = new SnmpV2cPDU(pduType, requestId, errorStatus, errorIndex, varBinds); PduV1 = default(SnmpV1PDU); }
/// <summary> /// Constructor. /// </summary> /// <param name="pduType">Pdu type value. For available types see <see cref="PduType" />.</param> public ScopedPdu(PduType pduType) : base(pduType) { _contextEngineId = new OctetString(); _contextName = new OctetString(); }
/// <summary> /// Used to unmarshal data back into the correct PDU type. /// </summary> /// <param name="pduType">PDU type</param> /// <param name="rawPDU">byte array containing the raw packets</param> /// <param name="endian">Endian type</param> /// <remarks>Added by PES to work with Mobile.</remarks> /// <returns>The PDU instance.</returns> public static Pdu UnmarshalRawPdu(PduType pduType, byte[] rawPdu, Endian endian) { DataInputStream ds = new DataInputStream(rawPdu, endian); return UnmarshalRawPdu(pduType, ds); }
/// <summary> /// Used to unmarshal data back into the correct PDU type. /// </summary> /// <param name="pduType">PDU type</param> /// <param name="ds">Datastream which contains the raw packet and Endian Type</param> /// <remarks>Added by PES to work with Mobile.</remarks> /// <returns>The PDU instance.</returns> public static Pdu UnmarshalRawPdu(PduType pduType, DataInputStream ds) { Pdu pdu = new Pdu(); switch (pduType) { case PduType.EntityState: EntityStatePdu entityStatePdu = new EntityStatePdu(); entityStatePdu.Unmarshal(ds); pdu = (Pdu)entityStatePdu; break; case PduType.Fire: FirePdu firePdu = new FirePdu(); firePdu.Unmarshal(ds); pdu = (Pdu)firePdu; break; case PduType.Detonation: DetonationPdu detonationPdu = new DetonationPdu(); detonationPdu.Unmarshal(ds); pdu = (Pdu)detonationPdu; break; case PduType.Collision: CollisionPdu collisionPdu = new CollisionPdu(); collisionPdu.Unmarshal(ds); pdu = (Pdu)collisionPdu; break; case PduType.ServiceRequest: ServiceRequestPdu serviceRequestPdu = new ServiceRequestPdu(); serviceRequestPdu.Unmarshal(ds); pdu = (Pdu)serviceRequestPdu; break; case PduType.ResupplyOffer: ResupplyOfferPdu resupplyOfferPdu = new ResupplyOfferPdu(); resupplyOfferPdu.Unmarshal(ds); pdu = (Pdu)resupplyOfferPdu; break; case PduType.ResupplyReceived: ResupplyReceivedPdu resupplyReceivedPdu = new ResupplyReceivedPdu(); resupplyReceivedPdu.Unmarshal(ds); pdu = (Pdu)resupplyReceivedPdu; break; case PduType.ResupplyCancel: ResupplyCancelPdu resupplyCancelPdu = new ResupplyCancelPdu(); resupplyCancelPdu.Unmarshal(ds); pdu = (Pdu)resupplyCancelPdu; break; case PduType.RepairComplete: RepairCompletePdu repairCompletePdu = new RepairCompletePdu(); repairCompletePdu.Unmarshal(ds); pdu = (Pdu)repairCompletePdu; break; case PduType.RepairResponse: RepairResponsePdu repairResponsePdu = new RepairResponsePdu(); repairResponsePdu.Unmarshal(ds); pdu = (Pdu)repairResponsePdu; break; case PduType.CreateEntity: CreateEntityPdu createEntityPdu = new CreateEntityPdu(); createEntityPdu.Unmarshal(ds); pdu = (Pdu)createEntityPdu; break; case PduType.RemoveEntity: RemoveEntityPdu removeEntityPdu = new RemoveEntityPdu(); removeEntityPdu.Unmarshal(ds); pdu = (Pdu)removeEntityPdu; break; case PduType.StartResume: StartResumePdu startResumePdu = new StartResumePdu(); startResumePdu.Unmarshal(ds); pdu = (Pdu)startResumePdu; break; case PduType.Acknowledge: AcknowledgePdu acknowledgePdu = new AcknowledgePdu(); acknowledgePdu.Unmarshal(ds); pdu = (Pdu)acknowledgePdu; break; case PduType.ActionRequest: ActionRequestPdu actionRequestPdu = new ActionRequestPdu(); actionRequestPdu.Unmarshal(ds); pdu = (Pdu)actionRequestPdu; break; case PduType.ActionResponse: ActionResponsePdu actionResponsePdu = new ActionResponsePdu(); actionResponsePdu.Unmarshal(ds); pdu = (Pdu)actionResponsePdu; break; case PduType.DataQuery: DataQueryPdu dataQueryPdu = new DataQueryPdu(); dataQueryPdu.Unmarshal(ds); pdu = (Pdu)dataQueryPdu; break; case PduType.SetData: SetDataPdu setDataPdu = new SetDataPdu(); setDataPdu.Unmarshal(ds); pdu = (Pdu)setDataPdu; break; case PduType.EventReport: EventReportPdu eventReportPdu = new EventReportPdu(); eventReportPdu.Unmarshal(ds); pdu = (Pdu)eventReportPdu; break; case PduType.Comment: CommentPdu commentPdu = new CommentPdu(); commentPdu.Unmarshal(ds); pdu = (Pdu)commentPdu; break; case PduType.StopFreeze: StopFreezePdu stopFreezePdu = new StopFreezePdu(); stopFreezePdu.Unmarshal(ds); pdu = (Pdu)stopFreezePdu; break; case PduType.Signal: SignalPdu signalPdu = new SignalPdu(); signalPdu.Unmarshal(ds); pdu = (Pdu)signalPdu; break; case PduType.Transmitter: TransmitterPdu transmitterPdu = new TransmitterPdu(); transmitterPdu.Unmarshal(ds); pdu = (Pdu)transmitterPdu; break; } return pdu; }
/// <summary> /// Used to unmarshal data back into the correct PDU type. /// </summary> /// <param name="pduType">PDU type</param> /// <param name="rawPdu">byte array containing the raw packets</param> /// <param name="endian">Endian type</param> /// <remarks>Added by PES to work with Mobile.</remarks> /// <returns>The PDU instance.</returns> public static Pdu UnmarshalRawPdu(PduType pduType, byte[] rawPdu, Endian endian) { var ds = new DataInputStream(rawPdu, endian); return(UnmarshalRawPdu(pduType, ds)); }
/// <summary> /// Creates the PDU. /// </summary> /// <param name="type">The type of PDU to be created.</param> /// <returns>Returns the corresponding PDU instance or null if PduType.Other is specified.</returns> /// <exception cref="NotImplementedException">if the PDU type specified in parameter is not supported.</exception> public static IPdu CreatePdu(PduType type) { IPdu pdu = null; switch (type) { case PduType.Other: pdu = new Pdu(); break; case PduType.EntityState: pdu = new EntityStatePdu(); break; case PduType.Fire: pdu = new FirePdu(); break; case PduType.Detonation: pdu = new DetonationPdu(); break; case PduType.Collision: pdu = new CollisionPdu(); break; case PduType.ServiceRequest: pdu = new ServiceRequestPdu(); break; case PduType.ResupplyOffer: pdu = new ResupplyOfferPdu(); break; case PduType.ResupplyReceived: pdu = new ResupplyReceivedPdu(); break; case PduType.ResupplyCancel: pdu = new ResupplyCancelPdu(); break; case PduType.RepairComplete: pdu = new RepairCompletePdu(); break; case PduType.RepairResponse: pdu = new RepairResponsePdu(); break; case PduType.CreateEntity: pdu = new CreateEntityPdu(); break; case PduType.RemoveEntity: pdu = new RemoveEntityPdu(); break; case PduType.StartResume: pdu = new StartResumePdu(); break; case PduType.StopFreeze: pdu = new StopFreezePdu(); break; case PduType.Acknowledge: pdu = new AcknowledgePdu(); break; case PduType.ActionRequest: pdu = new ActionRequestPdu(); break; case PduType.ActionResponse: pdu = new ActionResponsePdu(); break; case PduType.DataQuery: pdu = new DataQueryPdu(); break; case PduType.SetData: pdu = new SetDataPdu(); break; case PduType.Data: pdu = new DataPdu(); break; case PduType.EventReport: pdu = new EventReportPdu(); break; case PduType.Comment: pdu = new CommentPdu(); break; case PduType.ElectromagneticEmission: throw new NotImplementedException(); case PduType.Designator: pdu = new DesignatorPdu(); break; case PduType.Transmitter: pdu = new TransmitterPdu(); break; case PduType.Signal: pdu = new SignalPdu(); break; case PduType.Receiver: pdu = new ReceiverPdu(); break; default: throw new NotImplementedException(); } return pdu; }
/// <summary> /// Used to unmarshal data back into the correct PDU type. /// </summary> /// <param name="pduType">PDU type</param> /// <param name="ds">Datastream which contains the raw packet and Endian Type</param> /// <remarks>Added by PES to work with Mobile.</remarks> /// <returns>The PDU instance.</returns> public static Pdu UnmarshalRawPdu(PduType pduType, DataInputStream ds) { var pdu = new Pdu(); switch (pduType) { case PduType.EntityState: pdu = new EntityStatePdu(); pdu.Unmarshal(ds); break; case PduType.Fire: pdu = new FirePdu(); pdu.Unmarshal(ds); break; case PduType.Detonation: pdu = new DetonationPdu(); pdu.Unmarshal(ds); break; case PduType.Collision: pdu = new CollisionPdu(); pdu.Unmarshal(ds); break; case PduType.ServiceRequest: pdu = new ServiceRequestPdu(); pdu.Unmarshal(ds); break; case PduType.ResupplyOffer: pdu = new ResupplyOfferPdu(); pdu.Unmarshal(ds); break; case PduType.ResupplyReceived: pdu = new ResupplyReceivedPdu(); pdu.Unmarshal(ds); break; case PduType.ResupplyCancel: pdu = new ResupplyCancelPdu(); pdu.Unmarshal(ds); break; case PduType.RepairComplete: pdu = new RepairCompletePdu(); pdu.Unmarshal(ds); break; case PduType.RepairResponse: pdu = new RepairResponsePdu(); pdu.Unmarshal(ds); break; case PduType.CreateEntity: pdu = new CreateEntityPdu(); pdu.Unmarshal(ds); break; case PduType.RemoveEntity: pdu = new RemoveEntityPdu(); pdu.Unmarshal(ds); break; case PduType.StartResume: pdu = new StartResumePdu(); pdu.Unmarshal(ds); break; case PduType.Acknowledge: pdu = new AcknowledgePdu(); pdu.Unmarshal(ds); break; case PduType.ActionRequest: pdu = new ActionRequestPdu(); pdu.Unmarshal(ds); break; case PduType.ActionResponse: pdu = new ActionResponsePdu(); pdu.Unmarshal(ds); break; case PduType.DataQuery: pdu = new DataQueryPdu(); pdu.Unmarshal(ds); break; case PduType.SetData: pdu = new SetDataPdu(); pdu.Unmarshal(ds); break; case PduType.EventReport: pdu = new EventReportPdu(); pdu.Unmarshal(ds); break; case PduType.Comment: pdu = new CommentPdu(); pdu.Unmarshal(ds); break; case PduType.StopFreeze: pdu = new StopFreezePdu(); pdu.Unmarshal(ds); break; case PduType.Signal: pdu = new SignalPdu(); pdu.Unmarshal(ds); break; case PduType.Transmitter: pdu = new TransmitterPdu(); pdu.Unmarshal(ds); break; case PduType.ElectromagneticEmission: pdu = new ElectronicEmissionsPdu(); pdu.Unmarshal(ds); break; case PduType.Designator: pdu = new DesignatorPdu(); pdu.Unmarshal(ds); break; case PduType.Receiver: pdu = new ReceiverPdu(); pdu.Unmarshal(ds); break; case PduType.IFF_ATC_NAVAIDS: pdu = new IffAtcNavAidsLayer1Pdu(); pdu.Unmarshal(ds); break; case PduType.UnderwaterAcoustic: pdu = new UaPdu(); pdu.Unmarshal(ds); break; case PduType.SupplementalEmissionEntityState: pdu = new SeesPdu(); pdu.Unmarshal(ds); break; case PduType.IntercomSignal: pdu = new IntercomSignalPdu(); pdu.Unmarshal(ds); break; case PduType.IntercomControl: pdu = new IntercomControlPdu(); pdu.Unmarshal(ds); break; case PduType.AggregateState: pdu = new AggregateStatePdu(); pdu.Unmarshal(ds); break; case PduType.IsGroupOf: pdu = new IsGroupOfPdu(); pdu.Unmarshal(ds); break; case PduType.TransferControl: pdu = new TransferControlRequestPdu(); pdu.Unmarshal(ds); break; case PduType.IsPartOf: pdu = new IsPartOfPdu(); pdu.Unmarshal(ds); break; case PduType.MinefieldState: pdu = new MinefieldStatePdu(); pdu.Unmarshal(ds); break; case PduType.MinefieldQuery: pdu = new MinefieldQueryPdu(); pdu.Unmarshal(ds); break; case PduType.MinefieldData: pdu = new MinefieldDataPdu(); pdu.Unmarshal(ds); break; case PduType.MinefieldResponseNAK: pdu = new MinefieldResponseNackPdu(); pdu.Unmarshal(ds); break; case PduType.EnvironmentalProcess: pdu = new EnvironmentalProcessPdu(); pdu.Unmarshal(ds); break; case PduType.GriddedData: pdu = new GriddedDataPdu(); pdu.Unmarshal(ds); break; case PduType.PointObjectState: pdu = new PointObjectStatePdu(); pdu.Unmarshal(ds); break; case PduType.LinearObjectState: pdu = new LinearObjectStatePdu(); pdu.Unmarshal(ds); break; case PduType.ArealObjectState: pdu = new ArealObjectStatePdu(); pdu.Unmarshal(ds); break; case PduType.TSPI: throw new NotSupportedException(); case PduType.Appearance: throw new NotSupportedException(); case PduType.ArticulatedParts: throw new NotSupportedException(); case PduType.LEFire: throw new NotSupportedException(); case PduType.LEDetonation: throw new NotSupportedException(); case PduType.CreateEntityR: pdu = new CreateEntityReliablePdu(); pdu.Unmarshal(ds); break; case PduType.RemoveEntityR: pdu = new RemoveEntityReliablePdu(); pdu.Unmarshal(ds); break; case PduType.StartResumeR: pdu = new StartResumeReliablePdu(); pdu.Unmarshal(ds); break; case PduType.StopFreezeR: pdu = new StopFreezeReliablePdu(); pdu.Unmarshal(ds); break; case PduType.AcknowledgeR: pdu = new AcknowledgeReliablePdu(); pdu.Unmarshal(ds); break; case PduType.ActionRequestR: pdu = new ActionRequestReliablePdu(); pdu.Unmarshal(ds); break; case PduType.ActionResponseR: pdu = new ActionResponseReliablePdu(); pdu.Unmarshal(ds); break; case PduType.DataQueryR: pdu = new DataQueryReliablePdu(); pdu.Unmarshal(ds); break; case PduType.SetDataR: pdu = new SetDataReliablePdu(); pdu.Unmarshal(ds); break; case PduType.DataR: pdu = new DataReliablePdu(); pdu.Unmarshal(ds); break; case PduType.EventReportR: pdu = new EventReportReliablePdu(); pdu.Unmarshal(ds); break; case PduType.CommentR: pdu = new CommentReliablePdu(); pdu.Unmarshal(ds); break; case PduType.RecordR: pdu = new RecordQueryReliablePdu(); pdu.Unmarshal(ds); break; case PduType.SetRecordR: pdu = new SetRecordReliablePdu(); pdu.Unmarshal(ds); break; case PduType.RecordQueryR: pdu = new RecordQueryReliablePdu(); pdu.Unmarshal(ds); break; case PduType.CollisionElastic: pdu = new CollisionElasticPdu(); pdu.Unmarshal(ds); break; case PduType.EntityStateUpdate: pdu = new EntityStateUpdatePdu(); pdu.Unmarshal(ds); break; } return(pdu); }
/// <summary> /// Converts the Asn.1 encoded byte array to SNMP Datagram. /// </summary> /// <param name="byteSegment">The asn.1 encoded bytes.</param> /// <param name="timestamp">The timestamp when the packet has been received.</param> /// <param name="sourceIpAddress">The source IP address of the packet.</param> /// <returns> /// SnmpPacket /// </returns> /// <exception cref="System.ArgumentNullException">bytes</exception> /// <exception cref="System.IO.InvalidDataException">Snmp Version V3 not supported</exception> public static SnmpDatagram ToSnmpDatagram( this ArraySegment <byte> byteSegment, DateTimeOffset timestamp, string sourceIpAddress) { var bytes = byteSegment.Array; if (bytes == null || bytes.Length == 0) { throw new ArgumentNullException("byteSegment"); } int offset = byteSegment.Offset; int length; offset = bytes.NextValueLength(offset, -1, -1, -1, out length); offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); SnmpVersion snmpVersion = (SnmpVersion)bytes.ReadInteger(offset, length); offset += length; if (snmpVersion == SnmpVersion.V3) { throw new InvalidDataException("Snmp Version V3 not supported"); } offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.OctetString, out length); string community = bytes.ReadOctetString(offset, length); offset += length; PduType pduType = (PduType)(bytes[offset++] & 0x1F); offset = bytes.ReadLength(offset, out length); if (snmpVersion == SnmpVersion.V1 && pduType == PduType.Trap) { offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.ObjectIdentifier, out length); ObjectIdentifier oid = new ObjectIdentifier(bytes.ReadOids(offset, length)); offset += length; offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1SnmpTag.IpAddress, out length); IPAddress ipAddress = bytes.ReadIpAddress(offset); offset += length; offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); GenericTrap genericTrap = (GenericTrap)bytes.ReadInteger(offset, length); offset += length; offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); int specificTrap = bytes.ReadInteger(offset, length); offset += length; offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1SnmpTag.TimeTicks, out length); uint timeStamp = bytes.ReadUnsignedInteger(offset, length); offset += length; offset = bytes.NextValueLength(offset, (int)Asn1Class.Universal, (int)ConstructType.Constructed, (int)Asn1Tag.Sequence, out length); VarBind[] varBinds = bytes.ReadVarBinds(offset, length); return(new SnmpDatagramV1( timestamp, sourceIpAddress, new SnmpHeader(snmpVersion, community), varBinds)); } else { offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); int requestId = bytes.ReadInteger(offset, length); offset += length; offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); SnmpErrorStatus errorStatus = (SnmpErrorStatus)bytes.ReadInteger(offset, length); offset += length; offset = bytes.NextValueLength(offset, -1, -1, (int)Asn1Tag.Integer, out length); int errorIndex = bytes.ReadInteger(offset, length); offset += length; offset = bytes.NextValueLength(offset, (int)Asn1Class.Universal, (int)ConstructType.Constructed, (int)Asn1Tag.Sequence, out length); VarBind[] varBinds = bytes.ReadVarBinds(offset, length); return(new SnmpDatagramV2C( timestamp, sourceIpAddress, new SnmpHeader(snmpVersion, community), varBinds, pduType, requestId, errorStatus, errorIndex)); } }
/// <summary> /// Constructor. /// </summary> /// <param name="pduType">Pdu type value. For available types see <see cref="PduType"/>.</param> public ScopedPdu(PduType pduType) : base(pduType) { _contextEngineId = new OctetString(); _contextName = new OctetString(); }
public Entity(SnmpVersion version, PduType pduType) { this.Version = version; this.PduType = pduType; }
/// <summary> /// Initializes a new instance of the <see cref="SnmpDatagram"/> class. /// </summary> /// <param name="pduType">Type of the pdu.</param> /// <param name="snmpVersion">The SNMP version.</param> /// <param name="community">The community.</param> /// <param name="enterprise">The enterprise.</param> /// <param name="agentAddress">The agent address.</param> /// <param name="genericV1Trap">The generic v1 trap.</param> /// <param name="specificTrap">The specific trap.</param> /// <param name="timeStamp">The time stamp.</param> /// <param name="varBinds">The variable binds.</param> public SnmpDatagram(PduType pduType, SnmpVersion snmpVersion, string community, ObjectIdentifier enterprise, IPAddress agentAddress, GenericTrap genericV1Trap, int specificTrap, uint timeStamp, VarBind[] varBinds) { Header = new SnmpHeader(snmpVersion, community); PduV1 = new SnmpV1PDU(pduType, enterprise, agentAddress, genericV1Trap, specificTrap, timeStamp, varBinds); PduV2c = default(SnmpV2cPDU); }
public Entity(string ip, SnmpVersion version, string communityName, int port, PduType pduType, string oid) { this.IP = ip; this.Version = version; this.CommunityName = communityName; this.Port = port; this.PduType = pduType; this.OID = new Oid(oid); }
/// <summary>Constructor.</summary> /// <remarks> /// Standard constructor that sets ScopedPdu request type and request id. For valid types see <see cref="PduType"/>. /// /// By default, requestId value is set to a random value. Second argument allows caller to specify request /// id for this packet /// </remarks> /// <param name="pduType">Pdu type value.</param> /// <param name="requestId">Request id for the ScopedPdu instance.</param> public ScopedPdu(PduType pduType, int requestId) : base(pduType) { _requestId.Value = requestId; _contextEngineId = new OctetString(); _contextName = new OctetString(); }
/// <summary> /// Used to unmarshal data back into the correct PDU type. /// </summary> /// <param name="pduType">PDU type</param> /// <param name="ds">Datastream which contains the raw packet and Endian Type</param> /// <remarks>Added by PES to work with Mobile.</remarks> /// <returns>The PDU instance.</returns> public static Pdu UnmarshalRawPdu(PduType pduType, DataInputStream ds) { Pdu pdu = new Pdu(); switch (pduType) { case PduType.EntityState: EntityStatePdu entityStatePdu = new EntityStatePdu(); entityStatePdu.Unmarshal(ds); pdu = (Pdu)entityStatePdu; break; case PduType.Fire: FirePdu firePdu = new FirePdu(); firePdu.Unmarshal(ds); pdu = (Pdu)firePdu; break; case PduType.Detonation: DetonationPdu detonationPdu = new DetonationPdu(); detonationPdu.Unmarshal(ds); pdu = (Pdu)detonationPdu; break; case PduType.Collision: CollisionPdu collisionPdu = new CollisionPdu(); collisionPdu.Unmarshal(ds); pdu = (Pdu)collisionPdu; break; case PduType.ServiceRequest: ServiceRequestPdu serviceRequestPdu = new ServiceRequestPdu(); serviceRequestPdu.Unmarshal(ds); pdu = (Pdu)serviceRequestPdu; break; case PduType.ResupplyOffer: ResupplyOfferPdu resupplyOfferPdu = new ResupplyOfferPdu(); resupplyOfferPdu.Unmarshal(ds); pdu = (Pdu)resupplyOfferPdu; break; case PduType.ResupplyReceived: ResupplyReceivedPdu resupplyReceivedPdu = new ResupplyReceivedPdu(); resupplyReceivedPdu.Unmarshal(ds); pdu = (Pdu)resupplyReceivedPdu; break; case PduType.ResupplyCancel: ResupplyCancelPdu resupplyCancelPdu = new ResupplyCancelPdu(); resupplyCancelPdu.Unmarshal(ds); pdu = (Pdu)resupplyCancelPdu; break; case PduType.RepairComplete: RepairCompletePdu repairCompletePdu = new RepairCompletePdu(); repairCompletePdu.Unmarshal(ds); pdu = (Pdu)repairCompletePdu; break; case PduType.RepairResponse: RepairResponsePdu repairResponsePdu = new RepairResponsePdu(); repairResponsePdu.Unmarshal(ds); pdu = (Pdu)repairResponsePdu; break; case PduType.CreateEntity: CreateEntityPdu createEntityPdu = new CreateEntityPdu(); createEntityPdu.Unmarshal(ds); pdu = (Pdu)createEntityPdu; break; case PduType.RemoveEntity: RemoveEntityPdu removeEntityPdu = new RemoveEntityPdu(); removeEntityPdu.Unmarshal(ds); pdu = (Pdu)removeEntityPdu; break; case PduType.StartResume: StartResumePdu startResumePdu = new StartResumePdu(); startResumePdu.Unmarshal(ds); pdu = (Pdu)startResumePdu; break; case PduType.Acknowledge: AcknowledgePdu acknowledgePdu = new AcknowledgePdu(); acknowledgePdu.Unmarshal(ds); pdu = (Pdu)acknowledgePdu; break; case PduType.ActionRequest: ActionRequestPdu actionRequestPdu = new ActionRequestPdu(); actionRequestPdu.Unmarshal(ds); pdu = (Pdu)actionRequestPdu; break; case PduType.ActionResponse: ActionResponsePdu actionResponsePdu = new ActionResponsePdu(); actionResponsePdu.Unmarshal(ds); pdu = (Pdu)actionResponsePdu; break; case PduType.DataQuery: DataQueryPdu dataQueryPdu = new DataQueryPdu(); dataQueryPdu.Unmarshal(ds); pdu = (Pdu)dataQueryPdu; break; case PduType.SetData: SetDataPdu setDataPdu = new SetDataPdu(); setDataPdu.Unmarshal(ds); pdu = (Pdu)setDataPdu; break; case PduType.EventReport: EventReportPdu eventReportPdu = new EventReportPdu(); eventReportPdu.Unmarshal(ds); pdu = (Pdu)eventReportPdu; break; case PduType.Comment: CommentPdu commentPdu = new CommentPdu(); commentPdu.Unmarshal(ds); pdu = (Pdu)commentPdu; break; case PduType.StopFreeze: StopFreezePdu stopFreezePdu = new StopFreezePdu(); stopFreezePdu.Unmarshal(ds); pdu = (Pdu)stopFreezePdu; break; case PduType.Signal: SignalPdu signalPdu = new SignalPdu(); signalPdu.Unmarshal(ds); pdu = (Pdu)signalPdu; break; case PduType.Transmitter: TransmitterPdu transmitterPdu = new TransmitterPdu(); transmitterPdu.Unmarshal(ds); pdu = (Pdu)transmitterPdu; break; } return(pdu); }
/// <summary> /// Creates the PDU. /// </summary> /// <param name="type">The type of PDU to be created.</param> /// <returns>Returns the corresponding PDU instance or null if PduType.Other is specified.</returns> /// <exception cref="NotSupportedException">if the PDU type specified in parameter is not supported.</exception> public static IPdu CreatePdu(PduType type) { return(type switch { PduType.Other => new Pdu(), PduType.EntityState => new EntityStatePdu(), PduType.Fire => new FirePdu(), PduType.Detonation => new DetonationPdu(), PduType.Collision => new CollisionPdu(), PduType.ServiceRequest => new ServiceRequestPdu(), PduType.ResupplyOffer => new ResupplyOfferPdu(), PduType.ResupplyReceived => new ResupplyReceivedPdu(), PduType.ResupplyCancel => new ResupplyCancelPdu(), PduType.RepairComplete => new RepairCompletePdu(), PduType.RepairResponse => new RepairResponsePdu(), PduType.CreateEntity => new CreateEntityPdu(), PduType.RemoveEntity => new RemoveEntityPdu(), PduType.StartResume => new StartResumePdu(), PduType.StopFreeze => new StopFreezePdu(), PduType.Acknowledge => new AcknowledgePdu(), PduType.ActionRequest => new ActionRequestPdu(), PduType.ActionResponse => new ActionResponsePdu(), PduType.DataQuery => new DataQueryPdu(), PduType.SetData => new SetDataPdu(), PduType.Data => new DataPdu(), PduType.EventReport => new EventReportPdu(), PduType.Comment => new CommentPdu(), PduType.ElectromagneticEmission => new ElectronicEmissionsPdu(), PduType.Designator => new DesignatorPdu(), PduType.Transmitter => new TransmitterPdu(), PduType.Signal => new SignalPdu(), PduType.Receiver => new ReceiverPdu(), PduType.IFF_ATC_NAVAIDS => new IffAtcNavAidsLayer1Pdu(), PduType.UnderwaterAcoustic => new UaPdu(), PduType.SupplementalEmissionEntityState => new SeesPdu(), PduType.IntercomSignal => new IntercomSignalPdu(), PduType.IntercomControl => new IntercomControlPdu(), PduType.AggregateState => new AggregateStatePdu(), PduType.IsGroupOf => new IsGroupOfPdu(), PduType.TransferControl => new TransferControlRequestPdu(), PduType.IsPartOf => new IsPartOfPdu(), PduType.MinefieldState => new MinefieldStatePdu(), PduType.MinefieldQuery => new MinefieldQueryPdu(), PduType.MinefieldData => new MinefieldDataPdu(), PduType.MinefieldResponseNAK => new MinefieldResponseNackPdu(), PduType.EnvironmentalProcess => new EnvironmentalProcessPdu(), PduType.GriddedData => new GriddedDataPdu(), PduType.PointObjectState => new PointObjectStatePdu(), PduType.LinearObjectState => new LinearObjectStatePdu(), PduType.ArealObjectState => new ArealObjectStatePdu(), PduType.TSPI => throw new NotSupportedException(), PduType.Appearance => throw new NotSupportedException(), PduType.ArticulatedParts => throw new NotSupportedException(), PduType.LEFire => throw new NotSupportedException(), PduType.LEDetonation => throw new NotSupportedException(), PduType.CreateEntityR => new CreateEntityReliablePdu(), PduType.RemoveEntityR => new RemoveEntityReliablePdu(), PduType.StartResumeR => new StartResumeReliablePdu(), PduType.StopFreezeR => new StopFreezeReliablePdu(), PduType.AcknowledgeR => new AcknowledgeReliablePdu(), PduType.ActionRequestR => new ActionRequestReliablePdu(), PduType.ActionResponseR => new ActionResponseReliablePdu(), PduType.DataQueryR => new DataQueryReliablePdu(), PduType.SetDataR => new SetDataReliablePdu(), PduType.DataR => new DataReliablePdu(), PduType.EventReportR => new EventReportReliablePdu(), PduType.CommentR => new CommentReliablePdu(), PduType.RecordR => new RecordQueryReliablePdu(), PduType.SetRecordR => new SetRecordReliablePdu(), PduType.RecordQueryR => new RecordQueryReliablePdu(), PduType.CollisionElastic => new CollisionElasticPdu(), PduType.EntityStateUpdate => new EntityStateUpdatePdu(), _ => null, });
/// <summary> /// Used to unmarshal data back into the correct PDU type for protocol 5. /// </summary> /// <param name="pduType">PDU type</param> /// <param name="ds">Data stream that holds raw pdu data</param> /// <returns>Base PDU object that can be cast to specific PDU if needed</returns> /// <exception cref="NotSupportedException"></exception> public static Dis1995.Pdu UnmarshalRawPdu1995(PduType pduType, DataInputStream ds) { var pdu = new Dis1995.Pdu(); switch (pduType) { case PduType.EntityState: pdu = new Dis1995.EntityStatePdu(); pdu.Unmarshal(ds); break; case PduType.Fire: pdu = new Dis1995.FirePdu(); pdu.Unmarshal(ds); break; case PduType.Detonation: pdu = new Dis1995.DetonationPdu(); pdu.Unmarshal(ds); break; case PduType.Collision: pdu = new Dis1995.CollisionPdu(); pdu.Unmarshal(ds); break; case PduType.ServiceRequest: pdu = new Dis1995.ServiceRequestPdu(); pdu.Unmarshal(ds); break; case PduType.ResupplyOffer: pdu = new Dis1995.ResupplyOfferPdu(); pdu.Unmarshal(ds); break; case PduType.ResupplyReceived: pdu = new Dis1995.ResupplyReceivedPdu(); pdu.Unmarshal(ds); break; case PduType.ResupplyCancel: pdu = new Dis1995.ResupplyCancelPdu(); pdu.Unmarshal(ds); break; case PduType.RepairComplete: pdu = new Dis1995.RepairCompletePdu(); pdu.Unmarshal(ds); break; case PduType.RepairResponse: pdu = new Dis1995.RepairResponsePdu(); pdu.Unmarshal(ds); break; case PduType.CreateEntity: pdu = new Dis1995.CreateEntityPdu(); pdu.Unmarshal(ds); break; case PduType.RemoveEntity: pdu = new Dis1995.RemoveEntityPdu(); pdu.Unmarshal(ds); break; case PduType.StartResume: pdu = new Dis1995.StartResumePdu(); pdu.Unmarshal(ds); break; case PduType.Acknowledge: pdu = new Dis1995.AcknowledgePdu(); pdu.Unmarshal(ds); break; case PduType.ActionRequest: pdu = new Dis1995.ActionRequestPdu(); pdu.Unmarshal(ds); break; case PduType.ActionResponse: pdu = new Dis1995.ActionResponsePdu(); pdu.Unmarshal(ds); break; case PduType.DataQuery: pdu = new Dis1995.DataQueryPdu(); pdu.Unmarshal(ds); break; case PduType.SetData: pdu = new Dis1995.SetDataPdu(); pdu.Unmarshal(ds); break; case PduType.EventReport: pdu = new Dis1995.EventReportPdu(); pdu.Unmarshal(ds); break; case PduType.Comment: pdu = new Dis1995.CommentPdu(); pdu.Unmarshal(ds); break; case PduType.StopFreeze: pdu = new Dis1995.StopFreezePdu(); pdu.Unmarshal(ds); break; case PduType.Signal: pdu = new Dis1995.SignalPdu(); pdu.Unmarshal(ds); break; case PduType.Transmitter: pdu = new Dis1995.TransmitterPdu(); pdu.Unmarshal(ds); break; } return(pdu); }
/// <summary> /// Constructor. /// </summary> /// <remarks> /// Initializes PDU class with supplied values. /// </remarks> /// <param name="vbs">VarBind list</param> /// <param name="type">PDU type</param> /// <param name="requestId">Request id</param> public Pdu(VbCollection vbs, PduType type, int requestId) : this(vbs) { _requestId.Value = requestId; _asnType = (byte)type; }
/// <summary> /// Creates the PDU. /// </summary> /// <param name="type">The type of PDU to be created.</param> /// <returns>Returns the corresponding PDU instance or null if PduType.Other is specified.</returns> /// <exception cref="NotImplementedException">if the PDU type specified in parameter is not supported.</exception> public static IPdu CreatePdu(PduType type) { IPdu pdu = null; switch (type) { case PduType.Other: pdu = new Pdu(); break; case PduType.EntityState: pdu = new EntityStatePdu(); break; case PduType.Fire: pdu = new FirePdu(); break; case PduType.Detonation: pdu = new DetonationPdu(); break; case PduType.Collision: pdu = new CollisionPdu(); break; case PduType.ServiceRequest: pdu = new ServiceRequestPdu(); break; case PduType.ResupplyOffer: pdu = new ResupplyOfferPdu(); break; case PduType.ResupplyReceived: pdu = new ResupplyReceivedPdu(); break; case PduType.ResupplyCancel: pdu = new ResupplyCancelPdu(); break; case PduType.RepairComplete: pdu = new RepairCompletePdu(); break; case PduType.RepairResponse: pdu = new RepairResponsePdu(); break; case PduType.CreateEntity: pdu = new CreateEntityPdu(); break; case PduType.RemoveEntity: pdu = new RemoveEntityPdu(); break; case PduType.StartResume: pdu = new StartResumePdu(); break; case PduType.StopFreeze: pdu = new StopFreezePdu(); break; case PduType.Acknowledge: pdu = new AcknowledgePdu(); break; case PduType.ActionRequest: pdu = new ActionRequestPdu(); break; case PduType.ActionResponse: pdu = new ActionResponsePdu(); break; case PduType.DataQuery: pdu = new DataQueryPdu(); break; case PduType.SetData: pdu = new SetDataPdu(); break; case PduType.Data: pdu = new DataPdu(); break; case PduType.EventReport: pdu = new EventReportPdu(); break; case PduType.Comment: pdu = new CommentPdu(); break; case PduType.ElectromagneticEmission: throw new NotImplementedException(); case PduType.Designator: pdu = new DesignatorPdu(); break; case PduType.Transmitter: pdu = new TransmitterPdu(); break; case PduType.Signal: pdu = new SignalPdu(); break; case PduType.Receiver: pdu = new ReceiverPdu(); break; default: throw new NotImplementedException(); } return(pdu); }
/// <summary> /// Creates the PDU. /// </summary> /// <param name="type">The type of PDU to be created.</param> /// <returns>Returns the corresponding PDU instance or null if PduType.Other is specified.</returns> /// <exception cref="NotImplementedException">if the PDU type specified in parameter is not supported.</exception> public static IPdu CreatePdu(PduType type) { IPdu pdu = null; switch (type) { case PduType.Other: pdu = new Pdu(); break; case PduType.EntityState: pdu = new EntityStatePdu(); break; case PduType.Fire: pdu = new FirePdu(); break; case PduType.Detonation: pdu = new DetonationPdu(); break; case PduType.Collision: pdu = new CollisionPdu(); break; case PduType.ServiceRequest: pdu = new ServiceRequestPdu(); break; case PduType.ResupplyOffer: pdu = new ResupplyOfferPdu(); break; case PduType.ResupplyReceived: pdu = new ResupplyReceivedPdu(); break; case PduType.ResupplyCancel: pdu = new ResupplyCancelPdu(); break; case PduType.RepairComplete: pdu = new RepairCompletePdu(); break; case PduType.RepairResponse: pdu = new RepairResponsePdu(); break; case PduType.CreateEntity: pdu = new CreateEntityPdu(); break; case PduType.RemoveEntity: pdu = new RemoveEntityPdu(); break; case PduType.StartResume: pdu = new StartResumePdu(); break; case PduType.StopFreeze: pdu = new StopFreezePdu(); break; case PduType.Acknowledge: pdu = new AcknowledgePdu(); break; case PduType.ActionRequest: pdu = new ActionRequestPdu(); break; case PduType.ActionResponse: pdu = new ActionResponsePdu(); break; case PduType.DataQuery: pdu = new DataQueryPdu(); break; case PduType.SetData: pdu = new SetDataPdu(); break; case PduType.Data: pdu = new DataPdu(); break; case PduType.EventReport: pdu = new EventReportPdu(); break; case PduType.Comment: pdu = new CommentPdu(); break; case PduType.ElectromagneticEmission: pdu = new ElectronicEmissionsPdu(); break; case PduType.Designator: pdu = new DesignatorPdu(); break; case PduType.Transmitter: pdu = new TransmitterPdu(); break; case PduType.Signal: pdu = new SignalPdu(); break; case PduType.Receiver: pdu = new ReceiverPdu(); break; case PduType.IFF_ATC_NAVAIDS: pdu = new IffAtcNavAidsLayer1Pdu(); break; case PduType.UnderwaterAcoustic: pdu = new UaPdu(); break; case PduType.SupplementalEmissionEntityState: pdu = new SeesPdu(); break; case PduType.IntercomSignal: pdu = new IntercomSignalPdu(); break; case PduType.IntercomControl: pdu = new IntercomControlPdu(); break; case PduType.AggregateState: pdu = new AggregateStatePdu(); break; case PduType.IsGroupOf: pdu = new IsGroupOfPdu(); break; case PduType.TransferControl: pdu = new TransferControlRequestPdu(); break; case PduType.IsPartOf: pdu = new IsPartOfPdu(); break; case PduType.MinefieldState: pdu = new MinefieldStatePdu(); break; case PduType.MinefieldQuery: pdu = new MinefieldQueryPdu(); break; case PduType.MinefieldData: pdu = new MinefieldDataPdu(); break; case PduType.MinefieldResponseNAK: pdu = new MinefieldResponseNackPdu(); break; case PduType.EnvironmentalProcess: pdu = new EnvironmentalProcessPdu(); break; case PduType.GriddedData: pdu = new GriddedDataPdu(); break; case PduType.PointObjectState: pdu = new PointObjectStatePdu(); break; case PduType.LinearObjectState: pdu = new LinearObjectStatePdu(); break; case PduType.ArealObjectState: pdu = new ArealObjectStatePdu(); break; case PduType.TSPI: throw new NotImplementedException(); case PduType.Appearance: throw new NotImplementedException(); case PduType.ArticulatedParts: throw new NotImplementedException(); case PduType.LEFire: throw new NotImplementedException(); case PduType.LEDetonation: throw new NotImplementedException(); case PduType.CreateEntityR: pdu = new CreateEntityReliablePdu(); break; case PduType.RemoveEntityR: pdu = new RemoveEntityReliablePdu(); break; case PduType.StartResumeR: pdu = new StartResumeReliablePdu(); break; case PduType.StopFreezeR: pdu = new StopFreezeReliablePdu(); break; case PduType.AcknowledgeR: pdu = new AcknowledgeReliablePdu(); break; case PduType.ActionRequestR: pdu = new ActionRequestReliablePdu(); break; case PduType.ActionResponseR: pdu = new ActionResponseReliablePdu(); break; case PduType.DataQueryR: pdu = new DataQueryReliablePdu(); break; case PduType.SetDataR: pdu = new SetDataReliablePdu(); break; case PduType.DataR: pdu = new DataReliablePdu(); break; case PduType.EventReportR: pdu = new EventReportReliablePdu(); break; case PduType.CommentR: pdu = new CommentReliablePdu(); break; case PduType.RecordR: pdu = new RecordQueryReliablePdu(); break; case PduType.SetRecordR: pdu = new SetRecordReliablePdu(); break; case PduType.RecordQueryR: pdu = new RecordQueryReliablePdu(); break; case PduType.CollisionElastic: pdu = new CollisionElasticPdu(); break; case PduType.EntityStateUpdate: pdu = new EntityStateUpdatePdu(); break; default: pdu = null; break; } return pdu; }