// -------------------------------------------------------------------------------- // h t t p t a s k . h // Copyright (c)1998 Microsoft Corporation, All Rights Reserved // Greg S. Friedman // -------------------------------------------------------------------------------- #ifndef __HTTPTASK_H #define __HTTPTASK_H // -------------------------------------------------------------------------------- // Depends // -------------------------------------------------------------------------------- #include "spoolapi.h" #include "srtarray.h" #include "taskutil.h" // -------------------------------------------------------------------------------- // State // -------------------------------------------------------------------------------- #define HTTPSTATE_CANCELED FLAG01 #define HTTPSTATE_EVENTSUCCESS FLAG02 // one or more events succeeded // -------------------------------------------------------------------------------- // HTTPEVENTINFO // -------------------------------------------------------------------------------- typedef struct tagHTTPEVENTINFO { DWORD dwFlags; // Flags MESSAGEID idMessage; // Store Information BOOL fComplete; // has event been completed DWORD cbSentTotal; // running total of sent bytes } HTTPEVENTINFO, *LPHTTPEVENTINFO; // -------------------------------------------------------------------------------- // CHTTPTask // -------------------------------------------------------------------------------- class CHTTPTask: public ISpoolerTask, IHTTPMailCallback { public: // ---------------------------------------------------------------------------- // CHTTPTask // ---------------------------------------------------------------------------- CHTTPTask(void); private: ~CHTTPTask(void); public: // --------------------------------------------------------------------------- // IUnknown members // --------------------------------------------------------------------------- STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // --------------------------------------------------------------------------- // ISpoolerTask // --------------------------------------------------------------------------- STDMETHODIMP Init(DWORD dwFlags, ISpoolerBindContext *pBindCtx); STDMETHODIMP BuildEvents(ISpoolerUI *pSpoolerUI, IImnAccount *pAccount, FOLDERID idFolder); STDMETHODIMP Execute(EVENTID eid, DWORD_PTR dwTwinkie); STDMETHODIMP CancelEvent(EVENTID eid, DWORD_PTR dwTwinkie); STDMETHODIMP ShowProperties(HWND hwndParent, EVENTID eid, DWORD_PTR dwTwinkie) { return TrapError(E_NOTIMPL); } STDMETHODIMP GetExtendedDetails(EVENTID eid, DWORD_PTR dwTwinkie, LPSTR *ppszDetails) { return TrapError(E_NOTIMPL); } STDMETHODIMP Cancel(void); STDMETHODIMP IsDialogMessage(LPMSG pMsg); STDMETHODIMP OnFlagsChanged(DWORD dwFlags); // ---------------------------------------------------------------------------- // ITransportCallback methods // ---------------------------------------------------------------------------- STDMETHODIMP OnLogonPrompt( LPINETSERVER pInetServer, IInternetTransport *pTransport); STDMETHODIMP_(INT) OnPrompt( HRESULT hrError, LPCTSTR pszText, LPCTSTR pszCaption, UINT uType, IInternetTransport *pTransport); STDMETHODIMP OnStatus( IXPSTATUS ixpstatus, IInternetTransport *pTransport); STDMETHODIMP OnError( IXPSTATUS ixpstatus, LPIXPRESULT pIxpResult, IInternetTransport *pTransport); STDMETHODIMP OnProgress( DWORD dwIncrement, DWORD dwCurrent, DWORD dwMaximum, IInternetTransport *pTransport); STDMETHODIMP OnCommand( CMDTYPE cmdtype, LPSTR pszLine, HRESULT hrResponse, IInternetTransport *pTransport); STDMETHODIMP OnTimeout( DWORD *pdwTimeout, IInternetTransport *pTransport); // ---------------------------------------------------------------------------- // IHTTPMailCallback methods // ---------------------------------------------------------------------------- STDMETHODIMP OnResponse(LPHTTPMAILRESPONSE pResponse); STDMETHODIMP GetParentWindow(HWND *phwndParent); private: // --------------------------------------------------------------------------- // Private Methods // --------------------------------------------------------------------------- void _Reset(void); TASKRESULTTYPE _CatchResult(HRESULT hr); TASKRESULTTYPE _CatchResult(LPIXPRESULT pResult); HRESULT _HrAppendOutboxMessage(LPCSTR pszAccount, LPMESSAGEINFO pmi); HRESULT _HrCreateSendProps(IMimeMessage *pMessage, LPSTR *ppszFrom, LPHTTPTARGETLIST *ppTargets); HRESULT _HrCreateHeaderStream(IMimeMessage *pMessage, IStream **ppStream); HRESULT _HrOpenMessage(MESSAGEID idMessage, IMimeMessage **ppMessage); HRESULT _HrPostCurrentMessage(void); HRESULT _HrExecuteSend(EVENTID eid, DWORD_PTR dwTwinkie); HRESULT _HrAdoptSendMsgUrl(LPSTR pszSendMsgUrl); HRESULT _HrFinishCurrentEvent(HRESULT hrResult, LPSTR pszLocationUrl); HRESULT _HrStartNextEvent(void); HRESULT _OnDisconnectComplete(void); void _UpdateSendMessageProgress(LPHTTPMAILRESPONSE pResponse); void _DoProgress(void); private: // --------------------------------------------------------------------------- // Private Data // --------------------------------------------------------------------------- LONG m_cRef; // Reference counting CRITICAL_SECTION m_cs; // thread safety DWORD m_dwFlags; // flags DWORD m_dwState; // state flags DWORD m_cbTotal; // total bytes to send DWORD m_cbSent; // number of bytes sent DWORD m_cbStart; // number of bytes sent at event start long m_cCompleted; // number of messages successfully sent WORD m_wProgress; // Current progress index ISpoolerBindContext *m_pSpoolCtx; // spooler bind context IImnAccount *m_pAccount; // account IMessageFolder *m_pOutbox; // The outbox IMessageFolder *m_pSentItems; // Sent items folder CSortedArray *m_psaEvents; // array of queued events long m_iEvent; // Current Event LPSTR m_pszSubject; // subject of current message IStream *m_pBody; // current message body IHTTPMailTransport *m_pTransport; // http data transport ISpoolerUI *m_pUI; // SpoolerUI EVENTID m_idSendEvent; // EventId for message send INETSERVER m_rServer; // Server information LPSTR m_pszAccountId; // Account Id LPSTR m_pszSendMsgUrl; // Url to post outbound messages to }; #endif // __HTTPTASK_H