|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1999 - 2002 **/ /**********************************************************************/
/*
hArray.cpp Index manager for IPSecMon
FILE HISTORY: Nov 29 1999 Ning Sun Created
*/
#include "stdafx.h"
#include "spddb.h"
#include "harray.h"
#include "mbstring.h"
#include "spdutil.h"
extern const DWORD INDEX_TYPE_DEFAULT = 0;
int __cdecl CompareFilterName(const void *elem1, const void *elem2); int __cdecl CompareFilterSourceAddr(const void *elem1, const void *elem2); int __cdecl CompareFilterDestAddr(const void *elem1, const void *elem2); int __cdecl CompareFilterSrcPort(const void *elem1, const void *elem2); int __cdecl CompareFilterDestPort(const void *elem1, const void *elem2); int __cdecl CompareFilterProtocol(const void *elem1, const void *elem2); int __cdecl CompareFilterDirection(const void *elem1, const void *elem2); int __cdecl CompareFilterWeight(const void *elem1, const void *elem2); int __cdecl CompareFilterPolicyName(const void *elem1, const void *elem2); int __cdecl CompareFilterIfType(const void *elem1, const void *elem2); int __cdecl CompareFilterInboundFlag(const void *elem1, const void *elem2); int __cdecl CompareFilterOutboundFlag(const void *elem1, const void *elem2); int __cdecl CompareFilterFlag(const void *elem1, const void *elem2);
int __cdecl CompareMmFilterName(const void *elem1, const void *elem2); int __cdecl CompareMmFilterSourceAddr(const void *elem1, const void *elem2); int __cdecl CompareMmFilterDestAddr(const void *elem1, const void *elem2); int __cdecl CompareMmFilterDirection(const void *elem1, const void *elem2); int __cdecl CompareMmFilterWeight(const void *elem1, const void *elem2); int __cdecl CompareMmFilterPolicyName(const void *elem1, const void *elem2); int __cdecl CompareMmFilterAuth(const void *elem1, const void *elem2); int __cdecl CompareMmFilterIfType(const void *elem1, const void *elem2); int __cdecl CompareMmPolicyName(const void *elem1, const void *elem2); int __cdecl CompareMmPolicyOfferNumber(const void *elem1, const void *elem2); int __cdecl CompareQmPolicyName(const void *elem1, const void *elem2); int __cdecl CompareQmPolicyOfferNumber(const void *elem1, const void *elem2);
int __cdecl CompareMmSAMeAddr(const void *elem1, const void *elem2); int __cdecl CompareMmSAPeerAddr(const void *elem1, const void *elem2); int __cdecl CompareMmSAAuth(const void *elem1, const void *elem2); int __cdecl CompareMmSAEncryption(const void *elem1, const void *elem2); int __cdecl CompareMmSAIntegrity(const void *elem1, const void *elem2); int __cdecl CompareMmSADhGroup(const void *elem1, const void *elem2);
int __cdecl CompareQmSAPolicyName(const void *elem1, const void *elem2); int __cdecl CompareQmSAAuth(const void *elem1, const void *elem2); int __cdecl CompareQmSAConf(const void *elem1, const void *elem2); int __cdecl CompareQmSAIntegrity(const void *elem1, const void *elem2); int __cdecl CompareQmSASrc(const void *elem1, const void *elem2); int __cdecl CompareQmSADest(const void *elem1, const void *elem2); int __cdecl CompareQmSAProtocol(const void *elem1, const void *elem2); int __cdecl CompareQmSASrcPort(const void *elem1, const void *elem2); int __cdecl CompareQmSADestPort(const void *elem1, const void *elem2); int __cdecl CompareQmSAMyTnlEp(const void *elem1, const void *elem2); int __cdecl CompareQmSAPeerTnlEp(const void *elem1, const void *elem2); int __cdecl CompareFilterSrcTnl(const void *elem1, const void *elem2); int __cdecl CompareFilterDestTnl(const void *elem1, const void *elem2);
typedef int (__cdecl *PFNCompareProc)(const void *, const void *);
//This structure saves the pair of sort type and sort function
struct SortTypeAndCompareProcPair { DWORD dwType; PFNCompareProc pCompareProc; };
SortTypeAndCompareProcPair TypeProcMmFilter[] = { {IDS_COL_FLTR_NAME, CompareMmFilterName}, {IDS_COL_FLTR_SRC, CompareMmFilterSourceAddr}, {IDS_COL_FLTR_DEST, CompareMmFilterDestAddr}, {IDS_COL_FLTR_DIR, CompareMmFilterDirection}, {IDS_COL_MM_FLTR_POL, CompareMmFilterPolicyName}, {IDS_COL_MM_FLTR_AUTH, CompareMmFilterAuth}, {IDS_COL_IF_TYPE, CompareMmFilterIfType}, {IDS_COL_FLTR_WEIGHT, CompareMmFilterWeight}, {INDEX_TYPE_DEFAULT, NULL} //NULL means do nothing during sort
};
SortTypeAndCompareProcPair TypeProcMmPolicy[] = { {IDS_COL_MM_POL_NAME, CompareMmPolicyName}, {IDS_COL_MM_POL_OFFER, CompareMmPolicyOfferNumber}, {INDEX_TYPE_DEFAULT, NULL} //NULL means do nothing during sort
};
//SortTypeAndCompareProcPair
SortTypeAndCompareProcPair TypeProcMmSA[] = { {IDS_COL_MM_SA_ME, CompareMmSAMeAddr}, {IDS_COL_MM_SA_PEER, CompareMmSAPeerAddr}, {IDS_COL_MM_SA_AUTH, CompareMmSAAuth}, {IDS_COL_MM_SA_ENCRYPITON, CompareMmSAEncryption}, {IDS_COL_MM_SA_INTEGRITY, CompareMmSAIntegrity}, {IDS_COL_MM_SA_DH, CompareMmSADhGroup}, {INDEX_TYPE_DEFAULT, NULL} //NULL means do nothing during sort
};
SortTypeAndCompareProcPair TypeProcQmFilter[] = { {IDS_COL_FLTR_NAME, CompareFilterName}, {IDS_COL_FLTR_SRC, CompareFilterSourceAddr}, {IDS_COL_FLTR_SRC_PORT, CompareFilterSrcPort}, {IDS_COL_FLTR_DEST, CompareFilterDestAddr}, {IDS_COL_FLTR_DEST_PORT, CompareFilterDestPort}, {IDS_COL_FLTR_SRC_TNL, CompareFilterSrcTnl}, {IDS_COL_FLTR_DEST_TNL, CompareFilterDestTnl}, {IDS_COL_FLTR_PROT, CompareFilterProtocol}, {IDS_COL_FLTR_DIR, CompareFilterDirection}, {IDS_COL_QM_POLICY, CompareFilterPolicyName}, {IDS_COL_IF_TYPE, CompareFilterIfType}, {IDS_COL_FLTR_WEIGHT, CompareFilterWeight}, {IDS_COL_FLTR_OUT_FLAG, CompareFilterOutboundFlag}, {IDS_COL_FLTR_IN_FLAG, CompareFilterInboundFlag}, {IDS_COL_FLTR_FLAG, CompareFilterFlag}, {INDEX_TYPE_DEFAULT, NULL} //NULL means do nothing during sort
};
SortTypeAndCompareProcPair TypeProcQmPolicy[] = { {IDS_COL_QM_POL_NAME, CompareQmPolicyName}, {IDS_COL_QM_POL_OFFER, CompareQmPolicyOfferNumber}, {INDEX_TYPE_DEFAULT, NULL} //NULL means do nothing during sort
};
SortTypeAndCompareProcPair TypeProcQmSA[] = { {IDS_COL_QM_SA_POL, CompareQmSAPolicyName}, {IDS_COL_QM_SA_AUTH, CompareQmSAAuth}, {IDS_COL_QM_SA_CONF, CompareQmSAConf}, {IDS_COL_QM_SA_INTEGRITY, CompareQmSAIntegrity}, {IDS_COL_QM_SA_SRC, CompareQmSASrc}, {IDS_COL_QM_SA_DEST, CompareQmSADest}, {IDS_COL_QM_SA_PROT, CompareQmSAProtocol}, {IDS_COL_QM_SA_SRC_PORT, CompareQmSASrcPort}, {IDS_COL_QM_SA_DES_PORT, CompareQmSADestPort}, {IDS_COL_QM_SA_MY_TNL, CompareQmSAMyTnlEp}, {IDS_COL_QM_SA_PEER_TNL, CompareQmSAPeerTnlEp}, {INDEX_TYPE_DEFAULT, NULL} //NULL means do nothing during sort
};
CColumnIndex::CColumnIndex(DWORD dwIndexType, PCOMPARE_FUNCTION pfnCompare) : CIndexArray(), m_dwIndexType(dwIndexType), m_pfnCompare(pfnCompare), m_dwSortOption(SORT_ASCENDING) { }
HRESULT CColumnIndex::Sort() { if (NULL != m_pfnCompare) { qsort(GetData(), (size_t)GetSize(), sizeof(void *), m_pfnCompare); }
return S_OK; }
void* CColumnIndex::GetIndexedItem(int nIndex) { return ((m_dwSortOption & SORT_ASCENDING)) ? GetAt(GetSize() - nIndex -1) : GetAt(nIndex); }
CIndexManager::CIndexManager() : m_DefaultIndex(INDEX_TYPE_DEFAULT, NULL), //NULL means do nothing during sort
m_posCurrentIndex(NULL) { }
CIndexManager::~CIndexManager() { Reset(); }
void CIndexManager::Reset() { while (m_listIndicies.GetCount() > 0) { delete m_listIndicies.RemoveHead(); }
m_posCurrentIndex = NULL;
m_DefaultIndex.RemoveAll(); }
int CIndexManager::AddItem(void *pItem) { return (int)m_DefaultIndex.Add(pItem); }
void * CIndexManager::GetItemData(int nIndex) { CColumnIndex * pIndex = NULL;
if (NULL == m_posCurrentIndex) { //use the default index
pIndex = &m_DefaultIndex; } else { pIndex = m_listIndicies.GetAt(m_posCurrentIndex); }
Assert(pIndex);
if (nIndex < pIndex->GetSize() && nIndex >= 0) { return pIndex->GetIndexedItem(nIndex); } else { Panic0("We dont have that index!"); return NULL; }
}
DWORD CIndexManager::GetCurrentIndexType() { DWORD dwIndexType; if (m_posCurrentIndex) { CColumnIndex * pIndex = m_listIndicies.GetAt(m_posCurrentIndex); dwIndexType = pIndex->GetType(); } else { dwIndexType = m_DefaultIndex.GetType(); }
return dwIndexType; }
DWORD CIndexManager::GetCurrentSortOption() { DWORD dwSortOption; if (m_posCurrentIndex) { CColumnIndex * pIndex = m_listIndicies.GetAt(m_posCurrentIndex); dwSortOption = pIndex->GetSortOption(); } else { dwSortOption = m_DefaultIndex.GetSortOption(); }
return dwSortOption; }
HRESULT CIndexMgrFilter::SortFilters( DWORD dwSortType, DWORD dwSortOptions ) { HRESULT hr = hrOK;
POSITION posLast; POSITION pos; DWORD dwIndexType; pos = m_listIndicies.GetHeadPosition(); while (pos) { posLast = pos; CColumnIndex * pIndex = m_listIndicies.GetNext(pos);
dwIndexType = pIndex->GetType();
// the index for this type already exists, just sort accordingly
if (dwIndexType == dwSortType) { pIndex->SetSortOption(dwSortOptions);
m_posCurrentIndex = posLast; return hrOK; } }
// if not, create one
CColumnIndex * pNewIndex = NULL; for (int i = 0; i < DimensionOf(TypeProcQmFilter); i++) { if (TypeProcQmFilter[i].dwType == dwSortType) { pNewIndex = new CColumnIndex(dwSortType, TypeProcQmFilter[i].pCompareProc); break; } }
Assert(pNewIndex); if (NULL == pNewIndex) { return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); }
// copy the array from the original index
pNewIndex->Copy(m_DefaultIndex);
pNewIndex->SetSortOption(dwSortOptions); pNewIndex->Sort();
m_posCurrentIndex = m_listIndicies.AddTail(pNewIndex);
return hr; }
HRESULT CIndexMgrMmFilter::SortMmFilters( DWORD dwSortType, DWORD dwSortOptions ) { HRESULT hr = hrOK;
POSITION posLast; POSITION pos; DWORD dwIndexType; pos = m_listIndicies.GetHeadPosition(); while (pos) { posLast = pos; CColumnIndex * pIndex = m_listIndicies.GetNext(pos);
dwIndexType = pIndex->GetType();
// the index for this type already exists, just sort accordingly
if (dwIndexType == dwSortType) { pIndex->SetSortOption(dwSortOptions);
m_posCurrentIndex = posLast; return hrOK; } }
// if not, create one
CColumnIndex * pNewIndex = NULL; for (int i = 0; i < DimensionOf(TypeProcMmFilter); i++) { if (TypeProcMmFilter[i].dwType == dwSortType) { pNewIndex = new CColumnIndex(dwSortType, TypeProcMmFilter[i].pCompareProc); break; } }
Assert(pNewIndex);
if (NULL == pNewIndex) { return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); }
// copy the array from the original index
pNewIndex->Copy(m_DefaultIndex);
pNewIndex->SetSortOption(dwSortOptions); pNewIndex->Sort();
m_posCurrentIndex = m_listIndicies.AddTail(pNewIndex);
return hr; }
HRESULT CIndexMgrMmPolicy::Sort( DWORD dwSortType, DWORD dwSortOptions ) { HRESULT hr = hrOK;
POSITION posLast; POSITION pos; DWORD dwIndexType; pos = m_listIndicies.GetHeadPosition(); while (pos) { posLast = pos; CColumnIndex * pIndex = m_listIndicies.GetNext(pos);
dwIndexType = pIndex->GetType();
// the index for this type already exists, just sort accordingly
if (dwIndexType == dwSortType) { pIndex->SetSortOption(dwSortOptions);
m_posCurrentIndex = posLast; return hrOK; } }
// if not, create one
CColumnIndex * pNewIndex = NULL; for (int i = 0; i < DimensionOf(TypeProcMmPolicy); i++) { if (TypeProcMmPolicy[i].dwType == dwSortType) { pNewIndex = new CColumnIndex(dwSortType, TypeProcMmPolicy[i].pCompareProc); break; } }
Assert(pNewIndex);
if (NULL == pNewIndex) { return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); }
// copy the array from the original index
pNewIndex->Copy(m_DefaultIndex);
pNewIndex->SetSortOption(dwSortOptions); pNewIndex->Sort();
m_posCurrentIndex = m_listIndicies.AddTail(pNewIndex);
return hr; }
HRESULT CIndexMgrQmPolicy::Sort( DWORD dwSortType, DWORD dwSortOptions ) { HRESULT hr = hrOK;
POSITION posLast; POSITION pos; DWORD dwIndexType; pos = m_listIndicies.GetHeadPosition(); while (pos) { posLast = pos; CColumnIndex * pIndex = m_listIndicies.GetNext(pos);
dwIndexType = pIndex->GetType();
// the index for this type already exists, just sort accordingly
if (dwIndexType == dwSortType) { pIndex->SetSortOption(dwSortOptions);
m_posCurrentIndex = posLast; return hrOK; } }
// if not, create one
CColumnIndex * pNewIndex = NULL; for (int i = 0; i < DimensionOf(TypeProcQmPolicy); i++) { if (TypeProcQmPolicy[i].dwType == dwSortType) { pNewIndex = new CColumnIndex(dwSortType, TypeProcQmPolicy[i].pCompareProc); break; } }
Assert(pNewIndex);
if (NULL == pNewIndex) { return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); }
// copy the array from the original index
pNewIndex->Copy(m_DefaultIndex);
pNewIndex->SetSortOption(dwSortOptions); pNewIndex->Sort();
m_posCurrentIndex = m_listIndicies.AddTail(pNewIndex);
return hr; }
HRESULT CIndexMgrMmSA::Sort( DWORD dwSortType, DWORD dwSortOptions ) { HRESULT hr = hrOK;
POSITION posLast; POSITION pos; DWORD dwIndexType; pos = m_listIndicies.GetHeadPosition(); while (pos) { posLast = pos; CColumnIndex * pIndex = m_listIndicies.GetNext(pos);
dwIndexType = pIndex->GetType();
// the index for this type already exists, just sort accordingly
if (dwIndexType == dwSortType) { pIndex->SetSortOption(dwSortOptions);
m_posCurrentIndex = posLast; return hrOK; } }
// if not, create one
CColumnIndex * pNewIndex = NULL; for (int i = 0; i < DimensionOf(TypeProcMmSA); i++) { if (TypeProcMmSA[i].dwType == dwSortType) { pNewIndex = new CColumnIndex(dwSortType, TypeProcMmSA[i].pCompareProc); break; } }
Assert(pNewIndex);
if (NULL == pNewIndex) { return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); }
// copy the array from the original index
pNewIndex->Copy(m_DefaultIndex);
pNewIndex->SetSortOption(dwSortOptions); pNewIndex->Sort();
m_posCurrentIndex = m_listIndicies.AddTail(pNewIndex);
return hr; }
HRESULT CIndexMgrQmSA::Sort( DWORD dwSortType, DWORD dwSortOptions ) {
HRESULT hr = hrOK;
POSITION posLast; POSITION pos; DWORD dwIndexType; pos = m_listIndicies.GetHeadPosition(); while (pos) { posLast = pos; CColumnIndex * pIndex = m_listIndicies.GetNext(pos);
dwIndexType = pIndex->GetType();
// the index for this type already exists, just sort accordingly
if (dwIndexType == dwSortType) { pIndex->SetSortOption(dwSortOptions);
m_posCurrentIndex = posLast; return hrOK; } }
// if not, create one
CColumnIndex * pNewIndex = NULL; for (int i = 0; i < DimensionOf(TypeProcQmSA); i++) { if (TypeProcQmSA[i].dwType == dwSortType) { pNewIndex = new CColumnIndex(dwSortType, TypeProcQmSA[i].pCompareProc); break; } }
Assert(pNewIndex);
if (NULL == pNewIndex) { return HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER); }
// copy the array from the original index
pNewIndex->Copy(m_DefaultIndex);
pNewIndex->SetSortOption(dwSortOptions); pNewIndex->Sort();
m_posCurrentIndex = m_listIndicies.AddTail(pNewIndex);
return hr; }
int __cdecl CompareFilterName(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2);
return pFilter1->m_stName.CompareNoCase(pFilter2->m_stName); }
int __cdecl CompareFilterSourceAddr(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2);
CString str1; CString str2;
AddressToString(pFilter1->m_SrcAddr, &str1); AddressToString(pFilter2->m_SrcAddr, &str2); return str1.CompareNoCase(str2); }
int __cdecl CompareFilterDestAddr(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2);
CString str1; CString str2;
AddressToString(pFilter1->m_DesAddr, &str1); AddressToString(pFilter2->m_DesAddr, &str2); return str1.CompareNoCase(str2); }
int __cdecl CompareFilterSrcPort(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2);
return (int)pFilter1->m_SrcPort.wPort - (int)pFilter2->m_SrcPort.wPort; }
int __cdecl CompareFilterDestPort(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2);
return (int)pFilter1->m_DesPort.wPort - (int)pFilter2->m_DesPort.wPort; }
int __cdecl CompareFilterSrcTnl(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2);
CString str1; CString str2;
TnlEpToString(pFilter1->m_FilterType, pFilter1->m_MyTnlAddr, &str1); TnlEpToString(pFilter2->m_FilterType, pFilter2->m_MyTnlAddr, &str2);
return str1.CompareNoCase(str2); }
int __cdecl CompareFilterDestTnl(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2);
CString str1; CString str2;
TnlEpToString(pFilter1->m_FilterType, pFilter1->m_PeerTnlAddr, &str1); TnlEpToString(pFilter2->m_FilterType, pFilter2->m_PeerTnlAddr, &str2);
return str1.CompareNoCase(str2); }
int __cdecl CompareFilterProtocol(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2); CString st1; CString st2;
ProtocolToString(pFilter1->m_Protocol, &st1); ProtocolToString(pFilter2->m_Protocol, &st2); return st1.CompareNoCase(st2); }
int __cdecl CompareFilterDirection(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2);
CString st1; CString st2; DirectionToString(pFilter1->m_dwDirection, &st1); DirectionToString(pFilter2->m_dwDirection, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareFilterPolicyName(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2); return pFilter1->m_stPolicyName.CompareNoCase(pFilter2->m_stPolicyName); }
int __cdecl CompareFilterIfType(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2); CString st1; CString st2;
InterfaceTypeToString(pFilter1->m_InterfaceType, &st1); InterfaceTypeToString(pFilter2->m_InterfaceType, &st2); return st1.CompareNoCase(st2); }
int __cdecl CompareFilterOutboundFlag(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2); CString st1; CString st2;
FilterFlagToString(pFilter1->m_OutboundFilterAction, &st1); FilterFlagToString(pFilter2->m_OutboundFilterAction, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareFilterInboundFlag(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2); CString st1; CString st2;
FilterFlagToString(pFilter1->m_InboundFilterAction, &st1); FilterFlagToString(pFilter2->m_InboundFilterAction, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareFilterFlag(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2); CString st1; CString st2;
FilterFlagToString( (FILTER_DIRECTION_INBOUND == pFilter1->m_dwDirection) ? pFilter1->m_InboundFilterAction : pFilter1->m_OutboundFilterAction, &st1 );
FilterFlagToString( (FILTER_DIRECTION_INBOUND == pFilter2->m_dwDirection) ? pFilter2->m_InboundFilterAction : pFilter2->m_OutboundFilterAction, &st2 );
return st1.CompareNoCase(st2); }
int __cdecl CompareFilterWeight(const void *elem1, const void *elem2) { CFilterInfo *pFilter1; CFilterInfo *pFilter2; pFilter1 = *((CFilterInfo**)elem1); pFilter2 = *((CFilterInfo**)elem2);
return (int)pFilter1->m_dwWeight - (int)pFilter2->m_dwWeight; }
int __cdecl CompareMmFilterName(const void *elem1, const void *elem2) { CMmFilterInfo *pFilter1; CMmFilterInfo *pFilter2; pFilter1 = *((CMmFilterInfo**)elem1); pFilter2 = *((CMmFilterInfo**)elem2);
return pFilter1->m_stName.CompareNoCase(pFilter2->m_stName); }
int __cdecl CompareMmFilterSourceAddr(const void *elem1, const void *elem2) { CMmFilterInfo *pFilter1; CMmFilterInfo *pFilter2; pFilter1 = *((CMmFilterInfo**)elem1); pFilter2 = *((CMmFilterInfo**)elem2);
CString str1; CString str2;
AddressToString(pFilter1->m_SrcAddr, &str1); AddressToString(pFilter2->m_SrcAddr, &str2); return str1.CompareNoCase(str2); }
int __cdecl CompareMmFilterDestAddr(const void *elem1, const void *elem2) { CMmFilterInfo *pFilter1; CMmFilterInfo *pFilter2; pFilter1 = *((CMmFilterInfo**)elem1); pFilter2 = *((CMmFilterInfo**)elem2);
CString str1; CString str2;
AddressToString(pFilter1->m_DesAddr, &str1); AddressToString(pFilter2->m_DesAddr, &str2); return str1.CompareNoCase(str2); }
int __cdecl CompareMmFilterDirection(const void *elem1, const void *elem2) { CMmFilterInfo *pFilter1; CMmFilterInfo *pFilter2; pFilter1 = *((CMmFilterInfo**)elem1); pFilter2 = *((CMmFilterInfo**)elem2);
CString st1; CString st2;
DirectionToString(pFilter1->m_dwDirection, &st1); DirectionToString(pFilter2->m_dwDirection, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareMmFilterWeight(const void *elem1, const void *elem2) { CMmFilterInfo *pFilter1; CMmFilterInfo *pFilter2; pFilter1 = *((CMmFilterInfo**)elem1); pFilter2 = *((CMmFilterInfo**)elem2);
return (int)pFilter1->m_dwWeight - (int)pFilter2->m_dwWeight; }
int __cdecl CompareMmFilterPolicyName(const void *elem1, const void *elem2) { CMmFilterInfo *pFilter1; CMmFilterInfo *pFilter2; pFilter1 = *((CMmFilterInfo**)elem1); pFilter2 = *((CMmFilterInfo**)elem2);
return pFilter1->m_stPolicyName.CompareNoCase(pFilter2->m_stPolicyName); }
int __cdecl CompareMmFilterAuth(const void *elem1, const void *elem2) { CMmFilterInfo *pFilter1; CMmFilterInfo *pFilter2; pFilter1 = *((CMmFilterInfo**)elem1); pFilter2 = *((CMmFilterInfo**)elem2);
return pFilter1->m_stAuthDescription.CompareNoCase(pFilter2->m_stAuthDescription); }
int __cdecl CompareMmFilterIfType(const void *elem1, const void *elem2) { CMmFilterInfo *pFilter1; CMmFilterInfo *pFilter2; pFilter1 = *((CMmFilterInfo**)elem1); pFilter2 = *((CMmFilterInfo**)elem2); CString str1; CString str2;
InterfaceTypeToString(pFilter1->m_InterfaceType, &str1); InterfaceTypeToString(pFilter2->m_InterfaceType, &str2);
return str1.CompareNoCase(str2); }
int __cdecl CompareMmPolicyName(const void *elem1, const void *elem2) { CMmPolicyInfo * pPolicy1; CMmPolicyInfo * pPolicy2;
pPolicy1 = *((CMmPolicyInfo**)elem1); pPolicy2 = *((CMmPolicyInfo**)elem2);
return pPolicy1->m_stName.CompareNoCase(pPolicy2->m_stName); }
int __cdecl CompareMmPolicyOfferNumber(const void *elem1, const void *elem2) { CMmPolicyInfo * pPolicy1; CMmPolicyInfo * pPolicy2;
pPolicy1 = *((CMmPolicyInfo**)elem1); pPolicy2 = *((CMmPolicyInfo**)elem2);
return pPolicy1->m_dwOfferCount - pPolicy2->m_dwOfferCount; }
int __cdecl CompareQmPolicyName(const void *elem1, const void *elem2) { CQmPolicyInfo * pPolicy1; CQmPolicyInfo * pPolicy2;
pPolicy1 = *((CQmPolicyInfo**)elem1); pPolicy2 = *((CQmPolicyInfo**)elem2);
return pPolicy1->m_stName.CompareNoCase(pPolicy2->m_stName); }
int __cdecl CompareQmPolicyOfferNumber(const void *elem1, const void *elem2) { CQmPolicyInfo * pPolicy1; CQmPolicyInfo * pPolicy2;
pPolicy1 = *((CQmPolicyInfo**)elem1); pPolicy2 = *((CQmPolicyInfo**)elem2);
return (int)(pPolicy1->m_arrOffers.GetSize() - pPolicy2->m_arrOffers.GetSize()); }
int __cdecl CompareMmSAMeAddr(const void *elem1, const void *elem2) { CMmSA * pSA1; CMmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CMmSA**)elem1); pSA2 = *((CMmSA**)elem2);
AddressToString(pSA1->m_MeAddr, &st1); AddressToString(pSA2->m_MeAddr, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareMmSAPeerAddr(const void *elem1, const void *elem2) { CMmSA * pSA1; CMmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CMmSA**)elem1); pSA2 = *((CMmSA**)elem2);
AddressToString(pSA1->m_PeerAddr, &st1); AddressToString(pSA2->m_PeerAddr, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareMmSAAuth(const void *elem1, const void *elem2) { CMmSA * pSA1; CMmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CMmSA**)elem1); pSA2 = *((CMmSA**)elem2);
MmAuthToString(pSA1->m_Auth, &st1); MmAuthToString(pSA2->m_Auth, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareMmSAEncryption(const void *elem1, const void *elem2) { CMmSA * pSA1; CMmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CMmSA**)elem1); pSA2 = *((CMmSA**)elem2);
DoiEspAlgorithmToString(pSA1->m_SelectedOffer.m_EncryptionAlgorithm, &st1); DoiEspAlgorithmToString(pSA2->m_SelectedOffer.m_EncryptionAlgorithm, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareMmSAIntegrity(const void *elem1, const void *elem2) { CMmSA * pSA1; CMmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CMmSA**)elem1); pSA2 = *((CMmSA**)elem2);
DoiAuthAlgorithmToString(pSA1->m_SelectedOffer.m_HashingAlgorithm, &st1); DoiAuthAlgorithmToString(pSA2->m_SelectedOffer.m_HashingAlgorithm, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareMmSADhGroup(const void *elem1, const void *elem2) { CMmSA * pSA1; CMmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CMmSA**)elem1); pSA2 = *((CMmSA**)elem2);
DhGroupToString(pSA1->m_SelectedOffer.m_dwDHGroup, &st1); DhGroupToString(pSA2->m_SelectedOffer.m_dwDHGroup, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSAPolicyName(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
return pSA1->m_stPolicyName.CompareNoCase(pSA2->m_stPolicyName); }
int __cdecl CompareQmSAAuth(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
QmAlgorithmToString(QM_ALGO_AUTH, &pSA1->m_SelectedOffer, &st1); QmAlgorithmToString(QM_ALGO_AUTH, &pSA2->m_SelectedOffer, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSAConf(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
QmAlgorithmToString(QM_ALGO_ESP_CONF, &pSA1->m_SelectedOffer, &st1); QmAlgorithmToString(QM_ALGO_ESP_CONF, &pSA2->m_SelectedOffer, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSAIntegrity(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
QmAlgorithmToString(QM_ALGO_ESP_INTEG, &pSA1->m_SelectedOffer, &st1); QmAlgorithmToString(QM_ALGO_ESP_INTEG, &pSA2->m_SelectedOffer, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSASrc(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
AddressToString(pSA1->m_QmDriverFilter.m_SrcAddr, &st1); AddressToString(pSA2->m_QmDriverFilter.m_SrcAddr, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSADest(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
AddressToString(pSA1->m_QmDriverFilter.m_DesAddr, &st1); AddressToString(pSA2->m_QmDriverFilter.m_DesAddr, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSAProtocol(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
ProtocolToString(pSA1->m_QmDriverFilter.m_Protocol, &st1); ProtocolToString(pSA2->m_QmDriverFilter.m_Protocol, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSASrcPort(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
PortToString(pSA1->m_QmDriverFilter.m_SrcPort, &st1); PortToString(pSA2->m_QmDriverFilter.m_SrcPort, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSADestPort(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
PortToString(pSA1->m_QmDriverFilter.m_DesPort, &st1); PortToString(pSA2->m_QmDriverFilter.m_DesPort, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSAMyTnlEp(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
TnlEpToString(pSA1->m_QmDriverFilter.m_Type, pSA1->m_QmDriverFilter.m_MyTunnelEndpt, &st1); TnlEpToString(pSA2->m_QmDriverFilter.m_Type, pSA2->m_QmDriverFilter.m_MyTunnelEndpt, &st2);
return st1.CompareNoCase(st2); }
int __cdecl CompareQmSAPeerTnlEp(const void *elem1, const void *elem2) { CQmSA * pSA1; CQmSA * pSA2;
CString st1; CString st2;
pSA1 = *((CQmSA**)elem1); pSA2 = *((CQmSA**)elem2);
TnlEpToString(pSA1->m_QmDriverFilter.m_Type, pSA1->m_QmDriverFilter.m_PeerTunnelEndpt, &st1); TnlEpToString(pSA2->m_QmDriverFilter.m_Type, pSA2->m_QmDriverFilter.m_PeerTunnelEndpt, &st2); return st1.CompareNoCase(st2); }
|