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