in client/src/main/java/org/apache/qpid/transport/Connection.java [218:300]
public void connect(ConnectionSettings settings)
{
synchronized (lock)
{
conSettings = settings;
_redirecting.set(false);
state = OPENING;
connectionLost.set(false);
securityLayer = SecurityLayerFactory.newInstance(getConnectionSettings());
IoNetworkTransport transport = new IoNetworkTransport();
final InputHandler inputHandler = new InputHandler(new Assembler(this));
addFrameSizeObserver(inputHandler);
ExceptionHandlingByteBufferReceiver secureReceiver = securityLayer.receiver(inputHandler);
if(secureReceiver instanceof ConnectionListener)
{
addConnectionListener((ConnectionListener)secureReceiver);
}
_networkConnection = transport.connect(settings, secureReceiver, new ConnectionActivity());
setRemoteAddress(_networkConnection.getRemoteAddress());
setLocalAddress(_networkConnection.getLocalAddress());
final ByteBufferSender secureSender = securityLayer.sender(_networkConnection.getSender());
if(secureSender instanceof ConnectionListener)
{
addConnectionListener((ConnectionListener)secureSender);
}
Disassembler disassembler = new Disassembler(secureSender, Constant.MIN_MAX_FRAME_SIZE);
sender = disassembler;
addFrameSizeObserver(disassembler);
send(new ProtocolHeader(1, 0, 10));
Waiter w = new Waiter(lock, timeout);
while (w.hasTime() && ((state == OPENING && error == null) || isRedirecting()))
{
w.await();
}
if (error != null)
{
ConnectionException t = error;
error = null;
try
{
close();
}
catch (ConnectionException ce)
{
if (!(t instanceof ProtocolVersionException))
{
throw ce;
}
}
t.rethrow();
}
switch (state)
{
case OPENING:
close();
throw new ConnectionException("connect() timed out");
case OPEN:
case RESUMING:
connectionLost.set(false);
break;
case CLOSED:
throw new ConnectionException("connect() aborted");
default:
throw new IllegalStateException(String.valueOf(state));
}
}
for (ConnectionListener listener: listeners)
{
listener.opened(this);
}
}