Commit Graph

160 Commits

Author SHA1 Message Date
Simone Bordet a13a55e242 Introduced LeakDetector.id() to be consistent in logging the resource ID. 2015-03-07 22:32:59 +01:00
Joakim Erdfelt 74ee154bb1 Cleaning up LeakTrackingByteBufferPool / LeakDetector
+ Making use of LeakTrackingByteBufferPool more consistent
+ Using MappedByteBufferPool.Tagged where appropriate in test cases
+ Adding leak count tracking to LeakDetector
+ Adding leak count tracking to LeakTrackingByteBufferPool
+ Renaming websocket LeakTrackingBufferPool to
  LeakTrackingBufferPoolRule to reflect junit @Rule usage
+ Making websocket LeakTrackingBufferPoolRule always use
  MappedByteBufferPool.Tagged
+ Fixed various grammar concerns
2015-03-06 14:27:58 -07:00
Joakim Erdfelt 23e9246115 Adding TooFastClientTest for websocket server
+ test performs a client upgrade + 2 websocket frames all at once.
  not waiting for the upgrade response before sending those frames.
+ currently set to @Ignore until we can address how to copy this extra
  buffer information from the Http side to the WebSocket side.
2015-02-12 09:30:31 -07:00
Joakim Erdfelt 6a0668b7a1 Happy New Year 2015 2015-01-07 17:03:30 -07:00
Joakim Erdfelt d6082b2d65 444617 - Expose local and remote socket address to applications
+ Exposing 2 new automatically added userProperties
  * "javax.websocket.endpoint.localAddress" 
  * "javax.websocket.endpoint.remoteAddress"
  these are both java.net.InetSocketAddress objects
2014-09-22 12:43:37 -07:00
Simone Bordet 745f757552 Guarded calls to LOG.debug() with if (LOG.isDebugEnabled()) to reduce allocation of varargs Object[]. 2014-07-15 18:49:14 +02:00
Joakim Erdfelt 7412951373 Removing experimental testcase that is no longer relevant 2014-05-29 11:46:36 -07:00
Joakim Erdfelt f2ea8351b6 429390 - Decoders and Encoders are not registered for non-annotated ClientEndpoint
+ Adding EncoderTest to verify reported bug
+ Fixing SimpleEndpointMetadata to propagate the encoder/decoder list
  when present.
2014-05-22 13:12:39 -07:00
Joakim Erdfelt bcf52e14f0 435206 - Can't add Cookie header on websocket ClientUpgradeRequest
+ Fixed competing cookie setters between WebSocketClient's use of
  CookieStore and UpgradeRequest.setCookies()
+ Added some utility methods to LazyList (for lack of existence of
  ListUtil or CollectionUtil in jetty-util)
2014-05-20 11:57:35 -07:00
Joakim Erdfelt cd003dcea0 Adjusting test timeouts for slow systems 2014-05-13 09:23:54 -07:00
Joakim Erdfelt f9fad8f49f 434395 - WebSocket / memory leak, WebSocketSession not cleaned up in abnormal closure cases
+ Cleanup for read, bug fix for this occurred in prior commits
  surrounding CLOSE handling
2014-05-08 14:08:20 -07:00
Joakim Erdfelt 703deea1df Tidying up ws-test-client read operations (in hope that it will address test failures on jenkins) 2014-04-25 12:48:04 -07:00
Joakim Erdfelt 1fb578165f 433262 - WebSocket / Advanced close use cases
+ Improved test case handling of frame reading (to prevent future
  false failures)
+ Improved AbstractWebSocketConnection handling of close -> disconnect
  to only trigger on successful write (or failure) of close frame flush
  attempt.
+ Flusher close on all forms of disconnect, even half-closed.
2014-04-25 07:33:29 -07:00
Joakim Erdfelt 2bc9accd98 433262 - WebSocket / Advanced close use cases
+ Fixing bad assumptions in unit tests where the client would send a few
  frames to test the protocol behavior followed by the close frame.
  But the test expected the server to initiate the close, but this setup
  of the tests would mean that the client initiated the close.
