Example #1
0
        public void ReadGuid()
        {
            var testValue = new Guid( "75B22633-668E-11CF-A6D9-00AA0062CE6C" );
            using( var stream = new MemoryStream() )
            {
                var bytes = testValue.ToByteArray();
                stream.Write( bytes, 0, bytes.Length );
                stream.Seek( 0, SeekOrigin.Begin );

                var value = stream.ReadGuid();
                Assert.AreEqual( value, testValue );
            }
        }
        /// <summary>
        /// Resumes a rollover log
        /// </summary>
        /// <param name="fileName">the name of the log file to load.</param>
        public RolloverLogFile(string fileName)
        {
            FileName = fileName;
            SourceFiles.Clear();
            IsValid = false;

            try
            {
                byte[] data = File.ReadAllBytes(fileName);
                if (data.Length < Header.Length + 1 + 20) //Header + Version + SHA1
                {
                    Log.Publish(MessageLevel.Warning, "Failed to load file.", "Expected file length is not long enough", fileName);
                    return;
                }
                for (int x = 0; x < Header.Length; x++)
                {
                    if (data[x] != Header[x])
                    {
                        Log.Publish(MessageLevel.Warning, "Failed to load file.", "Incorrect File Header", fileName);
                        return;
                    }
                }

                byte[] hash = new byte[20];
                Array.Copy(data, data.Length - 20, hash, 0, 20);
                using (var sha = new SHA1Managed())
                {
                    var checksum = sha.ComputeHash(data, 0, data.Length - 20);
                    if (!hash.SequenceEqual(checksum))
                    {
                        Log.Publish(MessageLevel.Warning, "Failed to load file.", "Hashsum failed.", fileName);
                        return;
                    }
                }

                var stream = new MemoryStream(data);

                stream.Position = Header.Length;

                int version = stream.ReadNextByte();
                switch (version)
                {
                    case 1:
                        int count = stream.ReadInt32();
                        while (count > 0)
                        {
                            count--;
                            SourceFiles.Add(stream.ReadGuid());
                        }
                        DestinationFile = stream.ReadGuid();
                        IsValid = true;
                        return;
                    default:
                        Log.Publish(MessageLevel.Warning, "Failed to load file.", "Version Not Recgonized.", fileName);
                        SourceFiles.Clear();
                        return;
                }
            }
            catch (Exception ex)
            {
                Log.Publish(MessageLevel.Warning, "Failed to load file.", "Unexpected Error", fileName, ex);
                SourceFiles.Clear();
                return;
            }
        }