// Called in proton goroutine on MMessage event. func (r *receiver) message(delivery proton.Delivery) { if r.eLink.State().RemoteClosed() { localClose(r.eLink, r.eLink.RemoteCondition().Error()) return } if delivery.HasMessage() { m, err := delivery.Message() if err != nil { localClose(r.eLink, err) return } assert(m != nil) r.eLink.Advance() if r.eLink.Credit() < 0 { localClose(r.eLink, fmt.Errorf("received message in excess of credit limit")) } else { // We never issue more credit than cap(buffer) so this will not block. r.buffer <- ReceivedMessage{m, delivery, r} } } }
// Called in proton goroutine func (r *receiver) handleDelivery(delivery proton.Delivery) { // FIXME aconway 2015-09-24: how can this happen if we are remote closed? if r.eLink.State().RemoteClosed() { localClose(r.eLink, r.eLink.RemoteCondition().Error()) return } if delivery.HasMessage() { m, err := delivery.Message() if err != nil { localClose(r.eLink, err) return } internal.Assert(m != nil) r.eLink.Advance() if r.eLink.Credit() < 0 { localClose(r.eLink, internal.Errorf("received message in excess of credit limit")) } else { // We never issue more credit than cap(buffer) so this will not block. r.buffer <- ReceivedMessage{m, delivery, r} } } }