mirror of https://github.com/tongzx/nt5src
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.
1849 lines
44 KiB
1849 lines
44 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1998 - 1999
|
|
//
|
|
// File: pgpolicy.cpp
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
// pgpolicy.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include <objsel.h>
|
|
#include "helper.h"
|
|
#include "acsadmin.h"
|
|
#include "acsdata.h"
|
|
#include "acshand.h"
|
|
#include "pgpolicy.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
void CACSPolicyPageManager::SetPolicyData(CACSPolicyElement* pPolicy, CACSPolicyHandle* pHandle)
|
|
{
|
|
ASSERT(pPolicy && pHandle);
|
|
m_spPolicy = pPolicy;
|
|
m_pHandle = pHandle;
|
|
if(pHandle)
|
|
pHandle->AddRef();
|
|
}
|
|
CACSPolicyPageManager::~CACSPolicyPageManager()
|
|
{
|
|
m_spPolicy.Release();
|
|
if(m_pHandle)
|
|
m_pHandle->Release();
|
|
}
|
|
|
|
BOOL CACSPolicyPageManager::OnApply()
|
|
{
|
|
if(CPageManager::OnApply())
|
|
{
|
|
HRESULT hr = S_OK;
|
|
ASSERT((CACSPolicyElement*)m_spPolicy);
|
|
|
|
// check if data is valid ... // to verify cross page data
|
|
UserPolicyType PolicyType = UNDEFINED;
|
|
|
|
if ((m_nBranchFlag & BRANCH_FLAG_GLOBAL) != 0) // may need to alter the text
|
|
{
|
|
ASSERT(m_pGeneralPage);
|
|
|
|
if(m_pGeneralPage->IfAnyAuth())
|
|
{
|
|
PolicyType = GLOBAL_ANY_AUTHENTICATED;
|
|
}
|
|
else if (m_pGeneralPage->IfAnyUnauth())
|
|
{
|
|
PolicyType = GLOBAL_ANY_UNAUTHENTICATED;
|
|
}
|
|
}
|
|
|
|
|
|
UINT ErrorId = m_spPolicy->PreSaveVerifyData(GetFlags(), PolicyType);
|
|
|
|
if(ErrorId != 0) // not valid
|
|
{
|
|
// Display error message,
|
|
AfxMessageBox(ErrorId);
|
|
|
|
// Return FALSE
|
|
return FALSE;
|
|
}
|
|
|
|
// persist the data into DS
|
|
|
|
hr = m_spPolicy->Save(GetFlags());
|
|
|
|
{
|
|
CWaitCursor wc;
|
|
|
|
Sleep(1000);
|
|
}
|
|
|
|
// modifies the state info on UI ( may change states of other conflicted ones
|
|
m_spPolicy->InvalidateConflictState();
|
|
|
|
// inform container to check conflict
|
|
|
|
if FAILED(hr)
|
|
ReportError(hr, IDS_ERR_SAVESUBNETCONFIG, NULL);
|
|
else
|
|
{
|
|
AfxMessageBox(IDS_WRN_POLICY_EFFECTIVE_FROM_NEXT_RSVP);
|
|
m_pHandle->UpdateStrings();
|
|
m_pHandle->OnPropertyPageApply();
|
|
// Advise super class that the apply button has been activated.
|
|
CPageManager::OnApply();
|
|
}
|
|
ClearFlags();
|
|
|
|
MMCNotify();
|
|
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPgPolicyGeneral property page
|
|
|
|
IMPLEMENT_DYNCREATE(CPgPolicyGeneral, CACSPage)
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPgTraffic message handlers
|
|
enum DirectionIndex
|
|
{
|
|
DIRECTION_SEND,
|
|
DIRECTION_RECEIVE,
|
|
DIRECTION_SENDRECEIVE
|
|
};
|
|
|
|
enum ServiceTypeIndex
|
|
{
|
|
SERVICETYPE_ALL,
|
|
SERVICETYPE_CONTROLLEDLOAD,
|
|
SERVICETYPE_GUARANTEEDSERVICE,
|
|
SERVICETYPE_DISABLED
|
|
};
|
|
|
|
enum IdentityTypeIndex
|
|
{
|
|
IDENTITYTYPE_DEFAULT,
|
|
IDENTITYTYPE_UNKNOWN,
|
|
IDENTITYTYPE_USER,
|
|
IDENTITYTYPE_OU
|
|
};
|
|
|
|
CPgPolicyGeneral::CPgPolicyGeneral() : CACSPage(CPgPolicyGeneral::IDD)
|
|
{
|
|
DataInit();
|
|
}
|
|
|
|
CPgPolicyGeneral::CPgPolicyGeneral(CACSPolicyElement* pData) : CACSPage(CPgPolicyGeneral::IDD)
|
|
{
|
|
ASSERT(pData);
|
|
m_spData = pData;
|
|
DataInit();
|
|
}
|
|
|
|
|
|
void CPgPolicyGeneral::DataInit()
|
|
{
|
|
//{{AFX_DATA_INIT(CPgPolicyGeneral)
|
|
m_strOU = _T("");
|
|
m_strUser = _T("");
|
|
m_nIdentityChoice = -1;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CPgPolicyGeneral::~CPgPolicyGeneral()
|
|
{
|
|
delete m_pDirection;
|
|
delete m_pServiceType;
|
|
m_aServiceTypes.DeleteAll();
|
|
m_aDirections.DeleteAll();
|
|
}
|
|
|
|
void CPgPolicyGeneral::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CACSPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPgPolicyGeneral)
|
|
DDX_Control(pDX, IDC_POLICY_GEN_BROWSEUSER, m_buttonUser);
|
|
DDX_Control(pDX, IDC_POLICY_GEN_BROWSEOU, m_buttonOU);
|
|
DDX_Control(pDX, IDC_POLICY_GEN_EDIT_USER, m_editUser);
|
|
DDX_Control(pDX, IDC_POLICY_GEN_EDIT_OU, m_editOU);
|
|
DDX_Text(pDX, IDC_POLICY_GEN_EDIT_OU, m_strOU);
|
|
DDX_Text(pDX, IDC_POLICY_GEN_EDIT_USER, m_strUser);
|
|
DDX_Radio(pDX, IDC_POLICY_GEN_DEFAULTUSER, m_nIdentityChoice);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPgPolicyGeneral, CACSPage)
|
|
//{{AFX_MSG_MAP(CPgPolicyGeneral)
|
|
ON_BN_CLICKED(IDC_POLICY_GEN_BROWSEOU, OnBrowseOU)
|
|
ON_BN_CLICKED(IDC_POLICY_GEN_BROWSEUSER, OnBrowseUser)
|
|
ON_BN_CLICKED(IDC_POLICY_GEN_UNKNOWNUSER, OnUnknownuser)
|
|
ON_BN_CLICKED(IDC_POLICY_GEN_DEFAULTUSER, OnDefaultuser)
|
|
ON_BN_CLICKED(IDC_POLICY_GEN_RADIO_OU, OnRadioOu)
|
|
ON_BN_CLICKED(IDC_POLICY_GEN_RADIO_USER, OnRadioUser)
|
|
ON_EN_CHANGE(IDC_POLICY_GEN_EDIT_OU, OnChangeEditOu)
|
|
ON_EN_CHANGE(IDC_POLICY_GEN_EDIT_USER, OnChangeEditUser)
|
|
ON_CBN_SELCHANGE(IDC_POLICY_GEN_SERVICELEVEL, OnSelchangeServicelevel)
|
|
ON_CBN_SELCHANGE(IDC_POLICY_GEN_DIRECTION, OnSelchangeDirection)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPgPolicyGeneral message handlers
|
|
void CPgPolicyGeneral::OnBrowseOU()
|
|
{
|
|
TCHAR szRoot[MAX_PATH] = TEXT("");
|
|
TCHAR szBuffer[MAX_PATH] = TEXT("");;
|
|
DSBROWSEINFO dsbi = { 0 };
|
|
CString strTemp;
|
|
|
|
strTemp.LoadString(IDS_BROWSEOU_TITLE);
|
|
// initialize the structure (its already NULL)
|
|
|
|
dsbi.cbStruct = sizeof(dsbi);
|
|
dsbi.hwndOwner = GetSafeHwnd();
|
|
dsbi.pszTitle = strTemp;
|
|
dsbi.pszRoot = NULL;
|
|
dsbi.pszPath = szBuffer;
|
|
dsbi.cchPath = sizeof(szBuffer) / sizeof(TCHAR);
|
|
dsbi.dwFlags = 0;
|
|
dsbi.pfnCallback = NULL;
|
|
dsbi.lParam = (LPARAM)0;
|
|
|
|
dsbi.dwFlags |= DSBI_ENTIREDIRECTORY;
|
|
|
|
|
|
UINT idResult = DsBrowseForContainer(&dsbi);
|
|
|
|
if ( idResult != IDOK )
|
|
return;
|
|
|
|
m_strOU = szBuffer;
|
|
IADs* pADs = NULL;
|
|
VARIANT v;
|
|
VariantInit(&v);
|
|
if(m_strOU.GetLength())
|
|
{
|
|
m_strOU = _T("");
|
|
CHECK_HR(ADsOpenObject(szBuffer, NULL, NULL, ADS_SECURE_AUTHENTICATION | ADS_USE_SIGNING | ADS_USE_SEALING, IID_IADs, (void**)&pADs));
|
|
ASSERT(pADs);
|
|
CHECK_HR(pADs->Get(L"distinguishedName", &v));
|
|
m_strOU = V_BSTR(&v);
|
|
m_editOU.SetWindowText(m_strOU);
|
|
}
|
|
|
|
L_ERR:
|
|
VariantClear(&v);
|
|
if(pADs)
|
|
{
|
|
pADs->Release();
|
|
pADs = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Function: InitObjectPickerForGroups
|
|
//
|
|
// Synopsis: Call IDsObjectPicker::Initialize with arguments that will
|
|
// set it to allow the user to pick one or more groups.
|
|
//
|
|
// Arguments: [pDsObjectPicker] - object picker interface instance
|
|
//
|
|
// Returns: Result of calling IDsObjectPicker::Initialize.
|
|
//
|
|
// History: 10-14-1998 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
HRESULT
|
|
InitObjectPickerForGroups(IDsObjectPicker *pDsObjectPicker, BOOL fMultiselect)
|
|
{
|
|
//
|
|
// Prepare to initialize the object picker.
|
|
// Set up the array of scope initializer structures.
|
|
//
|
|
|
|
static const int SCOPE_INIT_COUNT = 1;
|
|
DSOP_SCOPE_INIT_INFO aScopeInit[SCOPE_INIT_COUNT];
|
|
|
|
ZeroMemory(aScopeInit, sizeof(DSOP_SCOPE_INIT_INFO) * SCOPE_INIT_COUNT);
|
|
|
|
//
|
|
// Target computer scope. This adds a "Look In" entry for the
|
|
// target computer. Computer scopes are always treated as
|
|
// downlevel (i.e., they use the WinNT provider).
|
|
//
|
|
|
|
aScopeInit[0].cbSize = sizeof(DSOP_SCOPE_INIT_INFO);
|
|
aScopeInit[0].flType = DSOP_SCOPE_TYPE_ENTERPRISE_DOMAIN | DSOP_SCOPE_TYPE_GLOBAL_CATALOG;
|
|
aScopeInit[0].flScope = DSOP_SCOPE_FLAG_STARTING_SCOPE;
|
|
aScopeInit[0].FilterFlags.flDownlevel = DSOP_DOWNLEVEL_FILTER_USERS;
|
|
aScopeInit[0].FilterFlags.Uplevel.flBothModes = DSOP_FILTER_USERS;
|
|
|
|
DSOP_INIT_INFO InitInfo;
|
|
ZeroMemory(&InitInfo, sizeof(InitInfo));
|
|
|
|
InitInfo.cbSize = sizeof(InitInfo);
|
|
|
|
//
|
|
// The pwzTargetComputer member allows the object picker to be
|
|
// retargetted to a different computer. It will behave as if it
|
|
// were being run ON THAT COMPUTER.
|
|
//
|
|
|
|
InitInfo.pwzTargetComputer = NULL; // NULL == local machine
|
|
InitInfo.cDsScopeInfos = SCOPE_INIT_COUNT;
|
|
InitInfo.aDsScopeInfos = aScopeInit;
|
|
InitInfo.flOptions = (fMultiselect) ? DSOP_FLAG_MULTISELECT : 0;
|
|
|
|
LPCTSTR attrs[] = {_T("distinguishedName")};
|
|
|
|
InitInfo.cAttributesToFetch = 1;
|
|
InitInfo.apwzAttributeNames = attrs;
|
|
|
|
|
|
//
|
|
// Note object picker makes its own copy of InitInfo. Also note
|
|
// that Initialize may be called multiple times, last call wins.
|
|
//
|
|
|
|
HRESULT hr = pDsObjectPicker->Initialize(&InitInfo);
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
ULONG i;
|
|
|
|
for (i = 0; i < SCOPE_INIT_COUNT; i++)
|
|
{
|
|
if (FAILED(InitInfo.aDsScopeInfos[i].hr))
|
|
{
|
|
printf("Initialization failed because of scope %u\n", i);
|
|
}
|
|
}
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
#define BREAK_ON_FAIL_HRESULT(hr) \
|
|
if (FAILED(hr)) { printf("line %u err 0x%x\n", __LINE__, hr); break; }
|
|
|
|
|
|
void CPgPolicyGeneral::OnBrowseUser()
|
|
{
|
|
HRESULT hr = S_OK;
|
|
IDsObjectPicker * pDsObjectPicker = NULL;
|
|
IDataObject * pdo = NULL;
|
|
BOOL fSuccess = TRUE;
|
|
|
|
hr = CoInitialize(NULL);
|
|
if(FAILED(hr))
|
|
return ;
|
|
|
|
do
|
|
{
|
|
//
|
|
// Create an instance of the object picker. The implementation in
|
|
// objsel.dll is apartment model.
|
|
//
|
|
hr = CoCreateInstance(CLSID_DsObjectPicker,
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
IID_IDsObjectPicker,
|
|
(void **) &pDsObjectPicker);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
hr = InitObjectPickerForGroups(pDsObjectPicker, FALSE);
|
|
|
|
//
|
|
// Invoke the modal dialog.
|
|
//
|
|
hr = pDsObjectPicker->InvokeDialog(this->GetSafeHwnd(), &pdo);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
//
|
|
// If the user hit Cancel, hr == S_FALSE
|
|
//
|
|
if (hr == S_FALSE)
|
|
{
|
|
Trace0("User canceled object picker dialog\n");
|
|
fSuccess = FALSE;
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Process the user's selections
|
|
//
|
|
Assert(pdo);
|
|
// ProcessSelectedObjects(pdo);
|
|
{
|
|
UINT g_cfDsObjectPicker = RegisterClipboardFormat(CFSTR_DSOP_DS_SELECTION_LIST);
|
|
|
|
|
|
STGMEDIUM stgmedium =
|
|
{
|
|
TYMED_HGLOBAL,
|
|
NULL,
|
|
NULL
|
|
};
|
|
|
|
FORMATETC formatetc =
|
|
{
|
|
(unsigned short)g_cfDsObjectPicker,
|
|
NULL,
|
|
DVASPECT_CONTENT,
|
|
-1,
|
|
TYMED_HGLOBAL
|
|
};
|
|
|
|
bool fGotStgMedium = false;
|
|
|
|
do
|
|
{
|
|
hr = pdo->GetData(&formatetc, &stgmedium);
|
|
BREAK_ON_FAIL_HRESULT(hr);
|
|
|
|
fGotStgMedium = true;
|
|
|
|
PDS_SELECTION_LIST pDsSelList =
|
|
(PDS_SELECTION_LIST) GlobalLock(stgmedium.hGlobal);
|
|
|
|
// inteprete the selection
|
|
ASSERT(pDsSelList->cItems == 1);
|
|
|
|
ASSERT(pDsSelList->aDsSelection[0].pvarFetchedAttributes[0].vt == VT_BSTR);
|
|
|
|
if(pDsSelList->aDsSelection[0].pvarFetchedAttributes[0].vt == VT_BSTR)
|
|
{
|
|
m_strUser = V_BSTR(&(pDsSelList->aDsSelection[0].pvarFetchedAttributes[0]));
|
|
// update the edit field of the property page
|
|
|
|
m_editUser.SetWindowText(m_strUser);
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
CString str;
|
|
str.LoadString(IDS_ERR_DN);
|
|
str.Format(str, pDsSelList->aDsSelection[0].pwzName);
|
|
AfxMessageBox(str, MB_OK);
|
|
}
|
|
GlobalUnlock(stgmedium.hGlobal);
|
|
} while (0);
|
|
|
|
if (fGotStgMedium)
|
|
{
|
|
ReleaseStgMedium(&stgmedium);
|
|
}
|
|
}
|
|
|
|
pdo->Release();
|
|
pdo = NULL;
|
|
|
|
} while (0);
|
|
|
|
if (pDsObjectPicker)
|
|
{
|
|
pDsObjectPicker->Release();
|
|
}
|
|
|
|
CoUninitialize();
|
|
|
|
if (FAILED(hr))
|
|
fSuccess = FALSE;
|
|
|
|
return;
|
|
}
|
|
|
|
void CPgPolicyGeneral::OnUnknownuser()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
EnableIdentityCtrls(1);
|
|
|
|
}
|
|
|
|
void CPgPolicyGeneral::OnDefaultuser()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
EnableIdentityCtrls(0);
|
|
|
|
}
|
|
|
|
void CPgPolicyGeneral::OnRadioOu()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
EnableIdentityCtrls(3);
|
|
|
|
}
|
|
|
|
void CPgPolicyGeneral::OnRadioUser()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
EnableIdentityCtrls(2);
|
|
|
|
}
|
|
|
|
void CPgPolicyGeneral::OnChangeEditOu()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CPropertyPage::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
|
|
}
|
|
|
|
void CPgPolicyGeneral::OnChangeEditUser()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CPropertyPage::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
}
|
|
|
|
void CPgPolicyGeneral::OnSelchangeServicelevel()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
}
|
|
|
|
void CPgPolicyGeneral::OnSelchangeDirection()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
|
|
}
|
|
|
|
BOOL CPgPolicyGeneral::OnKillActive( )
|
|
{
|
|
// GURANTEEDSERVICE and SEND can not be a policy
|
|
if(m_pServiceType->GetSelected() == SERVICETYPE_GUARANTEEDSERVICE && m_pDirection->GetSelected() == DIRECTION_SEND)
|
|
{
|
|
AfxMessageBox(IDS_NO_POLICY_FOR_SEND_AND_GUARANTEE, MB_OK, 0);
|
|
return FALSE;
|
|
}
|
|
|
|
return CACSPage::OnKillActive();
|
|
}
|
|
|
|
BOOL CPgPolicyGeneral::OnApply()
|
|
{
|
|
if(!GetModified()) return TRUE;
|
|
|
|
// direction
|
|
if(m_pDirection)
|
|
{
|
|
switch(m_pDirection->GetSelected())
|
|
{
|
|
case DIRECTION_SEND:
|
|
m_spData->m_dwDirection = ACS_DIRECTION_SEND;
|
|
break;
|
|
case DIRECTION_RECEIVE:
|
|
m_spData->m_dwDirection = ACS_DIRECTION_RECEIVE;
|
|
break;
|
|
case DIRECTION_SENDRECEIVE:
|
|
m_spData->m_dwDirection = ACS_DIRECTION_BOTH;
|
|
break;
|
|
default:
|
|
// no valid value should come here
|
|
ASSERT(0);
|
|
}
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_DIRECTION, true);
|
|
}
|
|
else // save what ever is loaded
|
|
{
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_DIRECTION))
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_DIRECTION, true);
|
|
else
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_DIRECTION, false);
|
|
}
|
|
|
|
// service type
|
|
if(m_pServiceType)
|
|
{
|
|
switch(m_pServiceType->GetSelected())
|
|
{
|
|
case SERVICETYPE_DISABLED:
|
|
m_spData->m_dwServiceType = ACS_SERVICETYPE_DISABLED;
|
|
break;
|
|
case SERVICETYPE_CONTROLLEDLOAD:
|
|
m_spData->m_dwServiceType = ACS_SERVICETYPE_CONTROLLEDLOAD;
|
|
break;
|
|
case SERVICETYPE_GUARANTEEDSERVICE:
|
|
m_spData->m_dwServiceType = ACS_SERVICETYPE_GUARANTEEDSERVICE;
|
|
break;
|
|
case SERVICETYPE_ALL:
|
|
m_spData->m_dwServiceType = ACS_SERVICETYPE_ALL;
|
|
break;
|
|
default:
|
|
// no valid value should come here
|
|
ASSERT(0);
|
|
}
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_SERVICETYPE, true);
|
|
}
|
|
else // save what ever is loaded
|
|
{
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_SERVICETYPE))
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_SERVICETYPE, true);
|
|
else
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_SERVICETYPE, false);
|
|
}
|
|
|
|
// GURANTEEDSERVICE and SEND can not be a policy
|
|
if(m_spData->m_dwServiceType == ACS_SERVICETYPE_GUARANTEEDSERVICE && m_spData->m_dwDirection == ACS_DIRECTION_SEND)
|
|
{
|
|
AfxMessageBox(IDS_NO_POLICY_FOR_SEND_AND_GUARANTEE, MB_OK, 0);
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
// ACS_SERVICETYPE_CONTROLLEDLOAD and SEND can not be a policy
|
|
if(m_spData->m_dwServiceType == ACS_SERVICETYPE_CONTROLLEDLOAD && m_spData->m_dwDirection == ACS_DIRECTION_SEND)
|
|
{
|
|
AfxMessageBox(IDS_NO_POLICY_FOR_SEND_AND_CONTROLLEDLOAD, MB_OK, 0);
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
// code for identity
|
|
|
|
CString* pIdentity;
|
|
if(m_spData->m_strArrayIdentityName.GetSize())
|
|
{
|
|
pIdentity = m_spData->m_strArrayIdentityName[(INT_PTR)0];
|
|
}
|
|
else
|
|
{
|
|
pIdentity = new CString();
|
|
m_spData->m_strArrayIdentityName.Add(pIdentity);
|
|
}
|
|
|
|
switch(m_nIdentityChoice)
|
|
{
|
|
case 0: // default user
|
|
*pIdentity = ACS_IDENTITY_DEFAULT;
|
|
break;
|
|
case 1: // unknown user
|
|
*pIdentity = ACS_IDENTITY_UNKNOWN;
|
|
break;
|
|
case 2: // user
|
|
*pIdentity = ACS_IDENTITY_USER;
|
|
if(m_strUser.GetLength() == 0)
|
|
{
|
|
GotoDlgCtrl(&m_editUser);
|
|
AfxMessageBox(IDS_ERR_USER_DN);
|
|
return FALSE;
|
|
}
|
|
|
|
*pIdentity += m_strUser;
|
|
break;
|
|
case 3: // OU
|
|
*pIdentity = ACS_IDENTITY_OU;
|
|
if(m_strOU.GetLength() == 0)
|
|
{
|
|
GotoDlgCtrl(&m_editOU);
|
|
AfxMessageBox(IDS_ERR_OU_DN);
|
|
return FALSE;
|
|
}
|
|
|
|
*pIdentity+= m_strOU;
|
|
break;
|
|
|
|
default:
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_IDENTITYNAME, true);
|
|
|
|
// check if conflict with other policies in the folder
|
|
if(m_spData->IsConflictInContainer())
|
|
{
|
|
if(AfxMessageBox(IDS_CONFLICTPOLICY, MB_OKCANCEL, 0) != IDOK)
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
DWORD dwAttrFlags = 0;
|
|
dwAttrFlags |= (ACS_PAF_IDENTITYNAME | ACS_PAF_SERVICETYPE | ACS_PAF_DIRECTION);
|
|
|
|
AddFlags(dwAttrFlags); // prepare flags for saving
|
|
|
|
|
|
|
|
return CACSPage::OnApply();
|
|
}
|
|
|
|
BOOL CPgPolicyGeneral::OnInitDialog()
|
|
{
|
|
CString* pStr = NULL;
|
|
bool bModified = false;
|
|
// direction
|
|
// fillin the list box
|
|
try{
|
|
|
|
pStr = new CString();
|
|
pStr->LoadString(IDS_SEND);
|
|
m_aDirections.Add(pStr);
|
|
|
|
pStr = new CString();
|
|
pStr->LoadString(IDS_RECEIVE);
|
|
m_aDirections.Add(pStr);
|
|
|
|
pStr = new CString();
|
|
pStr->LoadString(IDS_SENDRECEIVE);
|
|
m_aDirections.Add(pStr);
|
|
|
|
m_pDirection = new CStrBox<CComboBox>(this, IDC_POLICY_GEN_DIRECTION, m_aDirections);
|
|
m_pDirection->Fill();
|
|
|
|
// decide which one to select
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_DIRECTION))
|
|
{
|
|
int current = -1;
|
|
switch(m_spData->m_dwDirection)
|
|
{
|
|
case ACS_DIRECTION_SEND:
|
|
current = DIRECTION_SEND;
|
|
break;
|
|
case ACS_DIRECTION_RECEIVE:
|
|
current = DIRECTION_RECEIVE;
|
|
break;
|
|
case ACS_DIRECTION_BOTH:
|
|
current = DIRECTION_SENDRECEIVE;
|
|
break;
|
|
default:
|
|
// invalid value
|
|
ASSERT(0);
|
|
// message box
|
|
}
|
|
|
|
m_pDirection->Select(current);
|
|
}
|
|
else
|
|
{
|
|
m_pDirection->Select(DIRECTION_SENDRECEIVE); // default
|
|
}
|
|
}catch(CMemoryException&){};
|
|
|
|
// service type
|
|
try{
|
|
pStr = new CString();
|
|
pStr->LoadString(IDS_ALL);
|
|
m_aServiceTypes.Add(pStr);
|
|
|
|
pStr = new CString();
|
|
pStr->LoadString(IDS_CONTROLLEDLOAD);
|
|
m_aServiceTypes.Add(pStr);
|
|
|
|
pStr = new CString();
|
|
pStr->LoadString(IDS_GUARANTEEDSERVICE);
|
|
m_aServiceTypes.Add(pStr);
|
|
|
|
pStr = new CString();
|
|
pStr->LoadString(IDS_SERVICETYPE_DISABLED);
|
|
m_aServiceTypes.Add(pStr);
|
|
|
|
m_pServiceType = new CStrBox<CComboBox>(this, IDC_POLICY_GEN_SERVICELEVEL, m_aServiceTypes);
|
|
m_pServiceType->Fill();
|
|
|
|
// decide which one to select
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_SERVICETYPE))
|
|
{
|
|
int current = -1;
|
|
switch(m_spData->m_dwServiceType)
|
|
{
|
|
case ACS_SERVICETYPE_DISABLED:
|
|
current = SERVICETYPE_DISABLED;
|
|
break;
|
|
case ACS_SERVICETYPE_CONTROLLEDLOAD:
|
|
current = SERVICETYPE_CONTROLLEDLOAD;
|
|
break;
|
|
case ACS_SERVICETYPE_GUARANTEEDSERVICE:
|
|
current = SERVICETYPE_GUARANTEEDSERVICE;
|
|
break;
|
|
case ACS_SERVICETYPE_ALL:
|
|
current = SERVICETYPE_ALL;
|
|
break;
|
|
default:
|
|
// invalid value
|
|
ASSERT(0);
|
|
// message box
|
|
}
|
|
|
|
m_pServiceType->Select(current);
|
|
}
|
|
else
|
|
{
|
|
m_pServiceType->Select(SERVICETYPE_ALL); // default
|
|
}
|
|
}catch(CMemoryException&){};
|
|
|
|
// Identity -- user / ou
|
|
CString strIdentity;
|
|
m_nIdentityChoice = m_spData->GetIdentityType(strIdentity);
|
|
|
|
switch(m_nIdentityChoice){
|
|
case 0: // default
|
|
case 1: // unknown
|
|
break;
|
|
case 2: // user
|
|
m_strUser = strIdentity;
|
|
break;
|
|
case 3: // OU
|
|
m_strOU = strIdentity;
|
|
break;
|
|
default:
|
|
ASSERT(0);
|
|
break;
|
|
}
|
|
|
|
|
|
CACSPage::OnInitDialog();
|
|
|
|
if(bModified)
|
|
SetModified();
|
|
|
|
EnableIdentityCtrls(m_nIdentityChoice);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CPgPolicyGeneral::EnableIdentityCtrls(int nChoice)
|
|
{
|
|
|
|
switch(nChoice){
|
|
case 0: // default
|
|
case 1: // unknown
|
|
m_editUser.EnableWindow(FALSE);
|
|
m_editOU.EnableWindow(FALSE);
|
|
m_buttonUser.EnableWindow(FALSE);
|
|
m_buttonOU.EnableWindow(FALSE);
|
|
break;
|
|
case 2: // user
|
|
m_editUser.EnableWindow(TRUE);
|
|
m_buttonUser.EnableWindow(TRUE);
|
|
m_editOU.EnableWindow(FALSE);
|
|
m_buttonOU.EnableWindow(FALSE);
|
|
break;
|
|
case 3: // OU
|
|
m_editUser.EnableWindow(FALSE);
|
|
m_buttonUser.EnableWindow(FALSE);
|
|
m_editOU.EnableWindow(TRUE);
|
|
m_buttonOU.EnableWindow(TRUE);
|
|
break;
|
|
default:
|
|
m_editUser.EnableWindow(FALSE);
|
|
m_buttonUser.EnableWindow(FALSE);
|
|
m_editOU.EnableWindow(FALSE);
|
|
m_buttonOU.EnableWindow(FALSE);
|
|
}
|
|
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPgPolicyFlow property page
|
|
|
|
IMPLEMENT_DYNCREATE(CPgPolicyFlow, CACSPage)
|
|
|
|
CPgPolicyFlow::CPgPolicyFlow(CACSPolicyElement* pData) : CACSPage(CPgPolicyFlow::IDD)
|
|
{
|
|
ASSERT(pData);
|
|
m_spData = pData;
|
|
DataInit();
|
|
}
|
|
|
|
CPgPolicyFlow::CPgPolicyFlow() : CACSPage(CPgPolicyFlow::IDD)
|
|
{
|
|
}
|
|
|
|
void CPgPolicyFlow::DataInit()
|
|
{
|
|
//{{AFX_DATA_INIT(CPgPolicyFlow)
|
|
m_uDuration = 0;
|
|
m_uPeakRate = 0;
|
|
m_nDataRateChoice = -1;
|
|
m_nDurationChoice = -1;
|
|
m_nPeakRateChoice = -1;
|
|
m_uDataRate = 0;
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_nBranchFlag = 0;
|
|
m_pGeneralPage = NULL;
|
|
}
|
|
|
|
CPgPolicyFlow::~CPgPolicyFlow()
|
|
{
|
|
m_nBranchFlag = 0;
|
|
m_pGeneralPage = NULL;
|
|
}
|
|
|
|
void CPgPolicyFlow::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CACSPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPgPolicyFlow)
|
|
|
|
DDX_Control(pDX, IDC_POLICY_FLOW_PEAKDATARATE_EDIT_LIMIT, m_editPeakRate);
|
|
DDX_Control(pDX, IDC_POLICY_FLOW_DURATION_EDIT_LIMIT, m_editDuration);
|
|
DDX_Control(pDX, IDC_POLICY_FLOW_DATARATE_EDIT_LIMIT, m_editDataRate);
|
|
|
|
DDX_Radio(pDX, IDC_POLICY_FLOW_DATARATE_RES, m_nDataRateChoice);
|
|
DDX_Radio(pDX, IDC_POLICY_FLOW_DURATION_RES, m_nDurationChoice);
|
|
DDX_Radio(pDX, IDC_POLICY_FLOW_PEAKDATARATE_RES, m_nPeakRateChoice);
|
|
|
|
DDX_Text(pDX, IDC_POLICY_FLOW_DURATION_EDIT_LIMIT, m_uDuration);
|
|
if (m_nDurationChoice == 2)
|
|
DDV_MinMaxUInt(pDX, m_uDuration, 0, 71582780);
|
|
|
|
DDX_Text(pDX, IDC_POLICY_FLOW_PEAKDATARATE_EDIT_LIMIT, m_uPeakRate);
|
|
if (m_nPeakRateChoice ==2 )
|
|
DDV_MinMaxUInt(pDX, m_uPeakRate, 0, 4194300);
|
|
|
|
DDX_Text(pDX, IDC_POLICY_FLOW_DATARATE_EDIT_LIMIT, m_uDataRate);
|
|
if (m_nDataRateChoice == 2)
|
|
DDV_MinMaxUInt(pDX, m_uDataRate, 0, 4194300);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPgPolicyFlow, CACSPage)
|
|
//{{AFX_MSG_MAP(CPgPolicyFlow)
|
|
ON_BN_CLICKED(IDC_POLICY_FLOW_DATARATE_DEF, OnPolicyFlowDatarateDef)
|
|
ON_EN_CHANGE(IDC_POLICY_FLOW_DATARATE_EDIT_LIMIT, OnChangePolicyFlowDatarateEditLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_FLOW_DATARATE_RADIO_LIMIT, OnPolicyFlowDatarateRadioLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_FLOW_DATARATE_RES, OnPolicyFlowDatarateRes)
|
|
ON_BN_CLICKED(IDC_POLICY_FLOW_DURATION_DEF, OnPolicyFlowDurationDef)
|
|
ON_EN_CHANGE(IDC_POLICY_FLOW_DURATION_EDIT_LIMIT, OnChangePolicyFlowDurationEditLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_FLOW_DURATION_RADIO_LIMIT, OnPolicyFlowDurationRadioLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_FLOW_DURATION_RES, OnPolicyFlowDurationRes)
|
|
ON_BN_CLICKED(IDC_POLICY_FLOW_PEAKDATARATE_DEF, OnPolicyFlowPeakdatarateDef)
|
|
ON_EN_CHANGE(IDC_POLICY_FLOW_PEAKDATARATE_EDIT_LIMIT, OnChangePolicyFlowPeakdatarateEditLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_FLOW_PEAKDATARATE_RADIO_LIMIT, OnPolicyFlowPeakdatarateRadioLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_FLOW_PEAKDATARATE_RES, OnPolicyFlowPeakdatarateRes)
|
|
ON_WM_KILLFOCUS()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPgPolicyFlow message handlers
|
|
|
|
BOOL CPgPolicyFlow::OnInitDialog()
|
|
{
|
|
//------------------
|
|
// per flow
|
|
|
|
// data rate
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_PF_TOKENRATE))
|
|
{
|
|
if IS_LARGE_UNLIMIT(m_spData->m_ddPFTokenRate)
|
|
m_nDataRateChoice = 0;
|
|
else
|
|
{
|
|
m_nDataRateChoice = 2; // numbered limit
|
|
m_uDataRate = TOKBS(m_spData->m_ddPFTokenRate.LowPart);
|
|
}
|
|
}
|
|
else
|
|
m_nDataRateChoice = 1; // default
|
|
|
|
// Peak data rate
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_PF_PEAKBANDWIDTH))
|
|
{
|
|
if IS_LARGE_UNLIMIT(m_spData->m_ddPFPeakBandWidth)
|
|
m_nPeakRateChoice = 0;
|
|
else
|
|
{
|
|
m_nPeakRateChoice = 2; // numbered limit
|
|
m_uPeakRate = TOKBS(m_spData->m_ddPFPeakBandWidth.LowPart);
|
|
}
|
|
}
|
|
else
|
|
m_nPeakRateChoice = 1; // default
|
|
|
|
// duration
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_PF_DURATION))
|
|
{
|
|
if(m_spData->m_dwPFDuration == UNLIMIT)
|
|
m_nDurationChoice = 0;
|
|
else
|
|
{
|
|
m_nDurationChoice = 2;
|
|
m_uDuration = SEC2MIN(m_spData->m_dwPFDuration);
|
|
}
|
|
}
|
|
else
|
|
m_nDurationChoice = 1;
|
|
|
|
// ==== data exchange is done within here
|
|
CACSPage::OnInitDialog();
|
|
|
|
if(m_nDataRateChoice != 2)
|
|
m_editDataRate.EnableWindow(FALSE);
|
|
|
|
if(m_nPeakRateChoice != 2)
|
|
m_editPeakRate.EnableWindow(FALSE);
|
|
|
|
if(m_nDurationChoice != 2)
|
|
m_editDuration.EnableWindow(FALSE);
|
|
|
|
GetDlgItem(IDC_POLICY_FLOW_DATARATE_DEF)->GetWindowText(m_strDataRateDefault);
|
|
GetDlgItem(IDC_POLICY_FLOW_PEAKDATARATE_DEF)->GetWindowText(m_strPeakRateDefault);
|
|
GetDlgItem(IDC_POLICY_FLOW_DURATION_DEF)->GetWindowText(m_strDurationDefault);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
BOOL CPgPolicyFlow::OnSetActive( )
|
|
{
|
|
// change default button strings based on choice of user
|
|
CString datarateStr = m_strDataRateDefault;
|
|
CString peakrateStr = m_strPeakRateDefault;
|
|
CString durationStr = m_strDurationDefault;
|
|
|
|
if ((m_nBranchFlag & BRANCH_FLAG_GLOBAL) != 0) // may need to alter the text
|
|
{
|
|
CString tmp;
|
|
|
|
ASSERT(m_pGeneralPage);
|
|
|
|
if(m_pGeneralPage->IfAnyAuth())
|
|
{
|
|
tmp.LoadString(IDS_A_DEF_DATARATE_SUF);
|
|
datarateStr += tmp;
|
|
tmp.LoadString(IDS_A_DEF_PEAKRATE_SUF);
|
|
peakrateStr += tmp;
|
|
tmp.LoadString(IDS_A_DEF_DURATION_SUF);
|
|
durationStr += tmp;
|
|
}
|
|
else if (m_pGeneralPage->IfAnyUnauth())
|
|
{
|
|
tmp.LoadString(IDS_U_DEF_DATARATE_SUF);
|
|
datarateStr += tmp;
|
|
tmp.LoadString(IDS_U_DEF_PEAKRATE_SUF);
|
|
peakrateStr += tmp;
|
|
tmp.LoadString(IDS_U_DEF_DURATION_SUF);
|
|
durationStr += tmp;
|
|
}
|
|
}
|
|
|
|
// test if the policy is for any authentication/unauthenticaion policy in enterprise level
|
|
GetDlgItem(IDC_POLICY_FLOW_DATARATE_DEF)->SetWindowText(datarateStr);
|
|
GetDlgItem(IDC_POLICY_FLOW_PEAKDATARATE_DEF)->SetWindowText(peakrateStr);
|
|
GetDlgItem(IDC_POLICY_FLOW_DURATION_DEF)->SetWindowText(durationStr);
|
|
|
|
return CACSPage::OnSetActive();
|
|
}
|
|
|
|
|
|
BOOL CPgPolicyFlow::OnKillActive( )
|
|
{
|
|
UINT cId = 0;
|
|
UINT mId = 0;
|
|
|
|
if(!UpdateData())
|
|
return FALSE;
|
|
|
|
// Peak Rate should be >= data rate
|
|
if(m_nPeakRateChoice ==2 && m_nDataRateChoice == 2 && m_uDataRate > m_uPeakRate)
|
|
{
|
|
cId = IDC_POLICY_FLOW_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_ERR_PEAKRATE_LESS_RATE;
|
|
}
|
|
|
|
if ((m_nBranchFlag & BRANCH_FLAG_GLOBAL) != 0) // need to check again default value
|
|
{
|
|
CString tmp;
|
|
|
|
ASSERT(m_pGeneralPage);
|
|
|
|
if(m_pGeneralPage->IfAnyAuth())
|
|
{
|
|
// Peak Rate should be >= data rate
|
|
if(m_nPeakRateChoice ==2 && m_nDataRateChoice == 1 && DEFAULT_AA_DATARATE > FROMKBS(m_uPeakRate))
|
|
{
|
|
cId = IDC_POLICY_FLOW_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_ERR_PEAKRATE_LESS_RATE;
|
|
}
|
|
}
|
|
else if (m_pGeneralPage->IfAnyUnauth())
|
|
{
|
|
// Peak Rate should be >= data rate
|
|
if(m_nPeakRateChoice ==2 && m_nDataRateChoice == 1 && DEFAULT_AU_DATARATE > FROMKBS(m_uPeakRate))
|
|
{
|
|
cId = IDC_POLICY_FLOW_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_ERR_PEAKRATE_LESS_RATE;
|
|
}
|
|
}
|
|
}
|
|
// if there is anything wrong
|
|
if(cId)
|
|
{
|
|
CWnd* pWnd = GetDlgItem(cId);
|
|
|
|
ASSERT(pWnd);
|
|
GotoDlgCtrl( pWnd );
|
|
|
|
AfxMessageBox(mId);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
// check if any is set to Zero
|
|
if(m_nDataRateChoice == 2 && m_uDataRate == 0) // date rate
|
|
{
|
|
cId = IDC_POLICY_FLOW_DATARATE_EDIT_LIMIT;
|
|
mId = IDS_WRN_ZERO_POLICY_DATA;
|
|
}
|
|
else if(m_nPeakRateChoice ==2 && m_uPeakRate == 0) // peak data rate
|
|
{
|
|
cId = IDC_POLICY_FLOW_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_WRN_ZERO_POLICY_DATA;
|
|
}
|
|
else if(m_nDurationChoice == 2 && m_uDuration == 0) // duration
|
|
{
|
|
cId = IDC_POLICY_FLOW_DURATION_EDIT_LIMIT;
|
|
mId = IDS_WRN_ZERO_POLICY_DATA;
|
|
}
|
|
|
|
if(cId)
|
|
{
|
|
|
|
if(IDNO == AfxMessageBox(mId, MB_YESNO))
|
|
{
|
|
CWnd* pWnd = GetDlgItem(cId);
|
|
|
|
ASSERT(pWnd);
|
|
GotoDlgCtrl( pWnd );
|
|
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
return CACSPage::OnKillActive();
|
|
|
|
}
|
|
|
|
// radio buttons here, 0 -- no limit (resouce limit ) , 1 -- default to general level, 2 -- user limit
|
|
//
|
|
BOOL CPgPolicyFlow::OnApply()
|
|
{
|
|
CString* pStr = NULL;
|
|
// check if the values input on the page is valid
|
|
UINT cId = 0;
|
|
UINT mId = 0;
|
|
|
|
if(!GetModified()) return TRUE;
|
|
|
|
// Peak Rate should be >= data rate
|
|
if(m_nPeakRateChoice ==2 && m_nDataRateChoice == 2 && m_uDataRate > m_uPeakRate)
|
|
{
|
|
cId = IDC_POLICY_FLOW_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_ERR_PEAKRATE_LESS_RATE;
|
|
}
|
|
|
|
// if there is anything wrong
|
|
if(cId)
|
|
{
|
|
CWnd* pWnd = GetDlgItem(cId);
|
|
|
|
ASSERT(pWnd);
|
|
GotoDlgCtrl( pWnd );
|
|
|
|
AfxMessageBox(mId);
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
//------------------
|
|
// per flow
|
|
|
|
// data rate
|
|
switch(m_nDataRateChoice){
|
|
case 2: // limit
|
|
m_spData->m_ddPFTokenRate.LowPart = FROMKBS(m_uDataRate);
|
|
m_spData->m_ddPFTokenRate.HighPart = 0;
|
|
break;
|
|
case 1: // default
|
|
break;
|
|
case 0: // unlimit
|
|
SET_LARGE_UNLIMIT(m_spData->m_ddPFTokenRate);
|
|
break;
|
|
default:
|
|
ASSERT(0);
|
|
};
|
|
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_PF_TOKENRATE, (m_nDataRateChoice != 1));
|
|
|
|
// Peak data rate
|
|
switch(m_nPeakRateChoice){
|
|
case 2: // limit
|
|
m_spData->m_ddPFPeakBandWidth.LowPart = FROMKBS(m_uPeakRate);
|
|
m_spData->m_ddPFPeakBandWidth.HighPart = 0;
|
|
break;
|
|
case 1: // default
|
|
break;
|
|
case 0: // unlimit
|
|
SET_LARGE_UNLIMIT(m_spData->m_ddPFPeakBandWidth);
|
|
break;
|
|
default:
|
|
ASSERT(0);
|
|
};
|
|
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_PF_PEAKBANDWIDTH, (m_nPeakRateChoice != 1));
|
|
|
|
// duration
|
|
switch(m_nDurationChoice){
|
|
case 2: // limit
|
|
m_spData->m_dwPFDuration = MIN2SEC(m_uDuration);
|
|
break;
|
|
case 1: // default
|
|
break;
|
|
case 0: // unlimit
|
|
m_spData->m_dwPFDuration = UNLIMIT;
|
|
break;
|
|
default:
|
|
ASSERT(0);
|
|
};
|
|
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_PF_DURATION, (m_nDurationChoice != 1));
|
|
|
|
DWORD dwAttrFlags = 0;
|
|
dwAttrFlags |= (ACS_PAF_PF_TOKENRATE | ACS_PAF_PF_PEAKBANDWIDTH | ACS_PAF_PF_DURATION);
|
|
|
|
AddFlags(dwAttrFlags); // prepare flags for saving
|
|
|
|
return CACSPage::OnApply();
|
|
}
|
|
|
|
void CPgPolicyFlow::OnPolicyFlowDatarateDef()
|
|
{
|
|
SetModified();
|
|
m_editDataRate.EnableWindow(FALSE);
|
|
}
|
|
|
|
void CPgPolicyFlow::OnChangePolicyFlowDatarateEditLimit()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CACSPage::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
|
|
}
|
|
|
|
void CPgPolicyFlow::OnPolicyFlowDatarateRadioLimit()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editDataRate.EnableWindow(TRUE);
|
|
}
|
|
|
|
void CPgPolicyFlow::OnPolicyFlowDatarateRes()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editDataRate.EnableWindow(FALSE);
|
|
}
|
|
|
|
void CPgPolicyFlow::OnPolicyFlowDurationDef()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
m_editDuration.EnableWindow(FALSE);
|
|
|
|
SetModified();
|
|
|
|
}
|
|
|
|
void CPgPolicyFlow::OnChangePolicyFlowDurationEditLimit()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CACSPage::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
|
|
}
|
|
|
|
void CPgPolicyFlow::OnPolicyFlowDurationRadioLimit()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
m_editDuration.EnableWindow(TRUE);
|
|
SetModified();
|
|
|
|
}
|
|
|
|
void CPgPolicyFlow::OnPolicyFlowDurationRes()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
m_editDuration.EnableWindow(FALSE);
|
|
|
|
SetModified();
|
|
}
|
|
|
|
void CPgPolicyFlow::OnPolicyFlowPeakdatarateDef()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
m_editPeakRate.EnableWindow(FALSE);
|
|
|
|
SetModified();
|
|
}
|
|
|
|
void CPgPolicyFlow::OnChangePolicyFlowPeakdatarateEditLimit()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CACSPage::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
|
|
}
|
|
|
|
void CPgPolicyFlow::OnPolicyFlowPeakdatarateRadioLimit()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
m_editPeakRate.EnableWindow(TRUE);
|
|
|
|
SetModified();
|
|
}
|
|
|
|
void CPgPolicyFlow::OnPolicyFlowPeakdatarateRes()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
m_editPeakRate.EnableWindow(FALSE);
|
|
SetModified();
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPgPolicyAggregate dialog
|
|
|
|
CPgPolicyAggregate::CPgPolicyAggregate(CACSPolicyElement* pData) : CACSPage(CPgPolicyAggregate::IDD)
|
|
{
|
|
ASSERT(pData);
|
|
m_spData = pData;
|
|
DataInit();
|
|
}
|
|
|
|
|
|
CPgPolicyAggregate::CPgPolicyAggregate()
|
|
: CACSPage(CPgPolicyAggregate::IDD)
|
|
{
|
|
DataInit();
|
|
}
|
|
|
|
void CPgPolicyAggregate::DataInit()
|
|
{
|
|
//{{AFX_DATA_INIT(CPgPolicyAggregate)
|
|
m_nDataRateChoice = -1;
|
|
m_nFlowsChoice = -1;
|
|
m_nPeakRateChoice = -1;
|
|
m_uDataRate = 0;
|
|
m_uFlows = 0;
|
|
m_uPeakRate = 0;
|
|
//}}AFX_DATA_INIT
|
|
|
|
|
|
m_nBranchFlag = 0;
|
|
m_pGeneralPage = NULL;
|
|
|
|
}
|
|
|
|
|
|
void CPgPolicyAggregate::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CACSPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPgPolicyAggregate)
|
|
DDX_Control(pDX, IDC_POLICY_AGGR_PEAKDATARATE_EDIT_LIMIT, m_editPeakRate);
|
|
DDX_Control(pDX, IDC_POLICY_AGGR_FLOWS_EDIT_LIMIT, m_editFlows);
|
|
DDX_Control(pDX, IDC_POLICY_AGGR_DATARATE_EDIT_LIMIT, m_editDataRate);
|
|
DDX_Radio(pDX, IDC_POLICY_AGGR_DATARATE_RES, m_nDataRateChoice);
|
|
DDX_Radio(pDX, IDC_POLICY_AGGR_FLOWS_RES, m_nFlowsChoice);
|
|
DDX_Radio(pDX, IDC_POLICY_AGGR_PEAKDATARATE_RES, m_nPeakRateChoice);
|
|
|
|
DDX_Text(pDX, IDC_POLICY_AGGR_DATARATE_EDIT_LIMIT, m_uDataRate);
|
|
if(m_nDataRateChoice == 2)
|
|
DDV_MinMaxUInt(pDX, m_uDataRate, 0, DWORD_LIMIT/1024);
|
|
|
|
|
|
DDX_Text(pDX, IDC_POLICY_AGGR_FLOWS_EDIT_LIMIT, m_uFlows);
|
|
if(m_nFlowsChoice == 2)
|
|
DDV_MinMaxUInt(pDX, m_uFlows, 0, DWORD_LIMIT);
|
|
|
|
DDX_Text(pDX, IDC_POLICY_AGGR_PEAKDATARATE_EDIT_LIMIT, m_uPeakRate);
|
|
if(m_nPeakRateChoice == 2)
|
|
DDV_MinMaxUInt(pDX, m_uPeakRate, 0, DWORD_LIMIT/1024);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPgPolicyAggregate, CACSPage)
|
|
//{{AFX_MSG_MAP(CPgPolicyAggregate)
|
|
ON_BN_CLICKED(IDC_POLICY_AGGR_DATARATE_DEF, OnPolicyAggrDatarateDef)
|
|
ON_EN_CHANGE(IDC_POLICY_AGGR_DATARATE_EDIT_LIMIT, OnChangePolicyAggrDatarateEditLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_AGGR_DATARATE_RADIO_LIMIT, OnPolicyAggrDatarateRadioLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_AGGR_DATARATE_RES, OnPolicyAggrDatarateRes)
|
|
ON_BN_CLICKED(IDC_POLICY_AGGR_FLOWS_DEF, OnPolicyAggrFlowsDef)
|
|
ON_EN_CHANGE(IDC_POLICY_AGGR_FLOWS_EDIT_LIMIT, OnChangePolicyAggrFlowsEditLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_AGGR_FLOWS_RES, OnPolicyAggrFlowsRes)
|
|
ON_BN_CLICKED(IDC_POLICY_AGGR_PEAKDATARATE_DEF, OnPolicyAggrPeakdatarateDef)
|
|
ON_EN_CHANGE(IDC_POLICY_AGGR_PEAKDATARATE_EDIT_LIMIT, OnChangePolicyAggrPeakdatarateEditLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_AGGR_PEAKDATARATE_RADIO_LIMIT, OnPolicyAggrPeakdatarateRadioLimit)
|
|
ON_BN_CLICKED(IDC_POLICY_AGGR_PEAKDATARATE_RES, OnPolicyAggrPeakdatarateRes)
|
|
ON_BN_CLICKED(IDC_POLICY_AGGR_FLOWS_RADIO_LIMIT, OnPolicyAggrFlowsRadioLimit)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPgPolicyAggregate message handlers
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPgPolicyFlow message handlers
|
|
|
|
BOOL CPgPolicyAggregate::OnInitDialog()
|
|
{
|
|
//------------------
|
|
// Total
|
|
|
|
// data rate
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_TT_TOKENRATE))
|
|
{
|
|
if IS_LARGE_UNLIMIT(m_spData->m_ddTTTokenRate)
|
|
m_nDataRateChoice = 0;
|
|
else
|
|
{
|
|
m_nDataRateChoice = 2; // numbered limit
|
|
m_uDataRate = TOKBS(m_spData->m_ddTTTokenRate.LowPart);
|
|
}
|
|
}
|
|
else
|
|
m_nDataRateChoice = 1; // default
|
|
|
|
// Peak data rate
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_TT_PEAKBANDWIDTH))
|
|
{
|
|
if IS_LARGE_UNLIMIT(m_spData->m_ddTTPeakBandWidth)
|
|
m_nPeakRateChoice = 0;
|
|
else
|
|
{
|
|
m_nPeakRateChoice = 2; // numbered limit
|
|
m_uPeakRate = TOKBS(m_spData->m_ddTTPeakBandWidth.LowPart);
|
|
}
|
|
}
|
|
else
|
|
m_nPeakRateChoice = 1; // default
|
|
|
|
// flows
|
|
if(m_spData->GetFlags(ATTR_FLAG_LOAD, ACS_PAF_TT_FLOWS))
|
|
{
|
|
if(m_spData->m_dwTTFlows == UNLIMIT)
|
|
m_nFlowsChoice = 0;
|
|
else
|
|
{
|
|
m_nFlowsChoice = 2;
|
|
m_uFlows = m_spData->m_dwTTFlows;
|
|
}
|
|
}
|
|
else
|
|
m_nFlowsChoice = 1;
|
|
|
|
CACSPage::OnInitDialog();
|
|
|
|
|
|
if(m_nDataRateChoice != 2)
|
|
m_editDataRate.EnableWindow(FALSE);
|
|
|
|
if(m_nPeakRateChoice != 2)
|
|
m_editPeakRate.EnableWindow(FALSE);
|
|
|
|
if(m_nFlowsChoice != 2)
|
|
m_editFlows.EnableWindow(FALSE);
|
|
|
|
GetDlgItem(IDC_POLICY_AGGR_DATARATE_DEF)->GetWindowText(m_strDataRateDefault);
|
|
GetDlgItem(IDC_POLICY_AGGR_PEAKDATARATE_DEF)->GetWindowText(m_strPeakRateDefault);
|
|
GetDlgItem(IDC_POLICY_AGGR_FLOWS_DEF)->GetWindowText(m_strFlowsDefault);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
BOOL CPgPolicyAggregate::OnSetActive( )
|
|
{
|
|
// change default button strings based on choice of user
|
|
CString datarateStr = m_strDataRateDefault;
|
|
CString peakrateStr = m_strPeakRateDefault;
|
|
CString flowsStr = m_strFlowsDefault;
|
|
|
|
if ((m_nBranchFlag & BRANCH_FLAG_GLOBAL) != 0) // may need to alter the text
|
|
{
|
|
CString tmp;
|
|
ASSERT(m_pGeneralPage);
|
|
|
|
if(m_pGeneralPage->IfAnyAuth())
|
|
{
|
|
tmp.LoadString(IDS_A_DEF_DATARATE_SUF);
|
|
datarateStr += tmp;
|
|
tmp.LoadString(IDS_A_DEF_PEAKRATE_SUF);
|
|
peakrateStr += tmp;
|
|
tmp.LoadString(IDS_A_DEF_FLOWS_SUF);
|
|
flowsStr += tmp;
|
|
}
|
|
else if (m_pGeneralPage->IfAnyUnauth())
|
|
{
|
|
tmp.LoadString(IDS_U_DEF_DATARATE_SUF);
|
|
datarateStr += tmp;
|
|
tmp.LoadString(IDS_U_DEF_PEAKRATE_SUF);
|
|
peakrateStr += tmp;
|
|
tmp.LoadString(IDS_U_DEF_FLOWS_SUF);
|
|
flowsStr += tmp;
|
|
}
|
|
}
|
|
|
|
// test if the policy is for any authentication/unauthenticaion policy in enterprise level
|
|
GetDlgItem(IDC_POLICY_AGGR_DATARATE_DEF)->SetWindowText(datarateStr);
|
|
GetDlgItem(IDC_POLICY_AGGR_PEAKDATARATE_DEF)->SetWindowText(peakrateStr);
|
|
GetDlgItem(IDC_POLICY_AGGR_FLOWS_DEF)->SetWindowText(flowsStr);
|
|
|
|
|
|
return CACSPage::OnSetActive();
|
|
}
|
|
|
|
|
|
|
|
BOOL CPgPolicyAggregate::OnKillActive( )
|
|
{
|
|
// check if the values input on the page is valid
|
|
UINT cId = 0;
|
|
UINT mId = 0;
|
|
|
|
if(!UpdateData(TRUE)) return FALSE;
|
|
if(!GetModified()) return TRUE;
|
|
|
|
// Peak Rate should be >= data rate
|
|
if(m_nPeakRateChoice ==2 && m_nDataRateChoice == 2 && m_uDataRate > m_uPeakRate)
|
|
{
|
|
cId = IDC_POLICY_AGGR_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_ERR_TOTALPEAK_LESS_TOTALRATE;
|
|
}
|
|
|
|
if ((m_nBranchFlag & BRANCH_FLAG_GLOBAL) != 0) // need to check again default value
|
|
{
|
|
CString tmp;
|
|
|
|
ASSERT(m_pGeneralPage);
|
|
|
|
if(m_pGeneralPage->IfAnyAuth())
|
|
{
|
|
// Peak Rate should be >= data rate
|
|
if(m_nPeakRateChoice ==2 && m_nDataRateChoice == 1 && DEFAULT_AA_DATARATE > FROMKBS(m_uPeakRate))
|
|
{
|
|
cId = IDC_POLICY_AGGR_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_ERR_TOTALPEAK_LESS_TOTALRATE;
|
|
}
|
|
}
|
|
else if (m_pGeneralPage->IfAnyUnauth())
|
|
{
|
|
// Peak Rate should be >= data rate
|
|
if(m_nPeakRateChoice ==2 && m_nDataRateChoice == 1 && DEFAULT_AU_DATARATE > FROMKBS(m_uPeakRate))
|
|
{
|
|
cId = IDC_POLICY_AGGR_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_ERR_TOTALPEAK_LESS_TOTALRATE;
|
|
}
|
|
}
|
|
}
|
|
// if there is anything wrong
|
|
if(cId)
|
|
{
|
|
CWnd* pWnd = GetDlgItem(cId);
|
|
|
|
ASSERT(pWnd);
|
|
GotoDlgCtrl( pWnd );
|
|
|
|
AfxMessageBox(mId);
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
// check if any is set to Zero
|
|
if(m_nDataRateChoice == 2 && m_uDataRate == 0) // date rate
|
|
{
|
|
cId = IDC_POLICY_AGGR_DATARATE_EDIT_LIMIT;
|
|
mId = IDS_WRN_ZERO_POLICY_DATA;
|
|
}
|
|
else if(m_nPeakRateChoice ==2 && m_uPeakRate == 0) // peak data rate
|
|
{
|
|
cId = IDC_POLICY_AGGR_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_WRN_ZERO_POLICY_DATA;
|
|
}
|
|
else if(m_nFlowsChoice == 2 && m_uFlows == 0) // duration
|
|
{
|
|
cId = IDC_POLICY_AGGR_FLOWS_EDIT_LIMIT;
|
|
mId = IDS_WRN_ZERO_POLICY_DATA;
|
|
}
|
|
|
|
if(cId)
|
|
{
|
|
|
|
if(IDNO == AfxMessageBox(mId, MB_YESNO))
|
|
{
|
|
CWnd* pWnd = GetDlgItem(cId);
|
|
|
|
ASSERT(pWnd);
|
|
GotoDlgCtrl( pWnd );
|
|
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
|
|
return CACSPage::OnKillActive();
|
|
|
|
}
|
|
|
|
// radio buttons here, 0 -- no limit (resouce limit ) , 1 -- default to general level, 2 -- user limit
|
|
//
|
|
BOOL CPgPolicyAggregate::OnApply()
|
|
{
|
|
CString* pStr = NULL;
|
|
// check if the values input on the page is valid
|
|
UINT cId = 0;
|
|
UINT mId = 0;
|
|
|
|
if(!GetModified()) return TRUE;
|
|
|
|
// Peak Rate should be >= data rate
|
|
if(m_nPeakRateChoice ==2 && m_nDataRateChoice == 2 && m_uDataRate > m_uPeakRate)
|
|
{
|
|
cId = IDC_POLICY_AGGR_PEAKDATARATE_EDIT_LIMIT;
|
|
mId = IDS_ERR_TOTALPEAK_LESS_TOTALRATE;
|
|
}
|
|
|
|
// if there is anything wrong
|
|
if(cId)
|
|
{
|
|
CWnd* pWnd = GetDlgItem(cId);
|
|
|
|
ASSERT(pWnd);
|
|
GotoDlgCtrl( pWnd );
|
|
|
|
AfxMessageBox(mId);
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
//------------------
|
|
// per flow
|
|
|
|
// data rate
|
|
switch(m_nDataRateChoice){
|
|
case 2: // limit
|
|
m_spData->m_ddTTTokenRate.LowPart = FROMKBS(m_uDataRate);
|
|
m_spData->m_ddTTTokenRate.HighPart = 0;
|
|
break;
|
|
case 1: // default
|
|
break;
|
|
case 0: // unlimit
|
|
SET_LARGE_UNLIMIT(m_spData->m_ddTTTokenRate);
|
|
break;
|
|
default:
|
|
ASSERT(0);
|
|
};
|
|
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_TT_TOKENRATE, (m_nDataRateChoice != 1));
|
|
|
|
// Peak data rate
|
|
switch(m_nPeakRateChoice){
|
|
case 2: // limit
|
|
m_spData->m_ddTTPeakBandWidth.LowPart = FROMKBS(m_uPeakRate);
|
|
m_spData->m_ddTTPeakBandWidth.HighPart = 0;
|
|
break;
|
|
case 1: // default
|
|
break;
|
|
case 0: // unlimit
|
|
SET_LARGE_UNLIMIT(m_spData->m_ddTTPeakBandWidth);
|
|
break;
|
|
default:
|
|
ASSERT(0);
|
|
};
|
|
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_TT_PEAKBANDWIDTH, (m_nPeakRateChoice != 1));
|
|
|
|
// duration
|
|
switch(m_nFlowsChoice){
|
|
case 2: // limit
|
|
m_spData->m_dwTTFlows = m_uFlows;
|
|
break;
|
|
case 1: // default
|
|
break;
|
|
case 0: // unlimit
|
|
m_spData->m_dwTTFlows = UNLIMIT;
|
|
break;
|
|
default:
|
|
ASSERT(0);
|
|
};
|
|
|
|
m_spData->SetFlags(ATTR_FLAG_SAVE, ACS_PAF_TT_FLOWS, (m_nFlowsChoice != 1));
|
|
|
|
DWORD dwAttrFlags = 0;
|
|
dwAttrFlags |= (ACS_PAF_TT_TOKENRATE | ACS_PAF_TT_PEAKBANDWIDTH | ACS_PAF_TT_FLOWS);
|
|
|
|
AddFlags(dwAttrFlags); // prepare flags for saving
|
|
|
|
|
|
return CACSPage::OnApply();
|
|
}
|
|
|
|
|
|
|
|
void CPgPolicyAggregate::OnPolicyAggrDatarateDef()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editDataRate.EnableWindow(FALSE);
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnChangePolicyAggrDatarateEditLimit()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CACSPage::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnPolicyAggrDatarateRadioLimit()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
SetModified();
|
|
m_editDataRate.EnableWindow(TRUE);
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnPolicyAggrDatarateRes()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editDataRate.EnableWindow(FALSE);
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnPolicyAggrFlowsDef()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editFlows.EnableWindow(FALSE);
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnChangePolicyAggrFlowsEditLimit()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CACSPage::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnPolicyAggrFlowsRes()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editFlows.EnableWindow(FALSE);
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnPolicyAggrFlowsRadioLimit()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editFlows.EnableWindow(TRUE);
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnPolicyAggrPeakdatarateDef()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editPeakRate.EnableWindow(FALSE);
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnChangePolicyAggrPeakdatarateEditLimit()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CACSPage::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnPolicyAggrPeakdatarateRadioLimit()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editPeakRate.EnableWindow(TRUE);
|
|
|
|
}
|
|
|
|
void CPgPolicyAggregate::OnPolicyAggrPeakdatarateRes()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
SetModified();
|
|
m_editPeakRate.EnableWindow(FALSE);
|
|
|
|
}
|
|
|
|
|
|
void CPgPolicyFlow::OnKillFocus(CWnd* pNewWnd)
|
|
{
|
|
CACSPage::OnKillFocus(pNewWnd);
|
|
|
|
// TODO: Add your message handler code here
|
|
|
|
}
|
|
|