/** Register an agent on login */
  public void registerAgent(org.opensims.agent.Agent agent) {
    boolean internalScanAvail = false;

    try {
      // avoiding the proverbial chicken-and-the-egg problem, we
      // obtain some scan parameters from the config file...

      if (agent.getNetworkNode("internal") != null) {
        StringBuffer path = new StringBuffer("//");
        path.append(org.opensims.xml.Node.NETWORK_NODE);
        path.append("[@topology = 'internal']/");
        path.append(org.opensims.xml.Node.SCAN_NODE);
        path.append("[@enabled = 'true']");

        org.jdom.Element internal_net_node = (org.jdom.Element) agent.getNetworkNode("internal");
        org.jdom.Element internal_scan_node =
            (org.jdom.Element)
                org.jdom.xpath.XPath.selectSingleNode(internal_net_node, path.toString());

        if (internal_scan_node != null) {
          // create a Scan object, to maintain the state of autodiscovery

          String class_name = internal_scan_node.getAttributeValue("class");
          Class c = Class.forName(class_name);

          org.opensims.model.Scan scan = (org.opensims.model.Scan) c.newInstance();

          scan.init(
              this,
              agent,
              internal_scan_node,
              agent.getNetworkNode("internal"),
              agent.getNetworkNumber("internal"),
              agent.getNetworkDevice("internal"));

          // Restructure Hash Table to use network_number as a key, as opposed to the agent key
          // put(scan.getKey(), scan);
          put(agent.getNetworkNumber("internal"), scan);

          // Use this scan as the default for all agents that aren't directly assigned one (using
          // the createThreads() method on the agent object --ME
          agent.setScan(scan);
          internalScanAvail = true;
        }
      }

      if (agent.getNetworkNode("dmz") != null) {
        StringBuffer path = new StringBuffer("//");
        path.append(org.opensims.xml.Node.NETWORK_NODE);
        path.append("[@topology = 'dmz']/");
        path.append(org.opensims.xml.Node.SCAN_NODE);
        path.append("[@enabled = 'true']");

        org.jdom.Element external_net_node = (org.jdom.Element) agent.getNetworkNode("dmz");
        org.jdom.Element external_scan_node =
            (org.jdom.Element)
                org.jdom.xpath.XPath.selectSingleNode(external_net_node, path.toString());

        if (external_scan_node != null) {
          // create a Scan object, to maintain the state of autodiscovery

          String class_name = external_scan_node.getAttributeValue("class");
          Class c = Class.forName(class_name);

          org.opensims.model.Scan scan = (org.opensims.model.Scan) c.newInstance();

          scan.init(
              this,
              agent,
              external_scan_node,
              agent.getNetworkNode("dmz"),
              agent.getNetworkNumber("dmz"),
              agent.getNetworkDevice("dmz"));
          // Restructure Hash Table to use network_number as a key, as opposed to the agent key
          // put(scan.getKey(), scan);
          put(agent.getNetworkNumber("dmz"), scan);

          // First check if we have an "internal" scan, if not, then set this scan as default
          if (!internalScanAvail) {
            agent.setScan(scan);
          }
        }
      }
    } catch (Exception e) {
      log_.error("register agent", e);
    }
  }
  /**
   * Lookup for Plugins that do not use the Autodiscovery Engine (FSM) Somewhat circuitous and in
   * need of revision
   */
  public org.opensims.model.Scan getScan(org.opensims.agent.Agent agent) {
    org.opensims.model.Scan scan = agent.getScan();

    return scan;
  }