|
|
////////////////////////////////////////////////////////////////////////
//
// Module : Static/NshCache.cpp
//
// Purpose : Cache implementation
//
//
// Developers Name : surya
//
// Description : Functions implementation for the class NshPolNegFilData
// for improving performance by caching the Policy,Filterlist and negpols
// (in BatchMode only.)
//
// History :
//
// Date Author Comments
// 18-12-2001 Surya Initial Version. V1.0
//
////////////////////////////////////////////////////////////////////////
#include "nshipsec.h"
extern CNshPolNegFilData g_NshPolNegFilData; extern CNshPolStore g_NshPolStoreHandle; extern HINSTANCE g_hModule;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction For Class CNshPolStore
//////////////////////////////////////////////////////////////////////
CNshPolStore::CNshPolStore() { hPolicyStorage=NULL; bBatchModeOn=FALSE; }
CNshPolStore::~CNshPolStore() { if(hPolicyStorage) { IPSecClosePolicyStore(hPolicyStorage); //hPolicyStorage=NULL;
} bBatchModeOn=FALSE; }
//////////////////////////////////////////////////////////////////////
// public member functions For Class CNshPolStore
//////////////////////////////////////////////////////////////////////
DWORD CNshPolStore::SetBatchmodeStatus( BOOL bStatus ) { return ERROR_SUCCESS; }
BOOL CNshPolStore::GetBatchmodeStatus() { return FALSE; }
HANDLE CNshPolStore::GetStorageHandle() { return hPolicyStorage; }
VOID CNshPolStore::SetStorageHandle( HANDLE hPolicyStore ) { if(hPolicyStore) { if(hPolicyStorage) { IPSecClosePolicyStore(hPolicyStorage); hPolicyStorage=NULL; } hPolicyStorage=hPolicyStore; } }
//////////////////////////////////////////////////////////////////////
// Construction/Destruction For Class CNshPolNegFilData
//////////////////////////////////////////////////////////////////////
CNshPolNegFilData::CNshPolNegFilData() { pPolicyData = NULL; pFilterData = NULL; pNegPolData = NULL; }
CNshPolNegFilData::~CNshPolNegFilData() { if (pPolicyData) { IPSecFreePolicyData(pPolicyData); pPolicyData = NULL; } if(pFilterData) { IPSecFreeFilterData(pFilterData); pFilterData = NULL; } if(pNegPolData) { IPSecFreeNegPolData(pNegPolData); pNegPolData = NULL; } }
//////////////////////////////////////////////////////////////////////
// public member functions For Class CNshPolNegFilData
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// Set member functions
//////////////////////////////////////////////////////////////////////
VOID CNshPolNegFilData::SetPolicyInCache( PIPSEC_POLICY_DATA pPolicy ) { if (pPolicyData) { if (!IsEqualGUID(pPolicyData->PolicyIdentifier,pPolicy->PolicyIdentifier)) { IPSecFreePolicyData(pPolicyData); pPolicyData=pPolicy; } } else { pPolicyData=pPolicy; } }
VOID CNshPolNegFilData::SetFilterListInCache( PIPSEC_FILTER_DATA pFilter ) { if (pFilterData) { if (!IsEqualGUID(pFilterData->FilterIdentifier,pFilter->FilterIdentifier)) { IPSecFreeFilterData(pFilterData); pFilterData=pFilter; } } else { pFilterData=pFilter; } }
VOID CNshPolNegFilData::SetNegPolInCache( PIPSEC_NEGPOL_DATA pNegPol ) { if (pNegPolData) { if (!IsEqualGUID(pNegPolData->NegPolIdentifier,pNegPol->NegPolIdentifier)) { IPSecFreeNegPolData(pNegPolData); pNegPolData=pNegPol; } } else { pNegPolData=pNegPol; } }
//////////////////////////////////////////////////////////////////////
// Get member functions For Class CNshPolNegFilData
//////////////////////////////////////////////////////////////////////
BOOL CNshPolNegFilData::GetPolicyFromCacheByName( LPTSTR pszPolicyName, PIPSEC_POLICY_DATA * ppPolicy ) { BOOL bPolExists=FALSE;
if (pPolicyData) { if (_tcscmp(pszPolicyName,pPolicyData->pszIpsecName)==0) { bPolExists=TRUE;
if(ppPolicy) { *ppPolicy=pPolicyData; } } } return bPolExists; }
BOOL CNshPolNegFilData::GetFilterListFromCacheByName( LPTSTR pszFilterListName, PIPSEC_FILTER_DATA * ppFilter ) { BOOL bFLExists=FALSE;
if (pFilterData) { if (_tcscmp(pszFilterListName,pFilterData->pszIpsecName)==0) { bFLExists=TRUE;
if(ppFilter) { *ppFilter=pFilterData; } } } return bFLExists; }
BOOL CNshPolNegFilData::GetNegPolFromCacheByName( LPTSTR pszNegPolName, PIPSEC_NEGPOL_DATA * ppNegPol ) { BOOL bNegPolExists=FALSE;
if (pNegPolData) { if (_tcscmp(pszNegPolName,pNegPolData->pszIpsecName)==0) { bNegPolExists=TRUE;
if(ppNegPol) { *ppNegPol=pNegPolData; } } } return bNegPolExists; }
//////////////////////////////////////////////////////////////////////
// check member functions For Class CNshPolNegFilData
//////////////////////////////////////////////////////////////////////
BOOL CNshPolNegFilData::CheckPolicyInCacheByName( LPTSTR pszPolicyName ) { BOOL bPolExists=FALSE;
if (pPolicyData) { if (_tcscmp(pszPolicyName,pPolicyData->pszIpsecName)==0) { bPolExists=TRUE; } } return bPolExists; }
BOOL CNshPolNegFilData::CheckFilterListInCacheByName( LPTSTR pszFilterListName ) { BOOL bFLExists=FALSE;
if (pFilterData) { if (_tcscmp(pszFilterListName,pFilterData->pszIpsecName)==0) { bFLExists=TRUE; } } return bFLExists; }
BOOL CNshPolNegFilData::CheckNegPolInCacheByName( LPTSTR pszNegPolName ) { BOOL bNegPolExists=FALSE;
if (pNegPolData) { if (_tcscmp(pszNegPolName,pNegPolData->pszIpsecName)==0) { bNegPolExists=TRUE; } } return bNegPolExists; }
//////////////////////////////////////////////////////////////////////
// Delete member functions For Class CNshPolNegFilData
//////////////////////////////////////////////////////////////////////
VOID CNshPolNegFilData::DeletePolicyFromCache( PIPSEC_POLICY_DATA pPolicy ) { if (pPolicyData) { if (IsEqualGUID(pPolicyData->PolicyIdentifier,pPolicy->PolicyIdentifier)) { IPSecFreePolicyData(pPolicyData); pPolicyData=NULL; } } }
VOID CNshPolNegFilData::DeleteFilterListFromCache( GUID FilterListGUID ) { if (pFilterData) { if (IsEqualGUID(pFilterData->FilterIdentifier,FilterListGUID)) { IPSecFreeFilterData(pFilterData); pFilterData=NULL; } } }
VOID CNshPolNegFilData::DeleteNegPolFromCache( GUID NegPolGUID ) { if (pNegPolData) { if (IsEqualGUID(pNegPolData->NegPolIdentifier,NegPolGUID)) { IPSecFreeNegPolData(pNegPolData); pNegPolData=NULL; } } }
VOID CNshPolNegFilData::FlushAll() { if (pPolicyData) { IPSecFreePolicyData(pPolicyData); pPolicyData = NULL; } if(pFilterData) { IPSecFreeFilterData(pFilterData); pFilterData = NULL; } if(pNegPolData) { IPSecFreeNegPolData(pNegPolData); pNegPolData = NULL; } }
//
// Other Functions implemetation (Wrapper functions for the APIs)
//
/////////////////////////////////////////////////////////////
//
// Function : CreatePolicyData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// HANDLE hPolicyStore,
// PIPSEC_POLICY_DATA pIpsecPolicyData
//
// Return : DWORD (Win32 Error Code)
//
// Description : Wrapper Function for updating cache
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD CreatePolicyData( HANDLE hPolicyStore, PIPSEC_POLICY_DATA pIpsecPolicyData ) { DWORD dwReturnCode=ERROR_SUCCESS;
dwReturnCode=IPSecCreatePolicyData(hPolicyStore,pIpsecPolicyData);
if(dwReturnCode==ERROR_SUCCESS) { if(g_NshPolStoreHandle.GetBatchmodeStatus()) { g_NshPolNegFilData.SetPolicyInCache(pIpsecPolicyData); } }
return dwReturnCode; }
/////////////////////////////////////////////////////////////
//
// Function : CreateFilterData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// HANDLE hPolicyStore,
// PIPSEC_FILTER_DATA pIpsecFilterData
//
// Return : DWORD (Win32 Error Code)
//
// Description : Wrapper Function for updating cache
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD CreateFilterData( HANDLE hPolicyStore, PIPSEC_FILTER_DATA pIpsecFilterData ) { DWORD dwReturnCode=ERROR_SUCCESS;
dwReturnCode=IPSecCreateFilterData(hPolicyStore,pIpsecFilterData);
if(dwReturnCode==ERROR_SUCCESS) { if(g_NshPolStoreHandle.GetBatchmodeStatus()) { g_NshPolNegFilData.SetFilterListInCache(pIpsecFilterData); } } return dwReturnCode; }
/////////////////////////////////////////////////////////////
//
// Function : CreateNegPolData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// HANDLE hPolicyStore,
// PIPSEC_NEGPOL_DATA pIpsecNegPolData
//
// Return : DWORD (Win32 Error Code)
//
// Description : Wrapper Function for updating cache
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD CreateNegPolData( HANDLE hPolicyStore, PIPSEC_NEGPOL_DATA pIpsecNegPolData ) { DWORD dwReturnCode=ERROR_SUCCESS;
dwReturnCode=IPSecCreateNegPolData(hPolicyStore,pIpsecNegPolData);
if(dwReturnCode==ERROR_SUCCESS) { if(g_NshPolStoreHandle.GetBatchmodeStatus()) { g_NshPolNegFilData.SetNegPolInCache(pIpsecNegPolData); } } return dwReturnCode; }
/////////////////////////////////////////////////////////////
//
// Function : SetPolicyData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// HANDLE hPolicyStore,
// PIPSEC_POLICY_DATA pIpsecPolicyData
//
// Return : DWORD (Win32 Error Code)
//
// Description : Wrapper Function for updating cache
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD SetPolicyData( HANDLE hPolicyStore, PIPSEC_POLICY_DATA pIpsecPolicyData ) { DWORD dwReturnCode=ERROR_SUCCESS;
dwReturnCode=IPSecSetPolicyData(hPolicyStore,pIpsecPolicyData);
if(dwReturnCode==ERROR_SUCCESS) { if(g_NshPolStoreHandle.GetBatchmodeStatus()) { g_NshPolNegFilData.SetPolicyInCache(pIpsecPolicyData); } } return dwReturnCode; }
/////////////////////////////////////////////////////////////
//
// Function : SetFilterData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// HANDLE hPolicyStore,
// PIPSEC_FILTER_DATA pIpsecFilterData
//
// Return : DWORD (Win32 Error Code)
//
// Description : Wrapper Function for updating cache
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD SetFilterData( HANDLE hPolicyStore, PIPSEC_FILTER_DATA pIpsecFilterData ) { DWORD dwReturnCode=ERROR_SUCCESS;
dwReturnCode=IPSecSetFilterData(hPolicyStore,pIpsecFilterData);
if(dwReturnCode==ERROR_SUCCESS) { if(g_NshPolStoreHandle.GetBatchmodeStatus()) { g_NshPolNegFilData.SetFilterListInCache(pIpsecFilterData); } } return dwReturnCode; }
/////////////////////////////////////////////////////////////
//
// Function : DeletePolicyData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// HANDLE hPolicyStore,
// PIPSEC_POLICY_DATA pIpsecPolicyData
//
// Return : DWORD (Win32 Error Code)
//
// Description : Wrapper Function for deleting Policy
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD DeletePolicyData( HANDLE hPolicyStore, PIPSEC_POLICY_DATA pIpsecPolicyData ) { DWORD dwReturnCode=ERROR_SUCCESS;
dwReturnCode=IPSecDeletePolicyData(hPolicyStore,pIpsecPolicyData);
if(dwReturnCode==ERROR_SUCCESS) { if(g_NshPolStoreHandle.GetBatchmodeStatus()) { g_NshPolNegFilData.DeletePolicyFromCache(pIpsecPolicyData); } } return dwReturnCode; }
/////////////////////////////////////////////////////////////
//
// Function : DeleteFilterData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// HANDLE hPolicyStore,
// GUID FilterIdentifier
//
// Return : DWORD (Win32 Error Code)
//
// Description : Wrapper Function for deleting Filter
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD DeleteFilterData( HANDLE hPolicyStore, GUID FilterIdentifier ) { DWORD dwReturnCode=ERROR_SUCCESS;
dwReturnCode=IPSecDeleteFilterData(hPolicyStore,FilterIdentifier);
if(dwReturnCode==ERROR_SUCCESS) { if(g_NshPolStoreHandle.GetBatchmodeStatus()) { g_NshPolNegFilData.DeleteFilterListFromCache(FilterIdentifier); } } return dwReturnCode; }
/////////////////////////////////////////////////////////////
//
// Function : DeleteNegPolData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// HANDLE hPolicyStore,
// GUID NegPolIdentifier
//
// Return : DWORD (Win32 Error Code)
//
// Description : Wrapper Function for deleting NegPol
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD DeleteNegPolData( HANDLE hPolicyStore, GUID NegPolIdentifier ) { DWORD dwReturnCode=ERROR_SUCCESS;
dwReturnCode=IPSecDeleteNegPolData(hPolicyStore,NegPolIdentifier);
if(dwReturnCode==ERROR_SUCCESS) { if(g_NshPolStoreHandle.GetBatchmodeStatus()) { g_NshPolNegFilData.DeleteNegPolFromCache(NegPolIdentifier); } } return dwReturnCode;
}
/////////////////////////////////////////////////////////////
//
// Function : FreePolicyData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// PIPSEC_POLICY_DATA pIpsecPolicyData
//
// Return : VOID
//
// Description : Wrapper Function for Free Policy cache
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
VOID FreePolicyData( PIPSEC_POLICY_DATA pIpsecPolicyData ) { if(!g_NshPolStoreHandle.GetBatchmodeStatus()) { if(pIpsecPolicyData) { IPSecFreePolicyData(pIpsecPolicyData); pIpsecPolicyData=NULL; } } }
/////////////////////////////////////////////////////////////
//
// Function : FreeNegPolData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// PIPSEC_NEGPOL_DATA pIpsecNegPolData
//
// Return : VOID
//
// Description : Wrapper Function for Free NegPol Cache
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
VOID FreeNegPolData( PIPSEC_NEGPOL_DATA pIpsecNegPolData ) { if(!g_NshPolStoreHandle.GetBatchmodeStatus()) { if(pIpsecNegPolData) { IPSecFreeNegPolData(pIpsecNegPolData); pIpsecNegPolData=NULL; } } }
/////////////////////////////////////////////////////////////
//
// Function : FreeFilterData()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// PIPSEC_FILTER_DATA pIpsecFilterData
//
// Return : VOID
//
// Description : Wrapper Function for Free Filter Cache
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
VOID FreeFilterData( PIPSEC_FILTER_DATA pIpsecFilterData ) { if(!g_NshPolStoreHandle.GetBatchmodeStatus()) { if(pIpsecFilterData) { IPSecFreeFilterData(pIpsecFilterData); pIpsecFilterData=NULL; } } }
/////////////////////////////////////////////////////////////
//
// Function : OpenPolicyStore()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// LPWSTR pszMachineName,
// DWORD dwTypeOfStore,
// LPWSTR pszFileName,
// HANDLE * phPolicyStore
//
// Return : DWORD (Win32 Error Code)
//
// Description : Implementation for the Openingpolstore in batch mode
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD OpenPolicyStore( HANDLE * phPolicyStore ) { DWORD dwReturnCode = ERROR_SUCCESS;
if (g_NshPolStoreHandle.GetStorageHandle()) { *phPolicyStore = g_NshPolStoreHandle.GetStorageHandle(); dwReturnCode = ERROR_SUCCESS; } else { dwReturnCode = ERROR_INVALID_DATA; }
return dwReturnCode; }
/////////////////////////////////////////////////////////////
//
// Function : ClosePolicyStore()
//
// Date of Creation: 21st Aug 2001
//
// Parameters :
// HANDLE hPolicyStore
//
// Return : DWORD (Win32 Error Code)
//
// Description : Implementation for the ClosingPolstore in batch mode
//
// Revision History:
//
// Date Author Comments
//
////////////////////////////////////////////////////////////
DWORD ClosePolicyStore( HANDLE hPolicyStore ) { return ERROR_SUCCESS; }
|