// 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 |