Package org.apache.qpid.proton.engine.impl

# Class LinkImpl

java.lang.Object
org.apache.qpid.proton.engine.impl.EndpointImpl
org.apache.qpid.proton.engine.impl.LinkImpl

All Implemented Interfaces:
  `Endpoint`, `Extendable`, `Link`, `ProtonJEndpoint`

Direct Known Subclasses:
  `ReceiverImpl`, `SenderImpl`

public abstract class LinkImpl extends EndpointImpl implements Link

## Method Summary

Modifier and Type
Method
Description
`void`
`addCredit(int credit)`
`boolean`
`advance()`
Attempts to advance the current delivery.
`DeliveryImpl`
`current()`
Returns the current delivery
`DeliveryImpl`
`delivery(byte[] tag)`
Create a delivery object based on the specified tag and adds it to the this link's delivery list and its connection work list.
`DeliveryImpl`
`delivery(byte[] tag, int offset, int length)`
Create a delivery object based on the specified tag.
`void`
`detach()`
`boolean`
`detached()`
`int`
`drained()`
`protected ConnectionImpl`
`getConnectionImpl()`
`int`
`getCredit()`
Gets the credit balance for a link.
`Symbol[]`
`getDesiredCapabilities()`
Gets the local link desired capabilities.
`boolean`
`getDrain()`
`UnsignedLong`
`getMaxMessageSize()`
Gets the local link max message size.
`String`
`getName()`
Returns the name of the link
`Symbol[]`
`getOfferedCapabilities()`
Gets the local link offered capabilities.
`Map<Symbol,Object>`
`getProperties()`
Gets the local link properties.
`int`
`getQueued()`
Gets the number of queued messages for a link.
`ReceiverSettleMode`
`getReceiverSettleMode()`
`Symbol[]`
`getRemoteDesiredCapabilities()`
Gets the remote link desired capabilities, as conveyed from the peer via the Attach frame when attaching the link to the session.
`UnsignedLong`
`getRemoteMaxMessageSize()`
Gets the remote link max message size, as conveyed from the peer via the Attach frame when attaching the link to the session.
`Symbol[]`
`getRemoteOfferedCapabilities()`
Gets the remote link offered capabilities, as conveyed from the peer via the Attach frame when attaching the link to the session.
`Map<Symbol,Object>`
`getRemoteProperties()`
Gets the remote link properties, as conveyed from the peer via the Attach frame when attaching the link to the session.
`ReceiverSettleMode`
`getRemoteReceiverSettleMode()`
`SenderSettleMode`
`getRemoteSenderSettleMode()`
`Source`
`getRemoteSource()`
`Target`
`getRemoteTarget()`
`SenderSettleMode`
`getSenderSettleMode()`
`SessionImpl`
`getSession()`
`Source`
`getSource()`
`Target`
`getTarget()`
`int`
`getUnsettled()`
`DeliveryImpl`
`head()`
Returns the head delivery on the link.
`Link`
`next(EnumSet<EndpointState> local, EnumSet<EndpointState> remote)`
`void`
`setCredit(int credit)`
`void`
`setDesiredCapabilities(Symbol[] desiredCapabilities)`
Sets the local link desired capabilities, to be conveyed to the peer via the Attach frame when attaching the link to the session.
`void`
`setMaxMessageSize(UnsignedLong maxMessageSize)`
Sets the local link max message size, to be conveyed to the peer via the Attach frame when attaching the link to the session.
`void`
`setOfferedCapabilities(Symbol[] offeredCapabilities)`
Sets the local link offered capabilities, to be conveyed to the peer via the Attach frame when attaching the link to the session.
`void`
`setProperties(Map<Symbol,Object> properties)`
Sets the local link properties, to be conveyed to the peer via the Attach frame when attaching the link to the session.
`void`
`setReceiverSettleMode(ReceiverSettleMode receiverSettleMode)`
Sets the receiver settle mode.
`void`
`setRemoteSenderSettleMode(SenderSettleMode remoteSenderSettleMode)`
TODO should this be part of the interface?
`void`
`setSenderSettleMode(SenderSettleMode senderSettleMode)`
Sets the sender settle mode.
`void`
`setSource(Source source)`
Sets the source for this link.
`void`
`setTarget(Target target)`
Expected to be used in a similar manner to `Link.setSource(Source)`

