public override int BerDecode(IAsn1DecodingBuffer buffer, bool explicitTag = true)
        {
            Asn1Tag asn1Tag;
            int     headLen = 0, valueLen = 0, tagLength = 0;

            if (explicitTag)
            {
                headLen += TagBerDecode(buffer, out asn1Tag);
                headLen += LengthBerDecode(buffer, out valueLen);
            }

            int valueLenDecode = 0;

            messageID       = new MessageID();
            valueLenDecode += messageID.BerDecode(buffer, true);
            protocolOp      = new LDAPMessage_protocolOp();
            valueLenDecode += protocolOp.BerDecode(buffer, true);

            asn1Tag = new Asn1Tag(Asn1TagType.Context, 0)
            {
                EncodingWay = EncodingWay.Constructed
            };
            if (IsTagMatch(buffer, asn1Tag, out tagLength, true))
            {
                controls        = new Controls();
                valueLenDecode += controls.BerDecode(buffer, false);
            }
            valueLenDecode += tagLength;

            return(headLen + valueLenDecode);
        }
        public override int BerDecode(IAsn1DecodingBuffer buffer, bool explicitTag = true)
        {
            int headLen = 0;
            Asn1Tag seqTag;
            headLen += TagBerDecode(buffer, out seqTag);
            int valueLen;
            headLen += LengthBerDecode(buffer, out valueLen);

            int valueLenDecode = 0;
            messageID = new MessageID();
            valueLenDecode += messageID.BerDecode(buffer);
            protocolOp = new LDAPMessage_protocolOp();
            valueLenDecode += protocolOp.BerDecode(buffer);
            if (valueLenDecode == valueLen)
            {
                controls = null;
            }
            else
            {
                Asn1Tag contextTag;
                valueLenDecode += TagBerDecode(buffer, out contextTag);
                controls = new Controls();
                valueLenDecode += controls.BerDecodeWithoutUnisersalTag(buffer);
            }
            if (valueLen != valueLenDecode)
            {
                throw new Asn1DecodingUnexpectedData(ExceptionMessages.DecodingUnexpectedData + " LDAPResult.");
            }
            return headLen + valueLen;
        }
        public override int BerDecode(IAsn1DecodingBuffer buffer, bool explicitTag = true)
        {
            int     headLen = 0;
            Asn1Tag seqTag;

            headLen += TagBerDecode(buffer, out seqTag);
            int valueLen;

            headLen += LengthBerDecode(buffer, out valueLen);

            int valueLenDecode = 0;

            messageID       = new MessageID();
            valueLenDecode += messageID.BerDecode(buffer);
            protocolOp      = new LDAPMessage_protocolOp();
            valueLenDecode += protocolOp.BerDecode(buffer);
            if (valueLenDecode == valueLen)
            {
                controls = null;
            }
            else
            {
                Asn1Tag contextTag;
                valueLenDecode += TagBerDecode(buffer, out contextTag);
                controls        = new Controls();
                valueLenDecode += controls.BerDecodeWithoutUnisersalTag(buffer);
            }
            if (valueLen != valueLenDecode)
            {
                throw new Asn1DecodingUnexpectedData(ExceptionMessages.DecodingUnexpectedData + " LDAPResult.");
            }
            return(headLen + valueLen);
        }