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