Class HTTP2Session
- All Implemented Interfaces:
Session
,ISession
,Parser.Listener
,org.eclipse.jetty.util.component.Container
,org.eclipse.jetty.util.component.Destroyable
,org.eclipse.jetty.util.component.Dumpable
,org.eclipse.jetty.util.component.Dumpable.DumpableContainer
,org.eclipse.jetty.util.component.LifeCycle
- Direct Known Subclasses:
HTTP2ClientSession
,HTTP2ServerSession
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate class
private class
private class
private class
private class
The HTTP/2 specification requires that stream ids are monotonically increasing, see RFC 7540, 5.1.1.Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
org.eclipse.jetty.util.component.Dumpable.DumpableContainer
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
org.eclipse.jetty.util.component.LifeCycle.Listener
Nested classes/interfaces inherited from interface org.eclipse.jetty.http2.parser.Parser.Listener
Parser.Listener.Adapter, Parser.Listener.Wrapper
Nested classes/interfaces inherited from interface org.eclipse.jetty.http2.api.Session
Session.Listener
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AtomicLong
private final org.eclipse.jetty.io.EndPoint
private final FlowControlStrategy
private final HTTP2Flusher
private final Generator
private int
private final AtomicInteger
private final Session.Listener
private final AtomicInteger
private final AtomicInteger
private static final org.eclipse.jetty.util.log.Logger
private int
private int
private int
private final Parser
private boolean
private final AtomicInteger
private final org.eclipse.jetty.util.AtomicBiInteger
private final org.eclipse.jetty.util.thread.Scheduler
private final AtomicInteger
private long
private final ConcurrentMap
<Integer, IStream> private final AtomicLong
private final AtomicLong
private final HTTP2Session.StreamsState
private int
Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
FAILED, RUNNING, STARTED, STARTING, STOPPED, STOPPING
Fields inherited from interface org.eclipse.jetty.util.component.Dumpable
KEY
-
Constructor Summary
ConstructorsConstructorDescriptionHTTP2Session
(org.eclipse.jetty.util.thread.Scheduler scheduler, org.eclipse.jetty.io.EndPoint endPoint, Generator generator, Session.Listener listener, FlowControlStrategy flowControl, int initialStreamId) Deprecated.HTTP2Session
(org.eclipse.jetty.util.thread.Scheduler scheduler, org.eclipse.jetty.io.EndPoint endPoint, Parser parser, Generator generator, Session.Listener listener, FlowControlStrategy flowControl, int initialStreamId) -
Method Summary
Modifier and TypeMethodDescriptionprotected void
boolean
Invoked internally and by applications to send a GO_AWAY frame to the other peer.private void
private void
protected IStream
createLocalStream
(int streamId, org.eclipse.jetty.util.Promise<Stream> promise) protected IStream
createRemoteStream
(int streamId) void
Enqueues the given DATA frame to be written to the connection.void
protected void
doStop()
void
dump
(Appendable out, String indent) private void
failStream
(Stream stream, int error, String reason, Throwable failure, org.eclipse.jetty.util.Callback callback) private void
failStreams
(Predicate<IStream> matcher, String reason, boolean reset) private void
frame
(HTTP2Flusher.Entry entry, boolean flush) void
Enqueues the given frames to be written to the connection.long
org.eclipse.jetty.io.EndPoint
int
protected int
int
int
int
int
int
getStream
(int streamId) Retrieves the stream with the givenstreamId
.int
long
long
long
int
boolean
goAway
(GoAwayFrame frame, org.eclipse.jetty.util.Callback callback) protected static boolean
isClientStream
(int streamId) boolean
isClosed()
boolean
private boolean
isLocalStream
(int streamId) protected boolean
isLocalStreamClosed
(int streamId) boolean
protected boolean
isRemoteStreamClosed
(int streamId) private boolean
isStreamClosed
(int streamId) private HTTP2Flusher.Entry
private GoAwayFrame
newGoAwayFrame
(int lastRemoteStreamId, int error, String reason) private GoAwayFrame
newGoAwayFrame
(int error, String reason) protected IStream
newStream
(int streamId, boolean local) void
newStream
(HeadersFrame frame, org.eclipse.jetty.util.Promise<Stream> promise, Stream.Listener listener) Sends the given HEADERSframe
to create a newStream
.void
newStream
(IStream.FrameList frames, org.eclipse.jetty.util.Promise<Stream> promise, Stream.Listener listener) Sends the given list of frames to create a newStream
.private void
notIdle()
protected void
notifyClose
(Session session, GoAwayFrame frame, org.eclipse.jetty.util.Callback callback) protected void
notifyFailure
(Session session, Throwable failure, org.eclipse.jetty.util.Callback callback) protected void
notifyGoAway
(Session session, GoAwayFrame frame) protected void
notifyHeaders
(IStream stream, HeadersFrame frame) protected boolean
notifyIdleTimeout
(Session session) protected Stream.Listener
notifyNewStream
(Stream stream, HeadersFrame frame) protected void
notifyPing
(Session session, PingFrame frame) protected void
notifyReset
(Session session, ResetFrame frame) protected void
notifySettings
(Session session, SettingsFrame frame) void
onConnectionFailure
(int error, String reason) void
void
Callback method invoked when a DATA frame is received.private void
void
onFlushed
(long bytes) Callback method invoked when bytes are flushed to the network.void
Callback method invoked during an HTTP/1.1 to HTTP/2 upgrade requests to process the given synthetic frame.void
onGoAway
(GoAwayFrame frame) This method is called when receiving a GO_AWAY from the other peer.abstract void
onHeaders
(HeadersFrame frame) boolean
This method is invoked when the idle timeout expires.void
void
onPriority
(PriorityFrame frame) void
onReset
(ResetFrame frame) protected void
private void
onSessionFailure
(int error, String reason, org.eclipse.jetty.util.Callback callback) void
onSettings
(SettingsFrame frame) void
onSettings
(SettingsFrame frame, boolean reply) void
This method is called when the TCP FIN is received from the remote peer.private void
onStreamClosed
(IStream stream) private void
onStreamCreated
(int streamId) private void
onStreamDestroyed
(int streamId) void
onStreamFailure
(int streamId, int error, String reason) protected final void
onStreamOpened
(IStream stream) void
onWindowUpdate
(WindowUpdateFrame frame) void
onWindowUpdate
(IStream stream, WindowUpdateFrame frame) Callback method invoked when a WINDOW_UPDATE frame has been received.(package private) void
onWriteFailure
(Throwable failure) void
Sends the given PINGframe
.int
priority
(PriorityFrame frame, org.eclipse.jetty.util.Callback callback) Sends the given PRIORITYframe
.void
push
(IStream stream, org.eclipse.jetty.util.Promise<Stream> promise, PushPromiseFrame frame, Stream.Listener listener) Enqueues the given PUSH_PROMISE frame to be written to the connection.boolean
removeStream
(IStream stream) Removes the givenstream
.(package private) void
reset
(IStream stream, ResetFrame frame, org.eclipse.jetty.util.Callback callback) void
setInitialSessionRecvWindow
(int initialSessionRecvWindow) void
setMaxEncoderTableCapacity
(int maxEncoderTableCapacity) void
setMaxLocalStreams
(int maxLocalStreams) void
setMaxRemoteStreams
(int maxRemoteStreams) void
setStreamIdleTimeout
(long streamIdleTimeout) void
settings
(SettingsFrame frame, org.eclipse.jetty.util.Callback callback) Sends the given SETTINGSframe
to configure the session.void
setWriteThreshold
(int writeThreshold) private void
private Throwable
toString()
protected void
updateLastRemoteStreamId
(int streamId) int
updateRecvWindow
(int delta) Updates the session receive window by the givendelta
.int
updateSendWindow
(int delta) Updates the session send window by the givendelta
.(package private) void
updateStreamCount
(boolean local, int deltaStreams, int deltaClosing) Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, doStart, dump, dump, dump, dump, dumpBeans, dumpObject, dumpObjects, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.eclipse.jetty.util.component.Dumpable
dumpSelf
Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpable
Methods inherited from interface org.eclipse.jetty.http2.parser.Parser.Listener
onPushPromise
-
Field Details
-
LOG
private static final org.eclipse.jetty.util.log.Logger LOG -
streams
-
streamsOpened
-
streamsClosed
-
streamsState
-
localStreamIds
-
lastRemoteStreamId
-
localStreamCount
-
remoteStreamCount
private final org.eclipse.jetty.util.AtomicBiInteger remoteStreamCount -
sendWindow
-
recvWindow
-
bytesWritten
-
scheduler
private final org.eclipse.jetty.util.thread.Scheduler scheduler -
endPoint
private final org.eclipse.jetty.io.EndPoint endPoint -
parser
-
generator
-
listener
-
flowControl
-
flusher
-
maxLocalStreams
private int maxLocalStreams -
maxRemoteStreams
private int maxRemoteStreams -
streamIdleTimeout
private long streamIdleTimeout -
initialSessionRecvWindow
private int initialSessionRecvWindow -
writeThreshold
private int writeThreshold -
maxEncoderTableCapacity
private int maxEncoderTableCapacity -
pushEnabled
private boolean pushEnabled
-
-
Constructor Details
-
HTTP2Session
@Deprecated public HTTP2Session(org.eclipse.jetty.util.thread.Scheduler scheduler, org.eclipse.jetty.io.EndPoint endPoint, Generator generator, Session.Listener listener, FlowControlStrategy flowControl, int initialStreamId) Deprecated. -
HTTP2Session
public HTTP2Session(org.eclipse.jetty.util.thread.Scheduler scheduler, org.eclipse.jetty.io.EndPoint endPoint, Parser parser, Generator generator, Session.Listener listener, FlowControlStrategy flowControl, int initialStreamId)
-
-
Method Details
-
doStop
- Overrides:
doStop
in classorg.eclipse.jetty.util.component.ContainerLifeCycle
- Throws:
Exception
-
getFlowControlStrategy
@ManagedAttribute(value="The flow control strategy", readonly=true) public FlowControlStrategy getFlowControlStrategy() -
getStreamsOpened
@ManagedAttribute(value="The total number of streams opened", readonly=true) public long getStreamsOpened() -
getStreamsClosed
@ManagedAttribute(value="The total number of streams closed", readonly=true) public long getStreamsClosed() -
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) -
getMaxEncoderTableCapacity
@ManagedAttribute("The HPACK encoder dynamic table maximum capacity") public int getMaxEncoderTableCapacity() -
setMaxEncoderTableCapacity
public void setMaxEncoderTableCapacity(int maxEncoderTableCapacity) -
getEndPoint
public org.eclipse.jetty.io.EndPoint getEndPoint() -
getParser
-
getGenerator
-
getBytesWritten
public long getBytesWritten()- Specified by:
getBytesWritten
in interfaceISession
- Returns:
- the number of bytes written by this session
-
onData
- Specified by:
onData
in interfaceParser.Listener
-
onData
Description copied from interface:ISession
Callback method invoked when a DATA frame is received.
-
isStreamClosed
private boolean isStreamClosed(int streamId) -
isLocalStream
private boolean isLocalStream(int streamId) -
isLocalStreamClosed
protected boolean isLocalStreamClosed(int streamId) -
isRemoteStreamClosed
protected boolean isRemoteStreamClosed(int streamId) -
onHeaders
- Specified by:
onHeaders
in interfaceParser.Listener
-
onPriority
- Specified by:
onPriority
in interfaceParser.Listener
-
onReset
- Specified by:
onReset
in interfaceParser.Listener
-
onResetForUnknownStream
-
onSettings
- Specified by:
onSettings
in interfaceParser.Listener
-
onSettings
-
configure
-
onPing
- Specified by:
onPing
in interfaceParser.Listener
-
onGoAway
This method is called when receiving a GO_AWAY from the other peer.
- Specified by:
onGoAway
in interfaceParser.Listener
- Parameters:
frame
- the GO_AWAY frame that has been received.- See Also:
-
onWindowUpdate
- Specified by:
onWindowUpdate
in interfaceParser.Listener
-
onWindowUpdate
Description copied from interface:ISession
Callback method invoked when a WINDOW_UPDATE frame has been received.
- Specified by:
onWindowUpdate
in interfaceISession
- Parameters:
stream
- the stream the window update belongs to, or null if the window update belongs to the sessionframe
- the WINDOW_UPDATE frame received
-
onStreamFailure
- Specified by:
onStreamFailure
in interfaceParser.Listener
-
onConnectionFailure
- Specified by:
onConnectionFailure
in interfaceParser.Listener
-
onSessionFailure
-
onWriteFailure
-
abort
-
onFailure
-
failStreams
-
failStream
-
toFailure
-
newStream
public void newStream(HeadersFrame frame, org.eclipse.jetty.util.Promise<Stream> promise, Stream.Listener listener) Description copied from interface:Session
Sends the given HEADERS
frame
to create a newStream
. -
newStream
public void newStream(IStream.FrameList frames, org.eclipse.jetty.util.Promise<Stream> promise, Stream.Listener listener) Description copied from interface:ISession
Sends the given list of frames to create a new
Stream
. -
priority
Description copied from interface:Session
Sends the given PRIORITY
frame
.If the
frame
references astreamId
that does not exist (for example0
), then a newstreamId
will be allocated, to support unused anchor streams that act as parent for other streams. -
push
public void push(IStream stream, org.eclipse.jetty.util.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. -
settings
Description copied from interface:Session
Sends the given SETTINGS
frame
to configure the session. -
ping
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.
-
reset
-
close
Invoked internally and by applications to send a GO_AWAY frame to the other peer.
-
goAway
-
newGoAwayFrame
-
newGoAwayFrame
-
isClosed
public boolean isClosed() -
getCloseState
-
control
-
frames
public void frames(IStream stream, List<? extends Frame> frames, org.eclipse.jetty.util.Callback callback) Description copied from interface:ISession
Enqueues the given frames to be written to the connection.
-
newEntry
private HTTP2Flusher.Entry newEntry(Frame frame, IStream stream, org.eclipse.jetty.util.Callback callback) -
data
Description copied from interface:ISession
Enqueues the given DATA frame to be written to the connection.
-
frame
-
createLocalStream
-
createRemoteStream
-
updateStreamCount
void updateStreamCount(boolean local, int deltaStreams, int deltaClosing) -
newStream
-
removeStream
Description copied from interface:ISession
Removes the given
stream
.- Specified by:
removeStream
in interfaceISession
- Parameters:
stream
- the stream to remove- Returns:
- whether the stream was removed
-
getStreams
- Specified by:
getStreams
in interfaceSession
- Returns:
- a snapshot of all the streams currently belonging to this session
-
getStreamCount
@ManagedAttribute("The number of active streams") public int getStreamCount() -
getStream
Description copied from interface:Session
Retrieves the stream with the given
streamId
. -
getSendWindow
@ManagedAttribute(value="The flow control send window", readonly=true) public int getSendWindow() -
getRecvWindow
@ManagedAttribute(value="The flow control receive window", readonly=true) public int getRecvWindow() -
updateSendWindow
public int updateSendWindow(int delta) Description copied from interface:ISession
Updates the session send window by the given
delta
.- Specified by:
updateSendWindow
in interfaceISession
- 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 interfaceISession
- Parameters:
delta
- the delta value (positive or negative) to add to the session receive window- Returns:
- the previous value of the session receive window
-
isPushEnabled
@ManagedAttribute(value="Whether HTTP/2 push is enabled", readonly=true) public boolean isPushEnabled()- Specified by:
isPushEnabled
in interfaceISession
- Returns:
- whether the push functionality is enabled
-
onShutdown
public void onShutdown()This method is called when the TCP FIN is received from the remote peer.
- Specified by:
onShutdown
in interfaceISession
- See Also:
-
onIdleTimeout
public boolean onIdleTimeout()This method is invoked when the idle timeout expires.
- Specified by:
onIdleTimeout
in interfaceISession
- Returns:
- true if the session should be closed, false otherwise
- See Also:
-
notIdle
private void notIdle() -
onFrame
Description copied from interface:ISession
Callback method invoked during an HTTP/1.1 to HTTP/2 upgrade requests to process the given synthetic frame.
-
onStreamCreated
private void onStreamCreated(int streamId) -
onStreamOpened
-
onStreamClosed
-
onStreamDestroyed
private void onStreamDestroyed(int streamId) -
onFlushed
Description copied from interface:ISession
Callback method invoked when bytes are flushed to the network.
- Specified by:
onFlushed
in interfaceISession
- Parameters:
bytes
- the number of bytes flushed to the network- Throws:
IOException
- if the flush should fail
-
terminate
-
disconnect
public void disconnect() -
isDisconnected
public boolean isDisconnected() -
getLastRemoteStreamId
protected int getLastRemoteStreamId() -
updateLastRemoteStreamId
protected void updateLastRemoteStreamId(int streamId) -
notifyNewStream
-
notifySettings
-
notifyPing
-
notifyReset
-
notifyGoAway
-
notifyClose
protected void notifyClose(Session session, GoAwayFrame frame, org.eclipse.jetty.util.Callback callback) -
notifyIdleTimeout
-
notifyFailure
-
notifyHeaders
-
isClientStream
protected static boolean isClientStream(int streamId) -
dump
- Specified by:
dump
in interfaceorg.eclipse.jetty.util.component.Dumpable
- Overrides:
dump
in classorg.eclipse.jetty.util.component.ContainerLifeCycle
- Throws:
IOException
-
toString
- Overrides:
toString
in classorg.eclipse.jetty.util.component.AbstractLifeCycle
-