Class TransportImpl

    • Method Detail

      • trace

        public void trace​(int levels)
        Specified by:
        trace in interface Transport
      • getMaxFrameSize

        public int getMaxFrameSize()
        Description copied from interface: Transport
        Get the maximum frame size for the transport
        Specified by:
        getMaxFrameSize in interface Transport
        Returns:
        the maximum frame size
      • setInitialRemoteMaxFrameSize

        public void setInitialRemoteMaxFrameSize​(int remoteMaxFrameSize)
        Description copied from interface: Transport
        Allows 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 before Transport.sasl() in order to influence SASL behaviour.
        Specified by:
        setInitialRemoteMaxFrameSize in interface Transport
        Parameters:
        remoteMaxFrameSize - the remote frame size to use
      • setMaxFrameSize

        public void setMaxFrameSize​(int maxFrameSize)
        Specified by:
        setMaxFrameSize in interface Transport
      • setChannelMax

        public void setChannelMax​(int channelMax)
        Description copied from interface: Transport
        Set 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 using Transport.getRemoteChannelMax().
        Specified by:
        setChannelMax in interface Transport
        Parameters:
        channelMax - the local channel-max to advertise to the peer, in range [0 - 2^16).
      • getRemoteChannelMax

        public int getRemoteChannelMax()
        Description copied from interface: Transport
        Gets the remote value of channel-max, as advertised by the peer on its Open frame. The local peers advertised channel-max can be observed using Transport.getChannelMax().
        Specified by:
        getRemoteChannelMax in interface Transport
        Returns:
        the remote channel-max value
      • unbind

        public void unbind()
        Specified by:
        unbind in interface Transport
      • input

        public int input​(byte[] bytes,
                         int offset,
                         int length)
        Description copied from interface: Transport
        Processes the provided input.
        Specified by:
        input in interface Transport
        Parameters:
        bytes - input bytes for consumption
        offset - the offset within bytes where input begins
        length - the number of bytes available for input
        Returns:
        the number of bytes consumed
      • output

        public int output​(byte[] bytes,
                          int offset,
                          int size)
        Description copied from interface: Transport
        Has the transport produce up to size bytes placing the result into dest beginning at position offset.
        Specified by:
        output in interface Transport
        Parameters:
        bytes - array for output bytes
        offset - the offset within bytes where output begins
        size - the maximum number of bytes to be output
        Returns:
        the number of bytes written
      • writeInto

        public boolean writeInto​(java.nio.ByteBuffer outputBuffer)
      • sasl

        public Sasl sasl()
        Description copied from interface: Transport
        Signal 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 same Sasl object.
        Specified by:
        sasl in interface Transport
      • ssl

        public Ssl ssl​(SslDomain sslDomain,
                       SslPeerDetails sslPeerDetails)
        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 same Ssl object, regardless of the parameters supplied.

        Note that sslDomain must implement ProtonSslEngineProvider. This is not possible enforce at the API level because ProtonSslEngineProvider is not part of the public Proton API.

        Specified by:
        ssl in interface Transport
        Parameters:
        sslDomain - the SSL settings to use
        sslPeerDetails - peer details, used for SNI, hostname verification, etc when connecting. May be null.
        Returns:
        an Ssl object representing the SSL session.
      • writeFrame

        protected void writeFrame​(int channel,
                                  FrameBody frameBody,
                                  ReadableBuffer payload,
                                  java.lang.Runnable onPayloadTooLarge)
      • getInputBuffer

        public java.nio.ByteBuffer getInputBuffer()
        Description copied from interface: Transport
        Get 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. Once Transport.processInput() is called the buffer must not be used.
        Specified by:
        getInputBuffer in interface Transport
      • processInput

        public TransportResult processInput()
        Description copied from interface: Transport
        Tell 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 subsequent Transport.processInput() calls on this object will throw an exception.
        Specified by:
        processInput in interface Transport
        Returns:
        the result of processing the data, which indicates success or failure.
        See Also:
        Transport.getInputBuffer()
      • getOutputBuffer

        public java.nio.ByteBuffer getOutputBuffer()
        Description copied from interface: Transport
        Get 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. Once Transport.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:
        getOutputBuffer in interface Transport
      • outputConsumed

        public void outputConsumed()
        Description copied from interface: Transport
        Informs the transport that the output buffer returned by Transport.getOutputBuffer() is finished with, allowing implementation-dependent steps to be performed such as reclaiming buffer space.
        Specified by:
        outputConsumed in interface Transport
      • tail

        public java.nio.ByteBuffer tail()
        Specified by:
        tail in interface Transport
      • head

        public java.nio.ByteBuffer head()
        Specified by:
        head in interface Transport
      • pop

        public void pop​(int bytes)
        Specified by:
        pop in interface Transport
      • setIdleTimeout

        public void setIdleTimeout​(int timeout)
        Specified by:
        setIdleTimeout in interface Transport
        Parameters:
        timeout - local idle timeout in milliseconds
      • getIdleTimeout

        public int getIdleTimeout()
        Specified by:
        getIdleTimeout in interface Transport
        Returns:
        local idle timeout in milliseconds
      • getRemoteIdleTimeout

        public int getRemoteIdleTimeout()
        Specified by:
        getRemoteIdleTimeout in interface Transport
        Returns:
        remote idle timeout in milliseconds
      • tick

        public long tick​(long now)
        Description copied from interface: Transport
        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. 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 from System.currentTimeMillis() or derived from System.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.
        Specified by:
        tick in interface Transport
        Parameters:
        now - the current time in milliseconds
        Returns:
        the absolute deadline in milliseconds to next call tick by/at, or 0 if there is none.
      • isClosed

        public boolean isClosed()
        Specified by:
        isClosed in interface Transport
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • setSelectable

        public void setSelectable​(Selectable selectable)
      • getSelectable

        public Selectable getSelectable()
      • setReactor

        public void setReactor​(Reactor reactor)
      • getReactor

        public Reactor getReactor()
      • setEmitFlowEventOnSend

        public void setEmitFlowEventOnSend​(boolean emitFlowEventOnSend)
        Description copied from interface: Transport
        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. Defaults to true.
        Specified by:
        setEmitFlowEventOnSend in interface Transport
        Parameters:
        emitFlowEventOnSend - true if a flow event should be emitted, false otherwise
      • addTransportLayer

        public void addTransportLayer​(TransportLayer layer)
        Description copied from interface: TransportInternal
        Add a TransportLayer to 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:
        addTransportLayer in interface TransportInternal
        Parameters:
        layer - the layer to add (if it was not previously added)
      • setOutboundFrameSizeLimit

        public void setOutboundFrameSizeLimit​(int limit)
        Description copied from interface: Transport
        Set 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:
        setOutboundFrameSizeLimit in interface Transport
        Parameters:
        limit - the size limit to apply