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