void ProcessTransfer()

in src/AmqpLink.cs [800:853]


        void ProcessTransfer(Transfer transfer, Frame rawFrame, Delivery delivery, bool newDelivery)
        {
            if (newDelivery)
            {
                if (this.linkCredit < uint.MaxValue)
                {
                    bool creditAvailable = true;
                    lock (this.syncRoot)
                    {
                        // Updating new total credit is delayed to avoid flooding
                        // the network with flows when there are many links that are
                        // frequently opened/closed
                        if (this.tempTotalCredit != null &&
                            this.ApplyTempTotalLinkCredit())
                        {
                            this.SendFlow(false, false, properties: null);
                        }

                        if (this.linkCredit == 0 && this.bufferedCredit == 0)
                        {
                            creditAvailable = false;
                        }
                        else
                        {
                            this.deliveryCount.Increment();
                            if (this.bufferedCredit > 0)
                            {
                                --this.bufferedCredit;
                            }
                            else if (this.linkCredit < uint.MaxValue)
                            {
                                --this.linkCredit;
                            }
                        }
                    }

                    if (!creditAvailable)
                    {
                        throw new AmqpException(AmqpErrorCode.TransferLimitExceeded,
                            AmqpResources.GetString(AmqpResources.AmqpTransferLimitExceeded, delivery.DeliveryId.Value));
                    }
                }

                if (!delivery.Settled && !delivery.Aborted)
                {
                    lock (this.syncRoot)
                    {
                        this.UnsettledMap.Add(delivery.DeliveryTag, delivery);
                    }
                }
            }

            this.OnProcessTransfer(delivery, transfer, rawFrame);
        }