Represents Ldap Contreols.
 Controls ::= SEQUENCE OF Control 
Наследование: Novell.Directory.Ldap.Asn1.Asn1SequenceOf
Пример #1
0
        /// <summary> Create an RfcLdapMessage response from input parameters.</summary>
        public RfcLdapMessage(Asn1Sequence op, RfcControls controls) : base(3)
        {
            this.op       = op;
            this.controls = controls;

            add(new RfcMessageID()); // MessageID has static counter
            add(op);
            if (controls != null)
            {
                add(controls);
            }
        }
Пример #2
0
        /// <summary> Create an RfcLdapMessage request from input parameters.</summary>
        public RfcLdapMessage(RfcRequest op, RfcControls controls) : base(3)
        {
            this.op       = (Asn1Object)op;
            this.controls = controls;

            add(new RfcMessageID()); // MessageID has static counter
            add((Asn1Object)op);
            if (controls != null)
            {
                add(controls);
            }
        }
        /// <summary> Create an RfcLdapMessage request from input parameters.</summary>
        public RfcLdapMessage(IRfcRequest op, RfcControls controls)
            : base(3)
        {
            _op       = (Asn1Object)op;
            _controls = controls;

            Add(new RfcMessageId()); // MessageID has static counter
            Add((Asn1Object)op);
            if (controls != null)
            {
                Add(controls);
            }
        }
        /// <summary> Create an RfcLdapMessage response from input parameters.</summary>
        public RfcLdapMessage(Asn1Sequence op, RfcControls controls)
            : base(3)
        {
            _op       = op;
            _controls = controls;

            Add(new RfcMessageId()); // MessageID has static counter
            Add(op);
            if (controls != null)
            {
                Add(controls);
            }
        }
Пример #5
0
        /// <summary> Creates an LdapMessage when sending a protocol operation and sends
        /// some optional controls with the message.
        /// 
        /// </summary>
        /// <param name="op">The operation type of message.
        /// 
        /// </param>
        /// <param name="controls">The controls to use with the operation.
        /// 
        /// </param>
        /// <seealso cref="Type">
        /// </seealso>
        /*package*/
        internal LdapMessage(int type, RfcRequest op, LdapControl[] controls)
        {
            // Get a unique number for this request message

            messageType = type;
            RfcControls asn1Ctrls = null;
            if (controls != null)
            {
                // Move LdapControls into an RFC 2251 Controls object.
                asn1Ctrls = new RfcControls();
                for (int i = 0; i < controls.Length; i++)
                {
            //					asn1Ctrls.add(null);
                    asn1Ctrls.add(controls[i].Asn1Object);
                }
            }

            // create RFC 2251 LdapMessage
            message = new RfcLdapMessage(op, asn1Ctrls);
            return ;
        }
Пример #6
0
        /// <summary> Create an RfcLdapMessage response from input parameters.</summary>
        public RfcLdapMessage(Asn1Sequence op, RfcControls controls)
            : base(3)
        {
            this.op = op;
            this.controls = controls;

            add(new RfcMessageID()); // MessageID has static counter
            add(op);
            if (controls != null)
            {
                add(controls);
            }
            return ;
        }
Пример #7
0
        /// <summary> Create an RfcLdapMessage request from input parameters.</summary>
        public RfcLdapMessage(RfcRequest op, RfcControls controls)
            : base(3)
        {
            this.op = (Asn1Object) op;
            this.controls = controls;

            add(new RfcMessageID()); // MessageID has static counter
            add((Asn1Object) op);
            if (controls != null)
            {
                add(controls);
            }
            return ;
        }
        public static async ValueTask <RfcLdapMessage> Decode(IAsn1Decoder dec, Stream inRenamed, int len, CancellationToken cancellationToken)
        {
            var message = new RfcLdapMessage(await DecodeStructured(dec, inRenamed, len, cancellationToken).ConfigureAwait(false));

            // Decode implicitly tagged protocol operation from an Asn1Tagged type
            // to its appropriate application type.
            var protocolOp   = (Asn1Tagged)message.get_Renamed(1);
            var protocolOpId = protocolOp.GetIdentifier();
            var content      = ((Asn1OctetString)protocolOp.TaggedValue).ByteValue();
            var bais         = new MemoryStream(content);

            switch (protocolOpId.Tag)
            {
            case LdapMessage.SearchResponse:
                message.set_Renamed(1, new RfcSearchResultEntry(await DecodeStructured(dec, bais, content.Length, cancellationToken).ConfigureAwait(false)));
                break;

            case LdapMessage.SearchResult:
                message.set_Renamed(1, await RfcLdapResult.Decode(dec, bais, content.Length, cancellationToken, newContent => new RfcSearchResultDone(newContent)).ConfigureAwait(false));
                break;

            case LdapMessage.SearchResultReference:
                message.set_Renamed(1, new RfcSearchResultReference(await DecodeStructured(dec, bais, content.Length, cancellationToken).ConfigureAwait(false)));
                break;

            case LdapMessage.AddResponse:
                message.set_Renamed(1, await RfcLdapResult.Decode(dec, bais, content.Length, cancellationToken, newContent => new RfcAddResponse(newContent)).ConfigureAwait(false));
                break;

            case LdapMessage.BindResponse:
                message.set_Renamed(1, await RfcBindResponse.Decode(dec, bais, content.Length, cancellationToken).ConfigureAwait(false));
                break;

            case LdapMessage.CompareResponse:
                message.set_Renamed(1, await RfcLdapResult.Decode(dec, bais, content.Length, cancellationToken, newContent => new RfcCompareResponse(newContent)).ConfigureAwait(false));
                break;

            case LdapMessage.DelResponse:
                message.set_Renamed(1, await RfcLdapResult.Decode(dec, bais, content.Length, cancellationToken, newContent => new RfcDelResponse(newContent)).ConfigureAwait(false));
                break;

            case LdapMessage.ExtendedResponse:
                message.set_Renamed(1, new RfcExtendedResponse(await DecodeStructured(dec, bais, content.Length, cancellationToken).ConfigureAwait(false)));
                break;

            case LdapMessage.IntermediateResponse:
                message.set_Renamed(1, new RfcIntermediateResponse(await DecodeStructured(dec, bais, content.Length, cancellationToken).ConfigureAwait(false)));
                break;

            case LdapMessage.ModifyResponse:
                message.set_Renamed(1, await RfcLdapResult.Decode(dec, bais, content.Length, cancellationToken, newContent => new RfcModifyResponse(newContent)).ConfigureAwait(false));
                break;

            case LdapMessage.ModifyRdnResponse:
                message.set_Renamed(1, await RfcLdapResult.Decode(dec, bais, content.Length, cancellationToken, newContent => new RfcModifyDnResponse(newContent)).ConfigureAwait(false));
                break;

            default:
                throw new Exception("RfcLdapMessage: Invalid tag: " + protocolOpId.Tag);
            }

            // decode optional implicitly tagged controls from Asn1Tagged type to
            // to RFC 2251 types.
            if (message.Size() > 2)
            {
                var controls = (Asn1Tagged)message.get_Renamed(2);

                // Asn1Identifier controlsId = protocolOp.getIdentifier();
                // we could check to make sure we have controls here....
                content = ((Asn1OctetString)controls.TaggedValue).ByteValue();
                bais    = new MemoryStream(content);
                message.set_Renamed(2, await RfcControls.Decode(dec, bais, content.Length, cancellationToken).ConfigureAwait(false));
            }

            return(message);
        }