예제 #1
0
        /// <summary>
        /// Read items from a file.
        /// </summary>
        /// <param name="path">Full path to the file.</param>
        /// <returns>Number of items read.</returns>
        public int ReadFile(string path, CheckSumType currentSumType)
        {
            TextFileReader reader = new TextFileReader(path);
            IFile sumFile = InitSumFile(currentSumType);

            List<Pair<string>> itemList = sumFile.ReadData(reader);

            int items = 0;
            foreach (Pair<string> item in itemList)
            {
                // TODO: must validity-check values!
                string filename = item.Item2;
                FileInfo fi = new FileInfo(filename);

                // Check if fhe file is found and accessible
                try
                {
                    if (fi.Exists)
                    {
                        string fullpath = Path.Combine(fi.DirectoryName, fi.Name);

                        _list.AddFile(fullpath, item.Item1);
                        ++items;
                        continue;
                    }
                }
                catch
                {
                    continue;
                }
            }
            return items;
        }
예제 #2
0
        /// <summary>
        /// Read items from a file.
        /// </summary>
        /// <param name="path">Full path to the file.</param>
        /// <returns>Number of items read.</returns>
        public int ReadFile(string path, CheckSumType currentSumType)
        {
            TextFileReader reader  = new TextFileReader(path);
            IFile          sumFile = InitSumFile(currentSumType);

            List <Pair <string> > itemList = sumFile.ReadData(reader);

            int items = 0;

            foreach (Pair <string> item in itemList)
            {
                // TODO: must validity-check values!
                string   filename = item.Item2;
                FileInfo fi       = new FileInfo(filename);

                // Check if fhe file is found and accessible
                try
                {
                    if (fi.Exists)
                    {
                        string fullpath = Path.Combine(fi.DirectoryName, fi.Name);

                        _list.AddFile(fullpath, item.Item1);
                        ++items;
                        continue;
                    }
                }
                catch
                {
                    continue;
                }
            }
            return(items);
        }
예제 #3
0
        protected void estimatedChecksum(byte[] arr)
        {
            if (this.checksum == CheckSumType.None)
            {
                this.checksum = this.des[this.dev];
            }

            IChecksum ck = this.check[this.Checksum];

            ck.setParameter(this.nbyterequest, arr);
            ck.execute();
        }
        ///<summary>
        /// Checksum algorimth based on Adler32 and CRC32 algorimths
        ///</summary>
        ///<param name="stream">Stream to apply the algorimth</param>
        ///<param name="checkSumeType">Checksum type, Adler32 or CRC32</param>
        ///<returns>Checksum numeber</returns>
        ///<exception cref="InvalidOperationException"></exception>
        ///<exception cref="ArgumentOutOfRangeException"></exception>
        public static long CheckSum(this Stream stream, CheckSumType checkSumeType)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (!stream.CanRead)
            {
                throw new InvalidOperationException("The stream not suported readings");
            }

            ICheckSum checkSum;

            switch (checkSumeType)
            {
            case CheckSumType.Adler32: checkSum = new Adler32();
                break;

            case CheckSumType.CRC32: checkSum = new Crc32();
                break;

            default:
                throw new ArgumentOutOfRangeException("checkSumeType");
            }

            lock (stream)
            {
                long tmp = stream.Position;
                stream.Position = 0;

                int readers;
                var buffer = new byte[MB_SIZE];

                while ((readers = stream.Read(buffer, 0, MB_SIZE)) > 0)
                {
                    checkSum.Update(buffer, 0, readers);
                }

                stream.Position = tmp;
            }

            return(checkSum.Value);
        }
예제 #5
0
        /// <summary>
        /// Convert sumfile type to sumtype.
        /// </summary>
        /// <param name="fileType">Filetype converted to sumtype</param>
        void SetSumTypeFromFileType(SumFileType fileType)
        {
            switch (fileType)
            {
            case SumFileType.MD5:
                _currentSumType = CheckSumType.MD5;
                break;

            case SumFileType.SFV:
                _currentSumType = CheckSumType.CRC32;
                break;

            case SumFileType.SHA1:
                _currentSumType = CheckSumType.SHA1;
                break;

            default:
                throw new NotImplementedException();
            }
        }
