diff --git a/lib/websocket/driver/hybi.rb b/lib/websocket/driver/hybi.rb index 3487c4a..c2ddd1f 100644 --- a/lib/websocket/driver/hybi.rb +++ b/lib/websocket/driver/hybi.rb @@ -131,8 +131,9 @@ def binary(message) end def ping(message = '', &callback) - @ping_callbacks[message] = callback if callback - frame(message, :ping) + sent = frame(message, :ping) + @ping_callbacks[message] = callback if sent && callback + sent end def pong(message = '') @@ -172,6 +173,10 @@ def frame(buffer, type = nil, code = nil) message.opcode = OPCODES[type] message.data = payload + if !MESSAGE_OPCODES.include?(message.opcode) && payload.bytesize > 125 + raise ArgumentError, 'Control frame payload cannot exceed 125 bytes' + end + if MESSAGE_OPCODES.include?(message.opcode) message = @extensions.process_outgoing_message(message) end