• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // 7z/Handler.h
2 
3 #ifndef __7Z_HANDLER_H
4 #define __7Z_HANDLER_H
5 
6 #include "../../ICoder.h"
7 #include "../IArchive.h"
8 
9 #include "../../Common/CreateCoder.h"
10 
11 #ifndef __7Z_SET_PROPERTIES
12 
13 #ifdef EXTRACT_ONLY
14   #if !defined(_7ZIP_ST) && !defined(_SFX)
15     #define __7Z_SET_PROPERTIES
16   #endif
17 #else
18   #define __7Z_SET_PROPERTIES
19 #endif
20 
21 #endif
22 
23 // #ifdef __7Z_SET_PROPERTIES
24 #include "../Common/HandlerOut.h"
25 // #endif
26 
27 #include "7zCompressionMode.h"
28 #include "7zIn.h"
29 
30 namespace NArchive {
31 namespace N7z {
32 
33 
34 #ifndef EXTRACT_ONLY
35 
36 class COutHandler: public CMultiMethodProps
37 {
38   HRESULT SetSolidFromString(const UString &s);
39   HRESULT SetSolidFromPROPVARIANT(const PROPVARIANT &value);
40 public:
41   UInt64 _numSolidFiles;
42   UInt64 _numSolidBytes;
43   bool _numSolidBytesDefined;
44   bool _solidExtension;
45   bool _useTypeSorting;
46 
47   bool _compressHeaders;
48   bool _encryptHeadersSpecified;
49   bool _encryptHeaders;
50   // bool _useParents; 9.26
51 
52   CHandlerTimeOptions TimeOptions;
53 
54   CBoolPair Write_Attrib;
55 
56   bool _useMultiThreadMixer;
57 
58   bool _removeSfxBlock;
59 
60   // bool _volumeMode;
61 
InitSolidFiles()62   void InitSolidFiles() { _numSolidFiles = (UInt64)(Int64)(-1); }
InitSolidSize()63   void InitSolidSize()  { _numSolidBytes = (UInt64)(Int64)(-1); }
InitSolid()64   void InitSolid()
65   {
66     InitSolidFiles();
67     InitSolidSize();
68     _solidExtension = false;
69     _numSolidBytesDefined = false;
70   }
71 
72   void InitProps7z();
73   void InitProps();
74 
COutHandler()75   COutHandler() { InitProps7z(); }
76 
77   HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &value);
78 };
79 
80 #endif
81 
82 class CHandler:
83   public IInArchive,
84   public IArchiveGetRawProps,
85 
86   #ifdef __7Z_SET_PROPERTIES
87   public ISetProperties,
88   #endif
89 
90   #ifndef EXTRACT_ONLY
91   public IOutArchive,
92   #endif
93 
94   PUBLIC_ISetCompressCodecsInfo
95 
96   public CMyUnknownImp,
97 
98   #ifndef EXTRACT_ONLY
99     public COutHandler
100   #else
101     public CCommonMethodProps
102   #endif
103 {
104 public:
105   MY_QUERYINTERFACE_BEGIN2(IInArchive)
106   MY_QUERYINTERFACE_ENTRY(IArchiveGetRawProps)
107   #ifdef __7Z_SET_PROPERTIES
108   MY_QUERYINTERFACE_ENTRY(ISetProperties)
109   #endif
110   #ifndef EXTRACT_ONLY
111   MY_QUERYINTERFACE_ENTRY(IOutArchive)
112   #endif
113   QUERY_ENTRY_ISetCompressCodecsInfo
114   MY_QUERYINTERFACE_END
115   MY_ADDREF_RELEASE
116 
117   INTERFACE_IInArchive(;)
118   INTERFACE_IArchiveGetRawProps(;)
119 
120   #ifdef __7Z_SET_PROPERTIES
121   STDMETHOD(SetProperties)(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps);
122   #endif
123 
124   #ifndef EXTRACT_ONLY
125   INTERFACE_IOutArchive(;)
126   #endif
127 
128   DECL_ISetCompressCodecsInfo
129 
130   CHandler();
~CHandler()131   ~CHandler()
132   {
133     Close();
134   }
135 
136 private:
137   CMyComPtr<IInStream> _inStream;
138   NArchive::N7z::CDbEx _db;
139 
140   #ifndef _NO_CRYPTO
141   bool _isEncrypted;
142   bool _passwordIsDefined;
143   UString _password; // _Wipe
144   #endif
145 
146   #ifdef EXTRACT_ONLY
147 
148   #ifdef __7Z_SET_PROPERTIES
149   bool _useMultiThreadMixer;
150   #endif
151 
152   UInt32 _crcSize;
153 
154   #else
155 
156   CRecordVector<CBond2> _bonds;
157 
158   HRESULT PropsMethod_To_FullMethod(CMethodFull &dest, const COneMethodInfo &m);
159   HRESULT SetHeaderMethod(CCompressionMethodMode &headerMethod);
160   HRESULT SetMainMethod(CCompressionMethodMode &method);
161 
162   #endif
163 
164   bool IsFolderEncrypted(CNum folderIndex) const;
165   #ifndef _SFX
166 
167   CRecordVector<UInt64> _fileInfoPopIDs;
168   void FillPopIDs();
169   void AddMethodName(AString &s, UInt64 id);
170   HRESULT SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const;
171 
172   #endif
173 
174   DECL_EXTERNAL_CODECS_VARS
175 };
176 
177 }}
178 
179 #endif
180