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