AsperaErrorHelper
using Aspera.Transfer;
using Relativity.Transfer.Aspera.Resources;
using System;
namespace Relativity.Transfer.Aspera
{
internal static class AsperaErrorHelper
{
public static string DefaultErrorMessage => AsperaStrings.DefaultError;
public static bool IsValidErrorCode(int error)
{
if (error > 0)
return error <= 57;
return false;
}
public static bool IsFileNotFoundErrorCode(int error)
{
return error == 4;
}
public static bool IsFilePermissionsErrorCode(int error)
{
return error == 5;
}
public static bool IsBadPathErrorCode(int error)
{
return error == 41;
}
public static bool IsLicenseError(int error)
{
if (error >= 0) {
switch (error) {
case int.MaxValue:
break;
default:
if ((uint)(error - 29) > 1 && error != 38)
return false;
goto case 9;
case 9:
return true;
}
}
return false;
}
public static bool IsAuthenticationError(int error)
{
if (error < 0 || error == 2147483647)
return false;
return error == 19;
}
public static bool IsFatalFaspException(FaspManagerException exception)
{
if (exception.Message.Contains("Transfer already completed"))
return true;
return false;
}
public static bool IsErrorMessageVisible(int error)
{
if (error >= 0) {
switch (error) {
case int.MaxValue:
break;
case 4:
case 5:
case 6:
case 7:
case 10:
case 13:
case 14:
case 15:
case 16:
case 19:
case 21:
case 23:
case 24:
case 25:
case 26:
case 28:
case 29:
case 30:
case 32:
case 34:
case 35:
case 36:
case 37:
case 38:
case 40:
case 41:
case 42:
case 43:
case 44:
case 47:
case 55:
case 56:
return true;
default:
return false;
}
}
return false;
}
public static string GetDisplayErrorMessage(SessionStats stats)
{
string text = GetErrorMessage(stats.ErrorCode, stats.ErrorDescription);
if (!string.IsNullOrEmpty(stats.ErrorDescription))
text = text + " Details: " + stats.ErrorDescription;
return text;
}
public static string GetErrorMessage(int error, string errorDescription)
{
if (error < 0 || error == 2147483647)
return DefaultErrorMessage;
if (IsErrorMessageVisible(error)) {
switch (error) {
case 42:
return AsperaStrings.AlreadyExistsError;
case 3:
return AsperaStrings.AmbiguousTargerError;
case 19:
return AsperaStrings.AuthenticationError;
case 37:
return AsperaStrings.AuthorizationError;
case 50:
return AsperaStrings.BadConfigurationError;
case 41:
return AsperaStrings.BadPathError;
case 45:
return AsperaStrings.BandwidthMeasurementError;
case 14:
return AsperaStrings.ConnectionError;
case 16:
return AsperaStrings.ConnectionLostError;
case 15:
return AsperaStrings.ConnectionTimeoutError;
case 40:
return AsperaStrings.DataTransferTimeoutError;
case 35:
return AsperaStrings.DiskReadError;
case 36:
return AsperaStrings.DiskWriteError;
case 49:
return AsperaStrings.FileDecryptionError;
case 48:
return AsperaStrings.FileEncryptionError;
case 55:
return AsperaStrings.FilePathTooLongError;
case 22:
return AsperaStrings.FileTableOverflowError;
case 24:
return AsperaStrings.FileTooBigError;
case 2:
return AsperaStrings.GenericAscpError;
case 1:
return AsperaStrings.GenericFaspProtocolError;
case 47:
return AsperaStrings.HttpConnectionError;
case 56:
return AsperaStrings.IllegalCharsInPathError;
case 51:
return AsperaStrings.InsecureConnectionError;
case 11:
return AsperaStrings.InternalError;
case 7:
return AsperaStrings.IsDirectoryError;
case 9:
return AsperaStrings.LicenseDuplicateError;
case 30:
return AsperaStrings.LicenseExpiredError;
case 38:
return AsperaStrings.LicenseIllegalError;
case 29:
return AsperaStrings.LicenseNotFoundError;
case 10:
return AsperaStrings.LicenseRateExceededError;
case 5:
return errorDescription.Equals(AsperaStrings.ThereIsNotEnoughtSpaceError) ? AsperaStrings.NoSpaceLeftError : AsperaStrings.NoPermissionsError;
case 25:
return AsperaStrings.NoSpaceLeftError;
case 4:
return AsperaStrings.NoSuchFileError;
case 6:
return AsperaStrings.NotDirectoryError;
case 20:
return AsperaStrings.NothingError;
case 21:
return AsperaStrings.NotRegularError;
case 32:
return AsperaStrings.OutOfMemoryError;
case 39:
return AsperaStrings.PeerAbortedSessionError;
case 26:
return AsperaStrings.ReadOnlyFileSystemError;
case 18:
return AsperaStrings.ReceiverReceiveError;
case 17:
return AsperaStrings.ReceiverSendError;
case 31:
return AsperaStrings.SocketSetupError;
case 27:
return AsperaStrings.SomeFilesError;
case 52:
return AsperaStrings.StartValidationError;
case 43:
return AsperaStrings.StatFailsError;
case 53:
return AsperaStrings.StopValidationError;
case 33:
return AsperaStrings.ThreadSpawnError;
case 54:
return AsperaStrings.ThresholdValidationError;
case 23:
return AsperaStrings.TooManyFilesOpenError;
case 12:
return AsperaStrings.TransferError;
case 13:
return AsperaStrings.TransferTimeoutError;
case 44:
return AsperaStrings.UdpInitiationError;
case 34:
return AsperaStrings.UnauthorizedError;
case 57:
return AsperaStrings.UndefinedError;
case 8:
return AsperaStrings.UsageError;
case 28:
return AsperaStrings.UserCancelError;
case 46:
return AsperaStrings.VLinkError;
default:
return AsperaStrings.DefaultError;
}
}
return DefaultErrorMessage;
}
public static IssueAttributes GetIssueAttributes(int? errorCode, string errorDescription, ClientConfiguration configuration)
{
switch (errorCode.GetValueOrDefault()) {
case 13:
case 15:
case 40:
return IssueAttributes.Io | IssueAttributes.Timeout;
case 42:
return IssueAttributes.Overwrite;
case 4:
return IssueAttributes.FileNotFound | IssueAttributes.Io;
case 19:
case 34:
return IssueAttributes.Authentication;
case 5:
if (errorDescription.Equals(AsperaStrings.ThereIsNotEnoughtSpaceError))
return IssueAttributes.Error | IssueAttributes.StorageOutOfSpace;
if (configuration.PermissionErrorsRetry)
return IssueAttributes.ReadWritePermissions;
return IssueAttributes.Error | IssueAttributes.ReadWritePermissions;
case 41:
if (configuration.BadPathErrorsRetry)
return IssueAttributes.InvalidPath;
return IssueAttributes.Error | IssueAttributes.InvalidPath;
case 35:
case 36:
return IssueAttributes.Io | IssueAttributes.StorageReadWrite;
case 55:
return IssueAttributes.Error | IssueAttributes.LongPath;
case 56:
return IssueAttributes.Error | IssueAttributes.InvalidCharacters;
case 9:
case 10:
case 29:
case 30:
case 38:
return IssueAttributes.Licensing;
case 25:
return IssueAttributes.Io | IssueAttributes.StorageOutOfSpace;
default:
return IssueAttributes.None;
}
}
private static void NormalizeAsperaErrorDtoMessage(ref string message)
{
message = message.TrimEnd(Array.Empty<char>());
if (!message.EndsWith(".", StringComparison.OrdinalIgnoreCase))
message += ".";
}
}
}