Package org.apache.qpid.proton.engine

# Interface Delivery

All Superinterfaces:
  `Extendable`

All Known Implementing Classes:
  `DeliveryImpl`

public interface Delivery extends Extendable
A delivery of a message on a particular link. Whilst a message is logically a long-lived object, a delivery is short-lived - it is only intended to be used by the application until it is settled and all its data has been read.

## Method Summary

Modifier and Type
Method
Description
`int`
`available()`
Returns the number of bytes currently available for this delivery, which may not be complete yet, that are still to either be received by the application or sent by the transport.
`void`
`clear()`
`void`
`disposition(DeliveryState state)`
updates the state of the delivery The new state may have no on-the-wire effect, if delivery settlement was already communicated to/from the peer.
`void`
`free()`
TODO When does an application call this method? Do we really need this?
`Object`
`getContext()`
`DeliveryState`
`getDefaultDeliveryState()`
`Link`
`getLink()`
`DeliveryState`
`getLocalState()`
`int`
`getMessageFormat()`
Gets the message-format for this Delivery, representing the 32bit value using an int.
`DeliveryState`
`getRemoteState()`
`byte[]`
`getTag()`
`Delivery`
`getWorkNext()`
`boolean`
`isAborted()`
Check for whether the delivery was aborted.
`boolean`
`isBuffered()`
`boolean`
`isPartial()`
Check for whether the delivery is still partial.
`boolean`
`isReadable()`
Returns whether this delivery has data ready to be received.
`boolean`
`isSettled()`
Returns whether this delivery has been settled.
`boolean`
`isUpdated()`
Returns whether this delivery's state or settled flag has ever remotely changed.
`boolean`
`isWritable()`
`Delivery`
`next()`
`int`
`pending()`
`boolean`
`remotelySettled()`
`void`
`setContext(Object o)`
`void`
`setDefaultDeliveryState(DeliveryState state)`
Configures a default DeliveryState to be used if a received delivery is settled/freed without any disposition state having been previously applied.
`void`
`setMessageFormat(int messageFormat)`
Sets the message-format for this Delivery, representing the 32bit value using an int.
`void`
`settle()`
Settles this delivery.

### Methods inherited from interface org.apache.qpid.proton.engine.Extendable

`attachments`

## Method Details

### getTag

byte[] getTag()

### getLink

Link getLink()

### getLocalState

DeliveryState getLocalState()

### getRemoteState

DeliveryState getRemoteState()

### disposition

void disposition(DeliveryState state)
updates the state of the delivery The new state may have no on-the-wire effect, if delivery settlement was already communicated to/from the peer.

Parameters:
  `state` - the new delivery state

### settle

void settle()
Settles this delivery. Causes the delivery to be removed from the connection's work list (see `Connection.getWorkHead()`). If this delivery is its link's current delivery, the link's current delivery pointer is advanced.

### isSettled

boolean isSettled()
Returns whether this delivery has been settled. TODO proton-j and proton-c return the local and remote statuses respectively. Resolve this ambiguity.

See Also:
  - `settle()`

### remotelySettled

boolean remotelySettled()

### free

void free()
TODO When does an application call this method? Do we really need this?

### getWorkNext

Delivery getWorkNext()

See Also:
  - `Connection.getWorkHead()`

### next

Delivery next()

### isWritable

boolean isWritable()

### isReadable

boolean isReadable()
Returns whether this delivery has data ready to be received.

See Also:
  - `Receiver.recv(byte[], int, int)`

### setContext

void setContext(Object o)

### getContext

Object getContext()

### isUpdated

boolean isUpdated()
Returns whether this delivery's state or settled flag has ever remotely changed. TODO what is the main intended use case for calling this method?

### clear

void clear()

### isPartial

boolean isPartial()
Check for whether the delivery is still partial. For a receiving Delivery, this means the delivery does not hold a complete message payload as all the content hasn't been received yet. Note that an `aborted` delivery will also be considered partial and the full payload won't be received. For a sending Delivery, this means the sender link has not been `advanced` to complete the delivery yet.

Returns:
  true if the delivery is partial
See Also:
  - `isAborted()`

### isAborted

boolean isAborted()
Check for whether the delivery was aborted.

Returns:
  true if the delivery was aborted.

### pending

int pending()

### isBuffered

boolean isBuffered()

### setDefaultDeliveryState

void setDefaultDeliveryState(DeliveryState state)
Configures a default DeliveryState to be used if a received delivery is settled/freed without any disposition state having been previously applied.

Parameters:
  `state` - the default delivery state

### getDefaultDeliveryState

DeliveryState getDefaultDeliveryState()

### setMessageFormat

void setMessageFormat(int messageFormat)
Sets the message-format for this Delivery, representing the 32bit value using an int. The default value is 0 as per the message format defined in the core AMQP 1.0 specification.

See the following for more details:
http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-transport-v1.0-os.html#type-transfer
http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-transport-v1.0-os.html#type-message-format
http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#section-message-format
http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#definition-MESSAGE-FORMAT

Parameters:
  `messageFormat` - the message format

### getMessageFormat

int getMessageFormat()
Gets the message-format for this Delivery, representing the 32bit value using an int.

Returns:
  the message-format
See Also:
  - `setMessageFormat(int)`

### available

int available()
Returns the number of bytes currently available for this delivery, which may not be complete yet, that are still to either be received by the application or sent by the transport. Note that this value will change as bytes are received/sent, and is in general not equal to the total length of a delivery, except the point where `isPartial()` returns false and no content has yet been received by the application or sent by the transport.

Returns:
  the number of bytes currently available for the delivery
See Also:
  - `Receiver.recv(byte[], int, int)`
  - `Receiver.recv(org.apache.qpid.proton.codec.WritableBuffer)`
  - `Sender.send(byte[], int, int)`
  - `Sender.send(org.apache.qpid.proton.codec.ReadableBuffer)`