void OnTransfer(Transfer transfer, ByteBuffer buffer)
{
bool newDelivery;
lock (this.ThisLock)
{
this.nextIncomingId++;
this.incomingWindow--;
if (this.incomingWindow == 0)
{
this.SendFlow(new Flow());
}
newDelivery = transfer.HasDeliveryId && transfer.DeliveryId > this.incomingDeliveryId;
if (newDelivery)
{
this.incomingDeliveryId = transfer.DeliveryId;
}
}
Link link = this.GetLink(transfer.Handle);
Delivery delivery = null;
if (newDelivery)
{
delivery = new Delivery()
{
DeliveryId = transfer.DeliveryId,
Link = link,
Tag = transfer.DeliveryTag,
Settled = transfer.Settled,
State = transfer.State
};
if (!delivery.Settled)
{
lock (this.ThisLock)
{
this.incomingList.Add(delivery);
}
}
}
link.OnTransfer(delivery, transfer, buffer);
}