Class TransportImpl
java.lang.Object
org.apache.qpid.proton.engine.impl.EndpointImpl
org.apache.qpid.proton.engine.impl.TransportImpl
- All Implemented Interfaces:
FrameBody.FrameBodyHandler<Integer>,Endpoint,Extendable,FrameHandler,TransportInternal,ProtonJEndpoint,ProtonJTransport,Transport
public class TransportImpl
extends EndpointImpl
implements ProtonJTransport, FrameBody.FrameBodyHandler<Integer>, FrameHandler, TransportInternal
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.qpid.proton.engine.Transport
Transport.Factory -
Field Summary
Fields inherited from interface org.apache.qpid.proton.engine.Transport
DEFAULT_MAX_FRAME_SIZE, END_OF_STREAM, MIN_MAX_FRAME_SIZE, SESSION_WINDOW, TRACE_DRV, TRACE_FRM, TRACE_OFF, TRACE_RAW -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddTransportLayer(TransportLayer layer) Add aTransportLayerto the transport, wrapping the input and output process handlers in the state they currently exist.voidbind(Connection conn) intcapacity()voidvoidvoidclosed(TransportException error) intGets the local channel-max value to be advertised to the remote peerprotected ConnectionImpllonglongintGet a buffer that can be used to write input data into the transport.intGet the maximum frame size for the transportintGet a read-only byte buffer containing the transport's pending output.intGets the remote value of channel-max, as advertised by the peer on its Open frame.intintvoidhandleAttach(Attach attach, Binary payload, Integer channel) voidhandleBegin(Begin begin, Binary payload, Integer channel) voidhandleClose(Close close, Binary payload, Integer channel) voidhandleDetach(Detach detach, Binary payload, Integer channel) voidhandleDisposition(Disposition disposition, Binary payload, Integer channel) voidvoidhandleFlow(Flow flow, Binary payload, Integer channel) booleanhandleFrame(TransportFrame frame) voidhandleOpen(Open open, Binary payload, Integer channel) voidhandleTransfer(Transfer transfer, Binary payload, Integer channel) head()intinput(byte[] bytes, int offset, int length) Processes the provided input.booleanisClosed()booleanbooleanReturns whether I am currently able to handle frames.booleanoldApiCheckStateBeforeInput(int inputLength) This method is public as it is used by Python layer.intoutput(byte[] bytes, int offset, int size) Has the transport produce up to size bytes placing the result into dest beginning at position offset.voidInforms the transport that the output buffer returned byTransport.getOutputBuffer()is finished with, allowing implementation-dependent steps to be performed such as reclaiming buffer space.intpending()voidpop(int bytes) voidprocess()Tell the transport to process the data written to the input buffer.sasl()Signal the transport to expect SASL frames used to establish a SASL layer prior to performing the AMQP protocol version negotiation.voidsetChannelMax(int channelMax) Set the local value of channel-max, to be advertised to the peer on the Open frame emitted by the transport.voidsetCondition(ErrorCondition error) Set the local error conditionvoidsetEmitFlowEventOnSend(boolean emitFlowEventOnSend) Configure whether a synthetic Flow event should be emitted when messages are sent, reflecting a change in the credit level on the link that may prompt other action.voidsetFrameHandler(FrameHandler frameHandler) Override the default frame handler.voidsetIdleTimeout(int timeout) voidsetInitialRemoteMaxFrameSize(int remoteMaxFrameSize) Allows overriding the initial remote-max-frame-size to a value greater than the default 512bytes.voidsetMaxFrameSize(int maxFrameSize) voidsetOutboundFrameSizeLimit(int limit) Set an upper limit on the size of outgoing frames that will be sent to the peer.voidsetProtocolTracer(ProtocolTracer protocolTracer) voidsetReactor(Reactor reactor) voidsetSelectable(Selectable selectable) voidsetUseReadOnlyOutputBuffer(boolean value) Equivalent toTransport.ssl(SslDomain, SslPeerDetails)but passing null for SslPeerDetails, meaning no SNI detail is sent, hostname verification isn't supported etc when connecting.ssl(SslDomain sslDomain, SslPeerDetails sslPeerDetails) Wrap this transport's output and input to apply SSL encryption and decryption respectively.tail()longtick(long now) Prompt the transport to perform work such as idle-timeout/heartbeat handling, and return an absolute deadline in milliseconds that tick must again be called by/at, based on the provided current time in milliseconds, to ensure the periodic work is carried out as necessary.toString()voidtrace(int levels) voidunbind()protected voidwriteFrame(int channel, FrameBody frameBody, ReadableBuffer payload, Runnable onPayloadTooLarge) booleanwriteInto(ByteBuffer outputBuffer) Methods inherited from class org.apache.qpid.proton.engine.impl.EndpointImpl
attachments, close, free, getContext, getLocalState, getRemoteCondition, getRemoteState, open, setContextMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.qpid.proton.engine.Endpoint
close, free, getContext, getLocalState, getRemoteCondition, getRemoteState, open, setContextMethods inherited from interface org.apache.qpid.proton.engine.Extendable
attachments
-
Constructor Details
-
TransportImpl
public TransportImpl()Application code should useTransport.Factory.create()instead
-
-
Method Details
-
trace
public void trace(int levels) -
getMaxFrameSize
public int getMaxFrameSize()Description copied from interface:TransportGet the maximum frame size for the transport- Specified by:
getMaxFrameSizein interfaceTransport- Returns:
- the maximum frame size
-
getRemoteMaxFrameSize
public int getRemoteMaxFrameSize()- Specified by:
getRemoteMaxFrameSizein interfaceTransport
-
setInitialRemoteMaxFrameSize
public void setInitialRemoteMaxFrameSize(int remoteMaxFrameSize) Description copied from interface:TransportAllows overriding the initial remote-max-frame-size to a value greater than the default 512bytes. The value set will be used until such time as the Open frame arrives from the peer and populates the remote max frame size. This method must be called before beforeTransport.sasl()in order to influence SASL behaviour.- Specified by:
setInitialRemoteMaxFrameSizein interfaceTransport- Parameters:
remoteMaxFrameSize- the remote frame size to use
-
setMaxFrameSize
public void setMaxFrameSize(int maxFrameSize) - Specified by:
setMaxFrameSizein interfaceTransport
-
getChannelMax
public int getChannelMax()Description copied from interface:TransportGets the local channel-max value to be advertised to the remote peer- Specified by:
getChannelMaxin interfaceTransport- Returns:
- the local channel-max value
- See Also:
-
setChannelMax
public void setChannelMax(int channelMax) Description copied from interface:TransportSet the local value of channel-max, to be advertised to the peer on the Open frame emitted by the transport. The remote peers advertised channel-max can be observed usingTransport.getRemoteChannelMax().- Specified by:
setChannelMaxin interfaceTransport- Parameters:
channelMax- the local channel-max to advertise to the peer, in range [0 - 2^16).
-
getRemoteChannelMax
public int getRemoteChannelMax()Description copied from interface:TransportGets the remote value of channel-max, as advertised by the peer on its Open frame. The local peers advertised channel-max can be observed usingTransport.getChannelMax().- Specified by:
getRemoteChannelMaxin interfaceTransport- Returns:
- the remote channel-max value
-
getCondition
- Specified by:
getConditionin interfaceEndpoint- Specified by:
getConditionin interfaceTransport- Overrides:
getConditionin classEndpointImpl- Returns:
- the local endpoint error, or null if there is none
-
setCondition
Description copied from interface:EndpointSet the local error condition- Specified by:
setConditionin interfaceEndpoint- Overrides:
setConditionin classEndpointImpl
-
bind
-
unbind
public void unbind() -
input
public int input(byte[] bytes, int offset, int length) Description copied from interface:TransportProcesses the provided input. -
oldApiCheckStateBeforeInput
This method is public as it is used by Python layer.- See Also:
-
output
public int output(byte[] bytes, int offset, int size) Description copied from interface:TransportHas the transport produce up to size bytes placing the result into dest beginning at position offset. -
writeInto
-
sasl
Description copied from interface:TransportSignal the transport to expect SASL frames used to establish a SASL layer prior to performing the AMQP protocol version negotiation. This must first be performed before the transport is used for processing. Subsequent invocations will return the sameSaslobject. -
ssl
Wrap this transport's output and input to apply SSL encryption and decryption respectively. This method is expected to be called at most once. A subsequent invocation will return the sameSslobject, regardless of the parameters supplied.Note that sslDomain must implement
ProtonSslEngineProvider. This is not possible enforce at the API level becauseProtonSslEngineProvideris not part of the public Proton API. -
ssl
Description copied from interface:TransportEquivalent toTransport.ssl(SslDomain, SslPeerDetails)but passing null for SslPeerDetails, meaning no SNI detail is sent, hostname verification isn't supported etc when connecting. -
writeFrame
protected void writeFrame(int channel, FrameBody frameBody, ReadableBuffer payload, Runnable onPayloadTooLarge) -
getConnectionImpl
- Specified by:
getConnectionImplin classEndpointImpl
-
handleOpen
- Specified by:
handleOpenin interfaceFrameBody.FrameBodyHandler<Integer>
-
handleBegin
- Specified by:
handleBeginin interfaceFrameBody.FrameBodyHandler<Integer>
-
handleAttach
- Specified by:
handleAttachin interfaceFrameBody.FrameBodyHandler<Integer>
-
handleFlow
- Specified by:
handleFlowin interfaceFrameBody.FrameBodyHandler<Integer>
-
handleTransfer
- Specified by:
handleTransferin interfaceFrameBody.FrameBodyHandler<Integer>
-
handleDisposition
- Specified by:
handleDispositionin interfaceFrameBody.FrameBodyHandler<Integer>
-
handleDetach
- Specified by:
handleDetachin interfaceFrameBody.FrameBodyHandler<Integer>
-
handleEnd
- Specified by:
handleEndin interfaceFrameBody.FrameBodyHandler<Integer>
-
handleClose
- Specified by:
handleClosein interfaceFrameBody.FrameBodyHandler<Integer>
-
handleFrame
- Specified by:
handleFramein interfaceFrameHandler- Returns:
- false on end of stream
- See Also:
-
closed
- Specified by:
closedin interfaceFrameHandler
-
isHandlingFrames
public boolean isHandlingFrames()Description copied from interface:FrameHandlerReturns whether I am currently able to handle frames. MUST be checked before callingFrameHandler.handleFrame(TransportFrame).- Specified by:
isHandlingFramesin interfaceFrameHandler
-
getProtocolTracer
- Specified by:
getProtocolTracerin interfaceProtonJTransport
-
setProtocolTracer
- Specified by:
setProtocolTracerin interfaceProtonJTransport
-
getInputBuffer
Description copied from interface:TransportGet a buffer that can be used to write input data into the transport. Once the client has finished putting into the input buffer,Transport.processInput()must be called. Successive calls to this method are not guaranteed to return the same object. OnceTransport.processInput()is called the buffer must not be used.- Specified by:
getInputBufferin interfaceTransport
-
processInput
Description copied from interface:TransportTell the transport to process the data written to the input buffer. If the returned result indicates failure, the transport will not accept any more input. Specifically, any subsequentTransport.processInput()calls on this object will throw an exception.- Specified by:
processInputin interfaceTransport- Returns:
- the result of processing the data, which indicates success or failure.
- See Also:
-
getOutputBuffer
Description copied from interface:TransportGet a read-only byte buffer containing the transport's pending output. Once the client has finished getting from the output buffer,Transport.outputConsumed()must be called. Successive calls to this method are not guaranteed to return the same object. OnceTransport.outputConsumed()is called the buffer must not be used. If the transport's state changes AFTER calling this method, this will not be reflected in the output buffer.- Specified by:
getOutputBufferin interfaceTransport
-
outputConsumed
public void outputConsumed()Description copied from interface:TransportInforms the transport that the output buffer returned byTransport.getOutputBuffer()is finished with, allowing implementation-dependent steps to be performed such as reclaiming buffer space.- Specified by:
outputConsumedin interfaceTransport
-
capacity
public int capacity() -
tail
-
process
- Specified by:
processin interfaceTransport- Throws:
TransportException
-
close_tail
public void close_tail()- Specified by:
close_tailin interfaceTransport
-
pending
public int pending() -
head
-
pop
public void pop(int bytes) -
setIdleTimeout
public void setIdleTimeout(int timeout) - Specified by:
setIdleTimeoutin interfaceTransport- Parameters:
timeout- local idle timeout in milliseconds
-
getIdleTimeout
public int getIdleTimeout()- Specified by:
getIdleTimeoutin interfaceTransport- Returns:
- local idle timeout in milliseconds
-
getRemoteIdleTimeout
public int getRemoteIdleTimeout()- Specified by:
getRemoteIdleTimeoutin interfaceTransport- Returns:
- remote idle timeout in milliseconds
-
tick
public long tick(long now) Description copied from interface:TransportPrompt the transport to perform work such as idle-timeout/heartbeat handling, and return an absolute deadline in milliseconds that tick must again be called by/at, based on the provided current time in milliseconds, to ensure the periodic work is carried out as necessary. A returned deadline of 0 indicates there is no periodic work necessitating tick be called, e.g. because neither peer has defined an idle-timeout value. The provided milliseconds time values can be fromSystem.currentTimeMillis()or derived fromSystem.nanoTime(), noting that for the later in particular that the returned deadline could be a different sign than the given time, and (if non-zero) the returned deadline should have the current time originally provided subtracted from it in order to establish a relative time delay to the next deadline. -
getFramesOutput
public long getFramesOutput()- Specified by:
getFramesOutputin interfaceTransport
-
getFramesInput
public long getFramesInput()- Specified by:
getFramesInputin interfaceTransport
-
close_head
public void close_head()- Specified by:
close_headin interfaceTransport
-
isClosed
public boolean isClosed() -
toString
-
setFrameHandler
Override the default frame handler. Must be called before the transport starts being used (e.g.getInputBuffer(),getOutputBuffer(),ssl(SslDomain)etc). -
setSelectable
-
getSelectable
-
setReactor
-
getReactor
-
setEmitFlowEventOnSend
public void setEmitFlowEventOnSend(boolean emitFlowEventOnSend) Description copied from interface:TransportConfigure whether a synthetic Flow event should be emitted when messages are sent, reflecting a change in the credit level on the link that may prompt other action. Defaults to true.- Specified by:
setEmitFlowEventOnSendin interfaceTransport- Parameters:
emitFlowEventOnSend- true if a flow event should be emitted, false otherwise
-
isEmitFlowEventOnSend
public boolean isEmitFlowEventOnSend()- Specified by:
isEmitFlowEventOnSendin interfaceTransport
-
setUseReadOnlyOutputBuffer
public void setUseReadOnlyOutputBuffer(boolean value) - Specified by:
setUseReadOnlyOutputBufferin interfaceTransportInternal
-
isUseReadOnlyOutputBuffer
public boolean isUseReadOnlyOutputBuffer()- Specified by:
isUseReadOnlyOutputBufferin interfaceTransportInternal
-
addTransportLayer
Description copied from interface:TransportInternalAdd aTransportLayerto the transport, wrapping the input and output process handlers in the state they currently exist. No effect if the given layer was previously added.- Specified by:
addTransportLayerin interfaceTransportInternal- Parameters:
layer- the layer to add (if it was not previously added)
-
setOutboundFrameSizeLimit
public void setOutboundFrameSizeLimit(int limit) Description copied from interface:TransportSet an upper limit on the size of outgoing frames that will be sent to the peer. Allows constraining the transport not to emit Transfer frames over a given size even when the peers max frame size allows it. Must be set before receiving the peers Open frame to have effect.- Specified by:
setOutboundFrameSizeLimitin interfaceTransport- Parameters:
limit- the size limit to apply
-
getOutboundFrameSizeLimit
public int getOutboundFrameSizeLimit()- Specified by:
getOutboundFrameSizeLimitin interfaceTransport
-