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 EXTRACT_ONLY
12 #include "../Common/HandlerOut.h"
13 #endif
14 
15 #include "7zCompressionMode.h"
16 #include "7zIn.h"
17 
18 namespace NArchive {
19 namespace N7z {
20 
21 #ifndef __7Z_SET_PROPERTIES
22 
23 #ifdef EXTRACT_ONLY
24 #if !defined(_7ZIP_ST) && !defined(_SFX)
25 #define __7Z_SET_PROPERTIES
26 #endif
27 #else
28 #define __7Z_SET_PROPERTIES
29 #endif
30 
31 #endif
32 
33 
34 class CHandler:
35   #ifndef EXTRACT_ONLY
36   public NArchive::COutHandler,
37   #endif
38   public IInArchive,
39   #ifdef __7Z_SET_PROPERTIES
40   public ISetProperties,
41   #endif
42   #ifndef EXTRACT_ONLY
43   public IOutArchive,
44   #endif
45   PUBLIC_ISetCompressCodecsInfo
46   public CMyUnknownImp
47 {
48 public:
49   MY_QUERYINTERFACE_BEGIN2(IInArchive)
50   #ifdef __7Z_SET_PROPERTIES
51   MY_QUERYINTERFACE_ENTRY(ISetProperties)
52   #endif
53   #ifndef EXTRACT_ONLY
54   MY_QUERYINTERFACE_ENTRY(IOutArchive)
55   #endif
56   QUERY_ENTRY_ISetCompressCodecsInfo
57   MY_QUERYINTERFACE_END
58   MY_ADDREF_RELEASE
59 
60   INTERFACE_IInArchive(;)
61 
62   #ifdef __7Z_SET_PROPERTIES
63   STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties);
64   #endif
65 
66   #ifndef EXTRACT_ONLY
67   INTERFACE_IOutArchive(;)
68   #endif
69 
70   DECL_ISetCompressCodecsInfo
71 
72   CHandler();
73 
74 private:
75   CMyComPtr<IInStream> _inStream;
76   NArchive::N7z::CArchiveDatabaseEx _db;
77   #ifndef _NO_CRYPTO
78   bool _passwordIsDefined;
79   #endif
80 
81   #ifdef EXTRACT_ONLY
82 
83   #ifdef __7Z_SET_PROPERTIES
84   UInt32 _numThreads;
85   #endif
86 
87   UInt32 _crcSize;
88 
89   #else
90 
91   CRecordVector<CBind> _binds;
92 
93   HRESULT SetCompressionMethod(CCompressionMethodMode &method,
94       CObjectVector<COneMethodInfo> &methodsInfo
95       #ifndef _7ZIP_ST
96       , UInt32 numThreads
97       #endif
98       );
99 
100   HRESULT SetCompressionMethod(
101       CCompressionMethodMode &method,
102       CCompressionMethodMode &headerMethod);
103 
104   #endif
105 
106   bool IsEncrypted(UInt32 index2) const;
107   #ifndef _SFX
108 
109   CRecordVector<UInt64> _fileInfoPopIDs;
110   void FillPopIDs();
111 
112   #endif
113 
114   DECL_EXTERNAL_CODECS_VARS
115 };
116 
117 }}
118 
119 #endif
120