- Catch any exceptions produced while generating a handshake response and send a
400 Bad Request
response to the client - Pick the RFC-6455 protocol version if the request contains any of the headers used by that version
- Handle errors encountered while handling malformed draft-76 requests
- Change license from MIT to Apache 2.0
- Add
ping
andpong
to the set of events users can listen to
- Provide a pure-Ruby fallback for the native unmasking code
- Amend warnings issued when running with -W2
- Make sure message strings passed in by the app are transcoded to UTF-8
- Copy strings if necessary for frozen-string compatibility
- Reject draft-76 handshakes if their Sec-WebSocket-Key headers are invalid
- Throw a more helpful error if a client is created with an invalid URL
- When the peer sends a close frame with no error code, emit 1000
- Fix how events are stored in
EventEmitter
to fix a backward-compatibility violation introduced in the last release - Use the
Array#pack
andString#unpack
methods for reading/writing numbers to buffers rather than including duplicate logic for this
- Use
SecureRandom
to generate theSec-WebSocket-Key
header - Allow the parser to recover cleanly if event listeners raise an error
- Let the
on()
method take a lambda as a positional argument rather than a block - Add a
pong
method for sending unsolicited pong frames
- Don't emit extra close frames if we receive a close frame after we already sent one
- Fail the connection when the driver receives an invalid
Sec-WebSocket-Extensions
header
- Don't treat incoming data as WebSocket frames if a client driver is closed before receiving the server handshake
- Don't emit multiple
error
events
- Don't allow drivers to be created with unrecognized options
- Support protocol extensions via the websocket-extensions module
- Support connection via HTTP proxies using
CONNECT
- Fix bug where the
Server
driver doesn't passping
callbacks to its delegate - Fix an arity error when calling
fail_request
- Allow
close
to be called beforestart
to close the driver
- Don't hold references to frame buffers after a message has been emitted
- Make sure that
protocol
andversion
are exposed properly by the TCP driver - Correct HTTP header parsing based on RFC 7230; header names cannot contain backslashes
- Fix problems with loading C and Java native extension code
- Correct the acceptable characters used in the HTTP parser
- Correct the draft-76 status line reason phrase
- Expand
max_length
to cover sequences of continuation frames anddraft-{75,76}
- Decrease default maximum frame buffer size to 64MB
- Stop parsing when the protocol enters a failure mode, to save CPU cycles
- Add a
max_length
option to limit allowed frame size
- Support client URLs with Basic Auth credentials
- Fix bug in EventEmitter#emit when listeners are removed
- Fix bug in EventEmitter#listener_count for unregistered events
- Queue sent messages if the client has not begun trying to connect
- Encode all strings sent to I/O as
ASCII-8BIT
- Add API for setting and reading headers
- Add Driver.server() method for getting a driver for TCP servers
- First stable release
- First release
- Proof of concept for people to try out
- Might be unstable