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.

460 lines
12 KiB

  1. // Copyright (c) 2001 Microsoft Corporation
  2. //
  3. // File: InstallationUnitProvider.cpp
  4. //
  5. // Synopsis: Defines an InstallationUnitProvider
  6. // An InstallationUnitProvider manages the global
  7. // InstallationUnits for each service that can be
  8. // installed.
  9. //
  10. // History: 02/05/2001 JeffJon Created
  11. #include "pch.h"
  12. #include "InstallationUnitProvider.h"
  13. static InstallationUnitProvider* installationUnitProvider = 0;
  14. InstallationUnitProvider&
  15. InstallationUnitProvider::GetInstance()
  16. {
  17. if (!installationUnitProvider)
  18. {
  19. installationUnitProvider = new InstallationUnitProvider();
  20. installationUnitProvider->Init();
  21. }
  22. ASSERT(installationUnitProvider);
  23. return *installationUnitProvider;
  24. }
  25. InstallationUnitProvider::InstallationUnitProvider() :
  26. currentInstallationUnit(0),
  27. initialized(false)
  28. {
  29. LOG_CTOR(InstallationUnitProvider);
  30. }
  31. InstallationUnitProvider::~InstallationUnitProvider()
  32. {
  33. LOG_DTOR(InstallationUnitProvider);
  34. // Delete all the installation units
  35. for(
  36. InstallationUnitContainerType::iterator itr =
  37. installationUnitContainer.begin();
  38. itr != installationUnitContainer.end();
  39. ++itr)
  40. {
  41. if ((*itr).second)
  42. {
  43. delete (*itr).second;
  44. }
  45. }
  46. installationUnitContainer.clear();
  47. }
  48. void
  49. InstallationUnitProvider::Init()
  50. {
  51. LOG_FUNCTION(InstallationUnitProvider::Init);
  52. if (!initialized)
  53. {
  54. // Create one of each type of installation unit
  55. installationUnitContainer.insert(
  56. std::make_pair(DHCP_SERVER, new DHCPInstallationUnit()));
  57. installationUnitContainer.insert(
  58. std::make_pair(DNS_SERVER, new DNSInstallationUnit()));
  59. installationUnitContainer.insert(
  60. std::make_pair(WINS_SERVER, new WINSInstallationUnit()));
  61. installationUnitContainer.insert(
  62. std::make_pair(RRAS_SERVER, new RRASInstallationUnit()));
  63. installationUnitContainer.insert(
  64. std::make_pair(TERMINALSERVER_SERVER, new TerminalServerInstallationUnit()));
  65. installationUnitContainer.insert(
  66. std::make_pair(FILESERVER_SERVER, new FileInstallationUnit()));
  67. installationUnitContainer.insert(
  68. std::make_pair(INDEXING_SERVICE, new IndexingInstallationUnit()));
  69. installationUnitContainer.insert(
  70. std::make_pair(PRINTSERVER_SERVER, new PrintInstallationUnit()));
  71. installationUnitContainer.insert(
  72. std::make_pair(MEDIASERVER_SERVER, new MediaInstallationUnit()));
  73. installationUnitContainer.insert(
  74. std::make_pair(WEBAPP_SERVER, new WebInstallationUnit()));
  75. installationUnitContainer.insert(
  76. std::make_pair(EXPRESS_SERVER, new ExpressInstallationUnit()));
  77. installationUnitContainer.insert(
  78. std::make_pair(DC_SERVER, new ADInstallationUnit()));
  79. installationUnitContainer.insert(
  80. std::make_pair(POP3_SERVER, new POP3InstallationUnit()));
  81. // Mark as initialized
  82. initialized = true;
  83. }
  84. }
  85. void
  86. InstallationUnitProvider::Destroy()
  87. {
  88. LOG_FUNCTION(InstallationUnitProvider::Destroy);
  89. if (installationUnitProvider)
  90. {
  91. delete installationUnitProvider;
  92. installationUnitProvider = 0;
  93. }
  94. }
  95. InstallationUnit&
  96. InstallationUnitProvider::SetCurrentInstallationUnit(
  97. ServerRole ServerRole)
  98. {
  99. LOG_FUNCTION(InstallationUnitProvider::SetCurrentInstallationUnit);
  100. currentInstallationUnit = (*(installationUnitContainer.find(ServerRole))).second;
  101. ASSERT(currentInstallationUnit);
  102. return *currentInstallationUnit;
  103. }
  104. InstallationUnit&
  105. InstallationUnitProvider::GetCurrentInstallationUnit()
  106. {
  107. LOG_FUNCTION(InstallationUnitProvider::GetCurrentInstallationUnit);
  108. ASSERT(currentInstallationUnit);
  109. return *currentInstallationUnit;
  110. }
  111. InstallationUnit&
  112. InstallationUnitProvider::GetInstallationUnitForType(
  113. ServerRole ServerRole)
  114. {
  115. LOG_FUNCTION(InstallationUnitProvider::GetInstallationUnitForType);
  116. InstallationUnit* result = 0;
  117. InstallationUnitContainerType::const_iterator itr =
  118. installationUnitContainer.find(ServerRole);
  119. ASSERT(itr != installationUnitContainer.end());
  120. if (itr != installationUnitContainer.end())
  121. {
  122. result = (*itr).second;
  123. }
  124. ASSERT(result);
  125. return *result;
  126. }
  127. DHCPInstallationUnit&
  128. InstallationUnitProvider::GetDHCPInstallationUnit()
  129. {
  130. LOG_FUNCTION(InstallationUnitProvider::GetDHCPInstallationUnit);
  131. DHCPInstallationUnit* dhcpInstallationUnit = 0;
  132. InstallationUnitContainerType::const_iterator itr =
  133. installationUnitContainer.find(DHCP_SERVER);
  134. ASSERT(itr != installationUnitContainer.end());
  135. if (itr != installationUnitContainer.end())
  136. {
  137. dhcpInstallationUnit = dynamic_cast<DHCPInstallationUnit*>((*itr).second);
  138. }
  139. ASSERT(dhcpInstallationUnit);
  140. return *dhcpInstallationUnit;
  141. }
  142. DNSInstallationUnit&
  143. InstallationUnitProvider::GetDNSInstallationUnit()
  144. {
  145. LOG_FUNCTION(InstallationUnitProvider::GetDNSInstallationUnit);
  146. DNSInstallationUnit* dnsInstallationUnit = 0;
  147. InstallationUnitContainerType::const_iterator itr =
  148. installationUnitContainer.find(DNS_SERVER);
  149. ASSERT(itr != installationUnitContainer.end());
  150. if (itr != installationUnitContainer.end())
  151. {
  152. dnsInstallationUnit = dynamic_cast<DNSInstallationUnit*>((*itr).second);
  153. }
  154. ASSERT(dnsInstallationUnit);
  155. return *dnsInstallationUnit;
  156. }
  157. WINSInstallationUnit&
  158. InstallationUnitProvider::GetWINSInstallationUnit()
  159. {
  160. LOG_FUNCTION(InstallationUnitProvider::GetWINSInstallationUnit);
  161. WINSInstallationUnit* winsInstallationUnit = 0;
  162. InstallationUnitContainerType::const_iterator itr =
  163. installationUnitContainer.find(WINS_SERVER);
  164. ASSERT(itr != installationUnitContainer.end());
  165. if (itr != installationUnitContainer.end())
  166. {
  167. winsInstallationUnit = dynamic_cast<WINSInstallationUnit*>((*itr).second);
  168. }
  169. ASSERT(winsInstallationUnit);
  170. return *winsInstallationUnit;
  171. }
  172. RRASInstallationUnit&
  173. InstallationUnitProvider::GetRRASInstallationUnit()
  174. {
  175. LOG_FUNCTION(InstallationUnitProvider::GetRRASInstallationUnit);
  176. RRASInstallationUnit* rrasInstallationUnit = 0;
  177. InstallationUnitContainerType::const_iterator itr =
  178. installationUnitContainer.find(RRAS_SERVER);
  179. ASSERT(itr != installationUnitContainer.end());
  180. if (itr != installationUnitContainer.end())
  181. {
  182. rrasInstallationUnit = dynamic_cast<RRASInstallationUnit*>((*itr).second);
  183. }
  184. ASSERT(rrasInstallationUnit);
  185. return *rrasInstallationUnit;
  186. }
  187. TerminalServerInstallationUnit&
  188. InstallationUnitProvider::GetTerminalServerInstallationUnit()
  189. {
  190. LOG_FUNCTION(InstallationUnitProvider::GetTerminalServerInstallationUnit);
  191. TerminalServerInstallationUnit* terminalServerInstallationUnit = 0;
  192. InstallationUnitContainerType::const_iterator itr =
  193. installationUnitContainer.find(TERMINALSERVER_SERVER);
  194. ASSERT(itr != installationUnitContainer.end());
  195. if (itr != installationUnitContainer.end())
  196. {
  197. terminalServerInstallationUnit =
  198. dynamic_cast<TerminalServerInstallationUnit*>((*itr).second);
  199. }
  200. ASSERT(terminalServerInstallationUnit);
  201. return *terminalServerInstallationUnit;
  202. }
  203. FileInstallationUnit&
  204. InstallationUnitProvider::GetFileInstallationUnit()
  205. {
  206. LOG_FUNCTION(InstallationUnitProvider::GetFileInstallationUnit);
  207. FileInstallationUnit* fileInstallationUnit = 0;
  208. InstallationUnitContainerType::const_iterator itr =
  209. installationUnitContainer.find(FILESERVER_SERVER);
  210. ASSERT(itr != installationUnitContainer.end());
  211. if (itr != installationUnitContainer.end())
  212. {
  213. fileInstallationUnit =
  214. dynamic_cast<FileInstallationUnit*>((*itr).second);
  215. }
  216. ASSERT(fileInstallationUnit);
  217. return *fileInstallationUnit;
  218. }
  219. IndexingInstallationUnit&
  220. InstallationUnitProvider::GetIndexingInstallationUnit()
  221. {
  222. LOG_FUNCTION(InstallationUnitProvider::GetIndexingInstallationUnit);
  223. IndexingInstallationUnit* indexingInstallationUnit = 0;
  224. InstallationUnitContainerType::const_iterator itr =
  225. installationUnitContainer.find(INDEXING_SERVICE);
  226. ASSERT(itr != installationUnitContainer.end());
  227. if (itr != installationUnitContainer.end())
  228. {
  229. indexingInstallationUnit =
  230. dynamic_cast<IndexingInstallationUnit*>((*itr).second);
  231. }
  232. ASSERT(indexingInstallationUnit);
  233. return *indexingInstallationUnit;
  234. }
  235. PrintInstallationUnit&
  236. InstallationUnitProvider::GetPrintInstallationUnit()
  237. {
  238. LOG_FUNCTION(InstallationUnitProvider::GetPrintInstallationUnit);
  239. PrintInstallationUnit* printInstallationUnit = 0;
  240. InstallationUnitContainerType::const_iterator itr =
  241. installationUnitContainer.find(PRINTSERVER_SERVER);
  242. ASSERT(itr != installationUnitContainer.end());
  243. if (itr != installationUnitContainer.end())
  244. {
  245. printInstallationUnit =
  246. dynamic_cast<PrintInstallationUnit*>((*itr).second);
  247. }
  248. ASSERT(printInstallationUnit);
  249. return *printInstallationUnit;
  250. }
  251. MediaInstallationUnit&
  252. InstallationUnitProvider::GetMediaInstallationUnit()
  253. {
  254. LOG_FUNCTION(InstallationUnitProvider::GetMediaInstallationUnit);
  255. MediaInstallationUnit* mediaInstallationUnit = 0;
  256. InstallationUnitContainerType::const_iterator itr =
  257. installationUnitContainer.find(MEDIASERVER_SERVER);
  258. ASSERT(itr != installationUnitContainer.end());
  259. if (itr != installationUnitContainer.end())
  260. {
  261. mediaInstallationUnit =
  262. dynamic_cast<MediaInstallationUnit*>((*itr).second);
  263. }
  264. ASSERT(mediaInstallationUnit);
  265. return *mediaInstallationUnit;
  266. }
  267. WebInstallationUnit&
  268. InstallationUnitProvider::GetWebInstallationUnit()
  269. {
  270. LOG_FUNCTION(InstallationUnitProvider::GetWebInstallationUnit);
  271. WebInstallationUnit* webInstallationUnit = 0;
  272. InstallationUnitContainerType::const_iterator itr =
  273. installationUnitContainer.find(WEBAPP_SERVER);
  274. ASSERT(itr != installationUnitContainer.end());
  275. if (itr != installationUnitContainer.end())
  276. {
  277. webInstallationUnit =
  278. dynamic_cast<WebInstallationUnit*>((*itr).second);
  279. }
  280. ASSERT(webInstallationUnit);
  281. return *webInstallationUnit;
  282. }
  283. ExpressInstallationUnit&
  284. InstallationUnitProvider::GetExpressInstallationUnit()
  285. {
  286. LOG_FUNCTION(InstallationUnitProvider::GetExpressInstallationUnit);
  287. ExpressInstallationUnit* expressInstallationUnit = 0;
  288. InstallationUnitContainerType::const_iterator itr =
  289. installationUnitContainer.find(EXPRESS_SERVER);
  290. ASSERT(itr != installationUnitContainer.end());
  291. if (itr != installationUnitContainer.end())
  292. {
  293. expressInstallationUnit =
  294. dynamic_cast<ExpressInstallationUnit*>((*itr).second);
  295. }
  296. ASSERT(expressInstallationUnit);
  297. return *expressInstallationUnit;
  298. }
  299. ADInstallationUnit&
  300. InstallationUnitProvider::GetADInstallationUnit()
  301. {
  302. LOG_FUNCTION(InstallationUnitProvider::GetADInstallationUnit);
  303. ADInstallationUnit* adInstallationUnit = 0;
  304. InstallationUnitContainerType::const_iterator itr =
  305. installationUnitContainer.find(DC_SERVER);
  306. ASSERT(itr != installationUnitContainer.end());
  307. if (itr != installationUnitContainer.end())
  308. {
  309. adInstallationUnit =
  310. dynamic_cast<ADInstallationUnit*>((*itr).second);
  311. }
  312. ASSERT(adInstallationUnit);
  313. return *adInstallationUnit;
  314. }
  315. POP3InstallationUnit&
  316. InstallationUnitProvider::GetPOP3InstallationUnit()
  317. {
  318. LOG_FUNCTION(InstallationUnitProvider::GetPOP3InstallationUnit);
  319. POP3InstallationUnit* pop3InstallationUnit = 0;
  320. InstallationUnitContainerType::const_iterator itr =
  321. installationUnitContainer.find(POP3_SERVER);
  322. ASSERT(itr != installationUnitContainer.end());
  323. if (itr != installationUnitContainer.end())
  324. {
  325. pop3InstallationUnit =
  326. dynamic_cast<POP3InstallationUnit*>((*itr).second);
  327. }
  328. ASSERT(pop3InstallationUnit);
  329. return *pop3InstallationUnit;
  330. }