def METHOD_NAME(pfn):
    """
      Parse pfn and save all bits of information into dictionary
    :param str pfn: pfn string
    """
    if not pfn:
        return S_ERROR(f"wrong 'pfn' argument value in function call, expected non-empty string, got {str(pfn)}")
    pfnDict = dict.fromkeys(["Protocol", "Host", "Port", "WSUrl", "Path", "FileName"], "")
    try:
        parsed = parse.urlparse(pfn)
        pfnDict["Protocol"] = parsed.scheme
        if ":" in parsed.netloc:
            pfnDict["Host"], pfnDict["Port"] = parsed.netloc.split(":")
        else:
            pfnDict["Host"] = parsed.netloc
        pfnDict["Path"] = os.path.dirname(parsed.path)
        pfnDict["FileName"] = os.path.basename(parsed.path)
        if parsed.query:
            pfnDict["Options"] = parsed.query
        return S_OK(pfnDict)
    except Exception as e:  # pylint: disable=broad-except
        errStr = "Pfn.default_pfnparse: Exception while parsing pfn: " + str(pfn)
        gLogger.exception(errStr, lException=e)
        return S_ERROR(errStr)