예제 #6
0
        /// <summary>
        /// Write items to the file.
        /// </summary>
        /// <param name="path">Full path to the file.</param>
        public void WriteFile(string path, CheckSumType currentSumType)
        {
            StreamWriter file = new StreamWriter(path, false,
                                                 System.Text.Encoding.ASCII);

            IFile sumFile = InitSumFile(currentSumType);

            sumFile.Header(file);

            for (int i = 0; i < _list.FileList.Count; i++)
            {
                string filename = _list.FileList[i].FileName;

                if (_list.FileList[i].CheckSum == null)
                {
                    continue;
                }

                DirectoryInfo rootDirector = Directory.GetParent(path);

                string relativePath = "";
                string checksum     = _list.FileList[i].CheckSum.ToString();
                if (rootDirector.Parent == null)
                {
                    relativePath = _list.FileList[i].FullPath.Replace(rootDirector.Name, "");
                }
                else
                {
                    relativePath = _list.FileList[i].FullPath.Replace(Path.GetDirectoryName(path) +
                                                                      Path.DirectorySeparatorChar, "");
                }
                relativePath = FileUtils.FromNativeSeparators(relativePath);

                sumFile.WriteDataRow(file, checksum, relativePath);
            }
            file.Flush();
            file.Close();
        }
예제 #7
0
        /// <summary>
        /// Create sumfile instance for checksum file.
        /// </summary>
        /// <param name="fileType">Type of checksum file to initialize.</param>
        /// <returns>ISumFile instance.</returns>
        IFile InitSumFile(CheckSumType currentSumType)
        {
            IFile newFile = null;

            switch (currentSumType)
            {
            case CheckSumType.MD5:
                newFile = (IFile) new MD5File();
                break;

            case CheckSumType.SHA1:
                newFile = (IFile) new Sha1File();
                break;

            case CheckSumType.CRC32:
                newFile = (IFile) new SFVFile();
                break;

            default:
                break;
            }
            return(newFile);
        }
예제 #8
0
        /// <summary>
        /// Get checksum calculator for given checksum type.
        /// </summary>
        /// <param name="impl">Checksum type.</param>
        /// <returns>Checksum calculator.</returns>
        public static ICheckSum GetImplementation(CheckSumType impl)
        {
            ICheckSum sum;

            switch (impl)
            {
            case CheckSumType.SHA1:
                sum = new Sha1Sum();
                break;

            case CheckSumType.MD5:
                sum = new Md5Sum();
                break;

            case CheckSumType.CRC32:
                sum = new CRC32Sum();
                break;

            case CheckSumType.CRC64_ECMA:
                sum = new CRC64ECMASum();
                break;

            case CheckSumType.CRC64_ISO:
                sum = new CRC64ISOSum();
                break;

            default:
                sum = new Sha1Sum();
#if DEBUG
                throw new ApplicationException("Unknown Sum type!");
#else
                break;
#endif
            }

            return(sum);
        }
예제 #9
0
 /// <summary>
 /// Get checksum calculator for given checksum type.
 /// </summary>
 /// <param name="impl">Checksum type.</param>
 /// <returns>Checksum calculator.</returns>
 public static ICheckSum GetImplementation(CheckSumType impl)
 {
     ICheckSum sum;
     switch (impl)
     {
         case CheckSumType.SHA1:
             sum = new Sha1Sum();
             break;
         case CheckSumType.MD5:
             sum = new Md5Sum();
             break;
         case CheckSumType.CRC32:
             sum = new CRC32Sum();
             break;
         default:
             sum = new Sha1Sum();
     #if DEBUG
             throw new ApplicationException("Unknown Sum type!");
     #else
             break;
     #endif
     }
     return sum;
 }
예제 #10
0
        /// <summary>
        /// Get name for checksum implementation.
        /// </summary>
        /// <param name="impl">Checkcum implementation.</param>
        /// <returns>Name of checksum implementation.</returns>
        public static string GetImplementationName(CheckSumType impl)
        {
            string name = SumNames[(int)impl];

            return(name);
        }
예제 #11
0
        /// <summary>
        /// Select correct sumtype into the sumtype combobox, based on
        /// checksum type.
        /// </summary>
        /// <param name="sumType">File type loaded.</param>
        private void SetSumTypeCombo(CheckSumType sumType)
        {
            int ind;
            switch (sumType)
            {
                case CheckSumType.MD5:
                    ind = toolStripComboSumTypes.FindStringExact("MD5");
                    toolStripComboSumTypes.SelectedIndex = ind;
                    break;

                case CheckSumType.CRC32:
                    ind = toolStripComboSumTypes.FindStringExact("CRC32");
                    toolStripComboSumTypes.SelectedIndex = ind;
                    break;

                case CheckSumType.SHA1:
                    ind = toolStripComboSumTypes.FindStringExact("SHA-1");
                    toolStripComboSumTypes.SelectedIndex = ind;
                    break;

                default:
                    throw new NotImplementedException("Unknown checksum type");
            }
        }
