|
|
//-----------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: P V C D A T A. C P P
//
// Contents: PVC parameters
//
// Notes:
//
// Author: tongl 20 Feb, 1998
//
//-----------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "arpsobj.h"
#include "auniobj.h"
#include "atmutil.h"
#include "ncstl.h"
#include "pvcdata.h"
#include "ncreg.h"
extern const WCHAR c_szAdapters[];
void SetPvcDwordParam(HKEY hkeyAdapterPVCId, PCWSTR pszParamName, DWORD dwParam) { HRESULT hrTmp;
if (FIELD_UNSET == dwParam) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, pszParamName); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, pszParamName, dwParam); }
TraceTag(ttidAtmUni, "SetPvcDword Failed on %S", pszParamName); }
void SetPvcBinaryParamFromString(HKEY hkeyAdapterPVCId, PCWSTR pszParamName, PCWSTR pszData) { HRESULT hrTmp;
if (!(*pszData)) // empty string
{ // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, pszParamName); } else { // convert to binary
BYTE * pbData = NULL; DWORD cbData = 0;
ConvertHexStringToBinaryWithAlloc(pszData, &pbData, &cbData);
// save the value
hrTmp = HrRegSetBinary(hkeyAdapterPVCId, pszParamName, pbData, cbData);
delete pbData; }
TraceTag(ttidAtmUni, "SetPvcBinaryParamFromString Failed on %S", pszParamName); }
// Load PVC settings for the current adapter from registry to first memory
HRESULT CAtmUniCfg::HrLoadPVCRegistry() { HRESULT hr = S_OK;
HKEY hkeyUniParam; hr = m_pnccUni->OpenParamKey(&hkeyUniParam); if(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) hr = S_OK; else if(SUCCEEDED(hr)) { Assert(hkeyUniParam);
// find the adapter we want to load
for (UNI_ADAPTER_LIST::iterator iterAdapter = m_listAdapters.begin(); iterAdapter != m_listAdapters.end(); iterAdapter ++) { if (FIsSubstr(m_strGuidConn.c_str(), (*iterAdapter)->m_strBindName.c_str())) { // found the adapter we want to load ...
// open the adapters subkey
HKEY hkeyAdapters = NULL; hr = HrRegOpenKeyEx(hkeyUniParam, c_szAdapters, KEY_READ, &hkeyAdapters);
if(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) hr = S_OK; else if(SUCCEEDED(hr)) { Assert(hkeyAdapters); HKEY hkeyAdapterParam = NULL; hr = HrRegOpenKeyEx(hkeyAdapters, (*iterAdapter)->m_strBindName.c_str(), KEY_READ, &hkeyAdapterParam);
if(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) hr = S_OK; else if(SUCCEEDED(hr)) { Assert(hkeyAdapterParam); HrLoadAdapterPVCRegistry(hkeyAdapterParam, *iterAdapter); } RegSafeCloseKey(hkeyAdapterParam); } RegSafeCloseKey(hkeyAdapters); break; } } } RegSafeCloseKey(hkeyUniParam);
TraceError("CAtmUniCfg::HrLoadPVCRegistry", hr); return hr; }
HRESULT CAtmUniCfg::HrLoadAdapterPVCRegistry(HKEY hkeyAdapterParam, CUniAdapterInfo * pAdapterInfo) { HRESULT hr = S_OK;
Assert(hkeyAdapterParam); Assert(pAdapterInfo);
// there should not have been any PVC on the list
Assert(pAdapterInfo->m_listPVCs.size() ==0);
// open the PVC subkey and enumerate the PVCs under that
HKEY hkeyAdapterPVC = NULL; hr = HrRegOpenKeyEx(hkeyAdapterParam, c_szPVC, KEY_READ, &hkeyAdapterPVC);
if(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) hr = S_OK; else if(SUCCEEDED(hr)) { Assert(hkeyAdapterPVC);
// enumerate the sub keys, and create a CPvcInfo object for each PVC
VECSTR vstrPVCIdList; hr = HrLoadSubkeysFromRegistry(hkeyAdapterPVC, &vstrPVCIdList);
// now load parameters for each PVC
for (VECSTR::iterator iterPvcId = vstrPVCIdList.begin(); iterPvcId != vstrPVCIdList.end(); iterPvcId ++) { HKEY hkeyAdapterPVCId = NULL; hr = HrRegOpenKeyEx(hkeyAdapterPVC, (*iterPvcId)->c_str(), KEY_READ, &hkeyAdapterPVCId);
if(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) hr = S_OK; else if(SUCCEEDED(hr)) { CPvcInfo * pNewPVC = new CPvcInfo((*iterPvcId)->c_str());
if (pNewPVC) { pAdapterInfo->m_listPVCs.push_back(pNewPVC);
HRESULT hrTmp = S_OK;
// Get the PVC Type
DWORD dwType; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szPVCType, &dwType);
if (hrTmp == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) { pNewPVC->m_dwPVCType = PVC_CUSTOM; hrTmp = S_OK; } else if SUCCEEDED(hrTmp) { Assert( (dwType == PVC_ATMARP) || (dwType == PVC_PPP_ATM_CLIENT) || (dwType == PVC_PPP_ATM_SERVER) || (dwType == PVC_CUSTOM));
switch(dwType) { case PVC_ATMARP: pNewPVC->m_dwPVCType = PVC_ATMARP; break;
case PVC_PPP_ATM_CLIENT: pNewPVC->m_dwPVCType = PVC_PPP_ATM_CLIENT; break;
case PVC_PPP_ATM_SERVER: pNewPVC->m_dwPVCType = PVC_PPP_ATM_SERVER; break;
default: pNewPVC->m_dwPVCType = PVC_CUSTOM; break; } } else { TraceError("Failed reading PVCType", hrTmp); hrTmp = S_OK;
pNewPVC->m_dwPVCType = PVC_CUSTOM; }
// set the default values for the type
pNewPVC->SetDefaults(pNewPVC->m_dwPVCType);
// now read any existing value from the registry
// pvc name
tstring strName; hrTmp = HrRegQueryString(hkeyAdapterPVCId, c_szPVCName, &strName); if SUCCEEDED(hrTmp) pNewPVC->m_strName = strName;
// VPI (required), if failed, default to 0
hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szVpi, &(pNewPVC->m_dwVpi));
// VCI (required), if failed, default to 0
hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szVci, &(pNewPVC->m_dwVci));
// AAL Type
DWORD dwAALType; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szAALType, &dwAALType); if SUCCEEDED(hrTmp) { switch (dwAALType) { /* $REVIEW(tongl 2/23/98): Per ArvindM, only AAL5 is supported in NT5
case AAL_TYPE_AAL0: pNewPVC->m_dwAAL = AAL_TYPE_AAL0; break; case AAL_TYPE_AAL1: pNewPVC->m_dwAAL = AAL_TYPE_AAL1; break; case AAL_TYPE_AAL34: pNewPVC->m_dwAAL = AAL_TYPE_AAL34; break; */ case AAL_TYPE_AAL5: pNewPVC->m_dwAAL = AAL_TYPE_AAL5; break; default: AssertSz(FALSE, "Invalid AAL type."); pNewPVC->m_dwAAL = AAL_TYPE_AAL5; } } // Local address
tstring strCallingAddr; hrTmp = HrRegQueryString(hkeyAdapterPVCId, c_szCallingParty, &strCallingAddr); if SUCCEEDED(hrTmp) pNewPVC->m_strCallingAddr = strCallingAddr; // Destination address
tstring strCalledAddr; hrTmp = HrRegQueryString(hkeyAdapterPVCId, c_szCalledParty, &strCalledAddr); if SUCCEEDED(hrTmp) pNewPVC->m_strCalledAddr = strCalledAddr; // Flags
DWORD dwFlags; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szFlags, &dwFlags); if SUCCEEDED(hrTmp) pNewPVC->m_dwFlags = dwFlags; // Quality Info
// TransmitPeakCellRate
DWORD dwTransmitPeakCellRate; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szTransmitPeakCellRate, &dwTransmitPeakCellRate); if SUCCEEDED(hrTmp) pNewPVC->m_dwTransmitPeakCellRate = dwTransmitPeakCellRate*c_iCellSize/c_iKbSize; // TransmitAvgCellRate
DWORD dwTransmitAvgCellRate; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szTransmitAvgCellRate, &dwTransmitAvgCellRate); if SUCCEEDED(hrTmp) pNewPVC->m_dwTransmitAvgCellRate = dwTransmitAvgCellRate*c_iCellSize/c_iKbSize; // TransmitByteBurstLength
DWORD dwTransmitByteBurstLength; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szTransmitByteBurstLength, &dwTransmitByteBurstLength); if SUCCEEDED(hrTmp) pNewPVC->m_dwTransmitByteBurstLength = dwTransmitByteBurstLength; // TransmitMaxSduSize
DWORD dwTransmitMaxSduSize; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szTransmitMaxSduSize, &dwTransmitMaxSduSize); if SUCCEEDED(hrTmp) pNewPVC->m_dwTransmitMaxSduSize = dwTransmitMaxSduSize; // TransmitServiceCategory
DWORD dwTransmitServiceCategory; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szTransmitServiceCategory, &dwTransmitServiceCategory); if SUCCEEDED(hrTmp) { switch(dwTransmitServiceCategory) { case ATM_SERVICE_CATEGORY_CBR: pNewPVC->m_dwTransmitServiceCategory = ATM_SERVICE_CATEGORY_CBR; break;
case ATM_SERVICE_CATEGORY_VBR: pNewPVC->m_dwTransmitServiceCategory = ATM_SERVICE_CATEGORY_VBR; break; case ATM_SERVICE_CATEGORY_UBR: pNewPVC->m_dwTransmitServiceCategory = ATM_SERVICE_CATEGORY_UBR; break; case ATM_SERVICE_CATEGORY_ABR: pNewPVC->m_dwTransmitServiceCategory = ATM_SERVICE_CATEGORY_ABR; break; default: AssertSz(FALSE, "Invalid service category."); pNewPVC->m_dwTransmitServiceCategory = ATM_SERVICE_CATEGORY_UBR; } } // ReceivePeakCellRate
DWORD dwReceivePeakCellRate; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szReceivePeakCellRate, &dwReceivePeakCellRate); if SUCCEEDED(hrTmp) pNewPVC->m_dwReceivePeakCellRate = dwReceivePeakCellRate*c_iCellSize/c_iKbSize; // ReceiveAvgCellRate
DWORD dwReceiveAvgCellRate; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szReceiveAvgCellRate, &dwReceiveAvgCellRate); if SUCCEEDED(hrTmp) pNewPVC->m_dwReceiveAvgCellRate = dwReceiveAvgCellRate*c_iCellSize/c_iKbSize; // ReceiveByteBurstLength
DWORD dwReceiveByteBurstLength; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szReceiveByteBurstLength, &dwReceiveByteBurstLength); if SUCCEEDED(hrTmp) pNewPVC->m_dwReceiveByteBurstLength = dwReceiveByteBurstLength; // ReceiveMaxSduSize
DWORD dwReceiveMaxSduSize; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szReceiveMaxSduSize, &dwReceiveMaxSduSize); if SUCCEEDED(hrTmp) pNewPVC->m_dwReceiveMaxSduSize = dwReceiveMaxSduSize; // ReceiveServiceCategory
DWORD dwReceiveServiceCategory; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szReceiveServiceCategory, &dwReceiveServiceCategory); if SUCCEEDED(hrTmp) { switch(dwReceiveServiceCategory) { case ATM_SERVICE_CATEGORY_CBR: pNewPVC->m_dwReceiveServiceCategory = ATM_SERVICE_CATEGORY_CBR; break; case ATM_SERVICE_CATEGORY_VBR: pNewPVC->m_dwReceiveServiceCategory = ATM_SERVICE_CATEGORY_VBR; break; case ATM_SERVICE_CATEGORY_UBR: pNewPVC->m_dwReceiveServiceCategory = ATM_SERVICE_CATEGORY_UBR; break; case ATM_SERVICE_CATEGORY_ABR: pNewPVC->m_dwReceiveServiceCategory = ATM_SERVICE_CATEGORY_ABR; break; default: AssertSz(FALSE, "Invalid service category."); pNewPVC->m_dwReceiveServiceCategory = ATM_SERVICE_CATEGORY_UBR; } } // Local BLLI & BHLI
DWORD dwLocalLayer2Protocol; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szLocalLayer2Protocol, &dwLocalLayer2Protocol); if SUCCEEDED(hrTmp) pNewPVC->m_dwLocalLayer2Protocol = dwLocalLayer2Protocol; DWORD dwLocalUserSpecLayer2; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szLocalUserSpecLayer2, &dwLocalUserSpecLayer2); if SUCCEEDED(hrTmp) pNewPVC->m_dwLocalUserSpecLayer2 = dwLocalUserSpecLayer2; DWORD dwLocalLayer3Protocol; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szLocalLayer3Protocol, &dwLocalLayer3Protocol); if SUCCEEDED(hrTmp) pNewPVC->m_dwLocalLayer3Protocol = dwLocalLayer3Protocol; DWORD dwLocalUserSpecLayer3; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szLocalUserSpecLayer3, &dwLocalUserSpecLayer3); if SUCCEEDED(hrTmp) pNewPVC->m_dwLocalUserSpecLayer3 = dwLocalUserSpecLayer3; DWORD dwLocalLayer3IPI; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szLocalLayer3IPI, &dwLocalLayer3IPI); if SUCCEEDED(hrTmp) pNewPVC->m_dwLocalLayer3IPI = dwLocalLayer3IPI; BYTE * pbLocalSnapId = NULL; DWORD cbLocalSnapId = 0; hrTmp = HrRegQueryBinaryWithAlloc(hkeyAdapterPVCId, c_szLocalSnapId, &pbLocalSnapId, &cbLocalSnapId); if ( SUCCEEDED(hrTmp) && (cbLocalSnapId >0) && (cbLocalSnapId <= c_nSnapIdMaxBytes)) { ConvertBinaryToHexString(pbLocalSnapId, cbLocalSnapId, &(pNewPVC->m_strLocalSnapId)); MemFree(pbLocalSnapId); } DWORD dwLocalHighLayerInfoType; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szLocalHighLayerInfoType, &dwLocalHighLayerInfoType); if SUCCEEDED(hrTmp) pNewPVC->m_dwLocalHighLayerInfoType = dwLocalHighLayerInfoType; BYTE * pbLocalHighLayerInfo = NULL; DWORD cbLocalHighLayerInfo = 0; hrTmp = HrRegQueryBinaryWithAlloc(hkeyAdapterPVCId, c_szLocalHighLayerInfo, &pbLocalHighLayerInfo, &cbLocalHighLayerInfo); if ( SUCCEEDED(hrTmp) && (cbLocalHighLayerInfo >0) && (cbLocalHighLayerInfo <= c_nHighLayerInfoMaxBytes)) { ConvertBinaryToHexString(pbLocalHighLayerInfo, cbLocalHighLayerInfo, &(pNewPVC->m_strLocalHighLayerInfo)); MemFree(pbLocalHighLayerInfo); } // Destination BLLI and BHLI
DWORD dwDestnLayer2Protocol; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szDestnLayer2Protocol, &dwDestnLayer2Protocol); if SUCCEEDED(hrTmp) pNewPVC->m_dwDestnLayer2Protocol = dwDestnLayer2Protocol; DWORD dwDestnUserSpecLayer2; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szDestnUserSpecLayer2, &dwDestnUserSpecLayer2); if SUCCEEDED(hrTmp) pNewPVC->m_dwDestnUserSpecLayer2 = dwDestnUserSpecLayer2; DWORD dwDestnLayer3Protocol; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szDestnLayer3Protocol, &dwDestnLayer3Protocol); if SUCCEEDED(hrTmp) pNewPVC->m_dwDestnLayer3Protocol = dwDestnLayer3Protocol; DWORD dwDestnUserSpecLayer3; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szDestnUserSpecLayer3, &dwDestnUserSpecLayer3); if SUCCEEDED(hrTmp) pNewPVC->m_dwDestnUserSpecLayer3 = dwDestnUserSpecLayer3; DWORD dwDestnLayer3IPI; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szDestnLayer3IPI, &dwDestnLayer3IPI); if SUCCEEDED(hrTmp) pNewPVC->m_dwDestnLayer3IPI = dwDestnLayer3IPI; BYTE * pbDestnSnapId = NULL; DWORD cbDestnSnapId = 0; hrTmp = HrRegQueryBinaryWithAlloc(hkeyAdapterPVCId, c_szDestnSnapId, &pbDestnSnapId, &cbDestnSnapId); if ( SUCCEEDED(hrTmp) && (cbDestnSnapId >0) && (cbDestnSnapId <= c_nSnapIdMaxBytes)) { ConvertBinaryToHexString(pbDestnSnapId, cbDestnSnapId, &(pNewPVC->m_strDestnSnapId)); MemFree(pbDestnSnapId); } DWORD dwDestnHighLayerInfoType; hrTmp = HrRegQueryDword(hkeyAdapterPVCId, c_szDestnHighLayerInfoType, &dwDestnHighLayerInfoType); if SUCCEEDED(hrTmp) pNewPVC->m_dwDestnHighLayerInfoType = dwDestnHighLayerInfoType; BYTE * pbDestnHighLayerInfo = NULL; DWORD cbDestnHighLayerInfo = 0; hrTmp = HrRegQueryBinaryWithAlloc(hkeyAdapterPVCId, c_szDestnHighLayerInfo, &pbDestnHighLayerInfo, &cbDestnHighLayerInfo); if ( SUCCEEDED(hrTmp) && (cbDestnHighLayerInfo >0) && (cbDestnHighLayerInfo <= c_nHighLayerInfoMaxBytes)) { ConvertBinaryToHexString(pbDestnHighLayerInfo, cbDestnHighLayerInfo, &(pNewPVC->m_strDestnHighLayerInfo)); MemFree(pbDestnHighLayerInfo); } // Now initialize the "Old" values
pNewPVC->ResetOldValues(); } } RegSafeCloseKey(hkeyAdapterPVCId); } } RegSafeCloseKey(hkeyAdapterPVC);
TraceError("CAtmUniCfg::HrLoadAdapterPVCRegistry", hr); return hr; }
// Save PVC specific settings to registry
HRESULT CAtmUniCfg::HrSaveAdapterPVCRegistry(HKEY hkeyAdapterParam, CUniAdapterInfo * pAdapterInfo) { HRESULT hr = S_OK;
Assert(hkeyAdapterParam); Assert(pAdapterInfo);
// open the PVC subkey and enumerate the PVCs under that
HKEY hkeyAdapterPVC = NULL; DWORD dwDisposition; hr = HrRegCreateKeyEx(hkeyAdapterParam, c_szPVC, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkeyAdapterPVC, &dwDisposition); if(SUCCEEDED(hr)) { Assert(hkeyAdapterPVC);
if (dwDisposition == REG_OPENED_EXISTING_KEY) { // clean up deleted PVCs
HRESULT hrTmp = S_OK;
// enumerate the sub keys, and create a CPvcInfo object for each PVC
VECSTR vstrPVCIdList; hrTmp = HrLoadSubkeysFromRegistry(hkeyAdapterPVC, &vstrPVCIdList); if SUCCEEDED(hrTmp) { for (VECSTR::iterator iterPvcId = vstrPVCIdList.begin(); iterPvcId != vstrPVCIdList.end(); iterPvcId ++) { BOOL fFound = FALSE;
for (PVC_INFO_LIST::iterator iterPvcInfo = pAdapterInfo->m_listPVCs.begin(); iterPvcInfo != pAdapterInfo->m_listPVCs.end(); iterPvcInfo ++) { if ((*iterPvcInfo)->m_fDeleted) continue;
if (**iterPvcId == (*iterPvcInfo)->m_strPvcId) { fFound = TRUE; break; } }
if (!fFound) { hrTmp = HrRegDeleteKeyTree(hkeyAdapterPVC, (*iterPvcId)->c_str()); } } } }
// save new or updated pvcs
for (PVC_INFO_LIST::iterator iterPvcInfo = pAdapterInfo->m_listPVCs.begin(); iterPvcInfo != pAdapterInfo->m_listPVCs.end(); iterPvcInfo ++) { if ((*iterPvcInfo)->m_fDeleted) continue;
HRESULT hrTmp = S_OK;
// Create the subkey
HKEY hkeyAdapterPVCId = NULL; hrTmp = HrRegCreateKeyEx(hkeyAdapterPVC, (*iterPvcInfo)->m_strPvcId.c_str(), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkeyAdapterPVCId, &dwDisposition); if(SUCCEEDED(hrTmp)) { Assert(hkeyAdapterPVCId);
// PVC type
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szPVCType, (*iterPvcInfo)->m_dwPVCType); if SUCCEEDED(hr) hr = hrTmp;
// pvc name
hrTmp = HrRegSetString(hkeyAdapterPVCId, c_szPVCName, (*iterPvcInfo)->m_strName); if SUCCEEDED(hr) hr = hrTmp;
// VPI
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szVpi, (*iterPvcInfo)->m_dwVpi); if SUCCEEDED(hr) hr = hrTmp;
// VCI
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szVci, (*iterPvcInfo)->m_dwVci); if SUCCEEDED(hr) hr = hrTmp;
// AAL Type
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szAALType, (*iterPvcInfo)->m_dwAAL); if SUCCEEDED(hr) hr = hrTmp;
// Local address
hrTmp = HrRegSetString(hkeyAdapterPVCId, c_szCallingParty, (*iterPvcInfo)->m_strCallingAddr); if SUCCEEDED(hr) hr = hrTmp;
// Destination address
hrTmp = HrRegSetString(hkeyAdapterPVCId, c_szCalledParty, (*iterPvcInfo)->m_strCalledAddr); if SUCCEEDED(hr) hr = hrTmp;
// Flags
if (FIELD_UNSET == (*iterPvcInfo)->m_dwFlags) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, c_szFlags); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szFlags, (*iterPvcInfo)->m_dwFlags); }
if SUCCEEDED(hrTmp) hr = hrTmp;
// Quality Info
// TransmitPeakCellRate
if (FIELD_UNSET == (*iterPvcInfo)->m_dwTransmitPeakCellRate) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, c_szTransmitPeakCellRate); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szTransmitPeakCellRate, (*iterPvcInfo)->m_dwTransmitPeakCellRate*c_iKbSize/c_iCellSize); }
if SUCCEEDED(hrTmp) hr = hrTmp;
// TransmitAvgCellRate
if (FIELD_UNSET == (*iterPvcInfo)->m_dwTransmitAvgCellRate) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, c_szTransmitAvgCellRate); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szTransmitAvgCellRate, (*iterPvcInfo)->m_dwTransmitAvgCellRate*c_iKbSize/c_iCellSize); }
if SUCCEEDED(hrTmp) hr = hrTmp;
// TransmitByteBurstLength
if (FIELD_UNSET == (*iterPvcInfo)->m_dwTransmitByteBurstLength) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, c_szTransmitByteBurstLength); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szTransmitByteBurstLength, (*iterPvcInfo)->m_dwTransmitByteBurstLength); }
if SUCCEEDED(hrTmp) hr = hrTmp;
// TransmitMaxSduSize
if (FIELD_UNSET == (*iterPvcInfo)->m_dwTransmitMaxSduSize) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, c_szTransmitMaxSduSize); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szTransmitMaxSduSize, (*iterPvcInfo)->m_dwTransmitMaxSduSize); }
if SUCCEEDED(hrTmp) hr = hrTmp;
// TransmitServiceCategory
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szTransmitServiceCategory, (*iterPvcInfo)->m_dwTransmitServiceCategory); if SUCCEEDED(hrTmp) hr = hrTmp;
// ReceivePeakCellRate
if (FIELD_UNSET == (*iterPvcInfo)->m_dwReceivePeakCellRate) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, c_szReceivePeakCellRate); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szReceivePeakCellRate, (*iterPvcInfo)->m_dwReceivePeakCellRate*c_iKbSize/c_iCellSize); }
if SUCCEEDED(hrTmp) hr = hrTmp;
// ReceiveAvgCellRate
if (FIELD_UNSET == (*iterPvcInfo)->m_dwReceiveAvgCellRate) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, c_szReceiveAvgCellRate); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szReceiveAvgCellRate, (*iterPvcInfo)->m_dwReceiveAvgCellRate*c_iKbSize/c_iCellSize); }
if SUCCEEDED(hrTmp) hr = hrTmp;
// ReceiveByteBurstLength
if (FIELD_UNSET == (*iterPvcInfo)->m_dwReceiveByteBurstLength) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, c_szReceiveByteBurstLength); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szReceiveByteBurstLength, (*iterPvcInfo)->m_dwReceiveByteBurstLength); }
if SUCCEEDED(hrTmp) hr = hrTmp;
// ReceiveMaxSduSize
if (FIELD_UNSET == (*iterPvcInfo)->m_dwReceiveMaxSduSize) { // delete the value
hrTmp = HrRegDeleteValue(hkeyAdapterPVCId, c_szReceiveMaxSduSize); } else { // save the value
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szReceiveMaxSduSize, (*iterPvcInfo)->m_dwReceiveMaxSduSize); }
if SUCCEEDED(hrTmp) hr = hrTmp;
// ReceiveServiceCategory
hrTmp = HrRegSetDword(hkeyAdapterPVCId, c_szReceiveServiceCategory, (*iterPvcInfo)->m_dwReceiveServiceCategory); if SUCCEEDED(hrTmp) hr = hrTmp;
// Local BLLI & BHLI
SetPvcDwordParam(hkeyAdapterPVCId, c_szLocalLayer2Protocol, (*iterPvcInfo)->m_dwLocalLayer2Protocol);
SetPvcDwordParam(hkeyAdapterPVCId, c_szLocalUserSpecLayer2, (*iterPvcInfo)->m_dwLocalUserSpecLayer2);
SetPvcDwordParam(hkeyAdapterPVCId, c_szLocalLayer3Protocol, (*iterPvcInfo)->m_dwLocalLayer3Protocol);
SetPvcDwordParam(hkeyAdapterPVCId, c_szLocalUserSpecLayer3, (*iterPvcInfo)->m_dwLocalUserSpecLayer3);
SetPvcDwordParam(hkeyAdapterPVCId, c_szLocalLayer3IPI, (*iterPvcInfo)->m_dwLocalLayer3IPI);
SetPvcBinaryParamFromString(hkeyAdapterPVCId, c_szLocalSnapId, (*iterPvcInfo)->m_strLocalSnapId.c_str());
SetPvcDwordParam(hkeyAdapterPVCId, c_szLocalHighLayerInfoType, (*iterPvcInfo)->m_dwLocalHighLayerInfoType);
SetPvcBinaryParamFromString(hkeyAdapterPVCId, c_szLocalHighLayerInfo, (*iterPvcInfo)->m_strLocalHighLayerInfo.c_str());
// Destination BLLI and BHLI info
SetPvcDwordParam(hkeyAdapterPVCId, c_szDestnLayer2Protocol, (*iterPvcInfo)->m_dwDestnLayer2Protocol);
SetPvcDwordParam(hkeyAdapterPVCId, c_szDestnUserSpecLayer2, (*iterPvcInfo)->m_dwDestnUserSpecLayer2);
SetPvcDwordParam(hkeyAdapterPVCId, c_szDestnLayer3Protocol, (*iterPvcInfo)->m_dwDestnLayer3Protocol);
SetPvcDwordParam(hkeyAdapterPVCId, c_szDestnUserSpecLayer3, (*iterPvcInfo)->m_dwDestnUserSpecLayer3);
SetPvcDwordParam(hkeyAdapterPVCId, c_szDestnLayer3IPI, (*iterPvcInfo)->m_dwDestnLayer3IPI);
SetPvcBinaryParamFromString(hkeyAdapterPVCId, c_szDestnSnapId, (*iterPvcInfo)->m_strDestnSnapId.c_str());
SetPvcDwordParam(hkeyAdapterPVCId, c_szDestnHighLayerInfoType, (*iterPvcInfo)->m_dwDestnHighLayerInfoType);
SetPvcBinaryParamFromString(hkeyAdapterPVCId, c_szDestnHighLayerInfo, (*iterPvcInfo)->m_strDestnHighLayerInfo.c_str()); } RegSafeCloseKey(hkeyAdapterPVCId); } } RegSafeCloseKey(hkeyAdapterPVC);
TraceError("CAtmUniCfg::HrSaveAdapterPVCRegistry", hr); return hr; }
// load adapter PVC parameters from first memory to second memory
HRESULT CAtmUniCfg::HrLoadAdapterPVCInfo() { HRESULT hr = HRESULT_FROM_WIN32(ERROR_NO_MATCH);
delete m_pSecondMemoryAdapterInfo; m_pSecondMemoryAdapterInfo = NULL;
for(UNI_ADAPTER_LIST::iterator iterAdapter = m_listAdapters.begin(); iterAdapter != m_listAdapters.end(); iterAdapter++) { if (FIsSubstr(m_strGuidConn.c_str(), (*iterAdapter)->m_strBindName.c_str())) { // enabled LAN adapter
if ((*iterAdapter)->m_BindingState == BIND_ENABLE) { m_pSecondMemoryAdapterInfo = new CUniAdapterInfo;
if (m_pSecondMemoryAdapterInfo == NULL) { continue; }
*m_pSecondMemoryAdapterInfo = **iterAdapter; hr = S_OK; } } }
AssertSz((S_OK == hr), "Can not raise UI on a disabled or non-exist adapter !"); TraceError("CAtmUniCfg::HrLoadAdapterInfo", hr); return hr; }
// save adapter PVC parameters from second memory to first memory
HRESULT CAtmUniCfg::HrSaveAdapterPVCInfo() { HRESULT hr = HRESULT_FROM_WIN32(ERROR_NO_MATCH);
for(UNI_ADAPTER_LIST::iterator iterAdapter = m_listAdapters.begin(); iterAdapter != m_listAdapters.end(); iterAdapter++) { if(m_pSecondMemoryAdapterInfo->m_strBindName == (*iterAdapter)->m_strBindName) { // The card can not get unbound while in the properties UI !
Assert((*iterAdapter)->m_BindingState == BIND_ENABLE); Assert(m_pSecondMemoryAdapterInfo->m_BindingState == BIND_ENABLE);
**iterAdapter = *m_pSecondMemoryAdapterInfo; hr = S_OK; break; } }
AssertSz((S_OK == hr), "Adapter in second memory not found in first memory!");
TraceError("CAtmUniCfg::HrSaveAdapterInfo", hr); return hr; }
// CPvcInfo
CPvcInfo::CPvcInfo(PCWSTR pszPvcId) { m_strPvcId = pszPvcId; m_fDeleted = FALSE; }
CPvcInfo::~CPvcInfo() { }
// copy operator
CPvcInfo & CPvcInfo::operator=(const CPvcInfo & info) { Assert(this != &info); Assert(m_strPvcId == info.m_strPvcId);
if (this == &info) return *this;
m_fDeleted = info.m_fDeleted;
m_dwPVCType = info.m_dwPVCType; m_dwOldPVCType = info.m_dwOldPVCType;
m_strName = info.m_strName; m_strOldName = info.m_strOldName;
m_dwVpi = info.m_dwVpi; m_dwOldVpi = info.m_dwOldVpi;
m_dwVci = info.m_dwVci; m_dwOldVci = info.m_dwOldVci;
m_dwAAL = info.m_dwAAL; m_dwOldAAL = info.m_dwOldAAL;
m_strCallingAddr = info.m_strCallingAddr; m_strOldCallingAddr = info.m_strOldCallingAddr;
m_strCalledAddr = info.m_strCalledAddr; m_strOldCalledAddr = info.m_strOldCalledAddr;
m_dwFlags = info.m_dwFlags;
m_dwTransmitPeakCellRate = info.m_dwTransmitPeakCellRate; m_dwOldTransmitPeakCellRate = info.m_dwOldTransmitPeakCellRate;
m_dwTransmitAvgCellRate = info.m_dwTransmitAvgCellRate; m_dwOldTransmitAvgCellRate = info.m_dwOldTransmitAvgCellRate;
m_dwTransmitByteBurstLength = info.m_dwTransmitByteBurstLength; m_dwOldTransmitByteBurstLength = info.m_dwOldTransmitByteBurstLength;
m_dwTransmitMaxSduSize = info.m_dwTransmitMaxSduSize; m_dwOldTransmitMaxSduSize = info.m_dwOldTransmitMaxSduSize;
m_dwTransmitServiceCategory = info.m_dwTransmitServiceCategory; m_dwOldTransmitServiceCategory = info.m_dwOldTransmitServiceCategory;
m_dwReceivePeakCellRate = info.m_dwReceivePeakCellRate; m_dwOldReceivePeakCellRate = info.m_dwOldReceivePeakCellRate;
m_dwReceiveAvgCellRate = info.m_dwReceiveAvgCellRate; m_dwOldReceiveAvgCellRate = info.m_dwOldReceiveAvgCellRate;
m_dwReceiveByteBurstLength = info.m_dwReceiveByteBurstLength; m_dwOldReceiveByteBurstLength = info.m_dwOldReceiveByteBurstLength;
m_dwReceiveMaxSduSize = info.m_dwReceiveMaxSduSize; m_dwOldReceiveMaxSduSize = info.m_dwOldReceiveMaxSduSize;
m_dwReceiveServiceCategory = info.m_dwReceiveServiceCategory; m_dwOldReceiveServiceCategory = info.m_dwOldReceiveServiceCategory;
// BLLI & BHLI
m_dwLocalLayer2Protocol = info.m_dwLocalLayer2Protocol; m_dwOldLocalLayer2Protocol = info.m_dwOldLocalLayer2Protocol;
m_dwLocalUserSpecLayer2 = info.m_dwLocalUserSpecLayer2; m_dwOldLocalUserSpecLayer2 = info.m_dwOldLocalUserSpecLayer2;
m_dwLocalLayer3Protocol = info.m_dwLocalLayer3Protocol; m_dwOldLocalLayer3Protocol = info.m_dwOldLocalLayer3Protocol;
m_dwLocalUserSpecLayer3 = info.m_dwLocalUserSpecLayer3; m_dwOldLocalUserSpecLayer3 = info.m_dwOldLocalUserSpecLayer3;
m_dwLocalLayer3IPI = info.m_dwLocalLayer3IPI; m_dwOldLocalLayer3IPI = info.m_dwOldLocalLayer3IPI;
m_strLocalSnapId = info.m_strLocalSnapId; m_strOldLocalSnapId = info.m_strOldLocalSnapId;
m_dwLocalHighLayerInfoType = info.m_dwLocalHighLayerInfoType; m_dwOldLocalHighLayerInfoType = info.m_dwOldLocalHighLayerInfoType;
m_strLocalHighLayerInfo = info.m_strLocalHighLayerInfo; m_strOldLocalHighLayerInfo = info.m_strOldLocalHighLayerInfo;
// Destination BLLI and BHLI info
m_dwDestnLayer2Protocol = info.m_dwDestnLayer2Protocol; m_dwOldDestnLayer2Protocol = info.m_dwOldDestnLayer2Protocol;
m_dwDestnUserSpecLayer2 = info.m_dwDestnUserSpecLayer2; m_dwOldDestnUserSpecLayer2 = info.m_dwOldDestnUserSpecLayer2;
m_dwDestnLayer3Protocol = info.m_dwDestnLayer3Protocol; m_dwOldDestnLayer3Protocol = info.m_dwOldDestnLayer3Protocol;
m_dwDestnUserSpecLayer3 = info.m_dwDestnUserSpecLayer3; m_dwOldDestnUserSpecLayer3 = info.m_dwOldDestnUserSpecLayer3;
m_dwDestnLayer3IPI = info.m_dwDestnLayer3IPI; m_dwOldDestnLayer3IPI = info.m_dwOldDestnLayer3IPI;
m_strDestnSnapId = info.m_strDestnSnapId; m_strOldDestnSnapId = info.m_strOldDestnSnapId;
m_dwDestnHighLayerInfoType = info.m_dwDestnHighLayerInfoType; m_dwOldDestnHighLayerInfoType = info.m_dwOldDestnHighLayerInfoType;
m_strDestnHighLayerInfo = info.m_strDestnHighLayerInfo; m_strOldDestnHighLayerInfo = info.m_strOldDestnHighLayerInfo;
return *this; }
void CPvcInfo::SetDefaults(PVCType type) { m_dwPVCType = type; m_fDeleted = FALSE;
m_strName = (PWSTR) SzLoadIds(IDS_PVC_UNSPECIFIED_NAME); m_dwAAL = AAL_TYPE_AAL5;
m_dwVpi = 0; m_dwVci = FIELD_UNSET;
SetTypeDefaults(type); ResetOldValues(); }
void CPvcInfo::SetTypeDefaults(PVCType type) { // set more specific defaults for each type
m_dwPVCType = type;
switch (m_dwPVCType) { case PVC_ATMARP: SetDefaultsForAtmArp(); break;
case PVC_PPP_ATM_CLIENT: SetDefaultsForPPPOut(); break;
case PVC_PPP_ATM_SERVER: SetDefaultsForPPPIn(); break;
case PVC_CUSTOM: SetDefaultsForCustom(); break; } }
void CPvcInfo::SetDefaultsForAtmArp() { m_dwPVCType = PVC_ATMARP;
// addresses
m_strCallingAddr = c_szDefaultCallingAtmAddr; m_strCalledAddr = c_szEmpty;
// Flags
m_dwFlags = 2;
// Quality Info
m_dwTransmitPeakCellRate = FIELD_UNSET; m_dwTransmitAvgCellRate = FIELD_UNSET; m_dwTransmitByteBurstLength = c_dwDefTransmitByteBurstLength; m_dwTransmitMaxSduSize = c_dwDefTransmitMaxSduSize; m_dwTransmitServiceCategory = ATM_SERVICE_CATEGORY_UBR;
m_dwReceivePeakCellRate = FIELD_UNSET; m_dwReceiveAvgCellRate = FIELD_UNSET; m_dwReceiveByteBurstLength = c_dwDefTransmitByteBurstLength; m_dwReceiveMaxSduSize = c_dwDefTransmitMaxSduSize; m_dwReceiveServiceCategory = ATM_SERVICE_CATEGORY_UBR;
// Local BLLI & BHLI
m_dwLocalLayer2Protocol = 12; m_dwLocalUserSpecLayer2 = 0; m_dwLocalLayer3Protocol = FIELD_ABSENT; m_dwLocalUserSpecLayer3 = 0; m_dwLocalLayer3IPI = 0; m_strLocalSnapId = c_szEmpty;
m_dwLocalHighLayerInfoType = FIELD_ABSENT; m_strLocalHighLayerInfo = c_szEmpty;
// Destination BLLI and BHLI info
m_dwDestnLayer2Protocol = 12; m_dwDestnUserSpecLayer2 = 0; m_dwDestnLayer3Protocol = FIELD_ABSENT; m_dwDestnUserSpecLayer3 = 0; m_dwDestnLayer3IPI = 0; m_strDestnSnapId = c_szEmpty;
m_dwDestnHighLayerInfoType = FIELD_ABSENT; m_strDestnHighLayerInfo = c_szEmpty; }
void CPvcInfo::SetDefaultsForPPPOut() { m_dwPVCType = PVC_PPP_ATM_CLIENT;
// addresses
m_strCallingAddr = c_szEmpty; m_strCalledAddr = c_szDefaultCalledAtmAddr;
// Flags
m_dwFlags = 4;
// Quality Info
m_dwTransmitPeakCellRate = FIELD_UNSET; m_dwTransmitAvgCellRate = FIELD_UNSET; m_dwTransmitByteBurstLength = FIELD_UNSET; m_dwTransmitMaxSduSize = 4096; m_dwTransmitServiceCategory = ATM_SERVICE_CATEGORY_UBR;
m_dwReceivePeakCellRate = FIELD_UNSET; m_dwReceiveAvgCellRate = FIELD_UNSET; m_dwReceiveByteBurstLength = FIELD_UNSET; m_dwReceiveMaxSduSize = 4096; m_dwReceiveServiceCategory = ATM_SERVICE_CATEGORY_UBR;
// Local BLLI & BHLI
m_dwLocalLayer2Protocol = FIELD_ABSENT; m_dwLocalUserSpecLayer2 = 0; m_dwLocalLayer3Protocol = FIELD_ABSENT; m_dwLocalUserSpecLayer3 = 0; m_dwLocalLayer3IPI = 0; m_strLocalSnapId = c_szEmpty;
m_dwLocalHighLayerInfoType = FIELD_ABSENT; m_strLocalHighLayerInfo = c_szEmpty;
// Destination BLLI and BHLI info
m_dwDestnLayer2Protocol = FIELD_ABSENT; m_dwDestnUserSpecLayer2 = 0; m_dwDestnLayer3Protocol = 11; m_dwDestnUserSpecLayer3 = 0; m_dwDestnLayer3IPI = 207; m_strDestnHighLayerInfo = c_szEmpty;
m_dwDestnHighLayerInfoType = FIELD_ABSENT; m_strDestnHighLayerInfo = c_szEmpty; }
void CPvcInfo::SetDefaultsForPPPIn() { m_dwPVCType = PVC_PPP_ATM_SERVER;
// addresses
m_strCallingAddr = c_szEmpty; m_strCalledAddr = c_szEmpty;
// Flags
m_dwFlags = 2;
// Quality Info
m_dwTransmitPeakCellRate = FIELD_UNSET; m_dwTransmitAvgCellRate = FIELD_UNSET; m_dwTransmitByteBurstLength = FIELD_UNSET; m_dwTransmitMaxSduSize = 4096; m_dwTransmitServiceCategory = ATM_SERVICE_CATEGORY_UBR;
m_dwReceivePeakCellRate = FIELD_UNSET; m_dwReceiveAvgCellRate = FIELD_UNSET; m_dwReceiveByteBurstLength = FIELD_UNSET; m_dwReceiveMaxSduSize = 4096; m_dwReceiveServiceCategory = ATM_SERVICE_CATEGORY_UBR;
// Local BLLI & BHLI
m_dwLocalLayer2Protocol = FIELD_ABSENT; m_dwLocalUserSpecLayer2 = 0; m_dwLocalLayer3Protocol = 11; m_dwLocalUserSpecLayer3 = 0; m_dwLocalLayer3IPI = 207; m_strLocalSnapId = c_szEmpty;
m_dwLocalHighLayerInfoType = FIELD_ABSENT; m_strLocalHighLayerInfo = c_szEmpty;
// Destination BLLI and BHLI info
m_dwDestnLayer2Protocol = FIELD_ABSENT; m_dwDestnUserSpecLayer2 = 0; m_dwDestnLayer3Protocol = FIELD_ABSENT; m_dwDestnUserSpecLayer3 = 0; m_dwDestnLayer3IPI = 0; m_strDestnSnapId = c_szEmpty;
m_dwDestnHighLayerInfoType = FIELD_ABSENT; m_strDestnHighLayerInfo = c_szEmpty; }
void CPvcInfo::SetDefaultsForCustom() { m_dwPVCType = PVC_CUSTOM;
// addresses
m_strCallingAddr = c_szEmpty; m_strCalledAddr = c_szEmpty;
// Flags
m_dwFlags = FIELD_UNSET;
// Quality Info
m_dwTransmitPeakCellRate = FIELD_UNSET; m_dwTransmitAvgCellRate = FIELD_UNSET; m_dwTransmitByteBurstLength = FIELD_UNSET; m_dwTransmitMaxSduSize = FIELD_UNSET; m_dwTransmitServiceCategory = ATM_SERVICE_CATEGORY_UBR;
m_dwReceivePeakCellRate = FIELD_UNSET; m_dwReceiveAvgCellRate = FIELD_UNSET; m_dwReceiveByteBurstLength = FIELD_UNSET; m_dwReceiveMaxSduSize = FIELD_UNSET; m_dwReceiveServiceCategory = ATM_SERVICE_CATEGORY_UBR;
// Local BLLI & BHLI
m_dwLocalLayer2Protocol = FIELD_ANY; m_dwLocalUserSpecLayer2 = 0; m_dwLocalLayer3Protocol = FIELD_ANY; m_dwLocalUserSpecLayer3 = 0; m_dwLocalLayer3IPI = 0; m_strLocalSnapId = c_szEmpty;
m_dwLocalHighLayerInfoType = FIELD_ANY; m_strLocalHighLayerInfo = c_szEmpty;
// Destination BLLI and BHLI info
m_dwDestnLayer2Protocol = FIELD_ANY; m_dwDestnUserSpecLayer2 = 0; m_dwDestnLayer3Protocol = FIELD_ANY; m_dwDestnUserSpecLayer3 = 0; m_dwDestnLayer3IPI = 0; m_strDestnSnapId = c_szEmpty;
m_dwDestnHighLayerInfoType = FIELD_ANY; m_strDestnHighLayerInfo = c_szEmpty; }
void CPvcInfo::ResetOldValues() { m_dwOldPVCType = m_dwPVCType; m_strOldName = m_strName;
m_dwOldVpi = m_dwVpi; m_dwOldVci = m_dwVci;
m_dwOldAAL = m_dwAAL;
m_strOldCallingAddr = m_strCallingAddr; m_strOldCalledAddr = m_strCalledAddr;
// Quality Info
m_dwOldTransmitPeakCellRate = m_dwTransmitPeakCellRate; m_dwOldTransmitAvgCellRate = m_dwTransmitAvgCellRate; m_dwOldTransmitByteBurstLength = m_dwTransmitByteBurstLength; m_dwOldTransmitMaxSduSize = m_dwTransmitMaxSduSize; m_dwOldTransmitServiceCategory = m_dwTransmitServiceCategory;
m_dwOldReceivePeakCellRate = m_dwReceivePeakCellRate; m_dwOldReceiveAvgCellRate = m_dwReceiveAvgCellRate; m_dwOldReceiveByteBurstLength = m_dwReceiveByteBurstLength; m_dwOldReceiveMaxSduSize = m_dwReceiveMaxSduSize; m_dwOldReceiveServiceCategory = m_dwReceiveServiceCategory;
// Local BLLI & BHLI
m_dwOldLocalLayer2Protocol = m_dwLocalLayer2Protocol; m_dwOldLocalUserSpecLayer2 = m_dwLocalUserSpecLayer2; m_dwOldLocalLayer3Protocol = m_dwLocalLayer3Protocol; m_dwOldLocalUserSpecLayer3 = m_dwLocalUserSpecLayer3; m_dwOldLocalLayer3IPI = m_dwLocalLayer3IPI; m_strOldLocalSnapId = m_strLocalSnapId;
m_dwOldLocalHighLayerInfoType = m_dwLocalHighLayerInfoType; m_strOldLocalHighLayerInfo = m_strLocalHighLayerInfo;
// Destination BLLI and BHLI info
m_dwOldDestnLayer2Protocol = m_dwDestnLayer2Protocol; m_dwOldDestnUserSpecLayer2 = m_dwDestnUserSpecLayer2; m_dwOldDestnLayer3Protocol = m_dwDestnLayer3Protocol; m_dwOldDestnUserSpecLayer3 = m_dwDestnUserSpecLayer3; m_dwOldDestnLayer3IPI = m_dwDestnLayer3IPI; m_strOldDestnSnapId = m_strDestnSnapId;
m_dwOldDestnHighLayerInfoType = m_dwDestnHighLayerInfoType; m_strOldDestnHighLayerInfo = m_strDestnHighLayerInfo; }
// CUniAdapterInfo
CUniAdapterInfo & CUniAdapterInfo::operator=(const CUniAdapterInfo & info) { Assert(this != &info);
if (this == &info) return *this;
// the adapter's binding state
m_strBindName = info.m_strBindName; m_BindingState = info.m_BindingState; m_fDeleted = info.m_fDeleted;
FreeCollectionAndItem(m_listPVCs);
for (PVC_INFO_LIST::iterator iterPVCInfo = info.m_listPVCs.begin(); iterPVCInfo != info.m_listPVCs.end(); iterPVCInfo ++) { CPvcInfo * pNewPvc = new CPvcInfo((*iterPVCInfo)->m_strPvcId.c_str());
if (pNewPvc == NULL) { continue; }
*pNewPvc = **iterPVCInfo; m_listPVCs.push_back(pNewPvc); }
return *this; }
void CUniAdapterInfo::SetDefaults(PCWSTR pszBindName) { m_strBindName = pszBindName; m_BindingState = BIND_UNSET; FreeCollectionAndItem(m_listPVCs);
m_fDeleted = FALSE;
}
|