/***************************************************************************** * ftpstm.h *****************************************************************************/ #ifndef _FTPSTREAM_H #define _FTPSTREAM_H typedef HRESULT (*STMIO)(HINTERNET hinst, BOOL fAssertOnFailure, LPVOID pvBuffer, DWORD dwNumberOfBytesToWrite, LPDWORD pdwNumberOfBytesWritten); /***************************************************************************** * * CFtpStm * * *****************************************************************************/ class CFtpStm : public IStream { public: ////////////////////////////////////////////////////// // Public Interfaces ////////////////////////////////////////////////////// // *** IUnknown *** virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void); virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); // *** IStream *** virtual STDMETHODIMP Read(void *pv, ULONG cb, ULONG *pcbRead); virtual STDMETHODIMP Write(const void *pv, ULONG cb, ULONG *pcbWritten); virtual STDMETHODIMP Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition) { return(E_NOTIMPL); }; virtual STDMETHODIMP SetSize(ULARGE_INTEGER libNewSize) { return(E_NOTIMPL); }; virtual STDMETHODIMP CopyTo(IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten); virtual STDMETHODIMP Commit(DWORD grfCommitFlags); virtual STDMETHODIMP Revert(void) { return(E_NOTIMPL); }; virtual STDMETHODIMP LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); virtual STDMETHODIMP UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); virtual STDMETHODIMP Stat(STATSTG *pstatstg, DWORD grfStatFlag); virtual STDMETHODIMP Clone(IStream **ppstm) { return(E_NOTIMPL); }; public: CFtpStm(); ~CFtpStm(void); // Public Member Functions HRESULT ReadOrWrite(LPVOID pv, ULONG cb, ULONG * pcb, DWORD dwAccess, STMIO io, HRESULT hresFail); // Friend Functions friend HRESULT CFtpStm_Create(CFtpDir * pfd, LPCITEMIDLIST pidl, DWORD dwAccess, IStream ** ppstream, ULARGE_INTEGER uliComplete, ULARGE_INTEGER uliTotal, IProgressDialog * ppd, BOOL fClosePrgDlg); protected: // Private Member Variables int m_cRef; HINTERNET m_hint; // DWORD m_dwAccessType; // CFtpDir * m_pfd; // HINTERNET m_hintSession; // LPITEMIDLIST m_pidl; // IProgressDialog * m_ppd; // ULARGE_INTEGER m_uliComplete; // ULARGE_INTEGER m_uliTotal; // BOOL m_fClosePrgDlg; // Do we want to close the progress dialog after we finish copying this stream? ULONG m_ulBytesSinceProgressUpdate; // When was the last time I displayed progress? LPITEMIDLIST m_pidlOriginalFtpPath; // We need to return the current directory for this handle to this location when we are done. }; #endif // _FTPSTREAM_H