/// <summary> /// Get the first checksum algorithm mutually supported by both servers. /// </summary> private FtpHashAlgorithm GetFirstMutualChecksum(FtpClient destination) { // special handling for HASH command which is a meta-command supporting all hash types if (HasFeature(FtpCapability.HASH) && destination.HasFeature(FtpCapability.HASH)) { if (HashAlgorithms.HasFlag(FtpHashAlgorithm.MD5) && destination.HashAlgorithms.HasFlag(FtpHashAlgorithm.MD5)) { return(FtpHashAlgorithm.MD5); } if (HashAlgorithms.HasFlag(FtpHashAlgorithm.SHA1) && destination.HashAlgorithms.HasFlag(FtpHashAlgorithm.SHA1)) { return(FtpHashAlgorithm.SHA1); } if (HashAlgorithms.HasFlag(FtpHashAlgorithm.SHA256) && destination.HashAlgorithms.HasFlag(FtpHashAlgorithm.SHA256)) { return(FtpHashAlgorithm.SHA256); } if (HashAlgorithms.HasFlag(FtpHashAlgorithm.SHA512) && destination.HashAlgorithms.HasFlag(FtpHashAlgorithm.SHA512)) { return(FtpHashAlgorithm.SHA512); } if (HashAlgorithms.HasFlag(FtpHashAlgorithm.CRC) && destination.HashAlgorithms.HasFlag(FtpHashAlgorithm.CRC)) { return(FtpHashAlgorithm.CRC); } } // handling for non-standard specific hashing commands if (HasFeature(FtpCapability.MD5) && destination.HasFeature(FtpCapability.MD5)) { return(FtpHashAlgorithm.MD5); } if (HasFeature(FtpCapability.XMD5) && destination.HasFeature(FtpCapability.XMD5)) { return(FtpHashAlgorithm.MD5); } if (HasFeature(FtpCapability.MMD5) && destination.HasFeature(FtpCapability.MMD5)) { return(FtpHashAlgorithm.MD5); } if (HasFeature(FtpCapability.XSHA1) && destination.HasFeature(FtpCapability.XSHA1)) { return(FtpHashAlgorithm.SHA1); } if (HasFeature(FtpCapability.XSHA256) && destination.HasFeature(FtpCapability.XSHA256)) { return(FtpHashAlgorithm.SHA256); } if (HasFeature(FtpCapability.XSHA512) && destination.HasFeature(FtpCapability.XSHA512)) { return(FtpHashAlgorithm.SHA512); } if (HasFeature(FtpCapability.XCRC) && destination.HasFeature(FtpCapability.XCRC)) { return(FtpHashAlgorithm.CRC); } return(FtpHashAlgorithm.NONE); }
private async Task <bool> VerifyFXPTransferAsync(string sourcePath, FtpClient fxpDestinationClient, string remotePath, CancellationToken token = default(CancellationToken)) { // verify args if (sourcePath.IsBlank()) { throw new ArgumentException("Required parameter is null or blank.", "localPath"); } if (remotePath.IsBlank()) { throw new ArgumentException("Required parameter is null or blank.", "remotePath"); } if (fxpDestinationClient is null) { throw new ArgumentNullException("Destination FXP FtpClient cannot be null!", "fxpDestinationClient"); } if ((HasFeature(FtpCapability.HASH) && fxpDestinationClient.HasFeature(FtpCapability.HASH)) || (HasFeature(FtpCapability.MD5) && fxpDestinationClient.HasFeature(FtpCapability.MD5)) || (HasFeature(FtpCapability.XMD5) && fxpDestinationClient.HasFeature(FtpCapability.XMD5)) || (HasFeature(FtpCapability.XCRC) && fxpDestinationClient.HasFeature(FtpCapability.XCRC)) || (HasFeature(FtpCapability.XSHA1) && fxpDestinationClient.HasFeature(FtpCapability.XSHA1)) || (HasFeature(FtpCapability.XSHA256) & fxpDestinationClient.HasFeature(FtpCapability.XSHA256)) || (HasFeature(FtpCapability.XSHA512) && fxpDestinationClient.HasFeature(FtpCapability.XSHA512))) { FtpHash sourceHash = await GetChecksumAsync(sourcePath, token); if (!sourceHash.IsValid) { return(false); } FtpHash destinationHash = await fxpDestinationClient.GetChecksumAsync(remotePath, token); if (!destinationHash.IsValid) { return(false); } return(sourceHash.Value == destinationHash.Value); } else { LogLine(FtpTraceLevel.Info, "Source and Destination does not support the same hash algorythm"); } //Not supported return true to ignore validation return(true); }
private bool IsWrongMachineListing() { return(CurrentParser == FtpParser.Machine && client != null && !client.HasFeature(FtpCapability.MLSD)); }