218 lines
4.7 KiB
C++
218 lines
4.7 KiB
C++
|
/*
|
||
|
|
||
|
Copyright (c) 1998-1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
blbconn.cpp
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Author:
|
||
|
|
||
|
*/
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
|
||
|
#include "blbgen.h"
|
||
|
#include "blbconn.h"
|
||
|
#include "sdpblob.h"
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::get_StartAddress(BSTR * pVal)
|
||
|
{
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
return m_SdpConnection->GetStartAddress().GetBstrCopy(pVal);
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::get_NumAddresses(LONG * pVal)
|
||
|
{
|
||
|
BAIL_IF_NULL(pVal, E_INVALIDARG);
|
||
|
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
// if the entry isn't valid, it means its one (by default)
|
||
|
SDP_ULONG &NumAddresses = m_SdpConnection->GetNumAddresses();
|
||
|
|
||
|
// vb doesn't take ulong values. this will only affect us if half or more of all the IP addresses
|
||
|
// (not just multicast) are being used
|
||
|
|
||
|
if( (LONG)(NumAddresses.IsValid()) )
|
||
|
{
|
||
|
*pVal = NumAddresses.GetValue();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//
|
||
|
// TTL is a good flag if it is a ral address
|
||
|
// 0: we don't have address
|
||
|
// >0 we have an address
|
||
|
//
|
||
|
BYTE nTTL = 0;
|
||
|
m_SdpConnection->GetTtl().GetValue(nTTL);
|
||
|
*pVal = nTTL ? 1 : 0;
|
||
|
}
|
||
|
|
||
|
//*pVal = (LONG)(NumAddresses.IsValid()) ? NumAddresses.GetValue() : 0;
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::get_Ttl(BYTE * pVal)
|
||
|
{
|
||
|
BAIL_IF_NULL(pVal, E_INVALIDARG);
|
||
|
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
return m_SdpConnection->GetTtl().GetValue(*pVal);
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::get_BandwidthModifier(BSTR * pVal)
|
||
|
{
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
return m_SdpBandwidth->GetModifier().GetBstrCopy(pVal);
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::get_Bandwidth(DOUBLE * pVal)
|
||
|
{
|
||
|
BAIL_IF_NULL(pVal, E_INVALIDARG);
|
||
|
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
ULONG BandwidthValue;
|
||
|
BAIL_ON_FAILURE(m_SdpBandwidth->GetBandwidthValue().GetValue(BandwidthValue));
|
||
|
|
||
|
// vb doesn't take a ulong value, so use the next bigger type
|
||
|
*pVal = (DOUBLE)BandwidthValue;
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::SetAddressInfo(BSTR StartAddress, LONG NumAddresses, BYTE Ttl)
|
||
|
{
|
||
|
if ( 0 > NumAddresses )
|
||
|
{
|
||
|
return E_INVALIDARG;
|
||
|
}
|
||
|
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
if ( !m_IsMain && ((NULL == StartAddress) || (WCHAR_EOS == StartAddress[0])) )
|
||
|
{
|
||
|
m_SdpConnection->Reset();
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
HRESULT HResult = m_SdpConnection->SetConnection(StartAddress, NumAddresses, Ttl);
|
||
|
BAIL_ON_FAILURE(HResult);
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::SetBandwidthInfo(BSTR Modifier, DOUBLE Bandwidth)
|
||
|
{
|
||
|
// the bandwidth value must be a valid ULONG value (vb restrictions)
|
||
|
if ( !((0 <= Bandwidth) && (ULONG(-1) > Bandwidth)) )
|
||
|
{
|
||
|
return E_INVALIDARG;
|
||
|
}
|
||
|
|
||
|
// check if there is any fractional part, this check is valid as it is a valid ULONG value
|
||
|
if ( Bandwidth != (ULONG)Bandwidth )
|
||
|
{
|
||
|
return E_INVALIDARG;
|
||
|
}
|
||
|
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
if ( (NULL == Modifier) || (WCHAR_EOS == Modifier[0]) )
|
||
|
{
|
||
|
m_SdpBandwidth->Reset();
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
return m_SdpBandwidth->SetBandwidth(Modifier, (ULONG)Bandwidth);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::SetEncryptionKey(BSTR KeyType, BSTR * KeyData)
|
||
|
{
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
if ( (NULL == KeyType) || (WCHAR_EOS == KeyType[0]) )
|
||
|
{
|
||
|
m_SdpKey->Reset();
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
return m_SdpKey->SetKey(KeyType, KeyData);
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::GetEncryptionKey(BSTR * KeyType, VARIANT_BOOL * ValidKeyData, BSTR * KeyData)
|
||
|
{
|
||
|
BAIL_IF_NULL(KeyType, E_INVALIDARG);
|
||
|
BAIL_IF_NULL(ValidKeyData, E_INVALIDARG);
|
||
|
BAIL_IF_NULL(KeyData, E_INVALIDARG);
|
||
|
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
HRESULT HResult = m_SdpKey->GetKeyType().GetBstrCopy(KeyType);
|
||
|
BAIL_ON_FAILURE(HResult);
|
||
|
|
||
|
if ( !m_SdpKey->GetKeyData().IsValid() )
|
||
|
{
|
||
|
*ValidKeyData = VARIANT_FALSE;
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
HResult = m_SdpKey->GetKeyData().GetBstrCopy(KeyData);
|
||
|
*ValidKeyData = (SUCCEEDED(HResult))? VARIANT_TRUE : VARIANT_FALSE;
|
||
|
if ( VARIANT_FALSE == *ValidKeyData )
|
||
|
{
|
||
|
SysFreeString(*KeyType);
|
||
|
return HResult;
|
||
|
}
|
||
|
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::get_NetworkType(BSTR * pVal)
|
||
|
{
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
return m_SdpConnection->GetNetworkType().GetBstrCopy(pVal);
|
||
|
}
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::put_NetworkType(BSTR newVal)
|
||
|
{
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
return m_SdpConnection->GetNetworkType().SetBstr(newVal);
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::get_AddressType(BSTR * pVal)
|
||
|
{
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
return m_SdpConnection->GetAddressType().GetBstrCopy(pVal);
|
||
|
}
|
||
|
|
||
|
|
||
|
STDMETHODIMP ITConnectionImpl::put_AddressType(BSTR newVal)
|
||
|
{
|
||
|
CLock Lock(g_DllLock);
|
||
|
|
||
|
return m_SdpConnection->GetAddressType().SetBstr(newVal);
|
||
|
|
||
|
}
|