public T GetOption <T>(UInt16 optionType) where T : DHCPv6PacketOption { if (HasOption(optionType) == false) { return(null); } DHCPv6PacketOption option = _options.First(x => x.Code == optionType); if (option is T == false) { return(null); } return((T)option); }
internal static DHCPv6RelayPacket FromByteArray(byte[] rawData, int offset) { DHCPv6PacketTypes type = (DHCPv6PacketTypes)rawData[offset]; offset += 1; Byte hopCount = rawData[offset]; offset += 1; IPv6Address linkAddress = IPv6Address.FromByteArray(rawData, offset); offset += 16; IPv6Address peerAddress = IPv6Address.FromByteArray(rawData, offset); offset += 16; List <DHCPv6PacketOption> options = new List <DHCPv6PacketOption>(); Byte[] innerPacketOptionValue = null; Int32 byteIndex = offset; while (byteIndex < rawData.Length) { UInt16 optionCode = ByteHelper.ConvertToUInt16FromByte(rawData, byteIndex); UInt16 length = ByteHelper.ConvertToUInt16FromByte(rawData, byteIndex + 2); Byte[] optionData = ByteHelper.CopyData(rawData, byteIndex, length + 4); if (optionCode == (Byte)DHCPv6PacketOptionTypes.RelayMessage) { innerPacketOptionValue = ByteHelper.CopyData(optionData, 4); } else { DHCPv6PacketOption suboption = DHCPv6PacketOptionFactory.GetOption(optionCode, optionData); options.Add(suboption); } byteIndex += 4 + length; } return(new DHCPv6RelayPacket( type, hopCount, linkAddress, peerAddress, options, DHCPv6Packet.FromByteArray(innerPacketOptionValue))); }
public static IEnumerable <DHCPv6PacketOption> GetOptions(Byte[] subOptionData, Int32 offset) { List <DHCPv6PacketOption> options = new List <DHCPv6PacketOption>(); Int32 byteIndex = offset; while (byteIndex < subOptionData.Length) { UInt16 optionCode = ByteHelper.ConvertToUInt16FromByte(subOptionData, byteIndex); UInt16 length = ByteHelper.ConvertToUInt16FromByte(subOptionData, byteIndex + 2); Byte[] optionData = ByteHelper.CopyData(subOptionData, byteIndex, length + 4); DHCPv6PacketOption suboption = GetOption(optionCode, optionData); options.Add(suboption); byteIndex += 4 + length; } return(options); }