#ifndef _INC_ICWWIZ_H #define _INC_ICWWIZ_H #include "ids.h" class CICWApprentice; interface IAccountImport; interface IAccountImport2; interface INewsGroupImport; class CAccount; class CAccountManager; interface IUserIdentity; #define WM_POSTSETFOCUS (WM_USER + 1) #define WM_ENABLENEXT (WM_USER + 2) #define WM_AUTODISCOVERY_FINISHED (WM_USER + 3) #define WM_AUTODISCOVERY_STATUSMSG (WM_USER + 4) // AutoDiscovery reserves (WM_USER+3) thru (WM_USER+13) #define WM_AUTODISCOVERY_RANGEEND (WM_USER + 13) #define CONNECT_DLG ((UINT)-3) #define EXTERN_DLG ((UINT)-2) #define INNER_DLG ((UINT)-1) #define NAME_PAGE 0x0001 #define ADDR_PAGE 0x0002 #define SRV_PAGE 0x0004 #define LOGON_PAGE 0x0008 #define RESOLVE_PAGE 0x0010 #define CONNECT_PAGE 0x0020 #define CONFIRM_PAGE 0x0040 #define ALL_PAGE 0x007f #define SELECT_PAGE 0x0100 #define NOSEL -2 #define CREATENEW -1 typedef struct tagACCTDATA { BOOL fLogon; BOOL fSPA; BOOL fResolve; // ldap only DWORD fServerTypes; // SRV_NNTP | SRV_IMAP | SRV_POP3 | SRV_SMTP | SRV_LDAP | SRV_HTTPMAIL char szAcctOrig[CCHMAX_ACCOUNT_NAME]; char szAcct[CCHMAX_ACCOUNT_NAME]; char szName[CCHMAX_DISPLAY_NAME]; char szEmail[CCHMAX_EMAIL_ADDRESS]; char szSvr1[CCHMAX_SERVER_NAME]; // pop3/imap, nntp, ldap char szSvr2[CCHMAX_SERVER_NAME]; // smtp char szUsername[CCHMAX_USERNAME]; char szPassword[CCHMAX_PASSWORD]; DWORD fAlwaysPromptPassword; // "Always Prompt for Password" option DWORD dwConnect; char szConnectoid[MAX_PATH]; CAccount *pAcct; BOOL fCreateNewAccount; char szFriendlyServiceName[CCHMAX_ACCOUNT_NAME]; BOOL fDomainMSN; int iServiceIndex; int iNewServiceIndex; } ACCTDATA; // CICWApprentice::m_dwFlags // these shouldn't conflict with the ACCT_WIZ_ flags from imnact.h #define ACCT_WIZ_IN_ICW 0x0100 // we are within the ICW (in apprentice mode) // if this isn't on, we own the wizard and ICW is within us #define ACCT_WIZ_IMPORT_CLIENT 0x0200 // we are importing acct from specific client // outlook uses this (passes in clsid for desired client) #define SZ_REGKEY_AUTODISCOVERY TEXT("SOFTWARE\\Microsoft\\Outlook Express\\5.0") #define SZ_REGKEY_AUTODISCOVERY_POLICY TEXT("SOFTWARE\\Policies\\Microsoft\\Windows") #define SZ_REGVALUE_AUTODISCOVERY TEXT("AutoDiscovery") #define SZ_REGVALUE_AUTODISCOVERY_POLICY TEXT("AutoDiscovery Policy") #define SZ_REGVALUE_AUTODISCOVERY_PASSIFIER TEXT("ADInform") #define SZ_REGVALUE_AUTODISCOVERY_OEMANUAL TEXT("OEManuallyConfigure") HRESULT CreateNewsObject(void **ppNews); typedef BOOL (CALLBACK* INITPROC)(CICWApprentice *,HWND,BOOL); typedef BOOL (CALLBACK* OKPROC)(CICWApprentice *,HWND,BOOL,UINT *); typedef BOOL (CALLBACK* CMDPROC)(CICWApprentice *,HWND,WPARAM,LPARAM); typedef BOOL (CALLBACK* WMUSERPROC)(CICWApprentice *,HWND,UINT,WPARAM,LPARAM); typedef BOOL (CALLBACK* CANCELPROC)(CICWApprentice *,HWND); typedef struct tagPAGEINFO { UINT uDlgID; UINT uHdrID; // string id for title // handler procedures for each page-- any of these can be // NULL in which case the default behavior is used INITPROC InitProc; OKPROC OKProc; CMDPROC CmdProc; WMUSERPROC WMUserProc; CANCELPROC CancelProc; DWORD dwHelp; } PAGEINFO; typedef struct tagDLGINITINFO { CICWApprentice *pApp; int ord; } DLGINITINFO; typedef struct tagMIGRATEINFO { IAccountImport *pImp; IAccountImport2 *pImp2; int cAccts; TCHAR szDisplay[MAX_PATH]; } MIGRATEINFO; #define CCHMAX_SERVICENAME 255 typedef struct tagHTTPMAILSERVICEINFO { TCHAR szFriendlyName[CCHMAX_SERVICENAME]; TCHAR szDomain[CCHMAX_SERVICENAME]; TCHAR szRootUrl[MAX_PATH]; TCHAR szSignupUrl[MAX_PATH]; BOOL fDomainMSN; BOOL fHTTPEnabled; BOOL fUseWizard; } HTTPMAILSERVICE; class CICWApprentice : public IICWApprentice, public IICWExtension { private: ULONG m_cRef; BOOL m_fInit; BOOL m_fReboot; IICWExtension *m_pExt; const PAGEINFO *m_pPageInfo; DLGINITINFO *m_pInitInfo; UINT m_cPages; UINT m_idPrevPage; UINT m_idNextPage; UINT m_iCurrentPage; UINT m_iPageHistory[NUM_WIZARD_PAGES]; UINT m_cPagesCompleted; HWND m_hDlg; UINT m_cPageBuf; HPROPSHEETPAGE *m_rgPage; UINT m_extFirstPage; UINT m_extLastPage; CAccountManager *m_pAcctMgr; DWORD m_dwFlags; IICWApprentice *m_pICW; ACCTTYPE m_acctType; BOOL m_fSave; BOOL m_fSkipICW; DWORD m_dwReload; int m_iSel; BOOL m_fComplete; ACCTDATA *m_pData; HTTPMAILSERVICE *m_pHttpServices; UINT m_cHttpServices; HTTPMAILSERVICE *m_pServices; UINT m_cServices; void InitializeICW(ACCTTYPE type, UINT uPrev, UINT uNext); HRESULT InitializeMigration(DWORD dwFlags); HRESULT InitializeImport(CLSID clsid, DWORD dwFlags); public: MIGRATEINFO *m_pMigInfo; int m_cMigInfo; int m_iMigInfo; BOOL m_fMigrate; CAccount *m_pAcct; BOOL m_fUseAutoDiscovery; // Use AutoDiscovery to streamline the wizard CICWApprentice(void); ~CICWApprentice(void); STDMETHODIMP QueryInterface(REFIID, LPVOID *); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); // IICWApprentice HRESULT STDMETHODCALLTYPE Initialize(IICWExtension *pExt); HRESULT STDMETHODCALLTYPE AddWizardPages(DWORD dwFlags); HRESULT STDMETHODCALLTYPE GetConnectionInformation(CONNECTINFO *pInfo); HRESULT STDMETHODCALLTYPE SetConnectionInformation(CONNECTINFO *pInfo); HRESULT STDMETHODCALLTYPE Save(HWND hwnd, DWORD *pdwError); HRESULT STDMETHODCALLTYPE SetPrevNextPage(UINT uPrevPage, UINT uNextPage); // IICWExtension BOOL STDMETHODCALLTYPE AddExternalPage(HPROPSHEETPAGE hPage, UINT uDlgID); BOOL STDMETHODCALLTYPE RemoveExternalPage(HPROPSHEETPAGE hPage, UINT uDlgID); BOOL STDMETHODCALLTYPE ExternalCancel(CANCELTYPE type); BOOL STDMETHODCALLTYPE SetFirstLastPage(UINT uFirstPageDlgID, UINT uLastPageDlgID); HRESULT Initialize(CAccountManager *pAcctMgr, CAccount *pAcct); HRESULT DoWizard(HWND hwnd, CLSID *pclsid, DWORD dwFlags); UINT GetNextWizSection(void); HRESULT InitAccountData(CAccount *pAcct, IMPCONNINFO *pConnInfo, BOOL fMigrate); HRESULT SaveAccountData(CAccount *pAcct, BOOL fSetAsDefault); HRESULT HandleMigrationSelection(int index, UINT *puNextPage, HWND hDlg); HRESULT InitializeImportAccount(HWND hwnd, DWORD_PTR dwCookie); HRESULT InitHTTPMailServices(); inline CAccountManager *GetAccountManager(void) {return(m_pAcctMgr);} inline ACCTTYPE GetAccountType(void) {return(m_acctType);} inline ACCTDATA *GetAccountData(void) {return(m_pData);} inline DWORD GetFlags(void) {return(m_dwFlags);} inline BOOL GetComplete(void) {return(m_fComplete);} inline UINT GetMigrateCount(void) {return(m_cMigInfo);} inline IICWApprentice *GetICW(void) {return(m_pICW);} inline BOOL GetSave(void) {return(m_fSave);} inline void SetSave(BOOL fSave) {m_fSave = fSave;} inline int GetSelection(void) {return(m_iSel);} inline void SetSelection(int iSel) {m_iSel = iSel;} inline BOOL NeedToReloadPage(DWORD dwPage) {return(!!(m_dwReload & dwPage));} inline void SetPageReloaded(DWORD dwPage) {m_dwReload &= ~dwPage;} inline void SetPageUnloaded(DWORD dwPage) {m_dwReload |= dwPage;} inline BOOL GetSkipICW(void) {return(m_fSkipICW);} inline void SetSkipICW(BOOL fSkip) {m_fSkipICW = fSkip;} inline DWORD CountHTTPMailServers(void) {return(m_cHttpServices);} inline HTTPMAILSERVICE *GetHTTPMailServices(void) {return(m_pHttpServices);} inline DWORD CountMailServers(void) {return(m_cServices);} inline HTTPMAILSERVICE *GetMailServices(void) {return(m_pServices);} friend INT_PTR CALLBACK GenDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); friend HRESULT GetMessageParams(HWND hDlg, CICWApprentice ** ppApp, LONG * pOrd, const PAGEINFO ** ppPageInfo); BOOLEAN IsInternetConnection(void) { BOOLEAN retval; ((m_dwFlags & ACCT_WIZ_INTERNETCONNECTION) == 0) ? (retval = FALSE) : (retval = TRUE); return retval; } }; typedef HRESULT (*PFNSUBNEWSGROUP)(IUserIdentity *, IImnAccount *, LPCSTR); class CNewsGroupImport : public INewsGroupImport { private: IImnAccount *m_pAcct; ULONG m_cRef; public: CNewsGroupImport(void); ~CNewsGroupImport(void); // IUnknown methods. STDMETHODIMP QueryInterface(REFIID, LPVOID *); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); //INewsAccountImport methods HRESULT STDMETHODCALLTYPE Initialize(IImnAccount *pAcct); HRESULT STDMETHODCALLTYPE ImportSubList(LPCSTR pListGroups); }; INT_PTR CALLBACK GenDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK MailPromptInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK MailPromptOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT * puNextPage); BOOL CALLBACK AcctInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK AcctOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT * puNextPage); BOOL CALLBACK AcctCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); BOOL CALLBACK NameInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK NameOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT* puNextPage); BOOL CALLBACK NameCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); BOOL CALLBACK AddressInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK AddressOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT* puNextPage); BOOL CALLBACK AddressCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); BOOL CALLBACK ServerInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK ServerOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT* puNextPage); BOOL CALLBACK ServerCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); BOOL CALLBACK LogonInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK LogonOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT* puNextPage); BOOL CALLBACK LogonCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); BOOL CALLBACK ResolveInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit ); BOOL CALLBACK ResolveOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT * puNextPage); BOOL CALLBACK ResolveCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); BOOL CALLBACK ConnectInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK ConnectOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT* puNextPage); BOOL CALLBACK ConnectCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); BOOL CALLBACK CompleteInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit ); BOOL CALLBACK CompleteOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT * puNextPage); BOOL CALLBACK MigrateInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK MigrateOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT* puNextPage); BOOL CALLBACK SelectInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit ); BOOL CALLBACK SelectOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT * puNextPage); BOOL CALLBACK ConfirmInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit ); BOOL CALLBACK ConfirmOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT * puNextPage); BOOL CALLBACK AutoDiscoveryInitProc(CICWApprentice *pApp, HWND hDlg, BOOL fFirstInit); BOOL CALLBACK AutoDiscoveryOKProc(CICWApprentice *pApp, HWND hDlg, BOOL fForward, UINT *puNextPage); BOOL CALLBACK AutoDiscoveryCmdProc(CICWApprentice *pApp, HWND hDlg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK AutoDiscoveryWMUserProc(CICWApprentice *pApp, HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); BOOL CALLBACK AutoDiscoveryCancelProc(CICWApprentice *pApp, HWND hDlg); BOOL CALLBACK UseWebMailInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK UseWebMailOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT* puNextPage); BOOL CALLBACK UseWebMailCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); BOOL CALLBACK GotoServerInfoInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK GotoServerInfoOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT* puNextPage); BOOL CALLBACK GotoServerInfoCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); BOOL CALLBACK PassifierInitProc(CICWApprentice *pApp,HWND hDlg,BOOL fFirstInit); BOOL CALLBACK PassifierOKProc(CICWApprentice *pApp,HWND hDlg,BOOL fForward,UINT* puNextPage); BOOL CALLBACK PassifierCmdProc(CICWApprentice *pApp,HWND hDlg,WPARAM wParam,LPARAM lParam); DWORD CommctrlMajor(void); HRESULT CreateAccountName(CICWApprentice *pApp, ACCTDATA * pData); #endif // _INC_ICWWIZ_H