예제 #12
0
        /// <summary>
        /// Set current checksum type.
        /// </summary>
        /// <param name="sumtype">Checksumtype to set as current.</param>
        private void SetCurrentSumType(CheckSumType sumtype)
        {
            // If sumtype already matches, it means we are loading sum
            // file and so don't want to clear existing items!
            // TODO: This is a bit hacky fix - we'll need to handle this
            // sum type change in some better way.
            if (sumtype != _document.SumType)
            {
                // Clear existing sums as they are now of wrong type
                if (_document.Items.HasCheckSums)
                    ClearSums();

                _document.SumType = sumtype;
            }

            SetListSumType(sumtype);

            // Clear filename so we ask it while saving
            // and don't override file with wrong (old) name.
            SetFilename(String.Empty);
        }
예제 #13
0
        protected void estimatedChecksum(byte[] arr)
        {
            if (this.checksum == CheckSumType.None) this.checksum = this.des[this.dev];

            IChecksum ck = this.check[this.Checksum];
            ck.setParameter(this.nbyterequest, arr);
            ck.execute();

        }
예제 #14
0
 /// <summary>
 /// Set the checsum tyle for GUI list.
 /// </summary>
 /// <param name="sumtype">Checksum type.</param>
 private void SetListSumType(CheckSumType sumtype)
 {
     string colname = CheckSumImplList.GetImplementationName(sumtype);
     SetListColumnHeader(ListIndices.CheckSum, colname);
 }
 public VirtualMachineConfiguration SetDownloadChecksum(string checksum, CheckSumType checksumType)
 {
   _downloadCheckSum = checksum;
   _downloadCheckSumType = checksumType;
   return this;
 } 
예제 #16
0
 /// <summary>
 /// Constructor selecting checksum type.
 /// </summary>
 /// <param name="sumtype">Checksum type.</param>
 public Calculator(CheckSumType sumtype)
 {
     _sumType = sumtype;
 }
예제 #17
0
        /// <summary>
        /// Create sumfile instance for checksum file.
        /// </summary>
        /// <param name="fileType">Type of checksum file to initialize.</param>
        /// <returns>ISumFile instance.</returns>
        IFile InitSumFile(CheckSumType currentSumType)
        {
            IFile newFile = null;
             switch (currentSumType)
             {
                 case CheckSumType.MD5:
                     newFile = (IFile) new MD5File();
                     break;

                 case CheckSumType.SHA1:
                     newFile = (IFile) new Sha1File();
                     break;

                 case CheckSumType.CRC32:
                     newFile = (IFile) new SFVFile();
                     break;

                 default:
                     break;
            }
            return newFile;
        }
예제 #18
0
 /// <summary>
 /// Get name for checksum implementation.
 /// </summary>
 /// <param name="impl">Checkcum implementation.</param>
 /// <returns>Name of checksum implementation.</returns>
 public static string GetImplementationName(CheckSumType impl)
 {
     string name = SumNames[(int) impl];
     return name;
 }
예제 #19
0
 /// <summary>
 /// Convert sumfile type to sumtype.
 /// </summary>
 /// <param name="fileType">Filetype converted to sumtype</param>
 void SetSumTypeFromFileType(SumFileType fileType)
 {
     switch (fileType)
     {
         case SumFileType.MD5:
             SumType = CheckSumType.MD5;
             break;
         case SumFileType.SFV:
             SumType = CheckSumType.CRC32;
             break;
         case SumFileType.SHA1:
             SumType = CheckSumType.SHA1;
             break;
         default:
             throw new NotImplementedException();
     }
 }
예제 #20
0
        /// <summary>
        /// Write items to the file.
        /// </summary>
        /// <param name="path">Full path to the file.</param>
        public void WriteFile(string path, CheckSumType currentSumType)
        {
            StreamWriter file = new StreamWriter(path, false,
                System.Text.Encoding.ASCII);

            IFile sumFile = InitSumFile(currentSumType);

            sumFile.Header(file);

            for (int i = 0; i < _list.FileList.Count; i++)
            {
                string filename = _list.FileList[i].FileName;

                if (_list.FileList[i].CheckSum == null)
                    continue;

                DirectoryInfo rootDirector = Directory.GetParent(path);

                string relativePath = "";
                string checksum = _list.FileList[i].CheckSum.ToString();
                if (rootDirector.Parent == null)
                {
                    relativePath = _list.FileList[i].FullPath.Replace(rootDirector.Name, "");
                }
                else
                {
                    relativePath = _list.FileList[i].FullPath.Replace(Path.GetDirectoryName(path) +
                            Path.DirectorySeparatorChar, "");
                }
                relativePath = FileUtils.FromNativeSeparators(relativePath);

                sumFile.WriteDataRow(file, checksum,relativePath);
            }
            file.Flush();
            file.Close();
        }