1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * Copyright 2005 - 2016 Zarafa and its licensors
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- #ifndef ECMessageStreamImporterIStreamAdapter_INCLUDED
- #define ECMessageStreamImporterIStreamAdapter_INCLUDED
- #include <kopano/zcdefs.h>
- #include <kopano/memory.hpp>
- #include <kopano/ECUnknown.h>
- #include "WSMessageStreamImporter.h"
- /**
- * This class wraps a WSMessageStreamImporter object and exposes it as an IStream.
- * The actual import callto the server will be initiated by the first write to the
- * IStream.
- * On commit, the call thread will block until the asynchronous call has completed, and
- * the return value will be returned.
- */
- class ECMessageStreamImporterIStreamAdapter _kc_final : public ECUnknown {
- public:
- static HRESULT Create(WSMessageStreamImporter *lpStreamImporter, IStream **lppStream);
- // IUnknown
- virtual HRESULT QueryInterface(REFIID refiid, void **lppInterface) _kc_override;
- // ISequentialStream
- virtual HRESULT Read(void *pv, ULONG cb, ULONG *pcbRead);
- virtual HRESULT Write(const void *pv, ULONG cb, ULONG *pcbWritten);
- // IStream
- virtual HRESULT Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition);
- virtual HRESULT SetSize(ULARGE_INTEGER libNewSize);
- virtual HRESULT CopyTo(IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten);
- virtual HRESULT Commit(DWORD grfCommitFlags);
- virtual HRESULT Revert(void);
- virtual HRESULT LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
- virtual HRESULT UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
- virtual HRESULT Stat(STATSTG *pstatstg, DWORD grfStatFlag);
- virtual HRESULT Clone(IStream **ppstm);
- private:
- ECMessageStreamImporterIStreamAdapter(WSMessageStreamImporter *lpStreamImporter);
- ~ECMessageStreamImporterIStreamAdapter();
- class xSequentialStream _kc_final : public ISequentialStream {
- #include <kopano/xclsfrag/IUnknown.hpp>
- #include <kopano/xclsfrag/ISequentialStream.hpp>
- } m_xSequentialStream;
- class xStream _kc_final : public IStream {
- #include <kopano/xclsfrag/IUnknown.hpp>
- #include <kopano/xclsfrag/ISequentialStream.hpp>
- #include <kopano/xclsfrag/IStream.hpp>
- } m_xStream;
- WSMessageStreamImporterPtr m_ptrStreamImporter;
- WSMessageStreamSinkPtr m_ptrSink;
- };
- typedef KCHL::object_ptr<ECMessageStreamImporterIStreamAdapter> ECMessageStreamImporterIStreamAdapterPtr;
- #endif // ndef ECMessageStreamImporterIStreamAdapter_INCLUDED
|