Is there a simple way for me to detect when the ssl handshake completes?
Using standard blocking io I would add something like
SSLSocket socket = ..
socket.addHandshakeCompletedListener(new HandshakeCompletedListener() {
public void handshakeCompleted(HandshakeCompletedEvent event) {
//handle
}
});
Now Im doing something like the below in my IoHandler but it doesn't
feel right and it blocks during the sessionOpened event. Does anyone
know of some other alternative?
public void sessionOpened(IoSession session) throws Exception {
setSessionOpened(session);
IoFilter filter = session.getFilterChain().get("TLS");
if (filter instanceof SslFilter) {
logger.debug("Waiting for client {0} to complete
handshake", session);
SslFilter sslFilter = (SslFilter) filter;
Timeout clientMustInitateHandshake = new
Timeout(HANDSHAKE_TIMEOUT_MS);
while (null ==
session.getAttribute(SslFilter.SESSION_SECURED) &&
!clientMustInitateHandshake
.isTimedout()) {
Thread.sleep(5L);
}
if (null ==
session.getAttribute(SslFilter.SESSION_SECURED)) {
//no handshake
}else
{
//handshake complete
}
--
Daniel