# File lib/dragonfly/server.rb, line 31
    def call(env)
      if dragonfly_url == env["PATH_INFO"]
        dragonfly_response
      elsif (params = url_mapper.params_for(env["PATH_INFO"], env["QUERY_STRING"])) && params['job']
        job = Job.deserialize(params['job'], app)
        validate_job!(job)
        job.validate_sha!(params['sha']) if protect_from_dos_attacks
        response = Response.new(job, env)
        catch(:halt) do
          if before_serve_callback && response.will_be_served?
            before_serve_callback.call(job, env)
          end
          response.to_response
        end
      else
        [404, {'Content-Type' => 'text/plain', 'X-Cascade' => 'pass'}, ['Not found']]
      end
    rescue Job::NoSHAGiven => e
      [400, {"Content-Type" => 'text/plain'}, ["You need to give a SHA parameter"]]
    rescue Job::IncorrectSHA => e
      [400, {"Content-Type" => 'text/plain'}, ["The SHA parameter you gave (#{e}) is incorrect"]]
    rescue JobNotAllowed => e
      log.warn(e.message)
      [403, {"Content-Type" => 'text/plain'}, ["Forbidden"]]
    rescue Serializer::BadString, Serializer::MaliciousString, Job::InvalidArray => e
      log.warn(e.message)
      [404, {'Content-Type' => 'text/plain'}, ['Not found']]
    end