@Override
	public List<SymbolFileLocation> find(SymbolFileInfo symbolFileInfo, Set<FindOption> options,
			TaskMonitor monitor) {
		if (StringUtils.isBlank(symbolFileInfo.getName())) {
			Msg.warn(this, "Unable to search for empty filename: " + symbolFileInfo);
			return List.of();
		}

		initStorageLevelIfNeeded(monitor);

		try {
			// "ke/kernelstuff.pdb/12345ABCFF0/"
			String uniqueFileDir = getUniqueFileDir(symbolFileInfo);

			// "ke/kernelstuff.pdb/12345ABCFF0/kernelstuff.pdb" or
			// "ke/kernelstuff.pdb/12345ABCFF0/kernelstuff.pd_"
			String filePath = getFirstExists(uniqueFileDir, monitor, symbolFileInfo.getName(),
				getCompressedFilename(symbolFileInfo));

			return (filePath != null)
					? List.of(new SymbolFileLocation(filePath, this, symbolFileInfo))
					: List.of();
		}
		catch (IOException ioe) {
			Msg.warn(this, "Error searching for " + symbolFileInfo.getName(), ioe);
			return List.of();
		}
	}
Common functionality of File and Http symbol servers.
Ghidra/Features/PDB/src/main/java/pdb/symbolserver/AbstractSymbolServer.java