internal static void Decode(AsnReader reader, Asn1Tag expectedTag, out Asn1BindRequest decoded) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } decoded = new Asn1BindRequest(); AsnReader sequenceReader = reader.ReadSequence(expectedTag); if (!sequenceReader.TryReadUInt8(out decoded.Version)) { sequenceReader.ThrowIfNotEmpty(); } if (sequenceReader.TryGetPrimitiveOctetStringBytes(out ReadOnlyMemory <byte> tmpName)) { decoded.Name = tmpName; } else { decoded.Name = sequenceReader.ReadOctetString(); } Asn1AuthenticationChoice.Decode(sequenceReader, out decoded.Authentication); sequenceReader.ThrowIfNotEmpty(); }
internal static void Decode(AsnReader reader, out Asn1BindRequest decoded) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } Decode(reader, Asn1Tag.Sequence, out decoded); }
internal static void Decode(AsnReader reader, out Asn1ProtocolOp decoded) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } decoded = new Asn1ProtocolOp(); Asn1Tag tag = reader.PeekTag(); AsnReader collectionReader; if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 0))) { Asn1BindRequest tmpBindRequest; Asn1BindRequest.Decode(reader, new Asn1Tag(TagClass.Application, 0), out tmpBindRequest); decoded.BindRequest = tmpBindRequest; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 1))) { Asn1BindResponse tmpBindResponse; Asn1BindResponse.Decode(reader, new Asn1Tag(TagClass.Application, 1), out tmpBindResponse); decoded.BindResponse = tmpBindResponse; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 2))) { reader.ReadNull(new Asn1Tag(TagClass.Application, 2)); decoded.UnbindRequest = true; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 3))) { Asn1SearchRequest tmpSearchRequest; Asn1SearchRequest.Decode(reader, new Asn1Tag(TagClass.Application, 3), out tmpSearchRequest); decoded.SearchRequest = tmpSearchRequest; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 4))) { Asn1SearchResultEntry tmpSearchResEntry; Asn1SearchResultEntry.Decode(reader, new Asn1Tag(TagClass.Application, 4), out tmpSearchResEntry); decoded.SearchResEntry = tmpSearchResEntry; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 5))) { Asn1LDAPResult tmpSearchResultDone; Asn1LDAPResult.Decode(reader, new Asn1Tag(TagClass.Application, 5), out tmpSearchResultDone); decoded.SearchResultDone = tmpSearchResultDone; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 19))) { // Decode SEQUENCE OF for SearchResultReference { collectionReader = reader.ReadSequence(new Asn1Tag(TagClass.Application, 19)); var tmpList = new List <ReadOnlyMemory <byte> >(); ReadOnlyMemory <byte> tmpItem; while (collectionReader.HasData) { if (collectionReader.TryGetPrimitiveOctetStringBytes(out ReadOnlyMemory <byte> tmp)) { tmpItem = tmp; } else { tmpItem = collectionReader.ReadOctetString(); } tmpList.Add(tmpItem); } decoded.SearchResultReference = tmpList.ToArray(); } } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 6))) { Asn1ModifyRequest tmpModifyRequest; Asn1ModifyRequest.Decode(reader, new Asn1Tag(TagClass.Application, 6), out tmpModifyRequest); decoded.ModifyRequest = tmpModifyRequest; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 7))) { Asn1LDAPResult tmpModifyResponse; Asn1LDAPResult.Decode(reader, new Asn1Tag(TagClass.Application, 7), out tmpModifyResponse); decoded.ModifyResponse = tmpModifyResponse; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 8))) { Asn1AddRequest tmpAddRequest; Asn1AddRequest.Decode(reader, new Asn1Tag(TagClass.Application, 8), out tmpAddRequest); decoded.AddRequest = tmpAddRequest; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 9))) { Asn1LDAPResult tmpAddResponse; Asn1LDAPResult.Decode(reader, new Asn1Tag(TagClass.Application, 9), out tmpAddResponse); decoded.AddResponse = tmpAddResponse; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 10))) { if (reader.TryGetPrimitiveOctetStringBytes(new Asn1Tag(TagClass.Application, 10), out ReadOnlyMemory <byte> tmpDelRequest)) { decoded.DelRequest = tmpDelRequest; } else { decoded.DelRequest = reader.ReadOctetString(new Asn1Tag(TagClass.Application, 10)); } } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 11))) { Asn1LDAPResult tmpDelResponse; Asn1LDAPResult.Decode(reader, new Asn1Tag(TagClass.Application, 11), out tmpDelResponse); decoded.DelResponse = tmpDelResponse; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 12))) { Asn1ModifyDNRequest tmpModifyDNRequest; Asn1ModifyDNRequest.Decode(reader, new Asn1Tag(TagClass.Application, 12), out tmpModifyDNRequest); decoded.ModifyDNRequest = tmpModifyDNRequest; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 13))) { Asn1LDAPResult tmpModifyDNResponse; Asn1LDAPResult.Decode(reader, new Asn1Tag(TagClass.Application, 13), out tmpModifyDNResponse); decoded.ModifyDNResponse = tmpModifyDNResponse; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 14))) { Asn1CompareRequest tmpCompareRequest; Asn1CompareRequest.Decode(reader, new Asn1Tag(TagClass.Application, 14), out tmpCompareRequest); decoded.CompareRequest = tmpCompareRequest; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 15))) { Asn1LDAPResult tmpCompareResponse; Asn1LDAPResult.Decode(reader, new Asn1Tag(TagClass.Application, 15), out tmpCompareResponse); decoded.CompareResponse = tmpCompareResponse; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 16))) { if (reader.TryReadInt32(new Asn1Tag(TagClass.Application, 16), out int tmpAbandonRequest)) { decoded.AbandonRequest = tmpAbandonRequest; } else { reader.ThrowIfNotEmpty(); } } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 23))) { Asn1ExtendedRequest tmpExtendedRequest; Asn1ExtendedRequest.Decode(reader, new Asn1Tag(TagClass.Application, 23), out tmpExtendedRequest); decoded.ExtendedRequest = tmpExtendedRequest; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 24))) { Asn1ExtendedResponse tmpExtendedResponse; Asn1ExtendedResponse.Decode(reader, new Asn1Tag(TagClass.Application, 24), out tmpExtendedResponse); decoded.ExtendedResponse = tmpExtendedResponse; } else if (tag.HasSameClassAndValue(new Asn1Tag(TagClass.Application, 25))) { Asn1IntermediateResponse tmpIntermediateResponse; Asn1IntermediateResponse.Decode(reader, new Asn1Tag(TagClass.Application, 25), out tmpIntermediateResponse); decoded.IntermediateResponse = tmpIntermediateResponse; } else { throw new CryptographicException(); } }