Controls ::= SEQUENCE OF Control
/// <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); } }
/// <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); } }
/// <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 ; }
/// <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 ; }
/// <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); }