# File lib/openid/consumer.rb, line 347
    def complete(query)
      begin
        token = @session.delete(@@token_key)
      rescue
        token = @session[@@token_key]
        @session[@@token_key] = nil
      end
      
      if token.nil?
        resp = FailureResponse.new(nil, 'No session state found.')
      else
        resp = @consumer.complete(query, token)
      end

      disco = self.get_discovery(resp.identity_url)

      if [SUCCESS, CANCEL].member?(resp.status)
        if resp.identity_url
          resp.service = disco.finish
        end
      else
        resp.service = disco.current
      end

      return resp
    end