# File lib/sinatra/rack_accept.rb, line 112
    def  callcall(env)
      accept, index = env['rack-accept.request'], {}

      # Skip everything when 'format' parameter is set in URL
      if env['rack.request.query_hash']["format"]
         media_type = case env['rack.request.query_hash']["format"]
            when 'html' then :html
            when 'xml' then :xml
            when 'json' then :json
            when 'gv' then :gv
            when 'png' then :png
          end
        index[media_type] = 1 if media_type
      else
        # Sort all requested media types in Accept using their 'q' values
        sorted_media_types = accept.media_type.qvalues.to_a.sort{ |a,b| a[1]<=>b[1] }.collect { |t| t.first }
        # If Accept header is missing or is empty, fallback to XML format
        sorted_media_types << 'application/xml' if sorted_media_types.empty?
        # Choose the right format with the media type according to the priority
        ACCEPTED_MEDIA_TYPES.each do |format, definition|
          definition[:match].each do |media_type|
            break if index[format] = sorted_media_types.index(media_type)
          end
        end
        # Reject formats with no/nil priority
        index.reject! { |format, priority| not priority }
      end

      #puts sorted_media_types.inspect
      #puts index.inspect

      # If after all we don't have any matching format assume that client has
      # requested unknown/wrong media type and throw an 406 error with no body
      if index.keys.empty?
        status, headers, response = 406, {}, ""
      else
        env['rack-accept.formats'] = index
        status, headers, response = @app.call(env)
      end
      [status, headers, response]
    end