def on_delivery(event)
if event.link.receiver?
d = event.delivery
if d.aborted?
delegate(:on_delivery_abort, d)
elsif d.complete?
if d.link.local_closed? && d.receiver.auto_accept
d.release
else
begin
delegate(:on_message, d, d.message)
d.accept if d.receiver.auto_accept && !d.settled?
rescue Reject
d.reject unless d.settled?
rescue Release
d.release unless d.settled?
end
end
end
delegate(:on_delivery_settle, d) if d.settled?
add_credit(event)
else
t = event.tracker
case t.state
when Delivery::ACCEPTED then delegate(:on_tracker_accept, t)
when Delivery::REJECTED then delegate(:on_tracker_reject, t)
when Delivery::RELEASED then delegate(:on_tracker_release, t)
when Delivery::MODIFIED then delegate(:on_tracker_modify, t)
end
delegate(:on_tracker_settle, t) if t.settled?
t.settle if t.sender.auto_settle
end
end