other-licenses/7zstub/src/7zip/Archive/7z/7zHandler.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 // 7z/Handler.h
     3 #ifndef __7Z_HANDLER_H
     4 #define __7Z_HANDLER_H
     6 #include "../IArchive.h"
     7 #include "7zIn.h"
     9 #include "7zCompressionMode.h"
    11 #ifndef _SFX
    12 #include "7zMethods.h"
    13 #endif
    15 #ifdef COMPRESS_MT
    16 #include "../../../Windows/System.h"
    17 #endif
    19 namespace NArchive {
    20 namespace N7z {
    22 #ifdef _7Z_VOL
    23 struct CRef
    24 {
    25   int VolumeIndex;
    26   int ItemIndex;
    27 };
    29 /*
    30 struct CRef2
    31 {
    32   CRecordVector<CRef> Refs;
    33   UInt64 UnPackSize;
    34   UInt64 PackSize;
    35   UInt64 StartPos;
    36   CRef2(): UnPackSize(0), PackSize(0), StartPos(0) {}
    37 };
    38 */
    40 struct CVolume
    41 {
    42   int StartRef2Index;
    43   CMyComPtr<IInStream> Stream;
    44   CArchiveDatabaseEx Database;
    45 };
    46 #endif
    48 #ifndef EXTRACT_ONLY
    50 struct COneMethodInfo
    51 {
    52   CObjectVector<CProperty> CoderProperties;
    53   UString MethodName;
    54 };
    55 #endif
    57 // {23170F69-40C1-278A-1000-000110070000}
    58 DEFINE_GUID(CLSID_CFormat7z, 
    59   0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00);
    61 #ifndef __7Z_SET_PROPERTIES
    63 #ifdef EXTRACT_ONLY
    64 #ifdef COMPRESS_MT
    65 #define __7Z_SET_PROPERTIES
    66 #endif
    67 #else 
    68 #define __7Z_SET_PROPERTIES
    69 #endif
    71 #endif
    74 class CHandler: 
    75   public IInArchive,
    76   #ifdef _7Z_VOL
    77   public IInArchiveGetStream,
    78   #endif
    79   #ifdef __7Z_SET_PROPERTIES
    80   public ISetProperties, 
    81   #endif
    82   #ifndef EXTRACT_ONLY
    83   public IOutArchive, 
    84   #endif
    85   public CMyUnknownImp
    86 {
    87 public:
    88   MY_QUERYINTERFACE_BEGIN
    89   #ifdef _7Z_VOL
    90   MY_QUERYINTERFACE_ENTRY(IInArchiveGetStream)
    91   #endif
    92   #ifdef __7Z_SET_PROPERTIES
    93   MY_QUERYINTERFACE_ENTRY(ISetProperties)
    94   #endif
    95   #ifndef EXTRACT_ONLY
    96   MY_QUERYINTERFACE_ENTRY(IOutArchive)
    97   #endif
    98   MY_QUERYINTERFACE_END
    99   MY_ADDREF_RELEASE
   101   STDMETHOD(Open)(IInStream *stream, 
   102       const UInt64 *maxCheckStartPosition,
   103       IArchiveOpenCallback *openArchiveCallback);  
   104   STDMETHOD(Close)();  
   106   STDMETHOD(GetNumberOfItems)(UInt32 *numItems);  
   107   STDMETHOD(GetProperty)(UInt32 index, PROPID propID,  PROPVARIANT *value);
   108   STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems, 
   109       Int32 testMode, IArchiveExtractCallback *extractCallback);
   111   STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value);
   113   STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties);  
   114   STDMETHOD(GetPropertyInfo)(UInt32 index,     
   115       BSTR *name, PROPID *propID, VARTYPE *varType);
   117   STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties);  
   118   STDMETHOD(GetArchivePropertyInfo)(UInt32 index,     
   119       BSTR *name, PROPID *propID, VARTYPE *varType);
   121   #ifdef _7Z_VOL
   122   STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream);  
   123   #endif
   125   #ifdef __7Z_SET_PROPERTIES
   126   STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties);
   127   #endif
   129   #ifndef EXTRACT_ONLY
   130   // IOutArchiveHandler
   131   STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems,
   132       IArchiveUpdateCallback *updateCallback);
   134   STDMETHOD(GetFileTimeType)(UInt32 *type);  
   136   // ISetProperties
   138   HRESULT SetSolidSettings(const UString &s);
   139   HRESULT SetSolidSettings(const PROPVARIANT &value);
   140   #endif
   142   CHandler();
   144 private:
   145   #ifdef _7Z_VOL
   146   CObjectVector<CVolume> _volumes;
   147   CObjectVector<CRef> _refs;
   148   #else
   149   CMyComPtr<IInStream> _inStream;
   150   NArchive::N7z::CArchiveDatabaseEx _database;
   151   #endif
   153   #ifdef COMPRESS_MT
   154   UInt32 _numThreads;
   155   #endif
   157   #ifndef EXTRACT_ONLY
   158   CObjectVector<COneMethodInfo> _methods;
   159   CRecordVector<CBind> _binds;
   160   bool _removeSfxBlock;
   161   UInt64 _numSolidFiles; 
   162   UInt64 _numSolidBytes;
   163   bool _numSolidBytesDefined;
   164   bool _solidExtension;
   166   bool _compressHeaders;
   167   bool _compressHeadersFull;
   168   bool _encryptHeaders;
   170   bool _autoFilter;
   171   UInt32 _level;
   173   bool _volumeMode;
   176   HRESULT SetParam(COneMethodInfo &oneMethodInfo, const UString &name, const UString &value);
   177   HRESULT SetParams(COneMethodInfo &oneMethodInfo, const UString &srcString);
   179   HRESULT SetPassword(CCompressionMethodMode &methodMode,
   180       IArchiveUpdateCallback *updateCallback);
   182   HRESULT SetCompressionMethod(CCompressionMethodMode &method,
   183       CObjectVector<COneMethodInfo> &methodsInfo
   184       #ifdef COMPRESS_MT
   185       , UInt32 numThreads
   186       #endif
   187       );
   189   HRESULT SetCompressionMethod(
   190       CCompressionMethodMode &method,
   191       CCompressionMethodMode &headerMethod);
   193   #endif
   195   #ifndef _SFX
   197   CRecordVector<UInt64> _fileInfoPopIDs;
   198   void FillPopIDs();
   200   #endif
   202   #ifndef EXTRACT_ONLY
   204   void InitSolidFiles() { _numSolidFiles = UInt64(Int64(-1)); }
   205   void InitSolidSize()  { _numSolidBytes = UInt64(Int64(-1)); }
   206   void InitSolid()
   207   {
   208     InitSolidFiles();
   209     InitSolidSize();
   210     _solidExtension = false;
   211     _numSolidBytesDefined = false;
   212   }
   214   void Init()
   215   {
   216     _removeSfxBlock = false;
   217     _compressHeaders = true;
   218     _compressHeadersFull = true;
   219     _encryptHeaders = false;
   220     #ifdef COMPRESS_MT
   221     _numThreads = NWindows::NSystem::GetNumberOfProcessors();
   222     #endif
   224     _level = 5;
   225     _autoFilter = true;
   226     _volumeMode = false;
   227     InitSolid();
   228   }
   229   #endif
   230 };
   232 }}
   234 #endif

mercurial