internal override DnsResourceData CreateInstance(DnsDatagram dns, int offsetInDns, int length) { if (length < 3) { return((DnsResourceData)null); } byte precedence = dns[offsetInDns]; DnsGatewayType gatewayType = (DnsGatewayType)dns[offsetInDns + 1]; DnsPublicKeyAlgorithm algorithm = (DnsPublicKeyAlgorithm)dns[offsetInDns + 2]; DnsGateway instance = DnsGateway.CreateInstance(gatewayType, dns, offsetInDns + 3, length - 3); if (instance == null) { return((DnsResourceData)null); } DataSegment publicKey = dns.Subsegment(offsetInDns + 3 + instance.Length, length - 3 - instance.Length); return((DnsResourceData) new DnsResourceDataIpSecKey(precedence, instance, algorithm, publicKey)); }
internal override DnsResourceData CreateInstance(DnsDatagram dns, int offsetInDns, int length) { if (length < ConstPartLength) { return(null); } byte precedence = dns[offsetInDns + Offset.Precedence]; DnsGatewayType gatewayType = (DnsGatewayType)dns[offsetInDns + Offset.GatewayType]; DnsPublicKeyAlgorithm algorithm = (DnsPublicKeyAlgorithm)dns[offsetInDns + Offset.Algorithm]; DnsGateway gateway = DnsGateway.CreateInstance(gatewayType, dns, offsetInDns + Offset.Gateway, length - ConstPartLength); if (gateway == null) { return(null); } DataSegment publicKey = dns.Subsegment(offsetInDns + ConstPartLength + gateway.Length, length - ConstPartLength - gateway.Length); return(new DnsResourceDataIpSecKey(precedence, gateway, algorithm, publicKey)); }