diff --git a/osrepodbmgr.Core/AlgoEnum.cs b/osrepodbmgr.Core/AlgoEnum.cs index 934caee..5983feb 100644 --- a/osrepodbmgr.Core/AlgoEnum.cs +++ b/osrepodbmgr.Core/AlgoEnum.cs @@ -31,6 +31,7 @@ namespace osrepodbmgr.Core { GZip, BZip2, - LZMA + LZMA, + LZip } } diff --git a/osrepodbmgr.Core/ChangeLog b/osrepodbmgr.Core/ChangeLog index 5d4ee02..0b283bb 100644 --- a/osrepodbmgr.Core/ChangeLog +++ b/osrepodbmgr.Core/ChangeLog @@ -1,3 +1,14 @@ +2017-06-06 Natalia Portillo + + * AlgoEnum.cs: + * packages.config: + * Workers/Clamd.cs: + * Workers/Files.cs: + * Workers/VirusTotal.cs: + * Workers/Compression.cs: + * osrepodbmgr.Core.csproj: + Added support for LZip. + 2017-05-21 Natalia Portillo * Workers/Files.cs: diff --git a/osrepodbmgr.Core/Workers/Clamd.cs b/osrepodbmgr.Core/Workers/Clamd.cs index 2952638..70d3ee1 100644 --- a/osrepodbmgr.Core/Workers/Clamd.cs +++ b/osrepodbmgr.Core/Workers/Clamd.cs @@ -120,6 +120,17 @@ namespace osrepodbmgr.Core file.Sha256 + ".lzma"); algorithm = AlgoEnum.LZMA; } + else if(File.Exists(Path.Combine(Settings.Current.RepositoryPath, file.Sha256[0].ToString(), + file.Sha256[1].ToString(), file.Sha256[2].ToString(), + file.Sha256[3].ToString(), file.Sha256[4].ToString(), + file.Sha256 + ".lz"))) + { + repoPath = Path.Combine(Settings.Current.RepositoryPath, file.Sha256[0].ToString(), + file.Sha256[1].ToString(), file.Sha256[2].ToString(), + file.Sha256[3].ToString(), file.Sha256[4].ToString(), + file.Sha256 + ".lz"); + algorithm = AlgoEnum.LZip; + } else { if(Failed != null) @@ -133,16 +144,21 @@ namespace osrepodbmgr.Core if(Settings.Current.ClamdIsLocal) { // clamd supports gzip and bzip2 but not lzma - if(algorithm == AlgoEnum.LZMA) + if(algorithm == AlgoEnum.LZMA || algorithm == AlgoEnum.LZip) { string tmpFile = Path.Combine(Settings.Current.TemporaryFolder, Path.GetTempFileName()); FileStream outFs = new FileStream(tmpFile, FileMode.Create, FileAccess.Write); FileStream inFs = new FileStream(repoPath, FileMode.Open, FileAccess.Read); - byte[] properties = new byte[5]; - inFs.Read(properties, 0, 5); - inFs.Seek(8, SeekOrigin.Current); - zStream = new LzmaStream(properties, inFs, inFs.Length - 13, file.Length); + if(algorithm == AlgoEnum.LZMA) + { + byte[] properties = new byte[5]; + inFs.Read(properties, 0, 5); + inFs.Seek(8, SeekOrigin.Current); + zStream = new LzmaStream(properties, inFs, inFs.Length - 13, file.Length); + } + else + zStream = new LZipStream(inFs, SharpCompress.Compressors.CompressionMode.Decompress); if(UpdateProgress != null) UpdateProgress("Uncompressing file...", null, 0, 0); @@ -210,7 +226,9 @@ namespace osrepodbmgr.Core inFs.Read(properties, 0, 5); inFs.Seek(8, SeekOrigin.Current); zStream = new LzmaStream(properties, inFs, inFs.Length - 13, file.Length); - + break; + case AlgoEnum.LZip: + zStream = new LZipStream(inFs, SharpCompress.Compressors.CompressionMode.Decompress); break; } diff --git a/osrepodbmgr.Core/Workers/Compression.cs b/osrepodbmgr.Core/Workers/Compression.cs index e7c07c0..37fac72 100644 --- a/osrepodbmgr.Core/Workers/Compression.cs +++ b/osrepodbmgr.Core/Workers/Compression.cs @@ -186,6 +186,9 @@ namespace osrepodbmgr.Core case AlgoEnum.LZMA: extension = ".lzma"; break; + case AlgoEnum.LZip: + extension = ".lz"; + break; } #if DEBUG @@ -220,6 +223,9 @@ namespace osrepodbmgr.Core outFs.Write(((LzmaStream)zStream).Properties, 0, ((LzmaStream)zStream).Properties.Length); outFs.Write(BitConverter.GetBytes(inFs.Length), 0, 8); break; + case AlgoEnum.LZip: + zStream = new LZipStream(outFs, SharpCompress.Compressors.CompressionMode.Compress); + break; } byte[] buffer = new byte[bufferSize]; @@ -745,6 +751,17 @@ namespace osrepodbmgr.Core file.Sha256 + ".lzma"); algorithm = AlgoEnum.LZMA; } + else if(File.Exists(Path.Combine(Settings.Current.RepositoryPath, file.Sha256[0].ToString(), + file.Sha256[1].ToString(), file.Sha256[2].ToString(), + file.Sha256[3].ToString(), file.Sha256[4].ToString(), + file.Sha256 + ".lz"))) + { + repoPath = Path.Combine(Settings.Current.RepositoryPath, file.Sha256[0].ToString(), + file.Sha256[1].ToString(), file.Sha256[2].ToString(), + file.Sha256[3].ToString(), file.Sha256[4].ToString(), + file.Sha256 + ".lz"); + algorithm = AlgoEnum.LZip; + } else throw new ArgumentException(string.Format("Cannot find file with hash {0} in the repository", file.Sha256)); @@ -764,6 +781,9 @@ namespace osrepodbmgr.Core inFs.Seek(8, SeekOrigin.Current); zStream = new LzmaStream(properties, inFs, inFs.Length - 13, file.Length); break; + case AlgoEnum.LZip: + zStream = new LZipStream(inFs, SharpCompress.Compressors.CompressionMode.Decompress); + break; } return zStream; diff --git a/osrepodbmgr.Core/Workers/Files.cs b/osrepodbmgr.Core/Workers/Files.cs index 7e5e079..8de0d9a 100644 --- a/osrepodbmgr.Core/Workers/Files.cs +++ b/osrepodbmgr.Core/Workers/Files.cs @@ -704,6 +704,17 @@ namespace osrepodbmgr.Core file.Sha256 + ".lzma"); algorithm = AlgoEnum.LZMA; } + else if(File.Exists(Path.Combine(Settings.Current.RepositoryPath, file.Sha256[0].ToString(), + file.Sha256[1].ToString(), file.Sha256[2].ToString(), + file.Sha256[3].ToString(), file.Sha256[4].ToString(), + file.Sha256 + ".lz"))) + { + repoPath = Path.Combine(Settings.Current.RepositoryPath, file.Sha256[0].ToString(), + file.Sha256[1].ToString(), file.Sha256[2].ToString(), + file.Sha256[3].ToString(), file.Sha256[4].ToString(), + file.Sha256 + ".lz"); + algorithm = AlgoEnum.LZip; + } else { if(Failed != null) @@ -728,6 +739,9 @@ namespace osrepodbmgr.Core inFs.Seek(8, SeekOrigin.Current); zStream = new LzmaStream(properties, inFs); break; + case AlgoEnum.LZip: + zStream = new LZipStream(inFs, SharpCompress.Compressors.CompressionMode.Decompress); + break; } byte[] buffer = new byte[bufferSize]; diff --git a/osrepodbmgr.Core/Workers/VirusTotal.cs b/osrepodbmgr.Core/Workers/VirusTotal.cs index 48987f2..e6d6398 100644 --- a/osrepodbmgr.Core/Workers/VirusTotal.cs +++ b/osrepodbmgr.Core/Workers/VirusTotal.cs @@ -214,6 +214,17 @@ namespace osrepodbmgr.Core file.Sha256 + ".lzma"); algorithm = AlgoEnum.LZMA; } + else if(File.Exists(Path.Combine(Settings.Current.RepositoryPath, file.Sha256[0].ToString(), + file.Sha256[1].ToString(), file.Sha256[2].ToString(), + file.Sha256[3].ToString(), file.Sha256[4].ToString(), + file.Sha256 + ".lz"))) + { + repoPath = Path.Combine(Settings.Current.RepositoryPath, file.Sha256[0].ToString(), + file.Sha256[1].ToString(), file.Sha256[2].ToString(), + file.Sha256[3].ToString(), file.Sha256[4].ToString(), + file.Sha256 + ".lz"); + algorithm = AlgoEnum.LZip; + } else { if(Failed != null) @@ -241,6 +252,9 @@ namespace osrepodbmgr.Core inFs.Seek(8, SeekOrigin.Current); zStream = new LzmaStream(properties, inFs, inFs.Length - 13, file.Length); break; + case AlgoEnum.LZip: + zStream = new LZipStream(inFs, SharpCompress.Compressors.CompressionMode.Decompress); + break; } ScanResult sResult = null; diff --git a/osrepodbmgr.Core/osrepodbmgr.Core.csproj b/osrepodbmgr.Core/osrepodbmgr.Core.csproj index a1a5650..ed88192 100644 --- a/osrepodbmgr.Core/osrepodbmgr.Core.csproj +++ b/osrepodbmgr.Core/osrepodbmgr.Core.csproj @@ -38,9 +38,6 @@ - - ..\packages\SharpCompress.0.15.2\lib\net45\SharpCompress.dll - ..\packages\nClam.3.0.0\lib\net45\nClam.dll @@ -52,6 +49,9 @@ ..\packages\plist-cil.1.16.0\lib\net45\plist-cil.dll + + ..\packages\SharpCompress.0.17.0\lib\net45\SharpCompress.dll + @@ -126,7 +126,10 @@ - + + + + diff --git a/osrepodbmgr.Core/packages.config b/osrepodbmgr.Core/packages.config index be25491..8bbecc8 100644 --- a/osrepodbmgr.Core/packages.config +++ b/osrepodbmgr.Core/packages.config @@ -4,7 +4,7 @@ - +