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.

277 lines
8.6 KiB

  1. #include "stdafx.h"
  2. #include "RoutingMethodProp.h"
  3. #include "RoutingMethodConfig.h"
  4. #include <faxutil.h>
  5. #include <faxreg.h>
  6. #include <faxres.h>
  7. #include <StoreConfigPage.h>
  8. #include <PrintConfigPage.h>
  9. #include <EmailConfigPage.h>
  10. #include <Util.h>
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CRoutingMethodConfigComponentData
  13. static const GUID CRoutingMethodConfigExtGUID_NODETYPE = FAXSRV_ROUTING_METHOD_NODETYPE_GUID;
  14. const GUID* CRoutingMethodConfigExtData::m_NODETYPE = &CRoutingMethodConfigExtGUID_NODETYPE;
  15. const OLECHAR* CRoutingMethodConfigExtData::m_SZNODETYPE = FAXSRV_ROUTING_METHOD_NODETYPE_GUID_STR;
  16. const OLECHAR* CRoutingMethodConfigExtData::m_SZDISPLAY_NAME = OLESTR("RoutingMethodConfig");
  17. const CLSID* CRoutingMethodConfigExtData::m_SNAPIN_CLASSID = &CLSID_RoutingMethodConfig;
  18. HRESULT
  19. CRoutingMethodConfigExtData::QueryPagesFor(
  20. DATA_OBJECT_TYPES type
  21. )
  22. {
  23. DEBUG_FUNCTION_NAME(TEXT("CRoutingMethodConfigExtData::QueryPagesFor"));
  24. return S_OK;
  25. } // CRoutingMethodConfigExtData::QueryPagesFor
  26. HRESULT
  27. CRoutingMethodConfigExtData::CreatePropertyPages(
  28. LPPROPERTYSHEETCALLBACK lpProvider,
  29. LONG_PTR handle,
  30. IUnknown *pUnk,
  31. DATA_OBJECT_TYPES type
  32. )
  33. {
  34. DEBUG_FUNCTION_NAME(TEXT("CRoutingMethodConfigExtData::CreatePropertyPages"));
  35. WCHAR szMethodGuid[FAXSRV_MAX_GUID_LEN + 1];
  36. WCHAR szServer[FAXSRV_MAX_SERVER_NAME + 1];
  37. DWORD dwDeviceId;
  38. HRESULT hr;
  39. hr = GetDWORDFromDataObject(m_pDataObject,m_CCF_DEVICE_ID,&dwDeviceId);
  40. if (FAILED(hr))
  41. {
  42. DebugPrintEx(
  43. DEBUG_ERR,
  44. TEXT("GetDeviceIdFromDataObject failed. hr = 0x%08X"),
  45. hr);
  46. return hr;
  47. }
  48. //
  49. // only for device incoming methods
  50. // will not showup while called under the catalog of the global methods
  51. //
  52. if (dwDeviceId == 0) //==FXS_GLOBAL_METHOD_DEVICE_ID
  53. {
  54. return E_UNEXPECTED;
  55. }
  56. hr = GetStringFromDataObject(m_pDataObject,
  57. m_CCF_METHOD_GUID,
  58. szMethodGuid,
  59. sizeof(szMethodGuid)/sizeof(WCHAR));
  60. if (FAILED(hr))
  61. {
  62. DebugPrintEx(
  63. DEBUG_ERR,
  64. TEXT("GetStringFromDataObject for m_CCF_METHOD_GUID failed. hr = 0x%08X"),
  65. hr);
  66. return hr;
  67. }
  68. hr = GetStringFromDataObject(m_pDataObject,
  69. m_CCF_SERVER_NAME,
  70. szServer,
  71. sizeof(szServer)/sizeof(WCHAR));
  72. if (FAILED(hr))
  73. {
  74. DebugPrintEx(
  75. DEBUG_ERR,
  76. TEXT("GetStringFromDataObject for m_CCF_SERVER_NAME failed. hr = 0x%08X"),
  77. hr);
  78. return hr;
  79. }
  80. //
  81. // This snap-in configures the following methods: Store / Print / Email
  82. //
  83. CComBSTR bstrPageTitle;
  84. if (CSTR_EQUAL == CompareString(LOCALE_INVARIANT,
  85. NORM_IGNORECASE,
  86. szMethodGuid,
  87. -1,
  88. REGVAL_RM_FOLDER_GUID,
  89. -1))
  90. {
  91. bstrPageTitle.LoadString(IDS_STORE_TITLE);
  92. if (!bstrPageTitle)
  93. {
  94. return E_UNEXPECTED;
  95. }
  96. CStoreConfigPage* pPage = new CStoreConfigPage(handle, true, bstrPageTitle); // true = only one page
  97. if (!pPage)
  98. {
  99. DebugPrintEx(
  100. DEBUG_ERR,
  101. TEXT("Failed to allocate CStoreConfigPage")
  102. );
  103. return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
  104. }
  105. hr = pPage->Init(szServer, dwDeviceId);
  106. if (FAILED(hr))
  107. {
  108. DebugPrintEx(
  109. DEBUG_ERR,
  110. TEXT("Failed to Init CStoreConfigPage (hr = 0x%08x)"),
  111. hr
  112. );
  113. delete pPage;
  114. return hr;
  115. }
  116. HPROPSHEETPAGE hPage = pPage->Create ();
  117. if (NULL == hPage)
  118. {
  119. hr = HRESULT_FROM_WIN32 (GetLastError());
  120. DebugPrintEx(
  121. DEBUG_ERR,
  122. TEXT("Failed to Create CStoreConfigPage (hr = 0x%08x)"),
  123. hr
  124. );
  125. delete pPage;
  126. return hr;
  127. }
  128. hr = lpProvider->AddPage (hPage);
  129. if (FAILED(hr))
  130. {
  131. DebugPrintEx(
  132. DEBUG_ERR,
  133. TEXT("Failed to add page (hr = 0x%08x)"),
  134. hr
  135. );
  136. DestroyPropertySheetPage (hPage);
  137. delete pPage;
  138. return hr;
  139. }
  140. }
  141. else if (CSTR_EQUAL == CompareString(LOCALE_INVARIANT,
  142. NORM_IGNORECASE,
  143. szMethodGuid,
  144. -1,
  145. REGVAL_RM_PRINTING_GUID,
  146. -1))
  147. {
  148. bstrPageTitle.LoadString(IDS_PRINT_TITLE);
  149. if (!bstrPageTitle)
  150. {
  151. return E_UNEXPECTED;
  152. }
  153. CPrintConfigPage* pPage = new CPrintConfigPage(handle, true, bstrPageTitle); // true = only one page
  154. if (!pPage)
  155. {
  156. DebugPrintEx(
  157. DEBUG_ERR,
  158. TEXT("Failed to allocate CPrintConfigPage")
  159. );
  160. return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
  161. }
  162. hr = pPage->Init(szServer, dwDeviceId);
  163. if (FAILED(hr))
  164. {
  165. DebugPrintEx(
  166. DEBUG_ERR,
  167. TEXT("Failed to Init CPrintConfigPage (hr = 0x%08x)"),
  168. hr
  169. );
  170. delete pPage;
  171. return hr;
  172. }
  173. HPROPSHEETPAGE hPage = pPage->Create ();
  174. if (NULL == hPage)
  175. {
  176. hr = HRESULT_FROM_WIN32 (GetLastError());
  177. DebugPrintEx(
  178. DEBUG_ERR,
  179. TEXT("Failed to Create CPrintConfigPage (hr = 0x%08x)"),
  180. hr
  181. );
  182. delete pPage;
  183. return hr;
  184. }
  185. hr = lpProvider->AddPage (hPage);
  186. if (FAILED(hr))
  187. {
  188. DebugPrintEx(
  189. DEBUG_ERR,
  190. TEXT("Failed to add page (hr = 0x%08x)"),
  191. hr
  192. );
  193. DestroyPropertySheetPage (hPage);
  194. delete pPage;
  195. return hr;
  196. }
  197. }
  198. else if (CSTR_EQUAL == CompareString(LOCALE_INVARIANT,
  199. NORM_IGNORECASE,
  200. szMethodGuid,
  201. -1,
  202. REGVAL_RM_EMAIL_GUID,
  203. -1))
  204. {
  205. bstrPageTitle.LoadString(IDS_EMAIL_TITLE);
  206. if (!bstrPageTitle)
  207. {
  208. return E_UNEXPECTED;
  209. }
  210. CEmailConfigPage* pPage = new CEmailConfigPage(handle, true, bstrPageTitle); // true = only one page
  211. if (!pPage)
  212. {
  213. DebugPrintEx(
  214. DEBUG_ERR,
  215. TEXT("Failed to allocate CEmailConfigPage")
  216. );
  217. return HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
  218. }
  219. hr = pPage->Init(szServer, dwDeviceId);
  220. if (FAILED(hr))
  221. {
  222. DebugPrintEx(
  223. DEBUG_ERR,
  224. TEXT("Failed to Init CEmailConfigPage (hr = 0x%08x)"),
  225. hr
  226. );
  227. delete pPage;
  228. return hr;
  229. }
  230. HPROPSHEETPAGE hPage = pPage->Create ();
  231. if (NULL == hPage)
  232. {
  233. hr = HRESULT_FROM_WIN32 (GetLastError());
  234. DebugPrintEx(
  235. DEBUG_ERR,
  236. TEXT("Failed to Create CEmailConfigPage (hr = 0x%08x)"),
  237. hr
  238. );
  239. delete pPage;
  240. return hr;
  241. }
  242. hr = lpProvider->AddPage (hPage);
  243. if (FAILED(hr))
  244. {
  245. DebugPrintEx(
  246. DEBUG_ERR,
  247. TEXT("Failed to add page (hr = 0x%08x)"),
  248. hr
  249. );
  250. DestroyPropertySheetPage (hPage);
  251. delete pPage;
  252. return hr;
  253. }
  254. }
  255. else
  256. {
  257. //
  258. // Unsupported routing method
  259. //
  260. return S_FALSE;
  261. }
  262. return S_OK;
  263. } // CRoutingMethodConfigExtData::CreatePropertyPages