# File lib/websocket/handshake/server.rb, line 73
      def from_rack(env)
        @headers = env.select { |key, _value| key.start_with? 'HTTP_' }.each_with_object({}) do |tuple, memo|
          key, value = tuple
          memo[key.gsub(/\AHTTP_/, '').tr('_', '-').downcase] = value
        end

        @path      = env['REQUEST_PATH']
        @query     = env['QUERY_STRING']

        set_version

        # Passenger is blocking on read
        # Unicorn doesn't support readpartial
        # Maybe someone is providing even plain string?
        # Better safe than sorry...
        if @version == 76
          input = env['rack.input']
          @leftovers = if input.respond_to?(:readpartial)
                         input.readpartial
                       elsif input.respond_to?(:read)
                         input.read
                       else
                         input.to_s
                       end
        end

        @state = :finished
      end