Exemplo n.º 1
0
 protected override void ReadFromReader(MarkingBinaryReader reader)
 {
     UnpSize = reader.ReadInt16();
     UnpVersion = reader.ReadByte();
     UnpMethod = reader.ReadByte();
     CommCRC = reader.ReadInt16();
 }
Exemplo n.º 2
0
 protected override void ReadFromReader(MarkingBinaryReader reader)
 {
     UnpackVersion = reader.ReadByte();
     Method = reader.ReadByte();
     AVVersion = reader.ReadByte();
     AVInfoCRC = reader.ReadInt32();
 }
Exemplo n.º 3
0
 protected override void ReadFromReader(MarkingBinaryReader reader)
 {
     HighPosAv = reader.ReadInt16();
     PosAv = reader.ReadInt32();
     if (ArchiveHeaderFlags.HasFlag(ArchiveFlags.ENCRYPTVER))
     {
         EncryptionVersion = reader.ReadByte();
     }
 }
 protected override void ReadFromReader(MarkingBinaryReader reader)
 {
     if (EndArchiveFlags.HasFlag(EndArchiveFlags.EARC_DATACRC))
     {
         ArchiveCRC = reader.ReadInt32();
     }
     if (EndArchiveFlags.HasFlag(EndArchiveFlags.EARC_VOLNUMBER))
     {
         VolumeNumber = reader.ReadInt16();
     }
 }
Exemplo n.º 5
0
 private static DateTime? ProcessExtendedTime(ushort extendedFlags, DateTime? time, MarkingBinaryReader reader, int i)
 {
     uint rmode = (uint)extendedFlags >> (3 - i) * 4;
     if ((rmode & 8) == 0)
     {
         return null;
     }
     if (i != 0)
     {
         uint DosTime = reader.ReadUInt32();
         time = Utilities.DosDateToDateTime(DosTime);
     }
     if ((rmode & 4) == 0)
     {
         time = time.Value.AddSeconds(1);
     }
     uint nanosecondHundreds = 0;
     int count = (int)rmode & 3;
     for (int j = 0; j < count; j++)
     {
         byte b = reader.ReadByte();
         nanosecondHundreds |= (((uint)b) << ((j + 3 - count) * 8));
     }
     //10^-7 to 10^-3
     return time.Value.AddMilliseconds(nanosecondHundreds * Math.Pow(10, -4));
 }
Exemplo n.º 6
0
        protected override void ReadFromReader(MarkingBinaryReader reader)
        {
            uint lowUncompressedSize = reader.ReadUInt32();

            HostOS = (HostOS)(int)reader.ReadByte();

            FileCRC = reader.ReadUInt32();

            FileLastModifiedTime = Utilities.DosDateToDateTime(reader.ReadInt32());

            RarVersion = reader.ReadByte();
            PackingMethod = reader.ReadByte();

            short nameSize = reader.ReadInt16();

            FileAttributes = reader.ReadInt32();

            uint highCompressedSize = 0;
            uint highUncompressedkSize = 0;
            if (FileFlags.HasFlag(FileFlags.LARGE))
            {
                highCompressedSize = reader.ReadUInt32();
                highUncompressedkSize = reader.ReadUInt32();
            }
            else
            {
                if (lowUncompressedSize == 0xffffffff)
                {

                    lowUncompressedSize = 0xffffffff;
                    highUncompressedkSize = int.MaxValue;
                }

            }
            CompressedSize = UInt32To64(highCompressedSize, AdditionalSize);
            UncompressedSize = UInt32To64(highUncompressedkSize, lowUncompressedSize);

            nameSize = nameSize > 4 * 1024 ? (short)(4 * 1024) : nameSize;

            byte[] fileNameBytes = reader.ReadBytes(nameSize);

            switch (HeaderType)
            {
                case HeaderType.FileHeader:
                    {
                        if (FileFlags.HasFlag(FileFlags.UNICODE))
                        {
                            int length = 0;
                            while (length < fileNameBytes.Length
                                    && fileNameBytes[length] != 0)
                            {
                                length++;
                            }
                            if (length != nameSize)
                            {
                                length++;
                                FileName = FileNameDecoder.Decode(fileNameBytes, length);
                            }
                            else
                            {
                                FileName = DecodeDefault(fileNameBytes);
                            }
                        }
                        else
                        {
                            FileName = DecodeDefault(fileNameBytes);
                        }
                        FileName = ConvertPath(FileName, HostOS);
                    }
                    break;
                case HeaderType.NewSubHeader:
                    {
                        int datasize = HeaderSize - NEWLHD_SIZE - nameSize;
                        if (FileFlags.HasFlag(FileFlags.SALT))
                        {
                            datasize -= SALT_SIZE;
                        }
                        if (datasize > 0)
                        {
                            SubData = reader.ReadBytes(datasize);
                        }

                        if (NewSubHeaderType.SUBHEAD_TYPE_RR.Equals(fileNameBytes))
                        {
                            RecoverySectors = SubData[8] + (SubData[9] << 8)
                                    + (SubData[10] << 16) + (SubData[11] << 24);
                        }
                    }
                    break;
            }

            if (FileFlags.HasFlag(FileFlags.SALT))
            {
                Salt = reader.ReadBytes(SALT_SIZE);
            }
            if (FileFlags.HasFlag(FileFlags.EXTTIME))
            {
                ushort extendedFlags = reader.ReadUInt16();
                FileLastModifiedTime = ProcessExtendedTime(extendedFlags, FileLastModifiedTime, reader, 0);
                FileCreatedTime = ProcessExtendedTime(extendedFlags, null, reader, 1);
                FileLastAccessedTime = ProcessExtendedTime(extendedFlags, null, reader, 2);
                FileArchivedTime = ProcessExtendedTime(extendedFlags, null, reader, 3);
            }
        }
