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.

412 lines
9.9 KiB

  1. /**********************************************************************/
  2. /** Microsoft Windows/NT **/
  3. /** Copyright(c) Microsoft Corporation, 1997 - 2002 **/
  4. /**********************************************************************/
  5. /*
  6. Servpp.h
  7. Server properties implementation file
  8. FILE HISTORY:
  9. */
  10. #include "stdafx.h"
  11. #include "fltrpp.h"
  12. #include "spdutil.h"
  13. #ifdef _DEBUG
  14. #define new DEBUG_NEW
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. /////////////////////////////////////////////////////////////////////////////
  19. //
  20. // CFilterProperties holder
  21. //
  22. /////////////////////////////////////////////////////////////////////////////
  23. CFilterProperties::CFilterProperties
  24. (
  25. ITFSNode * pNode,
  26. IComponentData * pComponentData,
  27. ITFSComponentData * pTFSCompData,
  28. CFilterInfo * pFilterInfo,
  29. ISpdInfo * pSpdInfo,
  30. LPCTSTR pszSheetName
  31. ) : CPropertyPageHolderBase(pNode, pComponentData, pszSheetName)
  32. {
  33. //ASSERT(pFolderNode == GetContainerNode());
  34. m_bAutoDeletePages = FALSE; // we have the pages as embedded members
  35. AddPageToList((CPropertyPageBase*) &m_pageGeneral);
  36. Assert(pTFSCompData != NULL);
  37. m_spTFSCompData.Set(pTFSCompData);
  38. m_spSpdInfo.Set(pSpdInfo);
  39. m_FltrInfo = *pFilterInfo;
  40. m_bTheme = TRUE;
  41. }
  42. CFilterProperties::~CFilterProperties()
  43. {
  44. RemovePageFromList((CPropertyPageBase*) &m_pageGeneral, FALSE);
  45. }
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CFilterGenProp property page
  48. IMPLEMENT_DYNCREATE(CFilterGenProp, CPropertyPageBase)
  49. CFilterGenProp::CFilterGenProp() : CPropertyPageBase(CFilterGenProp::IDD)
  50. {
  51. //{{AFX_DATA_INIT(CFilterGenProp)
  52. // NOTE: the ClassWizard will add member initialization here
  53. //}}AFX_DATA_INIT
  54. }
  55. CFilterGenProp::~CFilterGenProp()
  56. {
  57. }
  58. void CFilterGenProp::DoDataExchange(CDataExchange* pDX)
  59. {
  60. CPropertyPageBase::DoDataExchange(pDX);
  61. //{{AFX_DATA_MAP(CFilterGenProp)
  62. DDX_Control(pDX, IDC_LIST_SPECIFIC, m_listSpecificFilters);
  63. //}}AFX_DATA_MAP
  64. }
  65. BEGIN_MESSAGE_MAP(CFilterGenProp, CPropertyPageBase)
  66. //{{AFX_MSG_MAP(CFilterGenProp)
  67. //}}AFX_MSG_MAP
  68. END_MESSAGE_MAP()
  69. /////////////////////////////////////////////////////////////////////////////
  70. // CFilterGenProp message handlers
  71. BOOL CFilterGenProp::OnInitDialog()
  72. {
  73. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  74. CPropertyPageBase::OnInitDialog();
  75. PopulateFilterInfo();
  76. LoadSpecificFilters();
  77. SetDirty(FALSE);
  78. return TRUE; // return TRUE unless you set the focus to a control
  79. // EXCEPTION: OCX Property Pages should return FALSE
  80. }
  81. void CFilterGenProp::PopulateFilterInfo()
  82. {
  83. CString st;
  84. CString stMask;
  85. CFilterProperties * pFltrProp;
  86. CFilterInfo * pFltrInfo;
  87. pFltrProp = (CFilterProperties *) GetHolder();
  88. Assert(pFltrProp);
  89. pFltrProp->GetFilterInfo(&pFltrInfo);
  90. BOOL fSrcIsName = FALSE;
  91. BOOL fHideMask = FALSE;
  92. BOOL fUseEditForAddr = FALSE;
  93. int iIDSrcAddr = IDC_FLTR_SRC_ADDR;
  94. switch (pFltrInfo->m_SrcAddr.AddrType)
  95. {
  96. case IP_ADDR_UNIQUE:
  97. if (IP_ADDRESS_ME == pFltrInfo->m_SrcAddr.uIpAddr)
  98. {
  99. st.LoadString(IDS_ADDR_ME);
  100. fHideMask = TRUE;
  101. }
  102. else
  103. {
  104. AddressToString(pFltrInfo->m_SrcAddr, &st, &fSrcIsName);
  105. if (fSrcIsName)
  106. {
  107. fUseEditForAddr = TRUE;
  108. fHideMask = TRUE;
  109. }
  110. else
  111. {
  112. stMask = c_szSingleAddressMask;
  113. IpToString(pFltrInfo->m_SrcAddr.uIpAddr, &st);
  114. }
  115. }
  116. break;
  117. case IP_ADDR_DNS_SERVER:
  118. case IP_ADDR_WINS_SERVER:
  119. case IP_ADDR_DHCP_SERVER:
  120. case IP_ADDR_DEFAULT_GATEWAY:
  121. AddressToString(pFltrInfo->m_SrcAddr, &st);
  122. break;
  123. case IP_ADDR_SUBNET:
  124. if (SUBNET_ADDRESS_ANY == pFltrInfo->m_SrcAddr.uSubNetMask)
  125. {
  126. st.LoadString(IDS_ADDR_ANY);
  127. fHideMask = TRUE;
  128. }
  129. else
  130. {
  131. IpToString(pFltrInfo->m_SrcAddr.uIpAddr, &st);
  132. IpToString(pFltrInfo->m_SrcAddr.uSubNetMask, &stMask);
  133. }
  134. break;
  135. }
  136. //Populate the SRC info to the controls now
  137. if (fHideMask)
  138. {
  139. GetDlgItem(IDC_FLTR_SRC_MASK)->ShowWindow(SW_HIDE);
  140. GetDlgItem(IDC_STATIC_SRC_MASK)->ShowWindow(SW_HIDE);
  141. }
  142. else
  143. {
  144. GetDlgItem(IDC_FLTR_SRC_MASK)->SetWindowText(stMask);
  145. }
  146. if (fUseEditForAddr)
  147. {
  148. iIDSrcAddr = IDC_FLTR_SRC_ADDR_EDIT;
  149. GetDlgItem(IDC_FLTR_SRC_ADDR)->ShowWindow(SW_HIDE);
  150. }
  151. else
  152. {
  153. iIDSrcAddr = IDC_FLTR_SRC_ADDR;
  154. GetDlgItem(IDC_FLTR_SRC_ADDR_EDIT)->ShowWindow(SW_HIDE);
  155. }
  156. GetDlgItem(iIDSrcAddr)->SetWindowText(st);
  157. //Start handling the destination now
  158. BOOL fDestDns = FALSE;
  159. int iIDDestAddr = IDC_FLTR_DEST_ADDR;
  160. fUseEditForAddr = FALSE;
  161. fHideMask = FALSE;
  162. st.Empty();
  163. stMask.Empty();
  164. switch (pFltrInfo->m_DesAddr.AddrType)
  165. {
  166. case IP_ADDR_UNIQUE:
  167. if (IP_ADDRESS_ME == pFltrInfo->m_DesAddr.uIpAddr)
  168. {
  169. st.LoadString(IDS_ADDR_ME);
  170. fHideMask = TRUE;
  171. }
  172. else
  173. {
  174. AddressToString(pFltrInfo->m_DesAddr, &st, &fDestDns);
  175. if (fDestDns)
  176. {
  177. fHideMask = TRUE;
  178. fUseEditForAddr = TRUE;
  179. }
  180. else
  181. {
  182. stMask = c_szSingleAddressMask;
  183. IpToString(pFltrInfo->m_DesAddr.uIpAddr, &st);
  184. }
  185. }
  186. break;
  187. case IP_ADDR_DNS_SERVER:
  188. case IP_ADDR_WINS_SERVER:
  189. case IP_ADDR_DHCP_SERVER:
  190. case IP_ADDR_DEFAULT_GATEWAY:
  191. AddressToString(pFltrInfo->m_DesAddr, &st);
  192. break;
  193. case IP_ADDR_SUBNET:
  194. if (SUBNET_ADDRESS_ANY == pFltrInfo->m_DesAddr.uSubNetMask)
  195. {
  196. st.LoadString(IDS_ADDR_ANY);
  197. fHideMask = TRUE;
  198. }
  199. else
  200. {
  201. IpToString(pFltrInfo->m_DesAddr.uIpAddr, &st);
  202. IpToString(pFltrInfo->m_DesAddr.uSubNetMask, &stMask);
  203. }
  204. break;
  205. }
  206. if (fHideMask)
  207. {
  208. GetDlgItem(IDC_FLTR_DEST_MASK)->ShowWindow(SW_HIDE);
  209. GetDlgItem(IDC_STATIC_DEST_MASK)->ShowWindow(SW_HIDE);
  210. }
  211. else
  212. {
  213. GetDlgItem(IDC_FLTR_DEST_MASK)->SetWindowText(stMask);
  214. }
  215. if (fUseEditForAddr)
  216. {
  217. GetDlgItem(IDC_FLTR_DEST_ADDR)->ShowWindow(SW_HIDE);
  218. iIDDestAddr = IDC_FLTR_DEST_ADDR_EDIT;
  219. }
  220. else
  221. {
  222. GetDlgItem(IDC_FLTR_DEST_ADDR_EDIT)->ShowWindow(SW_HIDE);
  223. iIDDestAddr = IDC_FLTR_DEST_ADDR;
  224. }
  225. GetDlgItem(iIDDestAddr)->SetWindowText(st);
  226. //We are done with the destination now
  227. PortToString(pFltrInfo->m_SrcPort, &st);
  228. GetDlgItem(IDC_FLTR_SRC_PORT)->SetWindowText(st);
  229. PortToString(pFltrInfo->m_DesPort, &st);
  230. GetDlgItem(IDC_FLTR_DEST_PORT)->SetWindowText(st);
  231. FilterFlagToString(pFltrInfo->m_InboundFilterAction, &st);
  232. GetDlgItem(IDC_FLTR_IN_FLAG)->SetWindowText(st);
  233. FilterFlagToString(pFltrInfo->m_OutboundFilterAction, &st);
  234. GetDlgItem(IDC_FLTR_OUT_FLAG)->SetWindowText(st);
  235. ProtocolToString(pFltrInfo->m_Protocol, &st);
  236. GetDlgItem(IDC_FLTR_PROTOCOL)->SetWindowText(st);
  237. InterfaceTypeToString(pFltrInfo->m_InterfaceType, &st);
  238. GetDlgItem(IDC_FLTR_IF_TYPE)->SetWindowText(st);
  239. BoolToString(pFltrInfo->m_bCreateMirror, &st);
  240. GetDlgItem(IDC_FLTR_MIRROR)->SetWindowText(st);
  241. st = pFltrInfo->m_stPolicyName;
  242. GetDlgItem(IDC_FLTR_POLICY)->SetWindowText(st);
  243. }
  244. void CFilterGenProp::LoadSpecificFilters()
  245. {
  246. CFilterProperties * pFltrProp;
  247. CFilterInfo * pFltrInfo;
  248. CFilterInfoArray arraySpFilters;
  249. int nWidth;
  250. int nRows;
  251. CString st;
  252. pFltrProp = (CFilterProperties *) GetHolder();
  253. SPISpdInfo spSpdInfo;
  254. pFltrProp->GetSpdInfo(&spSpdInfo);
  255. pFltrProp->GetFilterInfo(&pFltrInfo);
  256. spSpdInfo->EnumSpecificFilters(
  257. &pFltrInfo->m_guidFltr,
  258. &arraySpFilters,
  259. pFltrInfo->m_FilterType
  260. );
  261. nWidth = m_listSpecificFilters.GetStringWidth(_T("555.555.555.555 - "));
  262. st.LoadString(IDS_FILTER_PP_COL_SRC);
  263. m_listSpecificFilters.InsertColumn(0, st, LVCFMT_LEFT, nWidth);
  264. nWidth = m_listSpecificFilters.GetStringWidth(_T("555.555.555.555 - "));
  265. st.LoadString(IDS_FILTER_PP_COL_DEST);
  266. m_listSpecificFilters.InsertColumn(1, st, LVCFMT_LEFT, nWidth);
  267. st.LoadString(IDS_FLTR_DIR_OUT);
  268. nWidth = m_listSpecificFilters.GetStringWidth((LPCTSTR)st) + 20;
  269. st.LoadString(IDS_FILTER_PP_COL_DIRECTION);
  270. m_listSpecificFilters.InsertColumn(2, st, LVCFMT_LEFT, nWidth);
  271. st.LoadString(IDS_NEG_SEC);
  272. nWidth = m_listSpecificFilters.GetStringWidth(st) + 20;
  273. st.LoadString(IDS_FILTER_PP_COL_FLAG);
  274. m_listSpecificFilters.InsertColumn(3, st, LVCFMT_LEFT, nWidth);
  275. st.LoadString(IDS_FILTER_PP_COL_WEIGHT);
  276. nWidth = m_listSpecificFilters.GetStringWidth((LPCTSTR)st) + 20;
  277. m_listSpecificFilters.InsertColumn(4, st, LVCFMT_LEFT, nWidth);
  278. nRows = 0;
  279. for (int i = 0; i < arraySpFilters.GetSize(); i++)
  280. {
  281. nRows = m_listSpecificFilters.InsertItem(nRows, _T(""));
  282. if (-1 != nRows)
  283. {
  284. AddressToString(arraySpFilters[i]->m_SrcAddr, &st);
  285. m_listSpecificFilters.SetItemText(nRows, 0, st);
  286. AddressToString(arraySpFilters[i]->m_DesAddr, &st);
  287. m_listSpecificFilters.SetItemText(nRows, 1, st);
  288. DirectionToString(arraySpFilters[i]->m_dwDirection, &st);
  289. m_listSpecificFilters.SetItemText(nRows, 2, st);
  290. FilterFlagToString((FILTER_DIRECTION_INBOUND == arraySpFilters[i]->m_dwDirection) ?
  291. arraySpFilters[i]->m_InboundFilterAction :
  292. arraySpFilters[i]->m_OutboundFilterAction,
  293. &st
  294. );
  295. m_listSpecificFilters.SetItemText(nRows, 3, st);
  296. st.Format(_T("%d"), arraySpFilters[i]->m_dwWeight);
  297. m_listSpecificFilters.SetItemText(nRows, 4, st);
  298. m_listSpecificFilters.SetItemData(nRows, i);
  299. }
  300. nRows++;
  301. }
  302. if ( nRows > 0 )
  303. {
  304. //select the first item
  305. m_listSpecificFilters.SetFocus();
  306. m_listSpecificFilters.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED);
  307. }
  308. ::FreeItemsAndEmptyArray(arraySpFilters);
  309. }
  310. BOOL CFilterGenProp::OnApply()
  311. {
  312. if (!IsDirty())
  313. return TRUE;
  314. UpdateData();
  315. //TODO
  316. //Do nothing at this time
  317. //CPropertyPageBase::OnApply();
  318. return TRUE;
  319. }
  320. BOOL CFilterGenProp::OnPropertyChange(BOOL bScope, LONG_PTR *ChangeMask)
  321. {
  322. return FALSE;
  323. }