    # File lib/rack/etag.rb, line 23
        def call(env)
          status, headers, body = @app.call(env)

          if etag_status?(status) && etag_body?(body) && !skip_caching?(headers)
            original_body = body
            digest, new_body = digest_body(body)
            body = Rack::BodyProxy.new(new_body) do
              original_body.close if original_body.respond_to?(:close)
            end
            headers[ETAG_STRING] = %(W/"#{digest}") if digest
          end

          unless headers[CACHE_CONTROL]
            if digest
              headers[CACHE_CONTROL] = @cache_control if @cache_control
            else
              headers[CACHE_CONTROL] = @no_cache_control if @no_cache_control
            end
          end

          [status, headers, body]
        end