315 Commits

Author SHA1 Message Date
Greg Wilkins
15952aeee4 428232 - Rework batch mode / buffering in websocket. 2014-02-21 00:54:32 +11:00
Simone Bordet
75cc42a647 Improved dump() output. 2014-02-19 23:18:14 +01:00
Joakim Erdfelt
6b1f17b503 Demonstration of BFINAL 2014-02-19 11:32:18 -07:00
Simone Bordet
1ac6b82912 428232 - Rework batch mode / buffering in websocket.
Introduced the automatic batch mode, akin to Jetty 8's WebSocket
implementation.
Now, if there are no more frames to process, and the previous frames
have been aggregated, FrameFlusher auto-flushes the aggregated frames.
This simplifies applications because they don't need to call flush()
explicitly.
2014-02-18 18:31:49 +01:00
Simone Bordet
3240e7383b 428232 - Rework batch mode / buffering in websocket.
Improved logging by wrapping LOG.debug() calls in a
if (LOG.isDebugEnabled()) statement to avoid boxing of primitive
values.
2014-02-18 18:31:49 +01:00
Simone Bordet
0786da6cd0 428232 - Rework batch mode / buffering in websocket.
Avoid to create a new ByteBuffer just to create the mask integer,
saves allocation cost.
2014-02-18 18:31:49 +01:00
Simone Bordet
61b4b0f029 428232 - Rework batch mode / buffering in websocket.
Better default size for SimpleTextMessage Utf8StringBuilder,
to avoid multiple expansions and data copy of the underlying array.
2014-02-18 18:31:48 +01:00
Simone Bordet
996cc8bd92 428232 - Rework batch mode / buffering in websocket.
Optimized FrameFlusher to not create iterators when iterating over a
list, saving allocation costs.
2014-02-18 18:31:48 +01:00
Simone Bordet
4bdca367dd 428232 - Rework batch mode / buffering in websocket.
Refactored FrameFlusher to handle aggregation of frames to support
JSR 356's batch mode.

Now FrameFlusher can aggregate frames as long as the FlushMode they
were sent is AUTO. When a frame that has FlushMode SEND arrives,
it will trigger the flush of the aggregate buffer (and eventually
also other queued frames).
A special BINARY frame is used to implement explicit flush()
invocations.
2014-02-18 18:31:48 +01:00
Simone Bordet
8e5c06b95c 428232 - Rework batch mode / buffering in websocket.
Refactored OutgoingFrames.outgoingFrame() to take an additional
parameter, FlushMode. This is in preparation for handling this new
parameter in FrameFlusher.
2014-02-18 18:31:48 +01:00
Simone Bordet
d2f1954fa0 427700 - Outgoing extensions that create multiple frames should flush
them in order and atomically.

Optimized CompressExtension to reduce data copying at minimum on the
write path.
2014-02-15 17:53:37 +01:00
Simone Bordet
a8e4caca90 427700 - Outgoing extensions that create multiple frames should flush
them in order and atomically.

Removed unused code.
2014-02-15 17:53:23 +01:00
Simone Bordet
a2a90c5c87 427700 - Outgoing extensions that create multiple frames should flush
them in order and atomically.

Modified FragmentExtension to use a Queue and IteratingCallback to
make sure that frames are iteratively fragmented.
The creation of the next fragment only happens when there is a callback
from the next outgoing layer.
2014-02-14 22:21:59 +01:00
Simone Bordet
ad15b27a01 427700 - Outgoing extensions that create multiple frames should flush
them in order and atomically.

Refactored PerMessageDeflateExtension and DeflateFrameExtension
introducing superclass CompressExtension that factors in common
functionalities.
2014-02-14 22:21:59 +01:00
Simone Bordet
81b8990dec 427700 - Outgoing extensions that create multiple frames should flush
them in order and atomically.

Modified DeflateFrameExtension to use a Queue and IteratingCallback to
make sure that frames are iteratively compressed in chunks.
The compression of the next chunk only happen when there is a callback
from the next outgoing layer.
2014-02-14 22:21:59 +01:00
Simone Bordet
53b1ee9e47 427700 - Outgoing extensions that create multiple frames should flush
them in order and atomically.

Modified ExtensionStack to use a Queue and IteratingCallback to make
sure that messages are processed sequentially.
2014-02-14 22:21:59 +01:00
Jesse McConnell
eb0aea46ce set versions.txt file to new version and fix mistaken developmentVersion 2014-02-10 13:48:29 -06:00
Jesse McConnell
f3d38dfb15 [maven-release-plugin] prepare for next development iteration 2014-02-10 11:17:14 -06:00
Jesse McConnell
8f6cbc9111 [maven-release-plugin] prepare release jetty-9.1.2.v20140210 2014-02-10 11:17:07 -06:00
Simone Bordet
66a19bd646 Avoided to copy the frame payload if we happen to have it all
available.
2014-02-10 12:56:54 +01:00
Simone Bordet
18d2180cdc 427588 - WebSocket Parser leaks ByteBuffers.
Fixed by having the Parser release the payload ByteBuffer.
Also reworked WebSocketFrame.reset() method, and made sure
that outgoing frames also don't leak ByteBuffers.
2014-02-10 12:21:50 +01:00
Simone Bordet
21d938f12d 427587 - MessageInputStream must copy the payload.
Forgot to flip the buffer.
2014-02-06 22:39:02 +01:00
Simone Bordet
cf37533d87 427587 - MessageInputStream must copy the payload. 2014-02-06 21:18:21 +01:00
Jesse McConnell
91429ea123 Merge branch 'release-9' 2014-01-10 09:11:25 -06:00
Jesse McConnell
b82ec6e668 [maven-release-plugin] prepare for next development iteration 2014-01-08 16:47:09 -06:00
Jesse McConnell
b99623a21d [maven-release-plugin] prepare release jetty-9.1.1.v20140108 2014-01-08 16:47:01 -06:00
Joakim Erdfelt
29dec203ba Turning on some leak detection in websocket testing 2014-01-08 14:54:57 -07:00
Joakim Erdfelt
9df519c40f 423948 - Cleanup and consolidate testing utilities in WebSocket
+ Created websocket-common-tests.jar artifact
+ Consolidated duplicate code from other websocket-* modules
  into the websocket-common test artifact
