{
return DefaultConnectFuture.newFailedFuture(
new IOException( "Endpoint unavailable: " + address ) );
}
DefaultConnectFuture future = new DefaultConnectFuture();
VmPipeSessionImpl localSession =
new VmPipeSessionImpl(
this,
config,
getListeners(),
new Object(), // lock
new AnonymousSocketAddress(),
handler,
entry );
// initialize acceptor session
VmPipeSessionImpl remoteSession = localSession.getRemoteSession();
try
{
IoFilterChain filterChain = remoteSession.getFilterChain();
entry.getAcceptor().getFilterChainBuilder().buildFilterChain( filterChain );
entry.getConfig().getFilterChainBuilder().buildFilterChain( filterChain );
entry.getConfig().getThreadModel().buildFilterChain( filterChain );
// The following sentences don't throw any exceptions.
entry.getListeners().fireSessionCreated( remoteSession );
VmPipeIdleStatusChecker.getInstance().addSession( remoteSession );
}
catch( Throwable t )
{
ExceptionMonitor.getInstance().exceptionCaught( t );
remoteSession.close();
}
// initialize connector session
try
{
IoFilterChain filterChain = localSession.getFilterChain();
this.getFilterChainBuilder().buildFilterChain( filterChain );
config.getFilterChainBuilder().buildFilterChain( filterChain );
config.getThreadModel().buildFilterChain( filterChain );
// The following sentences don't throw any exceptions.
localSession.setAttribute( AbstractIoFilterChain.CONNECT_FUTURE, future );
getListeners().fireSessionCreated( localSession );
VmPipeIdleStatusChecker.getInstance().addSession( localSession);
}
catch( Throwable t )
{
future.setException( t );
}
return future;