+ Jetty WebSocket API now tracks Sessions and will close them on
lifecycle stop
+ Javax WebSocket API now tracks Sessions and will close them on
lifecycle stop
+ Adding Jetty WebSocket tests for proper close / session tracking
+ Disabling tests that need triage
Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
- Added test cases to test failures in and around the WebSocketProxy
and how it handles them.
- In WebSocketChannel.sendFrame() we were using a null cause for
closeConnection, we are now extracting the cause from the
AbnormalCloseStatus. This was resulting in onError not being called
when there was actually an error and an AbnormalCloseStatus.
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
only do state changes inside synchronized blocks, remember what action
to do and only do this outside of the synchronized block
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
- Redesigned the proxy into a new class called WebSocketProxy containing
a Client2Proxy FrameHandler and a Server2Proxy FrameHandler
- WebSocketProxy uses synchronized blocks with an enum state instead
of the previous compare and sets
- Created a new test similar to ProxyFrameHandlerTest to test the new
WebSocketProxy
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
- Introduced an EMPTY_SESSION in the ProxyFrameHandler as a terminal
state to know whether a FailedCoreSession has been handled
- Use while(true) loops to do the compareAndSet in ProxyFrameHandler
- Improved the tests for the proxy so that it tests the frames received
at every state (ie Client Proxy and Server)
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
+ FrameFlusher "close" frames are detected during
enqueue and sets the state properly for failing
other frames after it
+ Moving away from Blockhead(Client|Server) to using actual implementations
+ Moved tests to /jetty-websocket-tests/ to be able to use actual impl
for both sides of testcase (client and server)
+ Corrected FrameFlusher terminate/close to not fail the close frame
itself, but only frames that arrive AFTER the close frame.
+ Moving WebSocketCloseTest to jetty-websocket-tests to avoid
using BlockheadClient / BlockheadServer in testing
+ Cleanup of unnecessary modifiers on interface
+ Logging error if @OnWebSocketError is undeclared
+ IOState removed
+ New ConnectionState tracks connection basics in a simpler
method then IOState did.
+ No tracking of Remote close initiated (not needed)
+ IncomingFrames.incomingError() removed
+ Session delegates to Connection for all state changes
+ Errors can be communicated to application multiple times
+ Close is only communicated once
Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
- HttpClientProvider is now an interface which defines a default method
newHttpClient, its static get() method get will attempt to use the
XmlHttpClientProvider to create a client, and if this fails to give a
non null client it will be created with the default newHttpClient method
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
Reviewed module-info.java files.
For those that have a "requires static" added a comment about
why the dependency is optional.
Rearranged directives in alphabetical order.
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
Added --add-modules=ALL-MODULE-PATH by default because now Jetty has
proper JPMS modules and when starting in standalone mode only the
org.eclipse.jetty.xml module will be in the module graph - while
before automatic modules where added to the module graph implicitly.
Added --add-reads=ALL-UNNAMED to the websocket module to allow the
websocket implementation to access method handles of application
classes (the websocket endpoints) that live in the web application
classloader (which forms an unnamed module).
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
introduce channelState check in the catch in WSChannel sendFrame
to guard from multiple closes
WebSocketConnection fillAndParse will now try to read until EOF
removed state change in the isOutputOpen check in webSocketChannelState
to as we do the state change in the catch block in WSChannel
added and improved WebSocketCloseTest to test more cases
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
when the WSConnection reads EOF it now notifies the WSChannel
the channel instead of handling it locally
fixed FlusherFlusher failure issues
fixed issue with the WebSocketCloseTest expecting close reason
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
Updating SslContextFactory configuration for tests, since
the change in the default endPointIdentificationAlgorithm
makes the test failing as the certificates are not valid
for the local host, which is different depending on where
the tests are run (locally, jenkins).
Signed-off-by: Simone Bordet <simone.bordet@gmail.com>
succeed callback when you do not have a message sink
OnWebSocketFrame annotation should take an API frame not a core frame
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>
Jetty and Javax ClientUpgradeRequests no longer use the combination of
the the onOpenFuture and the futureCoreSession and instead use only
the CompletableFuture future given to the FrameHandler onOpen
Signed-off-by: Lachlan Roberts <lachlan@webtide.com>