FirewallAppDoc.cpp
上传用户:wlquartz
上传日期:2022-03-04
资源大小:89k
文件大小:3k
开发平台:

Visual C++

  1. // FirewallAppDoc.cpp : implementation of the CFirewallAppDoc class
  2. //
  3. #include "stdafx.h"
  4. #include "FirewallApp.h"
  5. #include "FirewallAppDoc.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CFirewallAppDoc
  13. IMPLEMENT_DYNCREATE(CFirewallAppDoc, CDocument)
  14. BEGIN_MESSAGE_MAP(CFirewallAppDoc, CDocument)
  15. //{{AFX_MSG_MAP(CFirewallAppDoc)
  16. // NOTE - the ClassWizard will add and remove mapping macros here.
  17. //    DO NOT EDIT what you see in these blocks of generated code!
  18. //}}AFX_MSG_MAP
  19. END_MESSAGE_MAP()
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CFirewallAppDoc construction/destruction
  22. CFirewallAppDoc::CFirewallAppDoc()
  23. {
  24. nRules = 0;
  25. }
  26. CFirewallAppDoc::~CFirewallAppDoc()
  27. {
  28. }
  29. BOOL CFirewallAppDoc::OnNewDocument()
  30. {
  31. if (!CDocument::OnNewDocument())
  32. return FALSE;
  33. // TODO: add reinitialization code here
  34. // (SDI documents will reuse this document)
  35. return TRUE;
  36. }
  37. /////////////////////////////////////////////////////////////////////////////
  38. // CFirewallAppDoc serialization
  39. void CFirewallAppDoc::Serialize(CArchive& ar)
  40. {
  41. if (ar.IsStoring())
  42. {
  43. // TODO: add storing code here
  44. }
  45. else
  46. {
  47. // TODO: add loading code here
  48. }
  49. }
  50. /////////////////////////////////////////////////////////////////////////////
  51. // CFirewallAppDoc diagnostics
  52. #ifdef _DEBUG
  53. void CFirewallAppDoc::AssertValid() const
  54. {
  55. CDocument::AssertValid();
  56. }
  57. void CFirewallAppDoc::Dump(CDumpContext& dc) const
  58. {
  59. CDocument::Dump(dc);
  60. }
  61. #endif //_DEBUG
  62. /////////////////////////////////////////////////////////////////////////////
  63. // CFirewallAppDoc commands
  64. int CFirewallAppDoc::AddRule(unsigned long srcIp,
  65.  unsigned long srcMask,
  66.  unsigned short srcPort,
  67.  unsigned long dstIp,
  68.  unsigned long dstMask,
  69.  unsigned short dstPort,
  70.  unsigned int protocol,
  71.  int action)
  72. {
  73. if(nRules >= MAX_RULES)
  74. {
  75. return -1;
  76. }
  77. else
  78. {
  79. rules[nRules].sourceIp   = srcIp;
  80. rules[nRules].sourceMask   = srcMask;
  81. rules[nRules].sourcePort   = srcPort;
  82. rules[nRules].destinationIp   = dstIp;
  83. rules[nRules].destinationMask = dstMask;
  84. rules[nRules].destinationPort = dstPort;
  85. rules[nRules].protocol   = protocol;
  86. rules[nRules].action   = action;
  87. nRules++;
  88. }
  89. return 0;
  90. }
  91. void CFirewallAppDoc::ResetRules()
  92. {
  93. nRules = 0;
  94. }
  95. void CFirewallAppDoc::DeleteRule(unsigned int position)
  96. {
  97. // Fuera de rango
  98. if(position >= nRules)
  99. return;
  100. // Si es la ultima, simplemente tengo que decrementar nRules en 1
  101. if(position != nRules - 1)
  102. {
  103. unsigned int i;
  104. for(i = position + 1;i<nRules;i++)
  105. {
  106. rules[i - 1].sourceIp   = rules[i].sourceIp;
  107. rules[i - 1].sourceMask   = rules[i].sourceMask;
  108. rules[i - 1].sourcePort   = rules[i].sourcePort;
  109. rules[i - 1].destinationIp    = rules[i].destinationIp;
  110. rules[i - 1].destinationMask  = rules[i].destinationMask;
  111. rules[i - 1].destinationPort  = rules[i].destinationPort;
  112. rules[i - 1].protocol       = rules[i].protocol;
  113. rules[i - 1].action       = rules[i].action;
  114. }
  115. }
  116. nRules--;
  117. }