<PackageReference Include="Relativity.Server.Transfer.SDK" Version="24000.0.1" />

GlobalSettings

using Relativity.Transfer.Resources; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Reflection; using System.Security.Cryptography; namespace Relativity.Transfer { public class GlobalSettings : IGlobalSettings { public const double DefaultCacheExpirationInSeconds = 3600; public const long DefaultMaxBytesPerBatch = 107374182400; public const int DefaultMaxFilesPerBatch = 50000; public const int DefaultNodePageSize = 100; public const string DefaultPluginFileNameFilter = "*.dll"; public const string DefaultPluginFileNameMatch = "Relativity.Transfer"; public const bool DefaultCommandLineModeEnabled = false; public const SearchOption DefaultPluginSearchOption = SearchOption.TopDirectoryOnly; private const MemoryProtectionScope DefaultMemoryProtectionScope = 0; public const bool DefaultStatisticsLogEnabled = false; public const double DefaultStatisticsLogIntervalSeconds = 2; public const int DefaultStatisticsMaxSamples = 8; public const double DefaultPrecalcCheckIntervalSeconds = 1; public const bool DefaultSkipTooLongPathError = false; public const bool DefaultValidateResolvedPaths = true; internal const string PathEnumeratorObsoleteMessage = "This enumeration support will be removed in next release. In order to perform file enumeration use EnumerationBuilder and IEnumerationOrchestrator"; internal const string WebApiObsoleteMessage = "WebAPI support will be removed in upcoming releases. In order to communicate with Relativity use Kepler Services. For more information, see KeplerServiceBase class."; private static readonly string[] DefaultCloudFileShareRegexPatterns = new string[2] { "\\\\files(\\d+)?.+(T\\d{3}\\w?)", "\\\\bcp(\\d+)?.+(T\\d{3}\\w?)" }; private static readonly object SyncRoot = new object(); private static GlobalSettings instance; public static IEnumerable<WebExceptionStatus> DefaultFatalWebExceptionStatusCodes = new List<WebExceptionStatus>(new WebExceptionStatus[1] { WebExceptionStatus.TrustFailure }); public static IEnumerable<HttpStatusCode> DefaultFatalHttpStatusCodes => new List<HttpStatusCode>(new HttpStatusCode[3] { HttpStatusCode.BadRequest, HttpStatusCode.Forbidden, HttpStatusCode.Unauthorized }); public static Func<HttpStatusCode, string> DefaultFatalHttpStatusCodeDetailedMessage => delegate(HttpStatusCode statusCode) { switch (statusCode) { case HttpStatusCode.BadRequest: return CoreStrings.HttpBadRequestFatalMessage; case HttpStatusCode.Forbidden: return CoreStrings.HttpForbiddenFatalMessage; case HttpStatusCode.Unauthorized: return CoreStrings.HttpUnauthorizedFatalMessage; default: return string.Empty; } }; public static Func<WebExceptionStatus, string> DefaultFatalWebExceptionStatusCodeDetailedMessage => delegate(WebExceptionStatus statusCode) { if (statusCode == WebExceptionStatus.TrustFailure) return CoreStrings.WebExceptionTrustFailureMessage; return string.Empty; }; public static GlobalSettings Instance { get { if (instance == null) { lock (SyncRoot) { if (instance == null) instance = new GlobalSettings("TAPI"); } } return instance; } } public string ApplicationName { get; set; } public TimeSpan CacheExpiration { get; set; } public IList<string> CloudFileShareRegexPatterns { get; } public bool CommandLineModeEnabled { get; set; } public IList<HttpStatusCode> FatalHttpStatusCodes { get; } public Func<HttpStatusCode, string> FatalHttpStatusCodeDetailedMessage { get; set; } public IList<WebExceptionStatus> FatalWebExceptionStatusCodes { get; } public Func<WebExceptionStatus, string> FatalWebExceptionStatusCodeDetailedMessage { get; set; } public long MaxBytesPerBatch { get; set; } public int MaxFilesPerBatch { get; set; } public MemoryProtectionScope MemoryProtectionScope { get; set; } public string PluginDirectory { get; set; } public string PluginFileNameFilter { get; set; } public string PluginFileNameMatch { get; set; } public SearchOption PluginSearchOption { get; set; } public double PrecalcCheckIntervalSeconds { get; set; } public bool SkipTooLongPaths { get; set; } public bool StatisticsLogEnabled { get; set; } public double StatisticsLogIntervalSeconds { get; set; } public int StatisticsMaxSamples { get; set; } public string TempDirectory { get; set; } public bool ValidateResolvedPaths { get; set; } private GlobalSettings(string applicationName) { if (string.IsNullOrEmpty(applicationName)) throw new ArgumentNullException("applicationName"); ApplicationName = applicationName; CacheExpiration = TimeSpan.FromSeconds(3600); CommandLineModeEnabled = false; FatalHttpStatusCodes = new List<HttpStatusCode>(DefaultFatalHttpStatusCodes); FatalHttpStatusCodeDetailedMessage = DefaultFatalHttpStatusCodeDetailedMessage; FatalWebExceptionStatusCodes = new List<WebExceptionStatus>(DefaultFatalWebExceptionStatusCodes); FatalWebExceptionStatusCodeDetailedMessage = DefaultFatalWebExceptionStatusCodeDetailedMessage; CloudFileShareRegexPatterns = new List<string>(DefaultCloudFileShareRegexPatterns); MaxBytesPerBatch = 107374182400; MaxFilesPerBatch = 50000; MemoryProtectionScope = 0; PluginDirectory = GetWorkingDirectory(); PluginFileNameFilter = "*.dll"; PluginFileNameMatch = "Relativity.Transfer"; PluginSearchOption = SearchOption.TopDirectoryOnly; PrecalcCheckIntervalSeconds = 1; SkipTooLongPaths = false; StatisticsLogEnabled = false; StatisticsLogIntervalSeconds = 2; StatisticsMaxSamples = 8; TempDirectory = Path.GetTempPath(); ValidateResolvedPaths = true; } private static string GetWorkingDirectory() { Assembly executingAssembly = Assembly.GetExecutingAssembly(); try { if (!string.IsNullOrEmpty(executingAssembly.Location)) { string directoryName = Path.GetDirectoryName(executingAssembly.Location); if (!string.IsNullOrEmpty(directoryName) && Directory.GetFiles(directoryName, "*.dll").ToList().Count > 1) return directoryName; } } catch (ArgumentException) { } if (!string.IsNullOrEmpty(executingAssembly.CodeBase)) try { string directoryName2 = Path.GetDirectoryName(executingAssembly.CodeBase); if (!string.IsNullOrEmpty(directoryName2)) return Uri.UnescapeDataString(new UriBuilder(directoryName2).Path); } catch (ArgumentException) { } return Environment.CurrentDirectory; } } }