2014-01-08 10:47:45 -07:00
Joakim Erdfelt
f0eeb27921 424847 - Deadlock in deflate-frame (webkit binary)
+ Moving notification flows to outside of the synchronization blocks
2014-01-07 11:47:19 -07:00
Joakim Erdfelt
b59057c184 424863 - IllegalStateException "Unable to find decoder for type <javax.websocket.PongMessage>"
+ Expanding testing of PongMessage
+ Ensuring that .addMessage(MessageHandler.Whole<PongMessage>) works
+ Ensuring that ping or pong messages all goto assigned message
  handler for PongMessage, for both extends Endpoint and
  annotated @OnMessage
2014-01-06 17:54:57 -07:00
Joakim Erdfelt
8016065823 424706 - The setMaxIdleTimeout of javax.websocket.Session does not take any affect
+ Making sure that JsrSession updates Connection on use of
  setMaxIdleTimeout after a connection has been opened.
2014-01-06 15:07:02 -07:00
Joakim Erdfelt
a12fd9ea03 Happy New Year - 2014! 2014-01-02 14:50:14 -07:00
Joakim Erdfelt
5cf9640cfa 423724 - WebSocket / Rename MessageAppender.appendMessage to .appendFrame 2013-12-20 13:22:01 -07:00
Greg Wilkins
ab9040bb63 424497 - Allow concurrent async sends 2013-12-20 11:49:33 +11:00
Simone Bordet
8d621a9331 424043 - IteratingCallback Idle race.
A few renamings and fixes to avoid IllegalStateExceptions.
2013-12-15 23:51:04 +01:00
Simone Bordet
41fc2b8f87 424043 - IteratingCallback Idle race.
Renamed Next enum to Action, and renamed some constant of the State
enum to avoid confusion with the Action enum.

Simplified succeeded() and failed(Throwable) code,
covering also cases not covered before.

Fixed case SCHEDULED in succeeded() that was returning in case the
compareAndSet failed.

Fixed race in perform(), where 2 threads may execute concurrently
after having returned from process().

Vastly improved javadocs and comments.
2013-12-15 00:47:55 +01:00
Greg Wilkins
7141483356 424043 - IteratingCallback Idle race 2013-12-14 09:14:12 +11:00
Joakim Erdfelt
46ef022cf4 421314 - Websocket / Connect attempt with Chrome 32+ fails with "Some extension already uses the compress bit"
+ Reworked extension negotiation to be more consistent with the changes
  to the spec that Chrome 32 are introducing.  Namely that first
  extension to claim RSV bit wins, all other conflicting extensions are
  ignored.
2013-12-13 12:30:26 -07:00
Joakim Erdfelt
5c296c99d8 Cleaning up tests 2013-12-13 12:30:25 -07:00
Greg Wilkins
0104374adb 423048 - Receiving a PING while sending a message kills the connection
Optimised to remove msgLock and just have a concurrent state machine on msgType
2013-12-13 11:51:05 +11:00
Joakim Erdfelt
6d70aab61d 423915 - WebSocket / Active connection from IOS that goes into airplane mode not disconnected on server side
+ Working testcase for JSR-356
2013-12-12 16:58:42 -07:00
Joakim Erdfelt
7af074bafb 423048 - Receiving a PING while sending a message kills the connection
+ Removed msgLock on control frames.
+ Moved sendPing() and sendPong() to async frame handling
+ Squelched a mess of stacktraces in the testing output
2013-12-12 16:08:53 -07:00
Joakim Erdfelt
5941e9db83 Fixing various warnings / imports 2013-12-12 14:46:40 -07:00
Joakim Erdfelt
ecf3b8a68f 421189 - WebSocket / AbstractExtension's WebSocketPolicy is not Session-specific
+ Ensuring that the EventDriver managed policy is used by the
  ExtensionStack
2013-12-12 13:51:01 -07:00
Joakim Erdfelt
120e0e59ca Cleanup (Imports / StandardCharset / Dead APIs) 2013-12-11 17:27:58 -07:00
Joakim Erdfelt
5b77679ecf Attempted fix for intermittent test failures around MessageInputStream 2013-12-10 13:01:12 -07:00
Joakim Erdfelt
48fe92d939 423185 - Update permessage-deflate for finalized spec
+ Adding support for new permessage-deflate parameters
+ Tested against pywebsocket (rev 790)
+ Tested against Chrome Canary 32
2013-12-09 16:20:14 -07:00
Joakim Erdfelt
db777310b5 WebSocket / RFC-6455: Section 5.1 frame masking validation 2013-12-09 16:20:14 -07:00
Joakim Erdfelt
1eac013485 422192 - ClientContainer.getOpenSessions() always returns null
+ Adding SessionListener and using it judiciously
2013-12-04 12:24:48 -07:00
Greg Wilkins
bae646de72 gave test more time 2013-11-28 13:55:42 +11:00