in protonj2/src/main/java/org/apache/qpid/protonj2/engine/impl/ProtonReceiver.java [387:439]
protected final ProtonIncomingDelivery handleRemoteTransfer(Transfer transfer, ProtonBuffer payload) {
final ProtonIncomingDelivery delivery;
if (!currentDeliveryId.isEmpty() && (!transfer.hasDeliveryId() || currentDeliveryId.equals((int) transfer.getDeliveryId()))) {
delivery = unsettled.get(currentDeliveryId.intValue());
} else {
verifyNewDeliveryIdSequence(transfer, currentDeliveryId);
delivery = new ProtonIncomingDelivery(this, transfer.getDeliveryId(), transfer.getDeliveryTag());
delivery.setMessageFormat((int) transfer.getMessageFormat());
unsettled.put((int) transfer.getDeliveryId(), delivery);
currentDeliveryId.set((int) transfer.getDeliveryId());
}
if (transfer.hasState()) {
delivery.remoteState(transfer.getState());
}
if (transfer.getSettled() || transfer.getAborted()) {
delivery.remotelySettled();
}
if (payload != null) {
delivery.appendTransferPayload(payload);
}
final boolean done = transfer.getAborted() || !transfer.getMore();
if (done) {
getCreditState().decrementCredit();
getCreditState().incrementDeliveryCount();
currentDeliveryId.reset();
if (transfer.getAborted()) {
delivery.aborted();
} else {
delivery.completed();
}
}
if (transfer.getAborted()) {
signalDeliveryAborted(delivery);
} else {
signalDeliveryRead(delivery);
}
if (isDraining() && getCredit() == 0) {
drainStateSnapshot = null;
signalLinkCreditStateUpdated();
}
return delivery;
}