public void receiveAttach(final Attach attach) { receivedComplete(); if(_sessionState == SessionState.ACTIVE) { UnsignedInteger inputHandle = attach.getHandle(); if (_inputHandleToEndpoint.containsKey(inputHandle)) { String errorMessage = String.format("Input Handle '%d' already in use", inputHandle.intValue()); getConnection().close(new Error(SessionError.HANDLE_IN_USE, errorMessage)); throw new ConnectionScopedRuntimeException(errorMessage); } else { final Link_1_0<? extends BaseSource, ? extends BaseTarget> link; if (attach.getRole() == Role.RECEIVER) { link = getAddressSpace().getSendingLink(getConnection().getRemoteContainerId(), attach.getName()); } else { link = getAddressSpace().getReceivingLink(getConnection().getRemoteContainerId(), attach.getName()); } final ListenableFuture<? extends LinkEndpoint<?,?>> future = link.attach(this, attach); addFutureCallback(future, new EndpointCreationCallback(attach), MoreExecutors.directExecutor()); } } }