2014-04-23 12:56:00 -07:00
Joakim Erdfelt 900dea3719 433262 - WebSocket / Advanced close use cases
+ ClientCloseTest implementation of various outlined use cases.
2014-04-22 16:07:45 -07:00
Joakim Erdfelt f282ffe897 429779 - masked zero length websocket frame gives NullPointerException during streaming read
+ Corrected payload buffer copying to ignore null and empty payloads
2014-03-06 11:29:42 -07:00
Simone Bordet f465a13d6d 428435 - Large streaming message fails in MessageWriter.
Fixed buffering, synchronization and callback notification in the
websocket stream implementation classes.
2014-02-24 14:28:10 +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 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 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
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 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
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
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 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
Greg Wilkins 0a52c64d16 421697 - IteratingCallback improvements
Use the iteratingcallback for websocket
use gather writes for websocket
always write entire websocket payload
2013-11-21 15:11:56 +11:00
Greg Wilkins 1eb2997efd 421697 - IteratingCallback improvements
avoid wrapping writeCallback
Idle state added to IteratingCallback for SPDY
2013-11-21 14:52:39 +11:00
Greg Wilkins 41f60bd152 421697 - IteratingCallback improvements
Cleanup WebSocket impl first

+ Logic for size on Generator was backwards.
+ Logic in Generator for RSV flags was incorrect.
+ Generalizing flagsInUse for Parser too
2013-11-21 12:40:32 +11:00
Greg Wilkins f567bddad9 global clean up imports 2013-11-04 13:48:03 +11:00
Greg Wilkins eb3bb660b5 Merge remote-tracking branch 'origin/master' into jetty-9.1
Conflicts:
	jetty-client/src/main/java/org/eclipse/jetty/client/util/DigestAuthentication.java
	jetty-client/src/test/java/org/eclipse/jetty/client/HttpReceiverTest.java
	jetty-client/src/test/java/org/eclipse/jetty/client/HttpSenderTest.java
	jetty-http/src/main/java/org/eclipse/jetty/http/HttpField.java
	jetty-server/src/test/java/org/eclipse/jetty/server/AbstractHttpTest.java
	jetty-servlets/src/test/java/org/eclipse/jetty/servlets/AbstractDoSFilterTest.java
	jetty-spdy/spdy-core/src/main/java/org/eclipse/jetty/spdy/generator/HeadersBlockGenerator.java
	jetty-spdy/spdy-core/src/main/java/org/eclipse/jetty/spdy/parser/HeadersBlockParser.java
	jetty-websocket/websocket-client/src/main/java/org/eclipse/jetty/websocket/client/ClientUpgradeRequest.java
	jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/WebSocketFrame.java
	jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/WebSocketSession.java
	jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/compress/DeflateCompressionMethodTest.java
	jetty-websocket/websocket-common/src/test/java/org/eclipse/jetty/websocket/common/extensions/compress/PerMessageDeflateExtensionTest.java
