Class HTTP2Session

    • Method Detail

      • doStop

        protected void doStop()
                       throws java.lang.Exception
        Description copied from class: ContainerLifeCycle
        Stops the managed lifecycle beans in the reverse order they were added.
        Overrides:
        doStop in class ContainerLifeCycle
        Throws:
        java.lang.Exception - If there was a problem stopping. Will cause a transition to FAILED state
      • getMaxLocalStreams

        @ManagedAttribute("The maximum number of concurrent local streams")
        public int getMaxLocalStreams()
      • setMaxLocalStreams

        public void setMaxLocalStreams​(int maxLocalStreams)
      • getMaxRemoteStreams

        @ManagedAttribute("The maximum number of concurrent remote streams")
        public int getMaxRemoteStreams()
      • setMaxRemoteStreams

        public void setMaxRemoteStreams​(int maxRemoteStreams)
      • getStreamIdleTimeout

        @ManagedAttribute("The stream\'s idle timeout")
        public long getStreamIdleTimeout()
      • setStreamIdleTimeout

        public void setStreamIdleTimeout​(long streamIdleTimeout)
      • getInitialSessionRecvWindow

        @ManagedAttribute("The initial size of session\'s flow control receive window")
        public int getInitialSessionRecvWindow()
      • setInitialSessionRecvWindow

        public void setInitialSessionRecvWindow​(int initialSessionRecvWindow)
      • getWriteThreshold

        @ManagedAttribute("The number of bytes that trigger a TCP write")
        public int getWriteThreshold()
      • setWriteThreshold

        public void setWriteThreshold​(int writeThreshold)
      • getEndPoint

        public EndPoint getEndPoint()
      • getGenerator

        public Generator getGenerator()
      • getBytesWritten

        public long getBytesWritten()
        Specified by:
        getBytesWritten in interface ISession
        Returns:
        the number of bytes written by this session
      • onData

        public void onData​(DataFrame frame,
                           Callback callback)
        Description copied from interface: ISession

        Callback method invoked when a DATA frame is received.

        Specified by:
        onData in interface ISession
        Parameters:
        frame - the DATA frame received
        callback - the callback to notify when the frame has been processed
      • isLocalStreamClosed

        protected boolean isLocalStreamClosed​(int streamId)
      • isRemoteStreamClosed

        protected boolean isRemoteStreamClosed​(int streamId)
      • onResetForUnknownStream

        protected void onResetForUnknownStream​(ResetFrame frame)
      • onSettings

        public void onSettings​(SettingsFrame frame,
                               boolean reply)
      • onWindowUpdate

        public void onWindowUpdate​(IStream stream,
                                   WindowUpdateFrame frame)
        Description copied from interface: ISession

        Callback method invoked when a WINDOW_UPDATE frame has been received.

        Specified by:
        onWindowUpdate in interface ISession
        Parameters:
        stream - the stream the window update belongs to, or null if the window update belongs to the session
        frame - the WINDOW_UPDATE frame received
      • onStreamFailure

        public void onStreamFailure​(int streamId,
                                    int error,
                                    java.lang.String reason)
        Specified by:
        onStreamFailure in interface Parser.Listener
      • abort

        protected void abort​(java.lang.String reason,
                             java.lang.Throwable failure,
                             Callback callback)
      • newStream

        public void newStream​(HeadersFrame frame,
                              Promise<Stream> promise,
                              Stream.Listener listener)
        Description copied from interface: Session

        Sends the given HEADERS frame to create a new Stream.

        Specified by:
        newStream in interface Session
        Parameters:
        frame - the HEADERS frame containing the HTTP headers
        promise - the promise that gets notified of the stream creation
        listener - the listener that gets notified of stream events
      • newStream

        public void newStream​(IStream.FrameList frames,
                              Promise<Stream> promise,
                              Stream.Listener listener)
        Description copied from interface: ISession

        Sends the given list of frames to create a new Stream.

        Specified by:
        newStream in interface ISession
        Parameters:
        frames - the list of frames to send
        promise - the promise that gets notified of the stream creation
        listener - the listener that gets notified of stream events
      • newUpgradeStream

        public Stream newUpgradeStream​(HeadersFrame frame,
                                       Stream.Listener listener,
                                       java.util.function.Consumer<java.lang.Throwable> failFn)

        Creates a new stream allocating a stream id if the given HEADERS frame does not have one.

        Parameters:
        frame - the HEADERS frame that triggered the stream creation allocated stream id, or null if not interested in the modified headers frame
        listener - the listener that gets notified of stream events
      • priority

        public int priority​(PriorityFrame frame,
                            Callback callback)
        Description copied from interface: Session

        Sends the given PRIORITY frame.

        If the frame references a streamId that does not exist (for example 0), then a new streamId will be allocated, to support unused anchor streams that act as parent for other streams.

        Specified by:
        priority in interface Session
        Parameters:
        frame - the PRIORITY frame to send
        callback - the callback that gets notified when the frame has been sent
        Returns:
        the new stream id generated by the PRIORITY frame, or the stream id that it is already referencing
      • push

        public void push​(IStream stream,
                         Promise<Stream> promise,
                         PushPromiseFrame frame,
                         Stream.Listener listener)
        Description copied from interface: ISession

        Enqueues the given PUSH_PROMISE frame to be written to the connection.

        Differently from ISession.frames(IStream, List, Callback), this method generates atomically the stream id for the pushed stream.

        Specified by:
        push in interface ISession
        Parameters:
        stream - the stream associated to the pushed stream
        promise - the promise that gets notified of the pushed stream creation
        frame - the PUSH_PROMISE frame to enqueue
        listener - the listener that gets notified of pushed stream events
      • settings

        public void settings​(SettingsFrame frame,
                             Callback callback)
        Description copied from interface: Session

        Sends the given SETTINGS frame to configure the session.

        Specified by:
        settings in interface Session
        Parameters:
        frame - the SETTINGS frame to send
        callback - the callback that gets notified when the frame has been sent
      • ping

        public void ping​(PingFrame frame,
                         Callback callback)
        Description copied from interface: Session

        Sends the given PING frame.

        PING frames may be used to test the connection integrity and to measure round-trip time.

        Specified by:
        ping in interface Session
        Parameters:
        frame - the PING frame to send
        callback - the callback that gets notified when the frame has been sent
      • close

        public boolean close​(int error,
                             java.lang.String reason,
                             Callback callback)

        Invoked internally and by applications to send a GO_AWAY frame to the other peer.

        Specified by:
        close in interface Session
        Parameters:
        error - the error code
        reason - the reason
        callback - the callback to invoke when the operation is complete
        Returns:
        true if the frame is being sent, false if the session was already closed
        See Also:
        onGoAway(GoAwayFrame), onShutdown(), onIdleTimeout()
      • shutdown

        public java.util.concurrent.CompletableFuture<java.lang.Void> shutdown()
        Description copied from interface: ISession

        Gracefully closes the session, returning a CompletableFuture that is completed when all the streams currently being processed are completed.

        Implementation is idempotent, i.e. calling this method a second time or concurrently results in a no-operation.

        Specified by:
        shutdown in interface ISession
        Returns:
        a CompletableFuture that is completed when all the streams are completed
      • isClosed

        public boolean isClosed()
        Specified by:
        isClosed in interface Session
        Returns:
        whether the session is not open
      • getCloseState

        public CloseState getCloseState()
      • frames

        public void frames​(IStream stream,
                           java.util.List<? extends Frame> frames,
                           Callback callback)
        Description copied from interface: ISession

        Enqueues the given frames to be written to the connection.

        Specified by:
        frames in interface ISession
        Parameters:
        stream - the stream the frames belong to
        frames - the frames to enqueue
        callback - the callback that gets notified when the frames have been sent
      • data

        public void data​(IStream stream,
                         Callback callback,
                         DataFrame frame)
        Description copied from interface: ISession

        Enqueues the given DATA frame to be written to the connection.

        Specified by:
        data in interface ISession
        Parameters:
        stream - the stream the data frame belongs to
        callback - the callback that gets notified when the frame has been sent
        frame - the DATA frame to send
      • createLocalStream

        protected IStream createLocalStream​(int streamId,
                                            MetaData.Request request,
                                            java.util.function.Consumer<java.lang.Throwable> failFn)
      • removeStream

        public boolean removeStream​(IStream stream)
        Description copied from interface: ISession

        Removes the given stream.

        Specified by:
        removeStream in interface ISession
        Parameters:
        stream - the stream to remove
        Returns:
        whether the stream was removed
      • getStreams

        public java.util.Collection<Stream> getStreams()
        Specified by:
        getStreams in interface Session
        Returns:
        a snapshot of all the streams currently belonging to this session
      • getStreamCount

        @ManagedAttribute("The number of active streams")
        public int getStreamCount()
      • getStream

        public IStream getStream​(int streamId)
        Description copied from interface: Session

        Retrieves the stream with the given streamId.

        Specified by:
        getStream in interface ISession
        Specified by:
        getStream in interface Session
        Parameters:
        streamId - the stream id of the stream looked for
        Returns:
        the stream with the given id, or null if no such stream exist
      • getLocalAddress

        public java.net.InetSocketAddress getLocalAddress()
        Specified by:
        getLocalAddress in interface Session
        Returns:
        the local network address this session is bound to, or null if this session is not bound to a network address
      • getLocalSocketAddress

        public java.net.SocketAddress getLocalSocketAddress()
        Specified by:
        getLocalSocketAddress in interface Session
        Returns:
        the local network address this session is bound to, or null if this session is not bound to a network address
      • getRemoteAddress

        public java.net.InetSocketAddress getRemoteAddress()
        Specified by:
        getRemoteAddress in interface Session
        Returns:
        the remote network address this session is connected to, or null if this session is not connected to a network address
      • getRemoteSocketAddress

        public java.net.SocketAddress getRemoteSocketAddress()
        Specified by:
        getRemoteSocketAddress in interface Session
        Returns:
        the remote network address this session is connected to, or null if this session is not connected to a network address
      • updateSendWindow

        public int updateSendWindow​(int delta)
        Description copied from interface: ISession

        Updates the session send window by the given delta.

        Specified by:
        updateSendWindow in interface ISession
        Parameters:
        delta - the delta value (positive or negative) to add to the session send window
        Returns:
        the previous value of the session send window
      • updateRecvWindow

        public int updateRecvWindow​(int delta)
        Description copied from interface: ISession

        Updates the session receive window by the given delta.

        Specified by:
        updateRecvWindow in interface ISession
        Parameters:
        delta - the delta value (positive or negative) to add to the session receive window
        Returns:
        the previous value of the session receive window
      • isConnectProtocolEnabled

        @ManagedAttribute(value="Whether CONNECT requests supports a protocol",
                          readonly=true)
        public boolean isConnectProtocolEnabled()
      • setConnectProtocolEnabled

        public void setConnectProtocolEnabled​(boolean connectProtocolEnabled)
      • onFrame

        public void onFrame​(Frame frame)
        Description copied from interface: ISession

        Callback method invoked during an HTTP/1.1 to HTTP/2 upgrade requests to process the given synthetic frame.

        Specified by:
        onFrame in interface ISession
        Parameters:
        frame - the synthetic frame to process
      • onStreamOpened

        protected final void onStreamOpened​(IStream stream)
      • onFlushed

        public void onFlushed​(long bytes)
                       throws java.io.IOException
        Description copied from interface: ISession

        Callback method invoked when bytes are flushed to the network.

        Specified by:
        onFlushed in interface ISession
        Parameters:
        bytes - the number of bytes flushed to the network
        Throws:
        java.io.IOException - if the flush should fail
      • disconnect

        public void disconnect()
      • isDisconnected

        public boolean isDisconnected()
      • getLastRemoteStreamId

        protected int getLastRemoteStreamId()
      • updateLastRemoteStreamId

        protected void updateLastRemoteStreamId​(int streamId)
      • notifyIdleTimeout

        protected boolean notifyIdleTimeout​(Session session)
      • notifyFailure

        protected void notifyFailure​(Session session,
                                     java.lang.Throwable failure,
                                     Callback callback)
      • isClientStream

        protected static boolean isClientStream​(int streamId)
      • dump

        public void dump​(java.lang.Appendable out,
                         java.lang.String indent)
                  throws java.io.IOException
        Description copied from interface: Dumpable
        Dump this object (and children) into an Appendable using the provided indent after any new lines. The indent should not be applied to the first object dumped.
        Specified by:
        dump in interface Dumpable
        Overrides:
        dump in class ContainerLifeCycle
        Parameters:
        out - The appendable to dump to
        indent - The indent to apply after any new lines.
        Throws:
        java.io.IOException - if unable to write to Appendable