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 CBoolPair Write_CTime; 53 CBoolPair Write_ATime; 54 CBoolPair Write_MTime; 55 CBoolPair Write_Attrib; 56 57 bool _useMultiThreadMixer; 58 59 bool _removeSfxBlock; 60 61 // bool _volumeMode; 62 63 void InitSolidFiles() { _numSolidFiles = (UInt64)(Int64)(-1); } 64 void InitSolidSize() { _numSolidBytes = (UInt64)(Int64)(-1); } 65 void InitSolid() 66 { 67 InitSolidFiles(); 68 InitSolidSize(); 69 _solidExtension = false; 70 _numSolidBytesDefined = false; 71 } 72 73 void InitProps7z(); 74 void InitProps(); 75 76 COutHandler() { InitProps7z(); } 77 78 HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &value); 79 }; 80 81 #endif 82 83 class CHandler: 84 public IInArchive, 85 public IArchiveGetRawProps, 86 87 #ifdef __7Z_SET_PROPERTIES 88 public ISetProperties, 89 #endif 90 91 #ifndef EXTRACT_ONLY 92 public IOutArchive, 93 #endif 94 95 PUBLIC_ISetCompressCodecsInfo 96 97 public CMyUnknownImp, 98 99 #ifndef EXTRACT_ONLY 100 public COutHandler 101 #else 102 public CCommonMethodProps 103 #endif 104 { 105 public: 106 MY_QUERYINTERFACE_BEGIN2(IInArchive) 107 MY_QUERYINTERFACE_ENTRY(IArchiveGetRawProps) 108 #ifdef __7Z_SET_PROPERTIES 109 MY_QUERYINTERFACE_ENTRY(ISetProperties) 110 #endif 111 #ifndef EXTRACT_ONLY 112 MY_QUERYINTERFACE_ENTRY(IOutArchive) 113 #endif 114 QUERY_ENTRY_ISetCompressCodecsInfo 115 MY_QUERYINTERFACE_END 116 MY_ADDREF_RELEASE 117 118 INTERFACE_IInArchive(;) 119 INTERFACE_IArchiveGetRawProps(;) 120 121 #ifdef __7Z_SET_PROPERTIES 122 STDMETHOD(SetProperties)(const wchar_t * const *names, const PROPVARIANT *values, UInt32 numProps); 123 #endif 124 125 #ifndef EXTRACT_ONLY 126 INTERFACE_IOutArchive(;) 127 #endif 128 129 DECL_ISetCompressCodecsInfo 130 131 CHandler(); 132 133 private: 134 CMyComPtr<IInStream> _inStream; 135 NArchive::N7z::CDbEx _db; 136 137 #ifndef _NO_CRYPTO 138 bool _isEncrypted; 139 bool _passwordIsDefined; 140 UString _password; 141 #endif 142 143 #ifdef EXTRACT_ONLY 144 145 #ifdef __7Z_SET_PROPERTIES 146 bool _useMultiThreadMixer; 147 #endif 148 149 UInt32 _crcSize; 150 151 #else 152 153 CRecordVector<CBond2> _bonds; 154 155 HRESULT PropsMethod_To_FullMethod(CMethodFull &dest, const COneMethodInfo &m); 156 HRESULT SetHeaderMethod(CCompressionMethodMode &headerMethod); 157 HRESULT SetMainMethod(CCompressionMethodMode &method 158 #ifndef _7ZIP_ST 159 , UInt32 numThreads 160 #endif 161 ); 162 163 164 #endif 165 166 bool IsFolderEncrypted(CNum folderIndex) const; 167 #ifndef _SFX 168 169 CRecordVector<UInt64> _fileInfoPopIDs; 170 void FillPopIDs(); 171 void AddMethodName(AString &s, UInt64 id); 172 HRESULT SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const; 173 174 #endif 175 176 DECL_EXTERNAL_CODECS_VARS 177 }; 178 179 }} 180 181 #endif 182