2013-11-03 18:22:09 +11:00
Mikhail Mazursky 6b0269a16d [Bug 420930] Use Charset to specify character encoding
Signed-off-by: Mikhail Mazursky <mikhail.mazursky@gmail.com>
2013-11-02 14:44:36 +06:00
Joakim Erdfelt 6f1eb712e9 Cleaning up imports 2013-11-01 10:03:40 -07:00
Joakim Erdfelt 275008d207 attempting to fix occasional test failure 2013-10-23 12:19:22 -07:00
Joakim Erdfelt be2385276f WebSocket / Fixing support for permessage-deflate extension 2013-08-28 11:49:54 -07:00
Joakim Erdfelt 20fbd95bf1 395444 - Websockets not working with Chrome (deflate problem)
+ Hopefully final fix to deflate-frame
+ Splitting out extension named 'deflate-frame' (last spec'd standard) from
  'x-webkit-deflate-frame' (standard in use by chrome + safari)
2013-08-27 14:20:07 -07:00
Greg Wilkins e4235ea070 415744 - Reduce Future usage in websocket 2013-08-23 19:58:46 +10:00
Joakim Erdfelt 4d9cb44536 WebSocket - Calling setPayload() outside of ContinuationFrame 2013-08-20 16:51:11 -07:00
Joakim Erdfelt e56fddfc4a WebSocket - Calling setPayload() outside of TextFrame and BinaryFrame 2013-08-20 16:45:26 -07:00
Joakim Erdfelt a089780701 WebSocket - Calling setPayload() outside of PingFrame and PongFrame 2013-08-20 16:39:26 -07:00
Joakim Erdfelt 975d9870d2 WebSocket - more code cleanup 2013-08-20 16:28:51 -07:00
Joakim Erdfelt c548cba71c WebSocket - fixing windowed parse issue with masked frames 2013-08-20 12:56:32 -07:00
Joakim Erdfelt 34f03cb0e8 WebSocket / releasing (header) buffer acquired during generation 2013-08-20 09:57:57 -07:00
Joakim Erdfelt 8e66da396e Merge branch 'jetty-9.1-wssplitframe' into jetty-9.1 2013-08-19 15:27:09 -07:00
Joakim Erdfelt 3dbcc04b73 Breaking apart WebSocketFrame into sub-frame types
+ Performance improvements?
+ Less copying of data
2013-08-19 15:26:07 -07:00
Simone Bordet 45724b63ec Improved masking performance by using ints instead of bytes. 2013-08-19 22:11:52 +02:00
Joakim Erdfelt 980effaede WebSocket - reducing memory footprint of WebSocketFrame by not using boolean fields 2013-08-13 12:09:43 -07:00
Joakim Erdfelt 1e39b7d476 WebSocket / Performance - cleaning up tests from fallout on bug 414913
+ Copying payload in test cases for comparison reasons, as the reuse of
  payloads by the implementation now means that the payload might be
  masked by a random client side mask.
+ Cleaning up Abnormal Close handling for idle timeout cases
+ Fixing logging a tag
+ Fixing intermittent test failure in jsr EchoTest
2013-08-12 16:29:25 -07:00
Joakim Erdfelt 46b3dc10c8 414913 - WebSocket / Performance - reduce ByteBuffer allocation/copying during generation/writing
+ Splitting Header bytes from payload bytes.
+ returning List<ByteBuffer> from WriteBytesProvider now
+ returning possibly more than 1 frame per
  WriteBytesProvider.getByteBuffers() for submission to
  Endpoint.write()'s gathered write of multiple bytebuffers
2013-08-12 16:29:25 -07:00
Joakim Erdfelt 833aa6723d WebSocket - More concurrency fixes found by FindBugs 2013-08-01 13:51:18 -07:00
Joakim Erdfelt 07041f6439 JSR-356 making HTTP Header map use TreeMap(String.CASE_INSENSITIVE_ORDER) 2013-08-01 10:50:01 -07:00
Joakim Erdfelt 28b3ee8b13 WebSocket - breaking out unfinished MUX extension into its own module 2013-07-30 15:09:40 -07:00
Joakim Erdfelt 702b675e86 JSR-356 Fixing dispatching for Streaming reads 2013-07-30 12:49:04 -07:00
Joakim Erdfelt d7d4e415ea JSR-356 - making use of ServiceLoader technique for finding Extensions 2013-07-24 14:46:59 -07:00
Joakim Erdfelt 89b22d0c90 Adding timeouts on problematic tests to prevent CI abort 2013-06-19 20:53:23 -07:00
Joakim Erdfelt ffceb642c5 JSR-356 cleaning up MessageInputStream and MessageReader 2013-06-05 10:34:38 -07:00
Joakim Erdfelt 3f3b9fda61 JSR-356 attempting to rethink the InputStream handling 2013-06-04 15:10:44 -07:00
Joakim Erdfelt c872b95c04 JSR-356 more work on supporting Streams 2013-05-30 16:25:38 -07:00
Joakim Erdfelt 4c455e4f9b JSR-356 - cleaning up Writer support
+ Eliminating AppendableByteBuffer in favor of direct CharBuffer use
+ Renaming Utf8ByteBuffer to Utf8CharBuffer to better suit usage
2013-05-28 15:09:48 -07:00
Joakim Erdfelt eaf8e46570 JSR-356 - Adding Writer support.
+ Introducing AppendableByteBuffer and Utf8ByteBuffer
+ Adding MessageWriter implementation based on Utf8ByteBuffer
2013-05-28 12:51:50 -07:00
Joakim Erdfelt 48dea3bb1d JSR-356 adding basic MessageOutputStream support for writing to an OutputStream 2013-05-23 15:51:40 -07:00
Joakim Erdfelt 9f82849900 Merge from [master] to [javawebsocket-jsr] 2013-05-09 12:10:57 -07:00
Joakim Erdfelt f2528642d9 Making Jetty WebSocket API Echo Examples more consistent (for doc) 2013-05-06 13:47:28 -07:00
Joakim Erdfelt 9ad5ab1ed5 406449 - Session's disconnect not detected
+ Vastly cleaned up IOState and ConnectionState behavior
2013-04-30 15:54:41 -07:00
Joakim Erdfelt ef77b854fa 404911 - WebSocketCloseTest fails spuriously
+ Renabling test
+ Using EventQueue from jetty-test-helper instead
+ Standarizing HttpResponseHeaderParser into websocket-common so that
  remaining bytebuffer logic is maintained in one place.
+ Making BlockingClient also use HttpResponseHeaderParser
2013-04-26 15:37:46 -07:00
Joakim Erdfelt b2e675ebad Merge branch 'master' into javawebsocket-jsr 2013-04-17 07:16:03 -07:00
Joakim Erdfelt 824675d072 Guarding ExtensionStack.toString() from NPE 2013-04-16 06:49:33 -07:00
Joakim Erdfelt e0d353629f JSR-356 - updates to Session tracking and start of PathMappings
+ Refactored websocket-commons Session creation to be factory based
+ Introduced new org.eclipse.jetty.websocket.common.SessionFactory
+ Made websocket-client and websocket-server use new SessionFactory
+ Introduced JsrSessionFactory to allow for consistent Session creation
  even in the Jsr (no more duplciate Session creation)
+ Using JsrSessionFactory in javax-websocket-client-impl
+ Introducing PathMappings to hopefully replace jetty-util's PathMap
+ Using standard ClientEndpointConfig when appropriate.
+ Introducing JettyClientEndpointConfig for annotation based
  configurations
+ Renaming EchoSocket used in javax.websocket client testing to
  JettyEchoSocket to better indicate that its the Jetty server side
  implementation and not the javax.websocket client side socket.
+ Changed IncomingFrames.incomingError() parameter from
  WebSocketException to Throwable to match behavior on the JSR
2013-04-09 11:21:59 -07:00
Joakim Erdfelt fc7526b739 [JSR-356] Refactoring annotated callables to handle any-order rule 2013-03-26 17:30:49 -07:00
Joakim Erdfelt fd8f2b9753 Merge from [master] -> [javawebsocket-jsr] 2013-03-11 10:57:08 -07:00
Joakim Erdfelt 9e78529a17 402154 - WebSocket / Session.setIdleTimeout(ms) should support in-place idle timeout changes
+ Made WebSocketSession delegate idle timeouts to LogicalConnection,
   that way the EndPoint or Mux can manage the idle timeout accordingly.
2013-03-01 09:24:03 -07:00
Joakim Erdfelt 370bdafc15 Reverting direct ByteBuffer commits
+ Reverting commit : 5621f87c81
  + Reverting commit : bbcf0c77b8
2013-02-26 10:41:40 -07:00
Joakim Erdfelt bbcf0c77b8 Switching to direct ByteBuffers 2013-02-23 16:44:49 -07:00
Joakim Erdfelt 5621f87c81 Switching to direct ByteBuffers 2013-02-23 16:44:49 -07:00
Joakim Erdfelt 4fb1bc80da 393473 - Add support for JSR-356 (javax.websocket) draft
+ Refactoring EventDriver to be more pluggable (for jsr endpoints)
2013-02-13 13:37:26 -07:00
Joakim Erdfelt 43231d8451 393473 - Add support for JSR-356 (javax.websocket) draft
+ Restarting branch, copying over work from November with new JSR-356
   Draft 012 api in mind.
2013-02-12 16:19:35 -07:00
Joakim Erdfelt 9ae3c94b22 399520 - Websocket needs session idle timeouts
+ Integrated suggestions about AbstractConnection.onReadTimeout()
 + Enabled tests on client side
2013-02-12 13:51:06 -07:00
Joakim Erdfelt 1480f3d8fc 399669 - Remove WebSocketConnection in favor of websocket.api.Session 2013-01-31 12:09:04 -07:00
Joakim Erdfelt b2951bdf5d 396428 - Test for WebSocket masking on client fragments per RFC 6455 Sec 5.1 2013-01-30 13:51:49 -07:00
Joakim Erdfelt 60088fa274 399515 - Websocket-client connect issues should report to websocket onError handlers 2013-01-30 12:15:15 -07:00
Joakim Erdfelt 4f48bc7e7b 399343 - OnWebSocketConnect should use api.Session parameter instead.
+ Changed method signature for WebSocketListener and the various
  @OnWebSocket* annotations
2013-01-29 13:22:38 -07:00
Joakim Erdfelt 871b64cf38 Bug 399344 - Add missing @OnWebSocketError annotation 2013-01-29 13:22:38 -07:00
Joakim Erdfelt 2e216dddb7 Consolidating WebSocketPolicy.setMax*Size() into single setMaxMessageSize() 2013-01-18 09:27:56 -07:00
Joakim Erdfelt 4660f35210 393733 - WebSocketClient interface should support multiple connections
+ Removing deprecated methods from Session
+ Fixing client side UpgradeConnection to handle extension via new
  ExtensionStack object
+ Making ExtensionStack.getNegotiatedExtensions() return
  List<ExtensionConfig> instead of List<String>
+ Fixing tests that relied on changes
2013-01-16 15:11:57 -07:00
Joakim Erdfelt eff1262e49 398105 - Clean up WebSocketPolicy 2013-01-16 15:11:56 -07:00
Jesse McConnell e1c516c7d1 merge from jetty-8 and update license blocks. 2013-01-11 17:04:53 -06:00
Joakim Erdfelt 1936a0fc51 Fixing harmless NPE seen during testing. 2012-12-21 14:00:36 -07:00
Joakim Erdfelt ecb472f30b Introducing WriteBytesProvider 2012-12-14 16:12:48 -07:00
Joakim Erdfelt 9bbfcd7e62 More websocket threading issues
* Using new IOState object in AbstractWebSocketConnection to better
  manage close handshake state and replies.
* Cleaning up many bad BufferPool.release() calls against ByteBuffers
  that didn't arrive from BufferPool.acquire()
* Removing many ByteBuffer.wrap() calls.
* Fixing FrameCompression / MessageCompression extension handling
  of ByteBuffers
2012-12-12 11:06:15 -07:00
Joakim Erdfelt baaf94eeae Fixing write of large websocket frames (25MB+)
+ Using ForkInvoker from util
+ Using FrameBytes logic from SPDY
+ Fixing bad flush logic
+ Fixing lazy BufferPool.release() logic
+ Fixing Buffer reuse issue
+ Fixing BlockheadServer to use ExtensionStack
+ Moving WriteResultFuture helper classes out of tests into main
+ Introducing common IOState handling for common close handshake use
2012-12-10 09:23:18 -07:00
Joakim Erdfelt 11cbe274af 395344 Move JSR-356 (Java WebSocket API) work off to Jetty 9.1.x 2012-11-28 16:55:13 -07:00