// receive the HandshakeCompletedEvent with a HandshakeRepeater and, if the event
// arrives within 60 seconds, we pass it on to the configured listener. Otherwise,
// HandshakeRepeater.waitForHandshake() will throw an SSLException.
Object obj = configuration.get(Client.HANDSHAKE_COMPLETED_LISTENER);
HandshakeCompletedListener externalListener = null;
HandshakeRepeater internalListener = null;
if (obj != null && obj instanceof HandshakeCompletedListener)
{
externalListener = (HandshakeCompletedListener) obj;
internalListener = new HandshakeRepeater(new InternalHandshakeListener());
configuration.put(Multiplex.SSL_HANDSHAKE_LISTENER, internalListener);
}
VirtualSocket socket = new VirtualSocket(configuration);
if (bindAddress != null)
socket.connect(csa, bsa, timeout);
else
socket.connect(csa, timeout);
MultiplexingManager manager = socket.getManager();
if (externalListener != null)
{
if (manager.getHandshakeCompletedEvent() != null)
{
externalListener.handshakeCompleted(manager.getHandshakeCompletedEvent());
}
else
{
internalListener.waitForHandshake();
externalListener.handshakeCompleted(handshakeCompletedEvent);
}
}
if (!manager.waitForRemoteServerSocketRegistered())