3 #ifndef __FILTER_CODER_H
\r
4 #define __FILTER_CODER_H
\r
6 #include "../../Common/MyCom.h"
\r
7 #include "../ICoder.h"
\r
8 #include "../IPassword.h"
\r
10 #define MY_QUERYINTERFACE_ENTRY_AG(i, sub0, sub) if (iid == IID_ ## i) \
\r
11 { if (!sub) RINOK(sub0->QueryInterface(IID_ ## i, (void **)&sub)) \
\r
12 *outObject = (void *)(i *)this; AddRef(); return S_OK; }
\r
15 public ICompressCoder,
\r
16 public ICompressSetInStream,
\r
17 public ISequentialInStream,
\r
18 public ICompressSetOutStream,
\r
19 public ISequentialOutStream,
\r
20 public IOutStreamFlush,
\r
23 public ICryptoSetPassword,
\r
25 #ifndef EXTRACT_ONLY
\r
26 public ICompressSetCoderProperties,
\r
27 public ICompressWriteCoderProperties,
\r
28 // public ICryptoResetSalt,
\r
29 public ICryptoResetInitVector,
\r
31 public ICompressSetDecoderProperties2,
\r
32 public CMyUnknownImp
\r
36 CMyComPtr<ISequentialInStream> _inStream;
\r
37 CMyComPtr<ISequentialOutStream> _outStream;
\r
39 UInt32 _convertedPosBegin;
\r
40 UInt32 _convertedPosEnd;
\r
41 bool _outSizeIsDefined;
\r
48 _outSizeIsDefined = false;
\r
49 return Filter->Init();
\r
52 CMyComPtr<ICryptoSetPassword> _setPassword;
\r
53 #ifndef EXTRACT_ONLY
\r
54 CMyComPtr<ICompressSetCoderProperties> _SetCoderProperties;
\r
55 CMyComPtr<ICompressWriteCoderProperties> _writeCoderProperties;
\r
56 // CMyComPtr<ICryptoResetSalt> _CryptoResetSalt;
\r
57 CMyComPtr<ICryptoResetInitVector> _CryptoResetInitVector;
\r
59 CMyComPtr<ICompressSetDecoderProperties2> _setDecoderProperties;
\r
61 CMyComPtr<ICompressFilter> Filter;
\r
65 HRESULT WriteWithLimit(ISequentialOutStream *outStream, UInt32 size);
\r
68 MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
\r
69 MY_QUERYINTERFACE_ENTRY(ICompressSetInStream)
\r
70 MY_QUERYINTERFACE_ENTRY(ISequentialInStream)
\r
71 MY_QUERYINTERFACE_ENTRY(ICompressSetOutStream)
\r
72 MY_QUERYINTERFACE_ENTRY(ISequentialOutStream)
\r
73 MY_QUERYINTERFACE_ENTRY(IOutStreamFlush)
\r
76 MY_QUERYINTERFACE_ENTRY_AG(ICryptoSetPassword, Filter, _setPassword)
\r
79 #ifndef EXTRACT_ONLY
\r
80 MY_QUERYINTERFACE_ENTRY_AG(ICompressSetCoderProperties, Filter, _SetCoderProperties)
\r
81 MY_QUERYINTERFACE_ENTRY_AG(ICompressWriteCoderProperties, Filter, _writeCoderProperties)
\r
82 // MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetSalt, Filter, _CryptoResetSalt)
\r
83 MY_QUERYINTERFACE_ENTRY_AG(ICryptoResetInitVector, Filter, _CryptoResetInitVector)
\r
86 MY_QUERYINTERFACE_ENTRY_AG(ICompressSetDecoderProperties2, Filter, _setDecoderProperties)
\r
87 MY_QUERYINTERFACE_END
\r
89 STDMETHOD(Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream,
\r
90 const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
\r
91 STDMETHOD(ReleaseInStream)();
\r
92 STDMETHOD(SetInStream)(ISequentialInStream *inStream);
\r
93 STDMETHOD(Read)(void *data, UInt32 size, UInt32 *processedSize); \
\r
94 STDMETHOD(SetOutStream)(ISequentialOutStream *outStream);
\r
95 STDMETHOD(ReleaseOutStream)();
\r
96 STDMETHOD(Write)(const void *data, UInt32 size, UInt32 *processedSize);
\r
100 STDMETHOD(CryptoSetPassword)(const Byte *data, UInt32 size);
\r
102 #ifndef EXTRACT_ONLY
\r
103 STDMETHOD(SetCoderProperties)(const PROPID *propIDs,
\r
104 const PROPVARIANT *properties, UInt32 numProperties);
\r
105 STDMETHOD(WriteCoderProperties)(ISequentialOutStream *outStream);
\r
106 // STDMETHOD(ResetSalt)();
\r
107 STDMETHOD(ResetInitVector)();
\r
109 STDMETHOD(SetDecoderProperties2)(const Byte *data, UInt32 size);
\r
112 class CInStreamReleaser
\r
115 CFilterCoder *FilterCoder;
\r
116 CInStreamReleaser(): FilterCoder(0) {}
\r
117 ~CInStreamReleaser() { if (FilterCoder) FilterCoder->ReleaseInStream(); }
\r
120 class COutStreamReleaser
\r
123 CFilterCoder *FilterCoder;
\r
124 COutStreamReleaser(): FilterCoder(0) {}
\r
125 ~COutStreamReleaser() { if (FilterCoder) FilterCoder->ReleaseOutStream(); }
\r