// RefDial.h : Declaration of the CRefDial #ifndef __REFDIAL_H_ #define __REFDIAL_H_ // Defines used for Dialing #define MAX_EXIT_RETRIES 10 #define MAX_RETIES 3 #define MAX_RASENTRYNAME 126 #define MAX_DIGITAL_PID 256 typedef DWORD (WINAPI *PFNRASGETCONNECTSTATUS)(HRASCONN,LPRASCONNSTATUS); ///////////////////////////////////////////////////////////////////////////// // CRefDial class ATL_NO_VTABLE CRefDial : public CComObjectRootEx, public CComCoClass, public CWindowImpl, public IDispatchImpl, public IProvideClassInfo2Impl<&CLSID_RefDial, &DIID__RefDialEvents, &LIBID_ICWHELPLib>, public CProxy_RefDialEvents, public IConnectionPointContainerImpl { public: CRefDial() { m_szCurrentDUNFile[0] = '\0'; m_szLastDUNFile[0] = '\0'; m_szEntryName[0] = '\0'; m_szConnectoid[RAS_MaxEntryName] = '\0'; m_szConnectoid[0] = '\0'; m_szPID[0] = '\0'; m_szRefServerURL[0] = '\0'; m_hrDisplayableNumber = ERROR_SUCCESS; m_dwCountryCode = 0; *m_szISPSupportNumber = 0; m_RasStatusID = 0; m_dwTapiDev = 0xFFFFFFFF; // NOTE: 0 is a valid value m_dwWizardVersion = 0; m_lBrandingFlags = BRAND_DEFAULT; m_lCurrentModem = -1; m_lAllOffers = 0; m_PhoneNumberEnumidx = 0; m_bDownloadHasBeenCanceled = TRUE; // This will get set to FALSE when a DOWNLOAD starts m_bQuitWizard = FALSE; m_bTryAgain = FALSE; m_bDisconnect = FALSE; m_bWaitingToHangup = FALSE; m_bModemOverride = FALSE; //allows campus net to be used. m_hThread = NULL; m_hrasconn = NULL; m_pSuggestInfo = NULL; m_rgpSuggestedAE = NULL; m_pszDisplayable = NULL; m_pcRNA = NULL; m_hRasDll = NULL; m_fpRasDial = NULL; m_fpRasGetEntryDialParams = NULL; m_lpGatherInfo = new GATHERINFO; m_reflpRasEntryBuff = NULL; m_reflpRasDevInfoBuff = NULL; } CRefDial::~CRefDial() { if (m_hThread) { //This is to fix a crashing bug where we unloaded this dll //before this thread figured out what had happened. //Now we give it time to understand it's dead DWORD dwThreadResults = STILL_ACTIVE; while(dwThreadResults == STILL_ACTIVE) { GetExitCodeThread(m_hThread,&dwThreadResults); Sleep(500); } } if (m_hrasconn) DoHangup(); if (m_lpGatherInfo) delete(m_lpGatherInfo); if (m_pSuggestInfo) { GlobalFree(m_pSuggestInfo->rgpAccessEntry); GlobalFree(m_pSuggestInfo); } if( (m_pcRNA!=NULL) && (m_szConnectoid[0]!='\0') ) { m_pcRNA->RasDeleteEntry(NULL,m_szConnectoid); delete m_pcRNA; } if(m_reflpRasEntryBuff) { GlobalFree(m_reflpRasEntryBuff); m_reflpRasEntryBuff = NULL; } if(m_reflpRasDevInfoBuff) { GlobalFree(m_reflpRasDevInfoBuff); m_reflpRasDevInfoBuff = NULL; } } DECLARE_REGISTRY_RESOURCEID(IDR_REFDIAL) BEGIN_COM_MAP(CRefDial) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IRefDial) COM_INTERFACE_ENTRY(IProvideClassInfo) COM_INTERFACE_ENTRY(IProvideClassInfo2) COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer) END_COM_MAP() BEGIN_CONNECTION_POINT_MAP(CRefDial) CONNECTION_POINT_ENTRY(DIID__RefDialEvents) END_CONNECTION_POINT_MAP() BEGIN_PROPERTY_MAP(CRefDial) // Example entries // PROP_ENTRY("Property Description", dispid, clsid) // PROP_PAGE(CLSID_StockColorPage) END_PROPERTY_MAP() BEGIN_MSG_MAP(CRefDial) MESSAGE_HANDLER(WM_CREATE, OnCreate) MESSAGE_HANDLER(WM_DOWNLOAD_DONE, OnDownloadEvent) MESSAGE_HANDLER(WM_DOWNLOAD_PROGRESS, OnDownloadEvent) MESSAGE_HANDLER(WM_RASDIALEVENT, OnRasDialEvent) MESSAGE_HANDLER(m_unRasDialMsg, OnRasDialEvent) ALT_MSG_MAP(1) END_MSG_MAP() // IViewObjectEx STDMETHOD(GetViewStatus)(DWORD* pdwStatus) { ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n")); *pdwStatus = 0; return S_OK; } friend DWORD WINAPI DownloadThreadInit(LPVOID lpv); // IRefDial public: STDMETHOD(get_LoggingEndUrl)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(get_LoggingStartUrl)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(get_ISPSupportPhoneNumber)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(put_ISPSupportPhoneNumber)(/*[in]*/ BSTR newVal); STDMETHOD(get_CurrentModem)(/*[out, retval]*/ long *pVal); STDMETHOD(put_CurrentModem)(/*[in]*/ long newVal); STDMETHOD(get_BrandingFlags)(/*[out, retval]*/ long *pVal); STDMETHOD(put_BrandingFlags)(/*[in]*/ long newVal); STDMETHOD(get_HavePhoneBook)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(ValidatePhoneNumber)(/*[in]*/ BSTR bstrPhoneNumber, /*[out,retval]*/ BOOL *pbRetVal); STDMETHOD(ShowPhoneBook)(/*[in]*/ DWORD dwCountryCode, /*[in]*/ long newVal, /*[out,retval]*/ BOOL *pbRetVal); STDMETHOD(ShowDialingProperties)(/*[out,retval]*/ BOOL *pbRetVal); STDMETHOD(get_SupportNumber)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(get_ISPSupportNumber)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(get_ModemEnum_NumDevices)(/*[out, retval]*/ long *pVal); STDMETHOD(ModemEnum_Next)(/*[out, retval] */BSTR *pDeviceName); STDMETHOD(ModemEnum_Reset)(); STDMETHOD(get_DialErrorMsg)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(get_DialError)(/*[out, retval]*/ HRESULT *pVal); STDMETHOD(put_Redial)(/*[in]*/ BOOL newbVal); STDMETHOD(get_TryAgain)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(get_SignupURL)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(get_AutoConfigURL)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(get_ISDNURL)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(get_ISDNAutoConfigURL)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(FormReferralServerURL)(/*[out, retval]*/ BOOL *pbRetVal); STDMETHOD(get_SignedPID)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(ProcessSignedPID)(/*[out, retval]*/ BOOL *pbRetVal); void GetPID(); STDMETHOD(DoInit)(); STDMETHOD(DoHangup)(); STDMETHOD(get_DialStatusString)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(DoOfferDownload)(/*[out, retval]*/ BOOL *pbRetVal); STDMETHOD(get_ProductCode)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(put_ProductCode)(/*[in]*/ BSTR newVal); STDMETHOD(get_PromoCode)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(put_PromoCode)(/*[in]*/ BSTR newVal); STDMETHOD(put_OemCode)(/*[in]*/ BSTR newVal); STDMETHOD(put_AllOfferCode)(/*[in]*/ long newVal); STDMETHOD(get_URL)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(get_DialPhoneNumber)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(put_DialPhoneNumber)(/*[in]*/ BSTR newVal); STDMETHOD(get_UserPickNumber)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(get_QuitWizard)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(SetupForDialing)(BSTR bstrISPFile, DWORD dwCountry, BSTR bstrAreaCode, DWORD dwFlag,/*[out, retval] */BOOL *pbRetVal); STDMETHOD(get_DownloadStatusString)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(DoConnect)(/*[out, retval]*/ BOOL *pbRetVal); STDMETHOD(put_ModemOverride)(/*[in]*/ BOOL newbVal); HRESULT OnDraw(ATL_DRAWINFO& di); STDMETHOD(SelectedPhoneNumber)(/*[in]*/ long newVal, /*[out, retval]*/ BOOL * pbRetVal); STDMETHOD(PhoneNumberEnum_Reset)(); STDMETHOD(PhoneNumberEnum_Next)(/*[out, retval]*/ BSTR *pNumber); STDMETHOD(get_PhoneNumberEnum_NumDevices)(/*[out, retval]*/ long * pVal); STDMETHOD(get_bIsISDNDevice)(/*[out, retval] */ BOOL *pVal); STDMETHOD(RemoveConnectoid)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(get_RasGetConnectStatus)(/*[out, retval]*/ BOOL *pVal); LRESULT OnRasDialEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnDownloadEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); LRESULT OnDownloadDone(void); // Dialing service functions HRESULT GetDisplayableNumber(); HRESULT Dial(); BOOL FShouldRetry(HRESULT hrErr); DWORD MyRasDial(LPRASDIALEXTENSIONS,LPTSTR,LPRASDIALPARAMS,DWORD,LPVOID,LPHRASCONN); DWORD MyRasGetEntryDialParams(LPTSTR,LPRASDIALPARAMS,LPBOOL); DWORD ReadConnectionInformation(void); DWORD FillGatherInfoStruct(LPGATHERINFO lpGatherInfo); HRESULT CreateEntryFromDUNFile(LPTSTR pszDunFile); HRESULT UserPickANumber(HWND hWnd, LPGATHERINFO lpGatherInfo, PSUGGESTINFO lpSuggestInfo, HINSTANCE hPHBKDll, DWORD_PTR dwPhoneBook, TCHAR *pszConnectoid, DWORD dwSize, DWORD dwPhoneDisplayFlags); HRESULT SetupForRASDialing(LPGATHERINFO lpGatherInfo, HINSTANCE hPHBKDll, DWORD_PTR *lpdwPhoneBook, PSUGGESTINFO *ppSuggestInfo, TCHAR *pszConnectoid, BOOL FAR *bConnectiodCreated); HRESULT SetupConnectoid(PSUGGESTINFO pSuggestInfo, int irc, TCHAR *pszConnectoid, DWORD dwSize, BOOL * pbSuccess); HRESULT FormURL(void); HRESULT MyRasGetEntryProperties(LPTSTR lpszPhonebookFile, LPTSTR lpszPhonebookEntry, LPRASENTRY *lplpRasEntryBuff, LPDWORD lpdwRasEntryBuffSize, LPRASDEVINFO *lplpRasDevInfoBuff, LPDWORD lpdwRasDevInfoBuffSize); // Dialing service members UINT m_unRasDialMsg; DWORD m_dwTapiDev; HRASCONN m_hrasconn; TCHAR m_szConnectoid[RAS_MaxEntryName+1]; HANDLE m_hThread; DWORD m_dwThreadID; HINSTANCE m_hRasDll; FARPROC m_fpRasDial; FARPROC m_fpRasGetEntryDialParams; LPGATHERINFO m_pGI; TCHAR m_szUrl[INTERNET_MAX_URL_LENGTH]; // Download thread DWORD_PTR m_dwDownLoad; // Download thread HLINEAPP m_hLineApp; DWORD m_dwAPIVersion; LPTSTR m_pszDisplayable; RNAAPI *m_pcRNA; TCHAR m_szPhoneNumber[256]; BOOL m_bDialAsIs; UINT m_uiRetry; CComBSTR m_bstrISPFile; TCHAR m_szCurrentDUNFile[MAX_PATH]; TCHAR m_szLastDUNFile[MAX_PATH]; TCHAR m_szEntryName[RAS_MaxEntryName+1]; TCHAR m_szISPSupportNumber[RAS_MaxAreaCode + RAS_MaxPhoneNumber +1]; // CBusyMessages m_objBusyMessages; BOOL m_bDownloadHasBeenCanceled; BOOL m_bDisconnect; BOOL m_bWaitingToHangup; LPGATHERINFO m_lpGatherInfo; // // Used for Phone book look-up // PSUGGESTINFO m_pSuggestInfo; PACCESSENTRY *m_rgpSuggestedAE; CISPImport m_ISPImport; // Import an ISP file int m_RasStatusID; int m_DownloadStatusID; TCHAR m_szRefServerURL[INTERNET_MAX_URL_LENGTH]; LPRASENTRY m_reflpRasEntryBuff; LPRASDEVINFO m_reflpRasDevInfoBuff; private: BOOL IsSBCSString( TCHAR *sz ); void GetISPFileSettings(LPTSTR lpszFile); BOOL m_bModemOverride; protected: BOOL m_bTryAgain; BOOL m_bQuitWizard; BOOL m_bUserPickNumber; BOOL m_bRedial; HRESULT m_hrDisplayableNumber; HRESULT m_hrDialErr; CComBSTR m_bstrPromoCode; CComBSTR m_bstrProductCode; TCHAR m_szOEM[MAX_OEMNAME]; CComBSTR m_bstrSignedPID; CComBSTR m_bstrSupportNumber; CComBSTR m_bstrLoggingStartUrl; CComBSTR m_bstrLoggingEndUrl; long m_lAllOffers; CEnumModem m_emModemEnum; CSupport m_SupportInfo; DWORD m_dwCountryCode; long m_lBrandingFlags; long m_lCurrentModem; // Version of the wizard HTML. Sent to RefServer DWORD m_dwWizardVersion; TCHAR m_szPID[(MAX_DIGITAL_PID * 2) + 1]; void CRefDial::ShowCredits(); long m_PhoneNumberEnumidx; }; #endif //__REFDIAL_H_