// ================================================================================= // Common IMailXP macros and stuff // Written by: Steven J. Bailey on 1/21/96 // ================================================================================= #ifndef __XPCOMM_H #define __XPCOMM_H // ------------------------------------------------------------------------------------ // INETMAILERROR // ------------------------------------------------------------------------------------ typedef struct tagINETMAILERROR { DWORD dwErrorNumber; // Error Number HRESULT hrError; // HRESULT of error LPTSTR pszServer; // Server LPTSTR pszAccount; // Account LPTSTR pszMessage; // Actual error message LPTSTR pszUserName; // User Name LPTSTR pszProtocol; // protocol smtp or pop3 LPTSTR pszDetails; // Details message DWORD dwPort; // Port BOOL fSecure; // Secure ssl conneciton } INETMAILERROR, *LPINETMAILERROR; INT_PTR CALLBACK InetMailErrorDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // ================================================================================= // Defines // ================================================================================= #define SECONDS_INA_MINUTE (ULONG)60 // Easy #define SECONDS_INA_HOUR (ULONG)3600 // 60 * 60 #define SECONDS_INA_DAY (ULONG)86400 // 3600 * 24 #define IS_EXTENDED(ch) ((ch > 126 || ch < 32) && ch != '\t' && ch != '\n' && ch != '\r') // ============================================================================================ // Returns 0 if string is NULL, lstrlen + 1 otherwise // ============================================================================================ #define SafeStrlen(_psz) (_psz ? lstrlen (_psz) + 1 : 0) // ================================================================================= // CProgress // ================================================================================= class CProgress : public IDatabaseProgress, public IStoreCallback { public: //---------------------------------------------------------------------- // Construction //---------------------------------------------------------------------- CProgress(void); ~CProgress(void); //---------------------------------------------------------------------- // IUnknown Members //---------------------------------------------------------------------- STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppv) { return E_NOTIMPL; } STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); //---------------------------------------------------------------------- // IStoreCallback Members //---------------------------------------------------------------------- STDMETHODIMP OnBegin(STOREOPERATIONTYPE tyOperation, STOREOPERATIONINFO *pOpInfo, IOperationCancel *pCancel) { return(E_NOTIMPL); } STDMETHODIMP OnTimeout(LPINETSERVER pServer, LPDWORD pdwTimeout, IXPTYPE ixpServerType) { return(E_NOTIMPL); } STDMETHODIMP CanConnect(LPCSTR pszAccountId, DWORD dwFlags) { return(E_NOTIMPL); } STDMETHODIMP OnLogonPrompt(LPINETSERVER pServer, IXPTYPE ixpServerType) { return(E_NOTIMPL); } STDMETHODIMP OnComplete(STOREOPERATIONTYPE tyOperation, HRESULT hrComplete, LPSTOREOPERATIONINFO pOpInfo, LPSTOREERROR pErrorInfo) { return(E_NOTIMPL); } STDMETHODIMP OnPrompt(HRESULT hrError, LPCTSTR pszText, LPCTSTR pszCaption, UINT uType, INT *piUserResponse) { return(E_NOTIMPL); } STDMETHODIMP GetParentWindow(DWORD dwReserved, HWND *phwndParent) { return(E_NOTIMPL); } STDMETHODIMP OnProgress(STOREOPERATIONTYPE tyOperation, DWORD dwCurrent, DWORD dwMax, LPCSTR pszStatus) { if (0 == m_cMax) AdjustMax(dwMax); ULONG cIncrement = (dwCurrent - m_cLast); HRESULT hr = HrUpdate(cIncrement); m_cLast = dwCurrent; return(hr); } //---------------------------------------------------------------------- // IDatabaseProgress Members //---------------------------------------------------------------------- STDMETHODIMP Update(DWORD cCount) { return HrUpdate(1); } //---------------------------------------------------------------------- // CProgress Members //---------------------------------------------------------------------- void SetMsg(LPTSTR lpszMsg); void SetTitle(LPTSTR lpszTitle); void Show(DWORD dwDelaySeconds=0); void Hide(void); void Close(void); void AdjustMax(ULONG cNewMax); void Reset(void); HWND GetHwnd(void) { return (m_hwndDlg); } HRESULT HrUpdate (ULONG cInc); static INT_PTR CALLBACK ProgressDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void Init(HWND hwndParent, LPTSTR lpszTitle, LPTSTR lpszMsg, ULONG cMax, UINT idani, BOOL fCanCancel, BOOL fBacktrackParent=TRUE); private: //---------------------------------------------------------------------- // Private Data //---------------------------------------------------------------------- ULONG m_cRef; ULONG m_cLast; ULONG m_cMax; ULONG m_cCur; ULONG m_cPerCur; HWND m_hwndProgress; HWND m_hwndDlg; HWND m_hwndOwner; HWND m_hwndDisable; BOOL m_fCanCancel; BOOL m_fHasCancel; }; // ================================================================================= // Max Message String // ================================================================================= #define MAX_MESSAGE_STRING 255 #define MAX_RESOURCE_STRING 255 #define MAX_REG_VALUE_STR 1024 #define MAX_TEXT_STM_BUFFER_STR 4096 // ================================================================================= // Detailed Error Struct // ================================================================================= typedef struct tagDETERR { LPTSTR lpszMessage; LPTSTR lpszDetails; UINT idsTitle; RECT rc; BOOL fHideDetails; } DETERR, *LPDETERR; // Blob parsing HRESULT HrBlobReadData (LPBYTE lpBlob, ULONG cbBlob, ULONG *pib, LPBYTE lpbData, ULONG cbData); HRESULT HrBlobWriteData (LPBYTE lpBlob, ULONG cbBlob, ULONG *pib, LPBYTE lpbData, ULONG cbData); // String Parsing Functions VOID StripSpaces(LPTSTR psz); LPTSTR SzGetSearchTokens(LPTSTR pszCriteria);; HRESULT HrCopyAlloc (LPBYTE *lppbDest, LPBYTE lpbSrc, ULONG cb); LPTSTR StringDup (LPCTSTR lpcsz); BOOL FIsStringEmpty (LPTSTR lpszString); BOOL FIsStringEmptyW(LPWSTR lpwszString); void SkipWhitespace (LPCTSTR lpcsz, ULONG *pi); BOOL FStringTok (LPCTSTR lpcszString, ULONG *piString, LPTSTR lpcszTokens, TCHAR *chToken, LPTSTR lpszValue, ULONG cbValueMax, BOOL fStripTrailingWhitespace); #ifdef DEAD ULONG UlDBCSStripWhitespace (LPSTR lpsz, BOOL fLeading, BOOL fTrailing, ULONG *pcb); #endif // DEAD LPTSTR SzNormalizeSubject (LPTSTR lpszSubject); LPTSTR SzFindChar (LPCTSTR lpcsz, TCHAR ch); WORD NFromSz (LPCTSTR lpcsz); UINT AthUFromSz(LPCTSTR lpcsz); VOID ProcessNlsError (VOID); // Networking Functions LPSTR SzGetLocalHostName (VOID); LPTSTR SzGetLocalPackedIP (VOID); LPSTR SzGetLocalHostNameForID (VOID); HRESULT HrFixupHostString (LPTSTR lpszHost); HRESULT HrFixupAccountString (LPTSTR lpszAccount); LPTSTR SzStrAlloc (ULONG cch); // Whatever HFONT HGetMenuFont (void); VOID DetailedError (HWND hwndParent, LPDETERR lpDetErr); ULONG UlDateDiff (LPFILETIME lpft1, LPFILETIME lpft2); BOOL FIsLeapYear (INT nYear); VOID ResizeDialogComboEx (HWND hwndDlg, HWND hwndCombo, UINT idcBase, HIMAGELIST himl); VOID StripIllegalHostChars(LPSTR pszSrc, LPTSTR pszDst); #ifdef DEBUG VOID TestDateDiff (VOID); #endif #endif // _COMMON_HPP