Exemplo n.º 7
0
 protected override void ReadFromReader(MarkingBinaryReader reader)
 {
     CreationTime = reader.ReadInt32();
     ArcNameSize = reader.ReadInt16();
     UserNameSize = reader.ReadInt16();
 }
 private RarHeader ReadNextHeader(Stream stream)
 {
     MarkingBinaryReader reader = new MarkingBinaryReader(stream);
     RarHeader header = RarHeader.Create(reader);
     if (header == null)
     {
         return null;
     }
     switch (header.HeaderType)
     {
         case HeaderType.ArchiveHeader:
             {
                 return header.PromoteHeader<ArchiveHeader>(reader);
             }
         case HeaderType.MarkHeader:
             {
                 return header.PromoteHeader<MarkHeader>(reader);
             }
         case HeaderType.NewSubHeader:
             {
                 FileHeader fh = header.PromoteHeader<FileHeader>(reader);
                 switch (StreamingMode)
                 {
                     case StreamingMode.Seekable:
                         {
                             fh.DataStartPosition = reader.BaseStream.Position;
                             reader.BaseStream.Position += fh.CompressedSize;
                         }
                         break;
                     case StreamingMode.Streaming:
                         {
                             //skip the data because it's useless?
                             reader.BaseStream.Skip(fh.CompressedSize);
                         }
                         break;
                     default:
                         {
                             throw new InvalidRarFormatException("Invalid StreamingMode");
                         }
                 }
                 return fh;
             }
         case HeaderType.FileHeader:
             {
                 FileHeader fh = header.PromoteHeader<FileHeader>(reader);
                 switch (StreamingMode)
                 {
                     case StreamingMode.Seekable:
                         {
                             fh.DataStartPosition = reader.BaseStream.Position;
                             reader.BaseStream.Position += fh.CompressedSize;
                         }
                         break;
                     case StreamingMode.Streaming:
                         {
                             ReadOnlySubStream ms
                                 = new ReadOnlySubStream(reader.BaseStream, fh.CompressedSize);
                             fh.PackedStream = ms;
                         }
                         break;
                     default:
                         {
                             throw new InvalidRarFormatException("Invalid StreamingMode");
                         }
                 }
                 return fh;
             }
         case HeaderType.EndArchiveHeader:
             {
                 return header.PromoteHeader<EndArchiveHeader>(reader);
             }
         default:
             {
                 throw new InvalidRarFormatException("Invalid Rar Header: " + header.HeaderType.ToString());
             }
     }
 }
Exemplo n.º 9
0
 protected override void ReadFromReader(MarkingBinaryReader reader)
 {
 }