/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package jade.imtp.leap.nio;
//#J2ME_EXCLUDE_FILE
import jade.imtp.leap.ICPException;
import java.io.IOException;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
/**
* This class provides a nio based server connection for which ssl can be configured. A {@link SSLEngine} is used
* for dealing with handshaking and encrypting/decrypting application data. The superclass does the actual
* {@link #fillHeader(java.nio.ByteBuffer) reading} (also {@link #fillPayload(java.nio.ByteBuffer)}),
* and {@link #writeToChannel(java.nio.ByteBuffer) writing} from the SocketChannel and handles the application data.
*
* @see SSLContext
* @author eduard
*/
public class NIOJICPSConnection extends NIOJICPConnection {
private SSLEngineHelper helper = null;
private static Logger log = Logger.getLogger(NIOJICPSConnection.class.getName());
public NIOJICPSConnection() {
}
/**
* Initializes this connection by setting a {@link SSLEngineHelper } and calling the super.
*
* @see SSLEngineHelper
* @param key the Selection key provided by the {@link Selector}.
* @throws ICPException
*/
@Override
void init(SocketChannel channel) throws ICPException {
super.init(channel);
if (log.isLoggable(Level.FINE)) {
log.fine("initialize ssl tooling");
}
helper = new SSLEngineHelper(getRemoteHost(), channel.socket().getPort(), this);
addBufferTransformer(helper);
}
/**
* first try to send ssl close packet, then close channel
* @throws IOException
*/
@Override
public void close() throws IOException {
try {
helper.close();
} catch (IOException ex) {
}
super.close();
}
}