/**
   * Return 1st ServerInfo object for the specified Scheme. Is used to find *any* server of the
   * specified protocol.
   *
   * @param scheme
   * @return ServerInfo object
   */
  public ServerInfo getServerInfoForScheme(String scheme) {
    if (scheme == null) return null;

    ServerInfo infos[] = this.getServerInfos(scheme, null);

    if ((infos == null) || (infos.length <= 0)) {
      logger.warnPrintf("Couldn't find server info for scheme:%s\n", scheme);
      return null;
    }

    return infos[0];
  }
  /** Find ServerInfos for specified location, this can be 0 or more matches ! */
  public ServerInfo[] getServerInfosFor(VRL loc) {
    String host = loc.getHostname();
    int port = loc.getPort();
    String scheme = loc.getScheme();
    String userInfo = loc.getUserinfo(); // use FULL userinformation

    // no port in VRL mean => use DEFAULT, not DON'T CARE. (-1= DON'T CARE)
    if (port < 0) port = 0;

    ServerInfo[] infos = this.getServerInfos(scheme, host, port, userInfo);

    if (infos != null)
      if (infos.length > 1)
        logger.warnPrintf("Warning: matched more then 1 ServerInfo for location:%s\n", loc);
    // else
    // logger.warnPrintf(">>> returning 1 info:"+infos[0]);

    return infos;
  }