class WebSocket::Driver::Hybi
def parse_opcode(data)
def parse_opcode(data) rsvs = [RSV1, RSV2, RSV3].map { |rsv| (data & rsv) == rsv } if rsvs.any? return fail(:protocol_error, "One or more reserved bits are on: reserved1 = #{rsvs[0] ? 1 : 0}" + ", reserved2 = #{rsvs[1] ? 1 : 0 }" + ", reserved3 = #{rsvs[2] ? 1 : 0 }") end @final = (data & FIN) == FIN @opcode = (data & OPCODE) unless OPCODES.values.include?(@opcode) return fail(:protocol_error, "Unrecognized frame opcode: #{@opcode}") end unless FRAGMENTED_OPCODES.include?(@opcode) or @final return fail(:protocol_error, "Received fragmented control frame: opcode = #{@opcode}") end if @mode and OPENING_OPCODES.include?(@opcode) return fail(:protocol_error, 'Received new data frame but previous continuous frame is unfinished') end @stage = 1 end