| // 7z/Handler.h | |
| #ifndef __7Z_HANDLER_H | |
| #define __7Z_HANDLER_H | |
| #include "../../ICoder.h" | |
| #include "../IArchive.h" | |
| #include "../../Common/CreateCoder.h" | |
| #ifndef EXTRACT_ONLY | |
| #include "../Common/HandlerOut.h" | |
| #endif | |
| #include "7zCompressionMode.h" | |
| #include "7zIn.h" | |
| namespace NArchive { | |
| namespace N7z { | |
| const UInt32 k_Copy = 0x0; | |
| const UInt32 k_Delta = 3; | |
| const UInt32 k_LZMA2 = 0x21; | |
| const UInt32 k_LZMA = 0x030101; | |
| const UInt32 k_PPMD = 0x030401; | |
| const UInt32 k_BCJ = 0x03030103; | |
| const UInt32 k_BCJ2 = 0x0303011B; | |
| const UInt32 k_Deflate = 0x040108; | |
| const UInt32 k_BZip2 = 0x040202; | |
| #ifndef __7Z_SET_PROPERTIES | |
| #ifdef EXTRACT_ONLY | |
| #if !defined(_7ZIP_ST) && !defined(_SFX) | |
| #define __7Z_SET_PROPERTIES | |
| #endif | |
| #else | |
| #define __7Z_SET_PROPERTIES | |
| #endif | |
| #endif | |
| #ifndef EXTRACT_ONLY | |
| class COutHandler: public CMultiMethodProps | |
| { | |
| HRESULT SetSolidFromString(const UString &s); | |
| HRESULT SetSolidFromPROPVARIANT(const PROPVARIANT &value); | |
| public: | |
| bool _removeSfxBlock; | |
| UInt64 _numSolidFiles; | |
| UInt64 _numSolidBytes; | |
| bool _numSolidBytesDefined; | |
| bool _solidExtension; | |
| bool _compressHeaders; | |
| bool _encryptHeadersSpecified; | |
| bool _encryptHeaders; | |
| // bool _useParents; 9.26 | |
| CBoolPair Write_CTime; | |
| CBoolPair Write_ATime; | |
| CBoolPair Write_MTime; | |
| bool _volumeMode; | |
| void InitSolidFiles() { _numSolidFiles = (UInt64)(Int64)(-1); } | |
| void InitSolidSize() { _numSolidBytes = (UInt64)(Int64)(-1); } | |
| void InitSolid() | |
| { | |
| InitSolidFiles(); | |
| InitSolidSize(); | |
| _solidExtension = false; | |
| _numSolidBytesDefined = false; | |
| } | |
| void InitProps(); | |
| COutHandler() { InitProps(); } | |
| HRESULT SetProperty(const wchar_t *name, const PROPVARIANT &value); | |
| }; | |
| #endif | |
| class CHandler: | |
| public IInArchive, | |
| public IArchiveGetRawProps, | |
| #ifdef __7Z_SET_PROPERTIES | |
| public ISetProperties, | |
| #endif | |
| #ifndef EXTRACT_ONLY | |
| public IOutArchive, | |
| #endif | |
| PUBLIC_ISetCompressCodecsInfo | |
| public CMyUnknownImp | |
| #ifndef EXTRACT_ONLY | |
| , public COutHandler | |
| #endif | |
| { | |
| public: | |
| MY_QUERYINTERFACE_BEGIN2(IInArchive) | |
| MY_QUERYINTERFACE_ENTRY(IArchiveGetRawProps) | |
| #ifdef __7Z_SET_PROPERTIES | |
| MY_QUERYINTERFACE_ENTRY(ISetProperties) | |
| #endif | |
| #ifndef EXTRACT_ONLY | |
| MY_QUERYINTERFACE_ENTRY(IOutArchive) | |
| #endif | |
| QUERY_ENTRY_ISetCompressCodecsInfo | |
| MY_QUERYINTERFACE_END | |
| MY_ADDREF_RELEASE | |
| INTERFACE_IInArchive(;) | |
| INTERFACE_IArchiveGetRawProps(;) | |
| #ifdef __7Z_SET_PROPERTIES | |
| STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, UInt32 numProps); | |
| #endif | |
| #ifndef EXTRACT_ONLY | |
| INTERFACE_IOutArchive(;) | |
| #endif | |
| DECL_ISetCompressCodecsInfo | |
| CHandler(); | |
| private: | |
| CMyComPtr<IInStream> _inStream; | |
| NArchive::N7z::CDbEx _db; | |
| #ifndef _NO_CRYPTO | |
| bool _isEncrypted; | |
| bool _passwordIsDefined; | |
| #endif | |
| #ifdef EXTRACT_ONLY | |
| #ifdef __7Z_SET_PROPERTIES | |
| UInt32 _numThreads; | |
| #endif | |
| UInt32 _crcSize; | |
| #else | |
| CRecordVector<CBind> _binds; | |
| HRESULT PropsMethod_To_FullMethod(CMethodFull &dest, const COneMethodInfo &m); | |
| HRESULT SetHeaderMethod(CCompressionMethodMode &headerMethod); | |
| void AddDefaultMethod(); | |
| HRESULT SetMainMethod(CCompressionMethodMode &method, | |
| CObjectVector<COneMethodInfo> &methodsInfo | |
| #ifndef _7ZIP_ST | |
| , UInt32 numThreads | |
| #endif | |
| ); | |
| #endif | |
| bool IsFolderEncrypted(CNum folderIndex) const; | |
| #ifndef _SFX | |
| CRecordVector<UInt64> _fileInfoPopIDs; | |
| void FillPopIDs(); | |
| void AddMethodName(AString &s, UInt64 id); | |
| HRESULT SetMethodToProp(CNum folderIndex, PROPVARIANT *prop) const; | |
| #endif | |
| DECL_EXTERNAL_CODECS_VARS | |
| }; | |
| }} | |
| #endif |