///////////////////////////////////////////////////////////////////////////// // // Copyright(C) 2000 Microsoft Corporation all rights reserved. // // Module: ProxyServerHelper.cpp // // Project: Windows 2000 IAS // // Description: Implementation of CProxyServerHelper // // Author: tperraut // // Revision 02/24/2000 created // ///////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "GlobalTransaction.h" #include "GlobalData.h" #include "ProxyServerHelper.h" #include "Objects.h" #include "Properties.h" CStringUuid::CStringUuid() { UUID uuid; RPC_STATUS Result = UuidCreate(&uuid); if ( (Result == RPC_S_OK) || (Result == RPC_S_UUID_LOCAL_ONLY) ) { Result = UuidToStringW( &uuid, &stringUuid ); if ( Result != RPC_S_OK ) { _com_issue_error(HRESULT_FROM_WIN32(Result)); // long } } else { _com_issue_error(E_FAIL); } } CStringUuid::~CStringUuid() { RpcStringFreeW(&stringUuid); } const wchar_t* CStringUuid::GetUuid() { return stringUuid; } const CProxyServerHelper::Properties CProxyServerHelper::c_DefaultProxyServerProperties[] = { { L"Server Accounting Port", VT_I4, }, { L"Accounting Secret", VT_BSTR, }, { L"Server Authentication Port", VT_I4, }, { L"Authentication Secret", VT_BSTR, }, { L"Address", VT_BSTR, }, { L"Forward Accounting On/Off", VT_BOOL, }, { L"Priority", VT_I4, }, { L"Weight", VT_I4, }, { L"Timeout", VT_I4, }, { L"Maximum Lost Packets", VT_I4, }, { L"Blackout Interval", VT_I4, }, // add next properties below and in the enum }; const unsigned int CProxyServerHelper::c_NbDefaultProxyServerProperties = sizeof(c_DefaultProxyServerProperties) / sizeof(c_DefaultProxyServerProperties[0]); ////////////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////////////// CProxyServerHelper::CProxyServerHelper( CGlobalData& GlobalData ):m_GlobalData(GlobalData) { for (unsigned int i = 0; i < c_NbDefaultProxyServerProperties; ++i) { _PropertiesArray TempProperty; TempProperty.Name = c_DefaultProxyServerProperties[i].Name; TempProperty.Type = c_DefaultProxyServerProperties[i].Type; m_PropArray.push_back(TempProperty); } } ////////////////////////////////////////////////////////////////////////////// // SetName ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetName(const _bstr_t& Name) { m_Name = Name; } ////////////////////////////////////////////////////////////////////////////// // CreateUniqueName ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::CreateUniqueName() { CStringUuid uuidString; m_Name = uuidString.GetUuid(); } ////////////////////////////////////////////////////////////////////////////// // SetAccountingPort ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetAccountingPort(LONG Port) { // base 10 Will never change WCHAR TempString[MAX_LONG_SIZE]; m_PropArray.at(ACCT_PORT_POS).StrVal = _ltow(Port, TempString, 10); } ////////////////////////////////////////////////////////////////////////////// // SetAccountingSecret ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetAccountingSecret(const _bstr_t &Secret) { m_PropArray.at(ACCT_SECRET_POS).StrVal = Secret; } ////////////////////////////////////////////////////////////////////////////// // SetAuthenticationPort ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetAuthenticationPort(LONG Port) { // base 10 Will never change WCHAR TempString[MAX_LONG_SIZE]; m_PropArray.at(AUTH_PORT_POS).StrVal = _ltow(Port, TempString, 10); } ////////////////////////////////////////////////////////////////////////////// // SetAuthenticationSecret ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetAuthenticationSecret(const _bstr_t &Secret) { m_PropArray.at(AUTH_SECRET_POS).StrVal = Secret; } ////////////////////////////////////////////////////////////////////////////// // SetAddress ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetAddress(const _bstr_t& Address) { m_PropArray.at(ADDRESS_POS).StrVal = Address; } ////////////////////////////////////////////////////////////////////////////// // SetForwardAccounting ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetForwardAccounting(BOOL bOn) { m_PropArray.at(FORWARD_ACCT_POS).StrVal = bOn? L"-1": L"0"; } ////////////////////////////////////////////////////////////////////////////// // SetPriority ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetPriority(LONG Priority) { WCHAR TempString[MAX_LONG_SIZE]; m_PropArray.at(PRIORITY_POS).StrVal = _ltow(Priority, TempString, 10); } ////////////////////////////////////////////////////////////////////////////// // SetWeight ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetWeight(LONG Weight) { WCHAR TempString[MAX_LONG_SIZE]; m_PropArray.at(WEIGHT_POS).StrVal = _ltow(Weight, TempString, 10); } ////////////////////////////////////////////////////////////////////////////// // SetTimeout ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetTimeout(LONG Timeout) { WCHAR TempString[MAX_LONG_SIZE]; m_PropArray.at(TIMEOUT_POS).StrVal = _ltow(Timeout, TempString, 10); } ////////////////////////////////////////////////////////////////////////////// // SetMaximumLostPackets ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetMaximumLostPackets(LONG MaxLost) { WCHAR TempString[MAX_LONG_SIZE]; m_PropArray.at(MAX_LOST_PACKETS_POS).StrVal = _ltow(MaxLost,TempString,10); } ////////////////////////////////////////////////////////////////////////////// // SetBlackoutInterval ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::SetBlackoutInterval(LONG Interval) { WCHAR TempString[MAX_LONG_SIZE]; m_PropArray.at(BLACKOUT_POS).StrVal = _ltow(Interval, TempString, 10); } ////////////////////////////////////////////////////////////////////////////// // Persist ////////////////////////////////////////////////////////////////////////////// void CProxyServerHelper::Persist(LONG Parent) { if ( !Parent ) { _com_issue_error(E_INVALIDARG); } // Create a server in the servergroup (m_Objects) LONG BagNumber; m_GlobalData.m_pObjects->InsertObject( m_Name, Parent, BagNumber ); // then set all the properties (m_Properties) for (unsigned int i = 0; i < c_NbDefaultProxyServerProperties; ++i) { if ( !m_PropArray.at(i).StrVal ) { // property not set continue; } m_GlobalData.m_pProperties->InsertProperty( BagNumber, m_PropArray.at(i).Name, m_PropArray.at(i).Type, m_PropArray.at(i).StrVal ); } } ////////////////////////////////////////////////////////////////////////////// // operator = (cleanup and copy) ////////////////////////////////////////////////////////////////////////////// CProxyServerHelper& CProxyServerHelper::operator=(const CProxyServerHelper& P) { if ( this != &P ) { m_GlobalData = P.m_GlobalData; m_Name = P.m_Name; PropertiesArray TempArray; for (unsigned int i = 0; i < c_NbDefaultProxyServerProperties; ++i) { _PropertiesArray TempProperty; TempProperty.Type = P.m_PropArray.at(i).Type; TempProperty.Name = P.m_PropArray.at(i).Name; TempProperty.StrVal = P.m_PropArray.at(i).StrVal; TempArray.push_back(TempProperty); } m_PropArray.swap(TempArray); } return *this; } ////////////////////////////////////////////////////////////////////////////// // copy constructor ////////////////////////////////////////////////////////////////////////////// CProxyServerHelper::CProxyServerHelper(const CProxyServerHelper& P) :m_GlobalData(P.m_GlobalData) { m_Name = P.m_Name; PropertiesArray TempArray; m_PropArray.reserve(c_NbDefaultProxyServerProperties); for (unsigned int i = 0; i < c_NbDefaultProxyServerProperties; ++i) { _PropertiesArray TempProperty; TempProperty.Type = P.m_PropArray.at(i).Type; TempProperty.Name = P.m_PropArray.at(i).Name; TempProperty.StrVal = P.m_PropArray.at(i).StrVal; TempArray.push_back(TempProperty); } m_PropArray.swap(TempArray); }