Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 // 7z/Handler.h
3 #ifndef __7Z_HANDLER_H
4 #define __7Z_HANDLER_H
6 #include "../IArchive.h"
7 #include "7zIn.h"
9 #include "7zCompressionMode.h"
11 #ifndef _SFX
12 #include "7zMethods.h"
13 #endif
15 #ifdef COMPRESS_MT
16 #include "../../../Windows/System.h"
17 #endif
19 namespace NArchive {
20 namespace N7z {
22 #ifdef _7Z_VOL
23 struct CRef
24 {
25 int VolumeIndex;
26 int ItemIndex;
27 };
29 /*
30 struct CRef2
31 {
32 CRecordVector<CRef> Refs;
33 UInt64 UnPackSize;
34 UInt64 PackSize;
35 UInt64 StartPos;
36 CRef2(): UnPackSize(0), PackSize(0), StartPos(0) {}
37 };
38 */
40 struct CVolume
41 {
42 int StartRef2Index;
43 CMyComPtr<IInStream> Stream;
44 CArchiveDatabaseEx Database;
45 };
46 #endif
48 #ifndef EXTRACT_ONLY
50 struct COneMethodInfo
51 {
52 CObjectVector<CProperty> CoderProperties;
53 UString MethodName;
54 };
55 #endif
57 // {23170F69-40C1-278A-1000-000110070000}
58 DEFINE_GUID(CLSID_CFormat7z,
59 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00);
61 #ifndef __7Z_SET_PROPERTIES
63 #ifdef EXTRACT_ONLY
64 #ifdef COMPRESS_MT
65 #define __7Z_SET_PROPERTIES
66 #endif
67 #else
68 #define __7Z_SET_PROPERTIES
69 #endif
71 #endif
74 class CHandler:
75 public IInArchive,
76 #ifdef _7Z_VOL
77 public IInArchiveGetStream,
78 #endif
79 #ifdef __7Z_SET_PROPERTIES
80 public ISetProperties,
81 #endif
82 #ifndef EXTRACT_ONLY
83 public IOutArchive,
84 #endif
85 public CMyUnknownImp
86 {
87 public:
88 MY_QUERYINTERFACE_BEGIN
89 #ifdef _7Z_VOL
90 MY_QUERYINTERFACE_ENTRY(IInArchiveGetStream)
91 #endif
92 #ifdef __7Z_SET_PROPERTIES
93 MY_QUERYINTERFACE_ENTRY(ISetProperties)
94 #endif
95 #ifndef EXTRACT_ONLY
96 MY_QUERYINTERFACE_ENTRY(IOutArchive)
97 #endif
98 MY_QUERYINTERFACE_END
99 MY_ADDREF_RELEASE
101 STDMETHOD(Open)(IInStream *stream,
102 const UInt64 *maxCheckStartPosition,
103 IArchiveOpenCallback *openArchiveCallback);
104 STDMETHOD(Close)();
106 STDMETHOD(GetNumberOfItems)(UInt32 *numItems);
107 STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value);
108 STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems,
109 Int32 testMode, IArchiveExtractCallback *extractCallback);
111 STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value);
113 STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties);
114 STDMETHOD(GetPropertyInfo)(UInt32 index,
115 BSTR *name, PROPID *propID, VARTYPE *varType);
117 STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties);
118 STDMETHOD(GetArchivePropertyInfo)(UInt32 index,
119 BSTR *name, PROPID *propID, VARTYPE *varType);
121 #ifdef _7Z_VOL
122 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);
123 #endif
125 #ifdef __7Z_SET_PROPERTIES
126 STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties);
127 #endif
129 #ifndef EXTRACT_ONLY
130 // IOutArchiveHandler
131 STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems,
132 IArchiveUpdateCallback *updateCallback);
134 STDMETHOD(GetFileTimeType)(UInt32 *type);
136 // ISetProperties
138 HRESULT SetSolidSettings(const UString &s);
139 HRESULT SetSolidSettings(const PROPVARIANT &value);
140 #endif
142 CHandler();
144 private:
145 #ifdef _7Z_VOL
146 CObjectVector<CVolume> _volumes;
147 CObjectVector<CRef> _refs;
148 #else
149 CMyComPtr<IInStream> _inStream;
150 NArchive::N7z::CArchiveDatabaseEx _database;
151 #endif
153 #ifdef COMPRESS_MT
154 UInt32 _numThreads;
155 #endif
157 #ifndef EXTRACT_ONLY
158 CObjectVector<COneMethodInfo> _methods;
159 CRecordVector<CBind> _binds;
160 bool _removeSfxBlock;
161 UInt64 _numSolidFiles;
162 UInt64 _numSolidBytes;
163 bool _numSolidBytesDefined;
164 bool _solidExtension;
166 bool _compressHeaders;
167 bool _compressHeadersFull;
168 bool _encryptHeaders;
170 bool _autoFilter;
171 UInt32 _level;
173 bool _volumeMode;
176 HRESULT SetParam(COneMethodInfo &oneMethodInfo, const UString &name, const UString &value);
177 HRESULT SetParams(COneMethodInfo &oneMethodInfo, const UString &srcString);
179 HRESULT SetPassword(CCompressionMethodMode &methodMode,
180 IArchiveUpdateCallback *updateCallback);
182 HRESULT SetCompressionMethod(CCompressionMethodMode &method,
183 CObjectVector<COneMethodInfo> &methodsInfo
184 #ifdef COMPRESS_MT
185 , UInt32 numThreads
186 #endif
187 );
189 HRESULT SetCompressionMethod(
190 CCompressionMethodMode &method,
191 CCompressionMethodMode &headerMethod);
193 #endif
195 #ifndef _SFX
197 CRecordVector<UInt64> _fileInfoPopIDs;
198 void FillPopIDs();
200 #endif
202 #ifndef EXTRACT_ONLY
204 void InitSolidFiles() { _numSolidFiles = UInt64(Int64(-1)); }
205 void InitSolidSize() { _numSolidBytes = UInt64(Int64(-1)); }
206 void InitSolid()
207 {
208 InitSolidFiles();
209 InitSolidSize();
210 _solidExtension = false;
211 _numSolidBytesDefined = false;
212 }
214 void Init()
215 {
216 _removeSfxBlock = false;
217 _compressHeaders = true;
218 _compressHeadersFull = true;
219 _encryptHeaders = false;
220 #ifdef COMPRESS_MT
221 _numThreads = NWindows::NSystem::GetNumberOfProcessors();
222 #endif
224 _level = 5;
225 _autoFilter = true;
226 _volumeMode = false;
227 InitSolid();
228 }
229 #endif
230 };
232 }}
234 #endif