# File lib/openid/server.rb, line 1218
      def decode(query)
        if query.nil? or query.length == 0
          return nil
        end

        message = Message.from_post_args(query)

        mode = message.get_arg(OPENID_NS, 'mode')
        if !mode
          msg = sprintf("No mode value in message %s", message)
          raise ProtocolError.new(message, msg)
        end

        handler = @@handlers.fetch(mode, self.method('default_decoder'))
        return handler.call(message, @server.op_endpoint)
      end