# File lib/openid/server.rb, line 410
      def answer(allow, server_url=nil)
        if allow or @immediate
          mode = 'id_res'
        else
          mode = 'cancel'
        end

        response = OpenIDResponse.new(self)

        if allow
          response.add_fields(nil, {
                                'mode' => mode,
                                'identity' => @identity,
                                'return_to' => @return_to
                              })
        else
          response.add_field(nil, 'mode', mode, false)
          response.signed.clear
          if @immediate
            unless server_url
              raise ArgumentError, "setup_url is required for allow=false in immediate mode"
            end
            # make a request just like this one, but immediate mode
            setup_request = self.class.new('checkid_immediate',
                                           @identity,
                                           @return_to,
                                           @trust_root)
            setup_url = setup_request.encode_to_url(server_url)
            response.add_field(nil, 'user_setup_url', setup_url, false)
          end

        end
        
        return response
      end