private bool waitForReply_Renamed_Field = true; // true if wait for reply #endregion Fields #region Constructors internal Message(LdapMessage msg, int mslimit, Connection conn, MessageAgent agent, LdapMessageQueue queue, BindProperties bindprops) { InitBlock(); this.msg = msg; this.conn = conn; this.agent = agent; this.queue = queue; this.mslimit = mslimit; this.msgId = msg.MessageID; this.bindprops = bindprops; return ; }
//************************************************************************* // helper methods //************************************************************************* /// <summary> Locates the appropriate message agent and sends /// the Ldap request to a directory server. /// /// </summary> /// <param name="msg">the message to send /// /// </param> /// <param name="timeout">the timeout value /// /// </param> /// <param name="queue">the response queue or null /// /// </param> /// <returns> the LdapResponseQueue for this request /// /// </returns> /// <exception> LdapException A general exception which includes an error /// message and an Ldap error code. /// </exception> private LdapResponseQueue SendRequestToServer(LdapMessage msg, int timeout, LdapResponseQueue queue, BindProperties bindProps) { MessageAgent agent; if (queue == null) { agent = new MessageAgent(); queue = new LdapResponseQueue(agent); } else { agent = queue.MessageAgent; } agent.sendMessage(conn, msg, timeout, queue, bindProps); return queue; }
/// <summary> Asynchronously performs the search specified by the parameters, /// also allowing specification of constraints for the search (such /// as the maximum number of entries to find or the maximum time to /// wait for search results). /// /// </summary> /// <param name="base"> The base distinguished name to search from. /// /// </param> /// <param name="scope"> The scope of the entries to search. The following /// are the valid options: /// <ul> /// <li>SCOPE_BASE - searches only the base DN</li> /// /// <li>SCOPE_ONE - searches only entries under the base DN</li> /// /// <li>SCOPE_SUB - searches the base DN and all entries /// within its subtree</li> /// </ul> /// </param> /// <param name="filter"> The search filter specifying the search criteria. /// /// </param> /// <param name="attrs"> The names of attributes to retrieve. /// /// </param> /// <param name="typesOnly"> If true, returns the names but not the values of /// the attributes found. If false, returns the /// names and values for attributes found. /// /// </param> /// <param name="queue"> The queue for messages returned from a server in /// response to this request. If it is null, a /// queue object is created internally. /// /// </param> /// <param name="cons"> The constraints specific to the search. /// /// </param> /// <exception> LdapException A general exception which includes an error /// message and an Ldap error code. /// </exception> public virtual LdapSearchQueue Search(System.String base_Renamed, int scope, System.String filter, System.String[] attrs, bool typesOnly, LdapSearchQueue queue, LdapSearchConstraints cons) { if ((System.Object) filter == null) { filter = "objectclass=*"; } if (cons == null) cons = defSearchCons; LdapMessage msg = new LdapSearchRequest(base_Renamed, scope, filter, attrs, cons.Dereference, cons.MaxResults, cons.ServerTimeLimit, typesOnly, cons.getControls()); MessageAgent agent; LdapSearchQueue myqueue = queue; if (myqueue == null) { agent = new MessageAgent(); myqueue = new LdapSearchQueue(agent); } else { agent = queue.MessageAgent; } try { agent.sendMessage(conn, msg, cons.TimeLimit, myqueue, null); } catch (LdapException lex) { throw lex; } return myqueue; }
/// <summary> Sends an Ldap request to a directory server. /// /// The specified the Ldap request is sent to the directory server /// associated with this connection. An Ldap request object is an /// {@link LdapMessage} with the operation type set to one of the request /// types. You can build a request by using the request classes found in this /// package /// /// You should note that, since Ldap requests sent to the server /// using sendRequest are asynchronous, automatic referral following /// does not apply to these requests. /// /// </summary> /// <param name="request">The Ldap request to send to the directory server. /// </param> /// <param name="queue"> The queue for messages returned from a server in /// response to this request. If it is null, a /// queue object is created internally. /// </param> /// <param name="cons"> The constraints that apply to this request /// </param> /// <exception> LdapException A general exception which includes an error /// message and an Ldap error code. /// /// </exception> /// <seealso cref="LdapMessage.Type"> /// </seealso> /// <seealso cref="RfcLdapMessage.isRequest"> /// </seealso> public virtual LdapMessageQueue SendRequest(LdapMessage request, LdapMessageQueue queue, LdapConstraints cons) { if (!request.Request) { throw new System.SystemException("Object is not a request message"); } if (cons == null) { cons = defSearchCons; } // Get the correct queue for a search request MessageAgent agent; LdapMessageQueue myqueue = queue; if (myqueue == null) { agent = new MessageAgent(); if (request.Type == LdapMessage.SEARCH_REQUEST) { myqueue = new LdapSearchQueue(agent); } else { myqueue = new LdapResponseQueue(agent); } } else { if (request.Type == LdapMessage.SEARCH_REQUEST) { agent = queue.MessageAgent; } else { agent = queue.MessageAgent; } } try { agent.sendMessage(conn, request, cons.TimeLimit, myqueue, null); } catch (LdapException lex) { throw lex; } return myqueue; }
/// <summary> Constructs a response queue using the specified message agent /// /// </summary> /// <param name="agent">The message agent to associate with this conneciton /// </param> /* package */ internal LdapMessageQueue(System.String myname, MessageAgent agent) { // Get a unique connection name for debug this.agent = agent; return; }
/// <summary> /// Constructs a response queue using the specified message agent. /// </summary> /// <param name="agent"> /// The message agent to associate with this conneciton. /// </param> internal LdapMessageQueue(string myname, MessageAgent agent) { Agent = agent; }
/// <summary> Constructs a response queue using a specific client queue /// /// </summary> /// <param name="agent">The message agent to associate with this queue /// </param> /* package */ internal LdapSearchQueue(MessageAgent agent) : base("LdapSearchQueue", agent) { return; }
/// <summary> merges two message agents /// /// </summary> /// <param name="fromAgent">the agent to be merged into this one /// </param> /* package */ internal void merge(MessageAgent fromAgent) { System.Object[] msgs = fromAgent.MessageArray; for (int i = 0; i < msgs.Length; i++) { messages.Add(msgs[i]); ((Message) (msgs[i])).Agent = this; } lock (messages) { if (msgs.Length > 1) { System.Threading.Monitor.PulseAll(messages); // wake all threads waiting for messages } else if (msgs.Length == 1) { System.Threading.Monitor.Pulse(messages); // only wake one thread } } return ; }
/// <summary> Constructs a response queue using the specified message agent /// /// </summary> /// <param name="agent">The message agent to associate with this conneciton /// </param> /* package */ internal LdapMessageQueue(string myname, MessageAgent agent) { // Get a unique connection name for debug this.agent = agent; }
/// <summary> Constructs a response queue using the specified message agent /// /// </summary> /// <param name="agent">The message agent to associate with this conneciton /// </param> /* package */ internal LdapMessageQueue(System.String myname, MessageAgent agent) { // Get a unique connection name for debug this.agent = agent; return ; }
/// <summary> Constructs a response queue using the specified message agent /// /// </summary> /// <param name="agent">The message agent to associate with this queue /// </param> /* package */ internal LdapResponseQueue(MessageAgent agent) : base("LdapResponseQueue", agent) { return; }
/// <summary> Constructs a response queue using the specified message agent /// /// </summary> /// <param name="agent">The message agent to associate with this queue /// </param> /* package */ internal LdapResponseQueue(MessageAgent agent):base("LdapResponseQueue", agent) { return ; }
/// <summary> Constructs a response queue using a specific client queue /// /// </summary> /// <param name="agent">The message agent to associate with this queue /// </param> /* package */ internal LdapSearchQueue(MessageAgent agent) : base("LdapSearchQueue", agent) { return ; }