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.

344 lines
10 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright(C) 2000 Microsoft Corporation all rights reserved.
  4. //
  5. // Module: ProxyServerHelper.cpp
  6. //
  7. // Project: Windows 2000 IAS
  8. //
  9. // Description: Implementation of CProxyServerHelper
  10. //
  11. // Author: tperraut
  12. //
  13. // Revision 02/24/2000 created
  14. //
  15. /////////////////////////////////////////////////////////////////////////////
  16. #include "stdafx.h"
  17. #include "GlobalTransaction.h"
  18. #include "GlobalData.h"
  19. #include "ProxyServerHelper.h"
  20. #include "Objects.h"
  21. #include "Properties.h"
  22. CStringUuid::CStringUuid()
  23. {
  24. UUID uuid;
  25. RPC_STATUS Result = UuidCreate(&uuid);
  26. if ( (Result == RPC_S_OK) || (Result == RPC_S_UUID_LOCAL_ONLY) )
  27. {
  28. Result = UuidToStringW(
  29. &uuid,
  30. &stringUuid
  31. );
  32. if ( Result != RPC_S_OK )
  33. {
  34. _com_issue_error(HRESULT_FROM_WIN32(Result)); // long
  35. }
  36. }
  37. else
  38. {
  39. _com_issue_error(E_FAIL);
  40. }
  41. }
  42. CStringUuid::~CStringUuid()
  43. {
  44. RpcStringFreeW(&stringUuid);
  45. }
  46. const wchar_t* CStringUuid::GetUuid()
  47. {
  48. return stringUuid;
  49. }
  50. const CProxyServerHelper::Properties
  51. CProxyServerHelper::c_DefaultProxyServerProperties[] =
  52. {
  53. {
  54. L"Server Accounting Port",
  55. VT_I4,
  56. },
  57. {
  58. L"Accounting Secret",
  59. VT_BSTR,
  60. },
  61. {
  62. L"Server Authentication Port",
  63. VT_I4,
  64. },
  65. {
  66. L"Authentication Secret",
  67. VT_BSTR,
  68. },
  69. {
  70. L"Address",
  71. VT_BSTR,
  72. },
  73. {
  74. L"Forward Accounting On/Off",
  75. VT_BOOL,
  76. },
  77. {
  78. L"Priority",
  79. VT_I4,
  80. },
  81. {
  82. L"Weight",
  83. VT_I4,
  84. },
  85. {
  86. L"Timeout",
  87. VT_I4,
  88. },
  89. {
  90. L"Maximum Lost Packets",
  91. VT_I4,
  92. },
  93. {
  94. L"Blackout Interval",
  95. VT_I4,
  96. },
  97. // add next properties below and in the enum
  98. };
  99. const unsigned int CProxyServerHelper::c_NbDefaultProxyServerProperties
  100. = sizeof(c_DefaultProxyServerProperties) /
  101. sizeof(c_DefaultProxyServerProperties[0]);
  102. //////////////////////////////////////////////////////////////////////////////
  103. // Construction/Destruction
  104. //////////////////////////////////////////////////////////////////////////////
  105. CProxyServerHelper::CProxyServerHelper(
  106. CGlobalData& GlobalData
  107. ):m_GlobalData(GlobalData)
  108. {
  109. for (unsigned int i = 0; i < c_NbDefaultProxyServerProperties; ++i)
  110. {
  111. _PropertiesArray TempProperty;
  112. TempProperty.Name = c_DefaultProxyServerProperties[i].Name;
  113. TempProperty.Type = c_DefaultProxyServerProperties[i].Type;
  114. m_PropArray.push_back(TempProperty);
  115. }
  116. }
  117. //////////////////////////////////////////////////////////////////////////////
  118. // SetName
  119. //////////////////////////////////////////////////////////////////////////////
  120. void CProxyServerHelper::SetName(const _bstr_t& Name)
  121. {
  122. m_Name = Name;
  123. }
  124. //////////////////////////////////////////////////////////////////////////////
  125. // CreateUniqueName
  126. //////////////////////////////////////////////////////////////////////////////
  127. void CProxyServerHelper::CreateUniqueName()
  128. {
  129. CStringUuid uuidString;
  130. m_Name = uuidString.GetUuid();
  131. }
  132. //////////////////////////////////////////////////////////////////////////////
  133. // SetAccountingPort
  134. //////////////////////////////////////////////////////////////////////////////
  135. void CProxyServerHelper::SetAccountingPort(LONG Port)
  136. {
  137. // base 10 Will never change
  138. WCHAR TempString[MAX_LONG_SIZE];
  139. m_PropArray.at(ACCT_PORT_POS).StrVal = _ltow(Port, TempString, 10);
  140. }
  141. //////////////////////////////////////////////////////////////////////////////
  142. // SetAccountingSecret
  143. //////////////////////////////////////////////////////////////////////////////
  144. void CProxyServerHelper::SetAccountingSecret(const _bstr_t &Secret)
  145. {
  146. m_PropArray.at(ACCT_SECRET_POS).StrVal = Secret;
  147. }
  148. //////////////////////////////////////////////////////////////////////////////
  149. // SetAuthenticationPort
  150. //////////////////////////////////////////////////////////////////////////////
  151. void CProxyServerHelper::SetAuthenticationPort(LONG Port)
  152. {
  153. // base 10 Will never change
  154. WCHAR TempString[MAX_LONG_SIZE];
  155. m_PropArray.at(AUTH_PORT_POS).StrVal = _ltow(Port, TempString, 10);
  156. }
  157. //////////////////////////////////////////////////////////////////////////////
  158. // SetAuthenticationSecret
  159. //////////////////////////////////////////////////////////////////////////////
  160. void CProxyServerHelper::SetAuthenticationSecret(const _bstr_t &Secret)
  161. {
  162. m_PropArray.at(AUTH_SECRET_POS).StrVal = Secret;
  163. }
  164. //////////////////////////////////////////////////////////////////////////////
  165. // SetAddress
  166. //////////////////////////////////////////////////////////////////////////////
  167. void CProxyServerHelper::SetAddress(const _bstr_t& Address)
  168. {
  169. m_PropArray.at(ADDRESS_POS).StrVal = Address;
  170. }
  171. //////////////////////////////////////////////////////////////////////////////
  172. // SetForwardAccounting
  173. //////////////////////////////////////////////////////////////////////////////
  174. void CProxyServerHelper::SetForwardAccounting(BOOL bOn)
  175. {
  176. m_PropArray.at(FORWARD_ACCT_POS).StrVal = bOn? L"-1": L"0";
  177. }
  178. //////////////////////////////////////////////////////////////////////////////
  179. // SetPriority
  180. //////////////////////////////////////////////////////////////////////////////
  181. void CProxyServerHelper::SetPriority(LONG Priority)
  182. {
  183. WCHAR TempString[MAX_LONG_SIZE];
  184. m_PropArray.at(PRIORITY_POS).StrVal = _ltow(Priority, TempString, 10);
  185. }
  186. //////////////////////////////////////////////////////////////////////////////
  187. // SetWeight
  188. //////////////////////////////////////////////////////////////////////////////
  189. void CProxyServerHelper::SetWeight(LONG Weight)
  190. {
  191. WCHAR TempString[MAX_LONG_SIZE];
  192. m_PropArray.at(WEIGHT_POS).StrVal = _ltow(Weight, TempString, 10);
  193. }
  194. //////////////////////////////////////////////////////////////////////////////
  195. // SetTimeout
  196. //////////////////////////////////////////////////////////////////////////////
  197. void CProxyServerHelper::SetTimeout(LONG Timeout)
  198. {
  199. WCHAR TempString[MAX_LONG_SIZE];
  200. m_PropArray.at(TIMEOUT_POS).StrVal = _ltow(Timeout, TempString, 10);
  201. }
  202. //////////////////////////////////////////////////////////////////////////////
  203. // SetMaximumLostPackets
  204. //////////////////////////////////////////////////////////////////////////////
  205. void CProxyServerHelper::SetMaximumLostPackets(LONG MaxLost)
  206. {
  207. WCHAR TempString[MAX_LONG_SIZE];
  208. m_PropArray.at(MAX_LOST_PACKETS_POS).StrVal = _ltow(MaxLost,TempString,10);
  209. }
  210. //////////////////////////////////////////////////////////////////////////////
  211. // SetBlackoutInterval
  212. //////////////////////////////////////////////////////////////////////////////
  213. void CProxyServerHelper::SetBlackoutInterval(LONG Interval)
  214. {
  215. WCHAR TempString[MAX_LONG_SIZE];
  216. m_PropArray.at(BLACKOUT_POS).StrVal = _ltow(Interval, TempString, 10);
  217. }
  218. //////////////////////////////////////////////////////////////////////////////
  219. // Persist
  220. //////////////////////////////////////////////////////////////////////////////
  221. void CProxyServerHelper::Persist(LONG Parent)
  222. {
  223. if ( !Parent )
  224. {
  225. _com_issue_error(E_INVALIDARG);
  226. }
  227. // Create a server in the servergroup (m_Objects)
  228. LONG BagNumber;
  229. m_GlobalData.m_pObjects->InsertObject(
  230. m_Name,
  231. Parent,
  232. BagNumber
  233. );
  234. // then set all the properties (m_Properties)
  235. for (unsigned int i = 0; i < c_NbDefaultProxyServerProperties; ++i)
  236. {
  237. if ( !m_PropArray.at(i).StrVal )
  238. {
  239. // property not set
  240. continue;
  241. }
  242. m_GlobalData.m_pProperties->InsertProperty(
  243. BagNumber,
  244. m_PropArray.at(i).Name,
  245. m_PropArray.at(i).Type,
  246. m_PropArray.at(i).StrVal
  247. );
  248. }
  249. }
  250. //////////////////////////////////////////////////////////////////////////////
  251. // operator = (cleanup and copy)
  252. //////////////////////////////////////////////////////////////////////////////
  253. CProxyServerHelper& CProxyServerHelper::operator=(const CProxyServerHelper& P)
  254. {
  255. if ( this != &P )
  256. {
  257. m_GlobalData = P.m_GlobalData;
  258. m_Name = P.m_Name;
  259. PropertiesArray TempArray;
  260. for (unsigned int i = 0; i < c_NbDefaultProxyServerProperties; ++i)
  261. {
  262. _PropertiesArray TempProperty;
  263. TempProperty.Type = P.m_PropArray.at(i).Type;
  264. TempProperty.Name = P.m_PropArray.at(i).Name;
  265. TempProperty.StrVal = P.m_PropArray.at(i).StrVal;
  266. TempArray.push_back(TempProperty);
  267. }
  268. m_PropArray.swap(TempArray);
  269. }
  270. return *this;
  271. }
  272. //////////////////////////////////////////////////////////////////////////////
  273. // copy constructor
  274. //////////////////////////////////////////////////////////////////////////////
  275. CProxyServerHelper::CProxyServerHelper(const CProxyServerHelper& P)
  276. :m_GlobalData(P.m_GlobalData)
  277. {
  278. m_Name = P.m_Name;
  279. PropertiesArray TempArray;
  280. m_PropArray.reserve(c_NbDefaultProxyServerProperties);
  281. for (unsigned int i = 0; i < c_NbDefaultProxyServerProperties; ++i)
  282. {
  283. _PropertiesArray TempProperty;
  284. TempProperty.Type = P.m_PropArray.at(i).Type;
  285. TempProperty.Name = P.m_PropArray.at(i).Name;
  286. TempProperty.StrVal = P.m_PropArray.at(i).StrVal;
  287. TempArray.push_back(TempProperty);
  288. }
  289. m_PropArray.swap(TempArray);
  290. }