Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 private bool IsWrongMachineListing()
 {
     return(CurrentParser == FtpParser.Machine && client != null && !client.HasFeature(FtpCapability.MLSD));
 }