Example #1
0
  /* package */
  void putReply(RfcLDAPMessage message) {
    if (!acceptReplies) {
      if (Debug.LDAP_DEBUG) {
        Debug.trace(Debug.messages, name + "not accepting replies, discarding reply");
      }
      return;
    }
    replies.addElement(message);
    message.setRequestingMessage(msg); // Save request message info
    switch (message.getType()) {
      case LDAPMessage.SEARCH_RESPONSE:
      case LDAPMessage.SEARCH_RESULT_REFERENCE:
      case LDAPMessage.INTERMEDIATE_RESPONSE:
        // SearchResultEntry or SearchResultReference
        if (Debug.LDAP_DEBUG) {
          Debug.trace(Debug.messages, name + "Reply Queued (" + replies.size() + " in queue)");
        }
        break;

      default:
        // All Responses with a result code
        int res;
        if (Debug.LDAP_DEBUG) {
          res = ((RfcResponse) message.getResponse()).getResultCode().intValue();
          Debug.trace(
              Debug.messages,
              name
                  + "Queued LDAPResult ("
                  + replies.size()
                  + " in queue), message complete stopping timer, status "
                  + res);
        }
        stopTimer();
        // Accept no more results for this message
        // Leave on connection queue so we can abandon if necessary
        acceptReplies = false;
        complete = true;
        if (bindprops != null) {
          if (Debug.LDAP_DEBUG) {
            Debug.trace(Debug.messages, name + "Bind properties found");
          }
          res = ((RfcResponse) message.getResponse()).getResultCode().intValue();
          if (res == LDAPException.SASL_BIND_IN_PROGRESS) {
            if (Debug.LDAP_DEBUG) {
              Debug.trace(Debug.messages, name + "Sasl Bind in-progress status");
            }
          } else {
            // We either have success or failure on the bind
            if (res == LDAPException.SUCCESS) {
              // Set bind properties into connection object
              conn.setBindProperties(bindprops);
              if (Debug.LDAP_DEBUG) {
                Debug.trace(Debug.messages, name + "Bind status success");
              }
            } else {
              if (Debug.LDAP_DEBUG) {
                Debug.trace(Debug.messages, name + "Bind status " + res);
              }
            }
            // If not a sasl bind in-progress, release the bind
            // semaphore and wake up all waiting threads
            int id;
            if (conn.isBindSemIdClear()) {
              // Semaphore id for normal operations
              id = msgId;
            } else {
              // Semaphore id for sasl bind
              id = conn.getBindSemId();
              conn.clearBindSemId();
            }
            conn.freeWriteSemaphore(id);
          }
        }
    }
    // wake up waiting threads
    sleepersAwake();
    return;
  }