### Methods inherited from class org.apache.qpid.proton.engine.impl.EndpointImpl

`attachments, close, free, getCondition, getContext, getLocalState, getRemoteCondition, getRemoteState, open, setCondition, setContext`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

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

`close, free, getCondition, getContext, getLocalState, getRemoteCondition, getRemoteState, open, setCondition, setContext`

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

`attachments`

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

`getRemoteCredit`

## Method Details

### getName

public String getName()
Description copied from interface: `Link`
Returns the name of the link

Specified by:
  `getName` in interface `Link`
Returns:
  the link name

### delivery

public DeliveryImpl delivery(byte[] tag)
Description copied from interface: `Link`
Create a delivery object based on the specified tag and adds it to the this link's delivery list and its connection work list. TODO to clarify - this adds the delivery to the connection list. It is not yet clear why this is done or if it is useful for the application to be able to discover newly created deliveries from the `Connection.getWorkHead()`.

Specified by:
  `delivery` in interface `Link`
Parameters:
  `tag` - a tag for the delivery
Returns:
  a new Delivery object

### delivery

public DeliveryImpl delivery(byte[] tag, int offset, int length)
Description copied from interface: `Link`
Create a delivery object based on the specified tag. This form of the method is intended to allow the tag to be formed from a subsequence of the byte array passed in. This might allow more optimisation options in future but at present is not implemented.

Specified by:
  `delivery` in interface `Link`
