annotate src/win32/7zip/7z/CPP/7zip/Archive/Rar/RarHeader.h @ 1:f9f4f1b99eed

importing src directory
author Robert McIntyre <rlm@mit.edu>
date Sat, 03 Mar 2012 10:31:27 -0600
parents
children
rev   line source
rlm@1 1 // Archive/RarHeader.h
rlm@1 2
rlm@1 3 #ifndef __ARCHIVE_RAR_HEADER_H
rlm@1 4 #define __ARCHIVE_RAR_HEADER_H
rlm@1 5
rlm@1 6 #include "Common/Types.h"
rlm@1 7
rlm@1 8 namespace NArchive{
rlm@1 9 namespace NRar{
rlm@1 10 namespace NHeader{
rlm@1 11
rlm@1 12 const int kMarkerSize = 7;
rlm@1 13 extern Byte kMarker[kMarkerSize];
rlm@1 14
rlm@1 15 const int kArchiveSolid = 0x1;
rlm@1 16
rlm@1 17 namespace NBlockType
rlm@1 18 {
rlm@1 19 enum EBlockType
rlm@1 20 {
rlm@1 21 kMarker = 0x72,
rlm@1 22 kArchiveHeader = 0x73,
rlm@1 23 kFileHeader = 0x74,
rlm@1 24 kCommentHeader = 0x75,
rlm@1 25 kOldAuthenticity = 0x76,
rlm@1 26 kSubBlock = 0x77,
rlm@1 27 kRecoveryRecord = 0x78,
rlm@1 28 kAuthenticity = 0x79,
rlm@1 29
rlm@1 30 kEndOfArchive = 0x7B // Is not safe
rlm@1 31 };
rlm@1 32 }
rlm@1 33
rlm@1 34 namespace NArchive
rlm@1 35 {
rlm@1 36 const UInt16 kVolume = 1;
rlm@1 37 const UInt16 kComment = 2;
rlm@1 38 const UInt16 kLock = 4;
rlm@1 39 const UInt16 kSolid = 8;
rlm@1 40 const UInt16 kNewVolName = 0x10; // ('volname.partN.rar')
rlm@1 41 const UInt16 kAuthenticity = 0x20;
rlm@1 42 const UInt16 kRecovery = 0x40;
rlm@1 43 const UInt16 kBlockEncryption = 0x80;
rlm@1 44 const UInt16 kFirstVolume = 0x100; // (set only by RAR 3.0 and later)
rlm@1 45 const UInt16 kEncryptVer = 0x200; // RAR 3.6 there is EncryptVer Byte in End of MainHeader
rlm@1 46
rlm@1 47 const int kHeaderSizeMin = 7;
rlm@1 48
rlm@1 49 struct CBlock
rlm@1 50 {
rlm@1 51 UInt16 CRC;
rlm@1 52 Byte Type;
rlm@1 53 UInt16 Flags;
rlm@1 54 UInt16 Size;
rlm@1 55 UInt16 Reserved1;
rlm@1 56 UInt32 Reserved2;
rlm@1 57 // UInt16 GetRealCRC() const;
rlm@1 58 };
rlm@1 59
rlm@1 60 const int kArchiveHeaderSize = 13;
rlm@1 61
rlm@1 62 const int kBlockHeadersAreEncrypted = 0x80;
rlm@1 63
rlm@1 64 struct CHeader360: public CBlock
rlm@1 65 {
rlm@1 66 Byte EncryptVersion;
rlm@1 67 bool IsEncrypted() const { return (Flags & NHeader::NArchive::kBlockEncryption) != 0; }
rlm@1 68 bool IsThereEncryptVer() const { return (Flags & NHeader::NArchive::kEncryptVer) != 0; }
rlm@1 69 bool IsEncryptOld() const { return (!IsThereEncryptVer() || EncryptVersion < 36); }
rlm@1 70 UInt32 GetBaseSize() const { return kArchiveHeaderSize + (IsEncryptOld() ? 0 : 1); }
rlm@1 71 };
rlm@1 72 }
rlm@1 73
rlm@1 74 namespace NFile
rlm@1 75 {
rlm@1 76 const int kSplitBefore = 1 << 0;
rlm@1 77 const int kSplitAfter = 1 << 1;
rlm@1 78 const int kEncrypted = 1 << 2;
rlm@1 79 const int kComment = 1 << 3;
rlm@1 80 const int kSolid = 1 << 4;
rlm@1 81
rlm@1 82 const int kDictBitStart = 5;
rlm@1 83 const int kNumDictBits = 3;
rlm@1 84 const int kDictMask = (1 << kNumDictBits) - 1;
rlm@1 85 const int kDictDirectoryValue = 0x7;
rlm@1 86
rlm@1 87 const int kSize64Bits = 1 << 8;
rlm@1 88 const int kUnicodeName = 1 << 9;
rlm@1 89 const int kSalt = 1 << 10;
rlm@1 90 const int kOldVersion = 1 << 11;
rlm@1 91 const int kExtTime = 1 << 12;
rlm@1 92 // const int kExtFlags = 1 << 13;
rlm@1 93 // const int kSkipIfUnknown = 1 << 14;
rlm@1 94
rlm@1 95 const int kLongBlock = 1 << 15;
rlm@1 96
rlm@1 97 /*
rlm@1 98 struct CBlock
rlm@1 99 {
rlm@1 100 // UInt16 HeadCRC;
rlm@1 101 // Byte Type;
rlm@1 102 // UInt16 Flags;
rlm@1 103 // UInt16 HeadSize;
rlm@1 104 UInt32 PackSize;
rlm@1 105 UInt32 UnPackSize;
rlm@1 106 Byte HostOS;
rlm@1 107 UInt32 FileCRC;
rlm@1 108 UInt32 Time;
rlm@1 109 Byte UnPackVersion;
rlm@1 110 Byte Method;
rlm@1 111 UInt16 NameSize;
rlm@1 112 UInt32 Attributes;
rlm@1 113 };
rlm@1 114 */
rlm@1 115
rlm@1 116 /*
rlm@1 117 struct CBlock32
rlm@1 118 {
rlm@1 119 UInt16 HeadCRC;
rlm@1 120 Byte Type;
rlm@1 121 UInt16 Flags;
rlm@1 122 UInt16 HeadSize;
rlm@1 123 UInt32 PackSize;
rlm@1 124 UInt32 UnPackSize;
rlm@1 125 Byte HostOS;
rlm@1 126 UInt32 FileCRC;
rlm@1 127 UInt32 Time;
rlm@1 128 Byte UnPackVersion;
rlm@1 129 Byte Method;
rlm@1 130 UInt16 NameSize;
rlm@1 131 UInt32 Attributes;
rlm@1 132 UInt16 GetRealCRC(const void *aName, UInt32 aNameSize,
rlm@1 133 bool anExtraDataDefined = false, Byte *anExtraData = 0) const;
rlm@1 134 };
rlm@1 135 struct CBlock64
rlm@1 136 {
rlm@1 137 UInt16 HeadCRC;
rlm@1 138 Byte Type;
rlm@1 139 UInt16 Flags;
rlm@1 140 UInt16 HeadSize;
rlm@1 141 UInt32 PackSizeLow;
rlm@1 142 UInt32 UnPackSizeLow;
rlm@1 143 Byte HostOS;
rlm@1 144 UInt32 FileCRC;
rlm@1 145 UInt32 Time;
rlm@1 146 Byte UnPackVersion;
rlm@1 147 Byte Method;
rlm@1 148 UInt16 NameSize;
rlm@1 149 UInt32 Attributes;
rlm@1 150 UInt32 PackSizeHigh;
rlm@1 151 UInt32 UnPackSizeHigh;
rlm@1 152 UInt16 GetRealCRC(const void *aName, UInt32 aNameSize) const;
rlm@1 153 };
rlm@1 154 */
rlm@1 155
rlm@1 156 const int kLabelFileAttribute = 0x08;
rlm@1 157 const int kWinFileDirectoryAttributeMask = 0x10;
rlm@1 158
rlm@1 159 enum CHostOS
rlm@1 160 {
rlm@1 161 kHostMSDOS = 0,
rlm@1 162 kHostOS2 = 1,
rlm@1 163 kHostWin32 = 2,
rlm@1 164 kHostUnix = 3,
rlm@1 165 kHostMacOS = 4,
rlm@1 166 kHostBeOS = 5
rlm@1 167 };
rlm@1 168 }
rlm@1 169
rlm@1 170 namespace NBlock
rlm@1 171 {
rlm@1 172 const UInt16 kLongBlock = 1 << 15;
rlm@1 173 struct CBlock
rlm@1 174 {
rlm@1 175 UInt16 CRC;
rlm@1 176 Byte Type;
rlm@1 177 UInt16 Flags;
rlm@1 178 UInt16 HeadSize;
rlm@1 179 // UInt32 DataSize;
rlm@1 180 };
rlm@1 181 }
rlm@1 182
rlm@1 183 /*
rlm@1 184 struct CSubBlock
rlm@1 185 {
rlm@1 186 UInt16 HeadCRC;
rlm@1 187 Byte HeadType;
rlm@1 188 UInt16 Flags;
rlm@1 189 UInt16 HeadSize;
rlm@1 190 UInt32 DataSize;
rlm@1 191 UInt16 SubType;
rlm@1 192 Byte Level; // Reserved : Must be 0
rlm@1 193 };
rlm@1 194
rlm@1 195 struct CCommentBlock
rlm@1 196 {
rlm@1 197 UInt16 HeadCRC;
rlm@1 198 Byte HeadType;
rlm@1 199 UInt16 Flags;
rlm@1 200 UInt16 HeadSize;
rlm@1 201 UInt16 UnpSize;
rlm@1 202 Byte UnpVer;
rlm@1 203 Byte Method;
rlm@1 204 UInt16 CommCRC;
rlm@1 205 };
rlm@1 206
rlm@1 207
rlm@1 208 struct CProtectHeader
rlm@1 209 {
rlm@1 210 UInt16 HeadCRC;
rlm@1 211 Byte HeadType;
rlm@1 212 UInt16 Flags;
rlm@1 213 UInt16 HeadSize;
rlm@1 214 UInt32 DataSize;
rlm@1 215 Byte Version;
rlm@1 216 UInt16 RecSectors;
rlm@1 217 UInt32 TotalBlocks;
rlm@1 218 Byte Mark[8];
rlm@1 219 };
rlm@1 220 */
rlm@1 221
rlm@1 222 }}}
rlm@1 223
rlm@1 224 #endif