Worker.java revision d81978a0815d5b8a75633c35e3e1f8708d36f017
// CDDL HEADER START
//
// The contents of this file are subject to the terms of the
// Common Development and Distribution License, Version 1.0 only
// (the "License"). You may not use this file except in compliance
// with the License.
//
// You can obtain a copy of the license at
// trunk/opends/resource/legal-notices/OpenDS.LICENSE
// or https://OpenDS.dev.java.net/OpenDS.LICENSE.
// See the License for the specific language governing permissions
// and limitations under the License.
//
// When distributing Covered Code, include this CDDL HEADER in each
// file and include the License file at
// trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
// add the following below this CDDL HEADER, with the fields enclosed
// information:
// Portions Copyright [yyyy] [name of copyright owner]
//
// CDDL HEADER END
//
//
// Copyright 2008 Sun Microsystems, Inc.
import java.util.*;
import java.io.*;
import java.lang.Thread;
import javax.naming.*;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.directory.Attributes;
import javax.naming.directory.Attribute;
import javax.naming.Context;
import javax.naming.ldap.*;
import javax.naming.ldap.StartTlsResponse;
import javax.naming.ldap.StartTlsRequest;
import javax.net.ssl.*;
public class Worker extends Thread {
Server server;
Client client;
long myId = this.getId();
public Worker(Client client2, Server server2) {
super();
try {
server = server2;
client = client2;
start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
try {
LdapContext ctx = null;
StartTlsResponse tls = null;
// Set the properties
Hashtable envLdap = client.set_properties_LDAP();
// the thread is waiting the main to wake up
client.inc_thread_ready();
println("INFO","THREAD " + myId + " is wake up for test");
while (true) {
// no sasl authentication
// use a random DN to bind
if ( client.authentication.equals("simple")) {
String bindDN=(String) client.DNList.get(client.random.nextInt(client.DNList.size()));
String bindPW="userpassword";
envLdap.put(Context.SECURITY_PRINCIPAL, bindDN);
envLdap.put(Context.SECURITY_CREDENTIALS, bindPW);
}
// bind
ctx = new InitialLdapContext(envLdap,null);
if ( client.protocol.equals("starttls")) {
// Start TLS
tls = (StartTlsResponse) ctx.extendedOperation(new StartTlsRequest());
SSLSession sess = tls.negotiate();
ctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, client.authentication);
}
//String filter = "(objectclass=*)";
SearchControls constraints = new SearchControls();
String[] returnattrs = {client.attributeName};
constraints.setReturningAttributes(returnattrs);
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
while (true) {
try {
String searchDN=(String) client.suffix;
String filter="uid="+(String) client.uidList.get(client.random.nextInt(client.uidList.size()));
// if the Max_nb_search is reached, counters are initialized
// disconnect cnx
// Wait the main to wake up
if ( client.nb_srchs_started_reached() == false) {
// Search entries
NamingEnumeration results = ctx.search(searchDN, filter, constraints);
while (results != null && results.hasMore()) {
SearchResult res = (SearchResult) results.next();
Attributes uidAttrs = res.getAttributes();
}
results.close();
client.inc_srchs_done();
} else {
if ( client.protocol.equals("starttls")) {
tls.close();
}
ctx.close();
client.thread_go_to_sleep();
break;
}
} catch (Exception ex) {
println("INFO","THREAD " + myId + " ERROR " + ex);
}
// update the total number of searchs
client.inc_srchs_done();
}
}
} catch (Exception e) {
println("INFO","THREAD " + myId + " ERROR " + e);
e.printStackTrace();
System.exit(1);
}
}
private String getDate() {
// Initialize the today's date string
String DATE_FORMAT = "yyyy/MM/dd:HH:mm:ss";
java.text.SimpleDateFormat sdf =
new java.text.SimpleDateFormat(DATE_FORMAT);
Calendar c1 = Calendar.getInstance(); // today
return("[" + sdf.format(c1.getTime()) + "]");
}
private void println(String level, String msg) {
System.out.println(getDate() + " - " + level + ": (" + server + ") " + msg );
}
}