Parameters:
  `tag` - a tag for the delivery
  `offset` - (currently ignored and must be 0)
  `length` - (currently ignored and must be the length of the `tag` array
Returns:
  a Delivery object

### current

public DeliveryImpl current()
Description copied from interface: `Link`
Returns the current delivery

Specified by:
  `current` in interface `Link`

### advance

public boolean advance()
Description copied from interface: `Link`
Attempts to advance the current delivery. Advances it to the next delivery if one exists, else null. The behaviour of this method is different for senders and receivers.

Specified by:
  `advance` in interface `Link`
Returns:
  true if it can advance, false if it cannot TODO document the meaning of the return value more fully. Currently Senderimpl only returns false if there is no current delivery

### getConnectionImpl

protected ConnectionImpl getConnectionImpl()

Specified by:
  `getConnectionImpl` in class `EndpointImpl`

### getSession

public SessionImpl getSession()

Specified by:
  `getSession` in interface `Link`

### getRemoteSource

public Source getRemoteSource()

Specified by:
  `getRemoteSource` in interface `Link`
See Also:
  - `Link.setSource(Source)`

### getRemoteTarget

public Target getRemoteTarget()

Specified by:
  `getRemoteTarget` in interface `Link`
See Also:
  - `Link.setTarget(Target)`

### getSource

public Source getSource()

Specified by:
  `getSource` in interface `Link`

### setSource

public void setSource(Source source)
Description copied from interface: `Link`
Sets the source for this link. The initiator of the link must always provide a Source. An application responding to the creation of the link should perform an application specific lookup on the `Link.getRemoteSource()` to determine an actual Source. If it failed to determine an actual source, it should set null, and then go on to `Endpoint.close()` the link.

Specified by:
  `setSource` in interface `Link`
See Also:
  - "AMQP Spec 1.0 section 2.6.3"

### getTarget

public Target getTarget()

Specified by:
  `getTarget` in interface `Link`

### setTarget

public void setTarget(Target target)
Description copied from interface: `Link`
Expected to be used in a similar manner to `Link.setSource(Source)`

Specified by:
  `setTarget` in interface `Link`

### next

public Link next(EnumSet<EndpointState> local, EnumSet<EndpointState> remote)

Specified by:
  `next` in interface `Link`

### getCredit

public int getCredit()
Description copied from interface: `Link`
Gets the credit balance for a link. Note that a sending link may still be used to send deliveries even if link credit is/reaches zero, however those deliveries will end up being `queued` by the link until enough credit is obtained from the receiver to send them over the wire. In this case the balance reported will go negative.

Specified by:
  `getCredit` in interface `Link`
Returns:
  the credit balance for the link

### addCredit

public void addCredit(int credit)

### setCredit

public void setCredit(int credit)

### getQueued

public int getQueued()
Description copied from interface: `Link`
Gets the number of queued messages for a link. Links may queue deliveries for a number of reasons, for example there may be insufficient `credit` to send them to the receiver, they may not have yet had a chance to be written to the wire, or the receiving application has simply not yet processed them.

Specified by:
  `getQueued` in interface `Link`
Returns:
  the queued message count for the link

### getUnsettled

public int getUnsettled()

Specified by:
  `getUnsettled` in interface `Link`

### getDrain

public boolean getDrain()

Specified by:
  `getDrain` in interface `Link`

### getSenderSettleMode

public SenderSettleMode getSenderSettleMode()

Specified by:
  `getSenderSettleMode` in interface `Link`

### setSenderSettleMode

public void setSenderSettleMode(SenderSettleMode senderSettleMode)
Description copied from interface: `Link`
Sets the sender settle mode. Should only be called during link set-up, i.e. before calling `Endpoint.open()`. If this endpoint is the initiator of the link, this method can be used to set a value other than the default. If this endpoint is not the initiator, this method should be used to set a local value. According to the AMQP spec, the application may choose to accept the sender's suggestion (accessed by calling `Link.getRemoteSenderSettleMode()`) or choose another value. The value has no effect on Proton, but may be useful to the application at a later point. In order to be AMQP compliant the application is responsible for honouring the settlement mode. See `Link`.

Specified by:
  `setSenderSettleMode` in interface `Link`

### getRemoteSenderSettleMode

public SenderSettleMode getRemoteSenderSettleMode()

Specified by:
  `getRemoteSenderSettleMode` in interface `Link`
See Also:
  - `Link.setSenderSettleMode(SenderSettleMode)`

### setRemoteSenderSettleMode

public void setRemoteSenderSettleMode(SenderSettleMode remoteSenderSettleMode)
Description copied from interface: `Link`
TODO should this be part of the interface?

Specified by:
  `setRemoteSenderSettleMode` in interface `Link`

### getReceiverSettleMode

public ReceiverSettleMode getReceiverSettleMode()

Specified by:
  `getReceiverSettleMode` in interface `Link`

### setReceiverSettleMode

public void setReceiverSettleMode(ReceiverSettleMode receiverSettleMode)
Description copied from interface: `Link`
Sets the receiver settle mode. Used in analogous way to `Link.setSenderSettleMode(SenderSettleMode)`

Specified by:
  `setReceiverSettleMode` in interface `Link`

### getRemoteReceiverSettleMode

public ReceiverSettleMode getRemoteReceiverSettleMode()

Specified by:
  `getRemoteReceiverSettleMode` in interface `Link`
See Also:
  - `Link.setReceiverSettleMode(ReceiverSettleMode)`

### getProperties

public Map<Symbol,Object> getProperties()
Description copied from interface: `Link`
Gets the local link properties.

Specified by:
  `getProperties` in interface `Link`
See Also:
  - `Link.setProperties(Map)`

### setProperties

public void setProperties(Map<Symbol,Object> properties)
Description copied from interface: `Link`
Sets the local link properties, to be conveyed to the peer via the Attach frame when attaching the link to the session. Must be called during link setup, i.e. before calling the `Endpoint.open()` method.

Specified by:
  `setProperties` in interface `Link`

### getRemoteProperties

public Map<Symbol,Object> getRemoteProperties()
Description copied from interface: `Link`
Gets the remote link properties, as conveyed from the peer via the Attach frame when attaching the link to the session.

Specified by:
  `getRemoteProperties` in interface `Link`
Returns:
  the properties Map conveyed by the peer, or null if there was none.

### getDesiredCapabilities

public Symbol[] getDesiredCapabilities()
Description copied from interface: `Link`
Gets the local link desired capabilities.

Specified by:
  `getDesiredCapabilities` in interface `Link`
Returns:
  the desired capabilities array, or null if none was set.
See Also:
  - `Link.setDesiredCapabilities(Symbol[])`

### setDesiredCapabilities

public void setDesiredCapabilities(Symbol[] desiredCapabilities)
Description copied from interface: `Link`
Sets the local link desired capabilities, to be conveyed to the peer via the Attach frame when attaching the link to the session. Must be called during link setup, i.e. before calling the `Endpoint.open()` method.

Specified by:
  `setDesiredCapabilities` in interface `Link`
Parameters:
  `desiredCapabilities` - the desired capabilities array to send, or null for none.

### getRemoteDesiredCapabilities

public Symbol[] getRemoteDesiredCapabilities()
Description copied from interface: `Link`
Gets the remote link desired capabilities, as conveyed from the peer via the Attach frame when attaching the link to the session.

Specified by:
  `getRemoteDesiredCapabilities` in interface `Link`
Returns:
  the desired capabilities array conveyed by the peer, or null if there was none.

### getOfferedCapabilities

public Symbol[] getOfferedCapabilities()
Description copied from interface: `Link`
Gets the local link offered capabilities.

Specified by:
  `getOfferedCapabilities` in interface `Link`
Returns:
  the offered capabilities array, or null if none was set.
See Also:
  - `Link.setOfferedCapabilities(Symbol[])`

### setOfferedCapabilities

public void setOfferedCapabilities(Symbol[] offeredCapabilities)
Description copied from interface: `Link`
Sets the local link offered capabilities, to be conveyed to the peer via the Attach frame when attaching the link to the session. Must be called during link setup, i.e. before calling the `Endpoint.open()` method.

Specified by:
  `setOfferedCapabilities` in interface `Link`
Parameters:
  `offeredCapabilities` - the offered capabilities array to send, or null for none.

### getRemoteOfferedCapabilities

public Symbol[] getRemoteOfferedCapabilities()
Description copied from interface: `Link`
Gets the remote link offered capabilities, as conveyed from the peer via the Attach frame when attaching the link to the session.

Specified by:
  `getRemoteOfferedCapabilities` in interface `Link`
Returns:
  the offered capabilities array conveyed by the peer, or null if there was none.

### getMaxMessageSize

public UnsignedLong getMaxMessageSize()
Description copied from interface: `Link`
Gets the local link max message size.

Specified by:
  `getMaxMessageSize` in interface `Link`
Returns:
  the local max message size, or null if none was set. 0 also means no limit.
See Also:
  - `Link.setMaxMessageSize(UnsignedLong)`

### setMaxMessageSize

public void setMaxMessageSize(UnsignedLong maxMessageSize)
Description copied from interface: `Link`
Sets the local link max message size, to be conveyed to the peer via the Attach frame when attaching the link to the session. Null or 0 means no limit. Must be called during link setup, i.e. before calling the `Endpoint.open()` method.

Specified by:
  `setMaxMessageSize` in interface `Link`
Parameters:
  `maxMessageSize` - the local max message size value, or null to clear. 0 also means no limit.

### getRemoteMaxMessageSize

public UnsignedLong getRemoteMaxMessageSize()
Description copied from interface: `Link`
Gets the remote link max message size, as conveyed from the peer via the Attach frame when attaching the link to the session.

Specified by:
  `getRemoteMaxMessageSize` in interface `Link`
Returns:
  the remote max message size conveyed by the peer, or null if none was set. 0 also means no limit.

### drained

public int drained()

Specified by:
  `drained` in interface `Link`

### head

public DeliveryImpl head()
Description copied from interface: `Link`
Returns the head delivery on the link.

Specified by:
  `head` in interface `Link`

### detach

public void detach()

Specified by:
  `detach` in interface `Link`

### detached

public boolean detached()

Specified by:
  `detached` in interface `Link`