Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

347 lines
14 KiB

  1. // RefDial.h : Declaration of the CRefDial
  2. #ifndef __REFDIAL_H_
  3. #define __REFDIAL_H_
  4. // Defines used for Dialing
  5. #define MAX_EXIT_RETRIES 10
  6. #define MAX_RETIES 3
  7. #define MAX_RASENTRYNAME 126
  8. #define MAX_DIGITAL_PID 256
  9. typedef DWORD (WINAPI *PFNRASGETCONNECTSTATUS)(HRASCONN,LPRASCONNSTATUS);
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CRefDial
  12. class ATL_NO_VTABLE CRefDial :
  13. public CComObjectRootEx<CComSingleThreadModel>,
  14. public CComCoClass<CRefDial,&CLSID_RefDial>,
  15. public CWindowImpl<CRefDial>,
  16. public IDispatchImpl<IRefDial, &IID_IRefDial, &LIBID_ICWHELPLib>,
  17. public IProvideClassInfo2Impl<&CLSID_RefDial, &DIID__RefDialEvents, &LIBID_ICWHELPLib>,
  18. public CProxy_RefDialEvents<CRefDial>,
  19. public IConnectionPointContainerImpl<CRefDial>
  20. {
  21. public:
  22. CRefDial()
  23. {
  24. m_szCurrentDUNFile[0] = '\0';
  25. m_szLastDUNFile[0] = '\0';
  26. m_szEntryName[0] = '\0';
  27. m_szConnectoid[RAS_MaxEntryName] = '\0';
  28. m_szConnectoid[0] = '\0';
  29. m_szPID[0] = '\0';
  30. m_szRefServerURL[0] = '\0';
  31. m_hrDisplayableNumber = ERROR_SUCCESS;
  32. m_dwCountryCode = 0;
  33. *m_szISPSupportNumber = 0;
  34. m_RasStatusID = 0;
  35. m_dwTapiDev = 0xFFFFFFFF; // NOTE: 0 is a valid value
  36. m_dwWizardVersion = 0;
  37. m_lBrandingFlags = BRAND_DEFAULT;
  38. m_lCurrentModem = -1;
  39. m_lAllOffers = 0;
  40. m_PhoneNumberEnumidx = 0;
  41. m_bDownloadHasBeenCanceled = TRUE; // This will get set to FALSE when a DOWNLOAD starts
  42. m_bQuitWizard = FALSE;
  43. m_bTryAgain = FALSE;
  44. m_bDisconnect = FALSE;
  45. m_bWaitingToHangup = FALSE;
  46. m_bModemOverride = FALSE; //allows campus net to be used.
  47. m_hThread = NULL;
  48. m_hrasconn = NULL;
  49. m_pSuggestInfo = NULL;
  50. m_rgpSuggestedAE = NULL;
  51. m_pszDisplayable = NULL;
  52. m_pcRNA = NULL;
  53. m_hRasDll = NULL;
  54. m_fpRasDial = NULL;
  55. m_fpRasGetEntryDialParams = NULL;
  56. m_lpGatherInfo = new GATHERINFO;
  57. m_reflpRasEntryBuff = NULL;
  58. m_reflpRasDevInfoBuff = NULL;
  59. }
  60. CRefDial::~CRefDial()
  61. {
  62. if (m_hThread)
  63. {
  64. //This is to fix a crashing bug where we unloaded this dll
  65. //before this thread figured out what had happened.
  66. //Now we give it time to understand it's dead
  67. DWORD dwThreadResults = STILL_ACTIVE;
  68. while(dwThreadResults == STILL_ACTIVE)
  69. {
  70. GetExitCodeThread(m_hThread,&dwThreadResults);
  71. Sleep(500);
  72. }
  73. }
  74. if (m_hrasconn)
  75. DoHangup();
  76. if (m_lpGatherInfo)
  77. delete(m_lpGatherInfo);
  78. if (m_pSuggestInfo)
  79. {
  80. GlobalFree(m_pSuggestInfo->rgpAccessEntry);
  81. GlobalFree(m_pSuggestInfo);
  82. }
  83. if( (m_pcRNA!=NULL) && (m_szConnectoid[0]!='\0') )
  84. {
  85. m_pcRNA->RasDeleteEntry(NULL,m_szConnectoid);
  86. delete m_pcRNA;
  87. }
  88. if(m_reflpRasEntryBuff)
  89. {
  90. GlobalFree(m_reflpRasEntryBuff);
  91. m_reflpRasEntryBuff = NULL;
  92. }
  93. if(m_reflpRasDevInfoBuff)
  94. {
  95. GlobalFree(m_reflpRasDevInfoBuff);
  96. m_reflpRasDevInfoBuff = NULL;
  97. }
  98. }
  99. DECLARE_REGISTRY_RESOURCEID(IDR_REFDIAL)
  100. BEGIN_COM_MAP(CRefDial)
  101. COM_INTERFACE_ENTRY(IDispatch)
  102. COM_INTERFACE_ENTRY(IRefDial)
  103. COM_INTERFACE_ENTRY(IProvideClassInfo)
  104. COM_INTERFACE_ENTRY(IProvideClassInfo2)
  105. COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
  106. END_COM_MAP()
  107. BEGIN_CONNECTION_POINT_MAP(CRefDial)
  108. CONNECTION_POINT_ENTRY(DIID__RefDialEvents)
  109. END_CONNECTION_POINT_MAP()
  110. BEGIN_PROPERTY_MAP(CRefDial)
  111. // Example entries
  112. // PROP_ENTRY("Property Description", dispid, clsid)
  113. // PROP_PAGE(CLSID_StockColorPage)
  114. END_PROPERTY_MAP()
  115. BEGIN_MSG_MAP(CRefDial)
  116. MESSAGE_HANDLER(WM_CREATE, OnCreate)
  117. MESSAGE_HANDLER(WM_DOWNLOAD_DONE, OnDownloadEvent)
  118. MESSAGE_HANDLER(WM_DOWNLOAD_PROGRESS, OnDownloadEvent)
  119. MESSAGE_HANDLER(WM_RASDIALEVENT, OnRasDialEvent)
  120. MESSAGE_HANDLER(m_unRasDialMsg, OnRasDialEvent)
  121. ALT_MSG_MAP(1)
  122. END_MSG_MAP()
  123. // IViewObjectEx
  124. STDMETHOD(GetViewStatus)(DWORD* pdwStatus)
  125. {
  126. ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n"));
  127. *pdwStatus = 0;
  128. return S_OK;
  129. }
  130. friend DWORD WINAPI DownloadThreadInit(LPVOID lpv);
  131. // IRefDial
  132. public:
  133. STDMETHOD(get_LoggingEndUrl)(/*[out, retval]*/ BSTR *pVal);
  134. STDMETHOD(get_LoggingStartUrl)(/*[out, retval]*/ BSTR *pVal);
  135. STDMETHOD(get_ISPSupportPhoneNumber)(/*[out, retval]*/ BSTR *pVal);
  136. STDMETHOD(put_ISPSupportPhoneNumber)(/*[in]*/ BSTR newVal);
  137. STDMETHOD(get_CurrentModem)(/*[out, retval]*/ long *pVal);
  138. STDMETHOD(put_CurrentModem)(/*[in]*/ long newVal);
  139. STDMETHOD(get_BrandingFlags)(/*[out, retval]*/ long *pVal);
  140. STDMETHOD(put_BrandingFlags)(/*[in]*/ long newVal);
  141. STDMETHOD(get_HavePhoneBook)(/*[out, retval]*/ BOOL *pVal);
  142. STDMETHOD(ValidatePhoneNumber)(/*[in]*/ BSTR bstrPhoneNumber, /*[out,retval]*/ BOOL *pbRetVal);
  143. STDMETHOD(ShowPhoneBook)(/*[in]*/ DWORD dwCountryCode, /*[in]*/ long newVal, /*[out,retval]*/ BOOL *pbRetVal);
  144. STDMETHOD(ShowDialingProperties)(/*[out,retval]*/ BOOL *pbRetVal);
  145. STDMETHOD(get_SupportNumber)(/*[out, retval]*/ BSTR *pVal);
  146. STDMETHOD(get_ISPSupportNumber)(/*[out, retval]*/ BSTR *pVal);
  147. STDMETHOD(get_ModemEnum_NumDevices)(/*[out, retval]*/ long *pVal);
  148. STDMETHOD(ModemEnum_Next)(/*[out, retval] */BSTR *pDeviceName);
  149. STDMETHOD(ModemEnum_Reset)();
  150. STDMETHOD(get_DialErrorMsg)(/*[out, retval]*/ BSTR *pVal);
  151. STDMETHOD(get_DialError)(/*[out, retval]*/ HRESULT *pVal);
  152. STDMETHOD(put_Redial)(/*[in]*/ BOOL newbVal);
  153. STDMETHOD(get_TryAgain)(/*[out, retval]*/ BOOL *pVal);
  154. STDMETHOD(get_SignupURL)(/*[out, retval]*/ BSTR *pVal);
  155. STDMETHOD(get_AutoConfigURL)(/*[out, retval]*/ BSTR *pVal);
  156. STDMETHOD(get_ISDNURL)(/*[out, retval]*/ BSTR *pVal);
  157. STDMETHOD(get_ISDNAutoConfigURL)(/*[out, retval]*/ BSTR *pVal);
  158. STDMETHOD(FormReferralServerURL)(/*[out, retval]*/ BOOL *pbRetVal);
  159. STDMETHOD(get_SignedPID)(/*[out, retval]*/ BSTR *pVal);
  160. STDMETHOD(ProcessSignedPID)(/*[out, retval]*/ BOOL *pbRetVal);
  161. void GetPID();
  162. STDMETHOD(DoInit)();
  163. STDMETHOD(DoHangup)();
  164. STDMETHOD(get_DialStatusString)(/*[out, retval]*/ BSTR *pVal);
  165. STDMETHOD(DoOfferDownload)(/*[out, retval]*/ BOOL *pbRetVal);
  166. STDMETHOD(get_ProductCode)(/*[out, retval]*/ BSTR *pVal);
  167. STDMETHOD(put_ProductCode)(/*[in]*/ BSTR newVal);
  168. STDMETHOD(get_PromoCode)(/*[out, retval]*/ BSTR *pVal);
  169. STDMETHOD(put_PromoCode)(/*[in]*/ BSTR newVal);
  170. STDMETHOD(put_OemCode)(/*[in]*/ BSTR newVal);
  171. STDMETHOD(put_AllOfferCode)(/*[in]*/ long newVal);
  172. STDMETHOD(get_URL)(/*[out, retval]*/ BSTR *pVal);
  173. STDMETHOD(get_DialPhoneNumber)(/*[out, retval]*/ BSTR *pVal);
  174. STDMETHOD(put_DialPhoneNumber)(/*[in]*/ BSTR newVal);
  175. STDMETHOD(get_UserPickNumber)(/*[out, retval]*/ BOOL *pVal);
  176. STDMETHOD(get_QuitWizard)(/*[out, retval]*/ BOOL *pVal);
  177. STDMETHOD(SetupForDialing)(BSTR bstrISPFile, DWORD dwCountry, BSTR bstrAreaCode, DWORD dwFlag,/*[out, retval] */BOOL *pbRetVal);
  178. STDMETHOD(get_DownloadStatusString)(/*[out, retval]*/ BSTR *pVal);
  179. STDMETHOD(DoConnect)(/*[out, retval]*/ BOOL *pbRetVal);
  180. STDMETHOD(put_ModemOverride)(/*[in]*/ BOOL newbVal);
  181. HRESULT OnDraw(ATL_DRAWINFO& di);
  182. STDMETHOD(SelectedPhoneNumber)(/*[in]*/ long newVal, /*[out, retval]*/ BOOL * pbRetVal);
  183. STDMETHOD(PhoneNumberEnum_Reset)();
  184. STDMETHOD(PhoneNumberEnum_Next)(/*[out, retval]*/ BSTR *pNumber);
  185. STDMETHOD(get_PhoneNumberEnum_NumDevices)(/*[out, retval]*/ long * pVal);
  186. STDMETHOD(get_bIsISDNDevice)(/*[out, retval] */ BOOL *pVal);
  187. STDMETHOD(RemoveConnectoid)(/*[out, retval]*/ BOOL *pVal);
  188. STDMETHOD(get_RasGetConnectStatus)(/*[out, retval]*/ BOOL *pVal);
  189. LRESULT OnRasDialEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  190. LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  191. LRESULT OnDownloadEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  192. LRESULT OnDownloadDone(void);
  193. // Dialing service functions
  194. HRESULT GetDisplayableNumber();
  195. HRESULT Dial();
  196. BOOL FShouldRetry(HRESULT hrErr);
  197. DWORD MyRasDial(LPRASDIALEXTENSIONS,LPTSTR,LPRASDIALPARAMS,DWORD,LPVOID,LPHRASCONN);
  198. DWORD MyRasGetEntryDialParams(LPTSTR,LPRASDIALPARAMS,LPBOOL);
  199. DWORD ReadConnectionInformation(void);
  200. DWORD FillGatherInfoStruct(LPGATHERINFO lpGatherInfo);
  201. HRESULT CreateEntryFromDUNFile(LPTSTR pszDunFile);
  202. HRESULT UserPickANumber(HWND hWnd,
  203. LPGATHERINFO lpGatherInfo,
  204. PSUGGESTINFO lpSuggestInfo,
  205. HINSTANCE hPHBKDll,
  206. DWORD_PTR dwPhoneBook,
  207. TCHAR *pszConnectoid,
  208. DWORD dwSize,
  209. DWORD dwPhoneDisplayFlags);
  210. HRESULT SetupForRASDialing(LPGATHERINFO lpGatherInfo,
  211. HINSTANCE hPHBKDll,
  212. DWORD_PTR *lpdwPhoneBook,
  213. PSUGGESTINFO *ppSuggestInfo,
  214. TCHAR *pszConnectoid,
  215. BOOL FAR *bConnectiodCreated);
  216. HRESULT SetupConnectoid(PSUGGESTINFO pSuggestInfo, int irc,
  217. TCHAR *pszConnectoid, DWORD dwSize, BOOL * pbSuccess);
  218. HRESULT FormURL(void);
  219. HRESULT MyRasGetEntryProperties(LPTSTR lpszPhonebookFile,
  220. LPTSTR lpszPhonebookEntry,
  221. LPRASENTRY *lplpRasEntryBuff,
  222. LPDWORD lpdwRasEntryBuffSize,
  223. LPRASDEVINFO *lplpRasDevInfoBuff,
  224. LPDWORD lpdwRasDevInfoBuffSize);
  225. // Dialing service members
  226. UINT m_unRasDialMsg;
  227. DWORD m_dwTapiDev;
  228. HRASCONN m_hrasconn;
  229. TCHAR m_szConnectoid[RAS_MaxEntryName+1];
  230. HANDLE m_hThread;
  231. DWORD m_dwThreadID;
  232. HINSTANCE m_hRasDll;
  233. FARPROC m_fpRasDial;
  234. FARPROC m_fpRasGetEntryDialParams;
  235. LPGATHERINFO m_pGI;
  236. TCHAR m_szUrl[INTERNET_MAX_URL_LENGTH]; // Download thread
  237. DWORD_PTR m_dwDownLoad; // Download thread
  238. HLINEAPP m_hLineApp;
  239. DWORD m_dwAPIVersion;
  240. LPTSTR m_pszDisplayable;
  241. RNAAPI *m_pcRNA;
  242. TCHAR m_szPhoneNumber[256];
  243. BOOL m_bDialAsIs;
  244. UINT m_uiRetry;
  245. CComBSTR m_bstrISPFile;
  246. TCHAR m_szCurrentDUNFile[MAX_PATH];
  247. TCHAR m_szLastDUNFile[MAX_PATH];
  248. TCHAR m_szEntryName[RAS_MaxEntryName+1];
  249. TCHAR m_szISPSupportNumber[RAS_MaxAreaCode + RAS_MaxPhoneNumber +1];
  250. // CBusyMessages m_objBusyMessages;
  251. BOOL m_bDownloadHasBeenCanceled;
  252. BOOL m_bDisconnect;
  253. BOOL m_bWaitingToHangup;
  254. LPGATHERINFO m_lpGatherInfo;
  255. //
  256. // Used for Phone book look-up
  257. //
  258. PSUGGESTINFO m_pSuggestInfo;
  259. PACCESSENTRY *m_rgpSuggestedAE;
  260. CISPImport m_ISPImport; // Import an ISP file
  261. int m_RasStatusID;
  262. int m_DownloadStatusID;
  263. TCHAR m_szRefServerURL[INTERNET_MAX_URL_LENGTH];
  264. LPRASENTRY m_reflpRasEntryBuff;
  265. LPRASDEVINFO m_reflpRasDevInfoBuff;
  266. private:
  267. BOOL IsSBCSString( TCHAR *sz );
  268. void GetISPFileSettings(LPTSTR lpszFile);
  269. BOOL m_bModemOverride;
  270. protected:
  271. BOOL m_bTryAgain;
  272. BOOL m_bQuitWizard;
  273. BOOL m_bUserPickNumber;
  274. BOOL m_bRedial;
  275. HRESULT m_hrDisplayableNumber;
  276. HRESULT m_hrDialErr;
  277. CComBSTR m_bstrPromoCode;
  278. CComBSTR m_bstrProductCode;
  279. TCHAR m_szOEM[MAX_OEMNAME];
  280. CComBSTR m_bstrSignedPID;
  281. CComBSTR m_bstrSupportNumber;
  282. CComBSTR m_bstrLoggingStartUrl;
  283. CComBSTR m_bstrLoggingEndUrl;
  284. long m_lAllOffers;
  285. CEnumModem m_emModemEnum;
  286. CSupport m_SupportInfo;
  287. DWORD m_dwCountryCode;
  288. long m_lBrandingFlags;
  289. long m_lCurrentModem;
  290. // Version of the wizard HTML. Sent to RefServer
  291. DWORD m_dwWizardVersion;
  292. TCHAR m_szPID[(MAX_DIGITAL_PID * 2) + 1];
  293. void CRefDial::ShowCredits();
  294. long m_PhoneNumberEnumidx;
  295. };
  296. #endif //__REFDIAL_H_