345 lines
9.8 KiB
C++
345 lines
9.8 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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);
|
|
}
|
|
|