Skip to content

Commit

Permalink
Serialise the FIN and RSV bits of frames correctly.
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoglan committed Dec 5, 2014
1 parent eb20069 commit ef862fd
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 1 deletion.
2 changes: 2 additions & 0 deletions examples/tcp_server.rb
Expand Up @@ -2,10 +2,12 @@
require 'bundler/setup' require 'bundler/setup'
require 'eventmachine' require 'eventmachine'
require 'websocket/driver' require 'websocket/driver'
require 'permessage_deflate'


module Connection module Connection
def initialize def initialize
@driver = WebSocket::Driver.server(self) @driver = WebSocket::Driver.server(self)
@driver.add_extension(PermessageDeflate)


@driver.on(:connect) { |e| @driver.start if WebSocket::Driver.websocket? @driver.env } @driver.on(:connect) { |e| @driver.start if WebSocket::Driver.websocket? @driver.env }
@driver.on(:message) { |e| @driver.frame(e.data) } @driver.on(:message) { |e| @driver.frame(e.data) }
Expand Down
7 changes: 6 additions & 1 deletion lib/websocket/driver/hybi.rb
Expand Up @@ -196,9 +196,14 @@ def send_frame(frame, run_extensions = false)
length = frame.length length = frame.length
header = (length <= 125) ? 2 : (length <= 65535 ? 4 : 10) header = (length <= 125) ? 2 : (length <= 65535 ? 4 : 10)
offset = header + (frame.masked ? 4 : 0) offset = header + (frame.masked ? 4 : 0)
buffer = []
masked = frame.masked ? MASK : 0 masked = frame.masked ? MASK : 0


buffer = [FIN | frame.opcode] buffer[0] = (frame.final ? FIN : 0) |
(frame.rsv1 ? RSV1 : 0) |
(frame.rsv2 ? RSV2 : 0) |
(frame.rsv3 ? RSV3 : 0) |
frame.opcode


if length <= 125 if length <= 125
buffer[1] = masked | length buffer[1] = masked | length
Expand Down

0 comments on commit ef862fd

Please sign in to comment.