View Javadoc

1   package org.eparapher.core.crypto.keystore.smartcard;
2   
3   import org.apache.log4j.Logger;
4   import org.eparapher.core.crypto.EPKeystoreManager;
5   import org.eparapher.core.crypto.keystore.HardwareKeyStore;
6   import org.eparapher.core.crypto.keystore.IUserKeystore;
7   
8   
9   /**
10   * This "Token Tracking Thread" aim to detect the insert/eject event of the token.
11   * You can specify the time 
12   * @author Arnault MICHEL
13   *
14   */
15  public class TrackingThread extends Thread {
16  	
17  	private static Logger log = Logger.getLogger(TrackingThread.class);
18  
19  	
20  	private boolean tokenTracking;
21  	private HardwareKeyStore usertoken;
22  	private long sleeptime = 500L;
23  
24  	/**
25  	 * Initialize the Thread
26  	 * 
27  	 * @param msleepTime time in millisecond between each token presence check
28  	 */
29  	public TrackingThread(long msleepTime) {
30  		
31  		this.tokenTracking = false;
32  		this.setSleeptime(msleepTime);
33  		this.setName("Token Traking Thread");
34  		
35  		IUserKeystore myuserkeystore = EPKeystoreManager.getInstance().getUserkeystore();
36  		if (myuserkeystore instanceof HardwareKeyStore) {
37  			usertoken = (HardwareKeyStore) myuserkeystore;
38  			if (usertoken.isPkcs11BridgeLoaded())
39  				this.tokenTracking = true;
40  		} else log.warn("Error on Token Tracking Thread : usertoken is not a HardwareKeyStore");
41  	}
42  
43  	public void run() {
44  
45  		while ( this.tokenTracking ) {
46  			
47  			long start = System.currentTimeMillis();
48  			usertoken.loadKeyStore();
49  			long stop = System.currentTimeMillis();
50  
51  			log.debug("Tracking thread loop in " + (stop-start) + " ms");
52  			
53  			try {
54  				// Thread sleep
55  				Thread.sleep(sleeptime);
56  			} catch (InterruptedException e) {
57  				log.error("Error while thread sleeping: "+e.getLocalizedMessage(),e);
58  			}
59  		}
60  	}
61  
62  	public long getSleeptime() {
63  		return sleeptime;
64  	}
65  
66  	public void setSleeptime(long sleeptime) {
67  		this.sleeptime = sleeptime;
68  	}
69  
70  	public void setTrackingSmartCard(boolean mtrackingToken) {
71  		this.tokenTracking = mtrackingToken;
72  	}
73  
74  }