/**
   * Returns a list of entities that are currently on the MBus.
   *
   * @return Addresses of the entites
   */
  public Address[] getKnownEntities() {
    Address[] ext = layer.getKnownEntities();
    Address[] ret = new Address[ext.length + virtual.size()];
    int i = 0;
    for (i = 0; i < ext.length; i++) ret[i] = ext[i];
    Enumeration e = virtual.elements();
    while (e.hasMoreElements()) ret[i++] = ((MessageBus) e.nextElement()).getAddress();

    return ret;
  }
  // ------------------------------------------------------------
  public VirtualTransportLayer(boolean spy) throws MBusException {
    ackQueue = new Hashtable();
    virtual = new Hashtable();
    external = new Vector();
    spyable = spy;

    // Create broadcast-address
    String[][] voidArray = {};
    allTargets = new Address(voidArray);

    layer = new SimpleTransportLayer(new Address[0], this);
    // Register the elements that are known by now
    Address[] tmp = layer.getKnownEntities();
    for (int i = 0; i < tmp.length; i++) external.addElement(tmp[i]);
  }