/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/ /* aggwrap.cpp Router aggregation wrappers. FILE HISTORY: */ #include "stdafx.h" #include "infoi.h" /*--------------------------------------------------------------------------- RouterInfoAggregationWrapper This class is provided to use in an aggregation. ---------------------------------------------------------------------------*/ class RouterInfoAggregationWrapper : public IRouterInfo, public IRouterAdminAccess { public: RouterInfoAggregationWrapper(IRouterInfo *pInfo, IUnknown *punkOuter); virtual ~RouterInfoAggregationWrapper() { DEBUG_DECREMENT_INSTANCE_COUNTER(RouterInfoAggregationWrapper); }; // override the QI, we will use the AddRef/Release implementation // in the CDataObject DeclareIUnknownMembers(IMPL) DeclareIRouterRefreshAccessMembers(IMPL) DeclareIRouterInfoMembers(IMPL) DeclareIRouterAdminAccessMembers(IMPL) IUnknown * GetNonDelegatingIUnknown() { return &m_ENonDelegatingIUnknown; } protected: LONG m_cRef; SPIRouterInfo m_spRouterInfo; DECLARE_AGGREGATION_NONDELEGATING_IUNKNOWN(RouterInfoAggregationWrapper) }; IMPLEMENT_AGGREGATION_IUNKNOWN(RouterInfoAggregationWrapper) IMPLEMENT_AGGREGATION_NONDELEGATING_ADDREFRELEASE(RouterInfoAggregationWrapper, IRouterInfo) STDMETHODIMP RouterInfoAggregationWrapper::ENonDelegatingIUnknown::QueryInterface(REFIID riid, LPVOID *ppv) { InitPThis(RouterInfoAggregationWrapper, ENonDelegatingIUnknown); if (ppv == NULL) return E_INVALIDARG; *ppv = NULL; if (riid == IID_IUnknown) *ppv = (IUnknown *) this; else if (riid == IID_IRouterInfo) *ppv = (IRouterInfo *) pThis; else if (riid == IID_IRouterRefreshAccess) *ppv = (IRouterRefreshAccess *) pThis; else if (riid == IID_IRouterAdminAccess) *ppv = (IRouterAdminAccess *) pThis; else return E_NOINTERFACE; ((IUnknown *)*ppv)->AddRef(); return hrOK; } DEBUG_DECLARE_INSTANCE_COUNTER(RouterInfoAggregationWrapper); RouterInfoAggregationWrapper::RouterInfoAggregationWrapper(IRouterInfo *pInfo, IUnknown *punkOuter) : m_cRef(1) { m_spRouterInfo.Set(pInfo); DEBUG_INCREMENT_INSTANCE_COUNTER(RouterInfoAggregationWrapper); if (punkOuter) m_pUnknownOuter = punkOuter; else m_pUnknownOuter = &m_ENonDelegatingIUnknown; } STDMETHODIMP_(DWORD) RouterInfoAggregationWrapper::GetFlags() { Assert(m_spRouterInfo); return m_spRouterInfo->GetFlags(); } STDMETHODIMP RouterInfoAggregationWrapper::SetFlags(DWORD dwFlags) { Assert(m_spRouterInfo); return m_spRouterInfo->SetFlags(dwFlags); } HRESULT RouterInfoAggregationWrapper::Load(LPCOLESTR pszMachine, HANDLE hMachine) { Assert(m_spRouterInfo); return m_spRouterInfo->Load(pszMachine, hMachine); } HRESULT RouterInfoAggregationWrapper::Save(LPCOLESTR pszMachine, HANDLE hMachine ) { Assert(m_spRouterInfo); return m_spRouterInfo->Save(pszMachine, hMachine); } HRESULT RouterInfoAggregationWrapper::Unload( ) { Assert(m_spRouterInfo); return m_spRouterInfo->Unload(); } HRESULT RouterInfoAggregationWrapper::Merge(IRouterInfo *pNewRouterInfo) { Assert(m_spRouterInfo); return m_spRouterInfo->Merge(pNewRouterInfo); } HRESULT RouterInfoAggregationWrapper::GetRefreshObject(IRouterRefresh **ppRefresh) { Assert(m_spRouterInfo); return m_spRouterInfo->GetRefreshObject(ppRefresh); } HRESULT RouterInfoAggregationWrapper::SetExternalRefreshObject(IRouterRefresh *pRefresh) { Assert(m_spRouterInfo); return m_spRouterInfo->SetExternalRefreshObject(pRefresh); } HRESULT RouterInfoAggregationWrapper::CopyCB(RouterCB *pRouterCB) { Assert(m_spRouterInfo); return m_spRouterInfo->CopyCB(pRouterCB); } LPCOLESTR RouterInfoAggregationWrapper::GetMachineName() { Assert(m_spRouterInfo); return m_spRouterInfo->GetMachineName(); } HRESULT RouterInfoAggregationWrapper::SetMachineName(LPCOLESTR pszMachine) { Assert(m_spRouterInfo); return m_spRouterInfo->SetMachineName(pszMachine); } DWORD RouterInfoAggregationWrapper::GetRouterType() { Assert(m_spRouterInfo); return m_spRouterInfo->GetRouterType(); } HRESULT RouterInfoAggregationWrapper::GetRouterVersionInfo(RouterVersionInfo *pVerInfo) { Assert(m_spRouterInfo); return m_spRouterInfo->GetRouterVersionInfo(pVerInfo); } HRESULT RouterInfoAggregationWrapper::EnumRtrMgrCB( IEnumRtrMgrCB **ppEnumRtrMgrCB) { Assert(m_spRouterInfo); return m_spRouterInfo->EnumRtrMgrCB(ppEnumRtrMgrCB); } HRESULT RouterInfoAggregationWrapper::EnumInterfaceCB( IEnumInterfaceCB **ppEnumInterfaceCB) { Assert(m_spRouterInfo); return m_spRouterInfo->EnumInterfaceCB(ppEnumInterfaceCB); } HRESULT RouterInfoAggregationWrapper::EnumRtrMgrProtocolCB( IEnumRtrMgrProtocolCB **ppEnumRmProtCB) { Assert(m_spRouterInfo); return m_spRouterInfo->EnumRtrMgrProtocolCB(ppEnumRmProtCB); } HRESULT RouterInfoAggregationWrapper::EnumRtrMgrInterfaceCB( IEnumRtrMgrInterfaceCB **ppEnumRmIfCB) { Assert(m_spRouterInfo); return m_spRouterInfo->EnumRtrMgrInterfaceCB(ppEnumRmIfCB); } HRESULT RouterInfoAggregationWrapper::EnumRtrMgrProtocolInterfaceCB( IEnumRtrMgrProtocolInterfaceCB **ppEnumRmProtIfCB) { Assert(m_spRouterInfo); return m_spRouterInfo->EnumRtrMgrProtocolInterfaceCB(ppEnumRmProtIfCB); } HRESULT RouterInfoAggregationWrapper::EnumRtrMgr( IEnumRtrMgrInfo **ppEnumRtrMgr) { Assert(m_spRouterInfo); return m_spRouterInfo->EnumRtrMgr(ppEnumRtrMgr); } HRESULT RouterInfoAggregationWrapper::FindRtrMgr( DWORD dwTransportId, IRtrMgrInfo **ppInfo) { Assert(m_spRouterInfo); return m_spRouterInfo->FindRtrMgr(dwTransportId, ppInfo); } HRESULT RouterInfoAggregationWrapper::AddRtrMgr( IRtrMgrInfo *pInfo, IInfoBase *pGlobalInfo, IInfoBase *pClientInfo) { Assert(m_spRouterInfo); return m_spRouterInfo->AddRtrMgr(pInfo, pGlobalInfo, pClientInfo); } HRESULT RouterInfoAggregationWrapper::DeleteRtrMgr( DWORD dwTransportId, BOOL fRemove) { Assert(m_spRouterInfo); return m_spRouterInfo->DeleteRtrMgr(dwTransportId, fRemove); } HRESULT RouterInfoAggregationWrapper::ReleaseRtrMgr( DWORD dwTransportId) { Assert(m_spRouterInfo); return m_spRouterInfo->ReleaseRtrMgr(dwTransportId); } HRESULT RouterInfoAggregationWrapper::EnumInterface( IEnumInterfaceInfo **ppEnumInterface) { Assert(m_spRouterInfo); return m_spRouterInfo->EnumInterface(ppEnumInterface); } HRESULT RouterInfoAggregationWrapper::FindInterface( LPCOLESTR pszInterface, IInterfaceInfo **ppInfo) { Assert(m_spRouterInfo); return m_spRouterInfo->FindInterface(pszInterface, ppInfo); } HRESULT RouterInfoAggregationWrapper::AddInterface( IInterfaceInfo *pInfo) { Assert(m_spRouterInfo); return m_spRouterInfo->AddInterface(pInfo); } HRESULT RouterInfoAggregationWrapper::DeleteInterface( LPCOLESTR pszInterface, BOOL fRemove) { Assert(m_spRouterInfo); return m_spRouterInfo->DeleteInterface(pszInterface, fRemove); } HRESULT RouterInfoAggregationWrapper::ReleaseInterface( LPCOLESTR pszInterface) { Assert(m_spRouterInfo); return m_spRouterInfo->ReleaseInterface(pszInterface); } HRESULT RouterInfoAggregationWrapper::RtrAdvise( IRtrAdviseSink *pRtrAdviseSink, LONG_PTR *pulConnection, LPARAM lUserParam) { Assert(m_spRouterInfo); return m_spRouterInfo->RtrAdvise(pRtrAdviseSink, pulConnection, lUserParam); } HRESULT RouterInfoAggregationWrapper::RtrNotify(DWORD dwChangeType, DWORD dwObjectType, LPARAM lParam) { Assert(m_spRouterInfo); return m_spRouterInfo->RtrNotify(dwChangeType, dwObjectType, lParam); } HRESULT RouterInfoAggregationWrapper::RtrUnadvise( LONG_PTR ulConnection) { Assert(m_spRouterInfo); return m_spRouterInfo->RtrUnadvise(ulConnection); } HRESULT RouterInfoAggregationWrapper::DoDisconnect() { Assert(m_spRouterInfo); return m_spRouterInfo->DoDisconnect(); } HRESULT RouterInfoAggregationWrapper::AddWeakRef() { Panic0("Should not be calling AddWeakRef from the Data object!"); return E_FAIL; } HRESULT RouterInfoAggregationWrapper::ReleaseWeakRef() { Panic0("Should not be calling ReleaseWeakRef from the Data object!"); return E_FAIL; } HRESULT RouterInfoAggregationWrapper::Destruct() { Panic0("Should not be calling Destruct from the Data object!"); return E_FAIL; } BOOL RouterInfoAggregationWrapper::IsAdminInfoSet() { Assert(m_spRouterInfo); SPIRouterAdminAccess spAdmin; spAdmin.HrQuery(m_spRouterInfo); Assert(spAdmin); return spAdmin->IsAdminInfoSet(); } LPCOLESTR RouterInfoAggregationWrapper::GetUserName() { Assert(m_spRouterInfo); SPIRouterAdminAccess spAdmin; spAdmin.HrQuery(m_spRouterInfo); Assert(spAdmin); return spAdmin->GetUserName(); } LPCOLESTR RouterInfoAggregationWrapper::GetDomainName() { Assert(m_spRouterInfo); SPIRouterAdminAccess spAdmin; spAdmin.HrQuery(m_spRouterInfo); Assert(spAdmin); return spAdmin->GetUserName(); } HRESULT RouterInfoAggregationWrapper::GetUserPassword(BYTE *pByte, int *pcPassword) { Assert(m_spRouterInfo); SPIRouterAdminAccess spAdmin; spAdmin.HrQuery(m_spRouterInfo); Assert(spAdmin); return spAdmin->GetUserPassword(pByte, pcPassword); } HRESULT RouterInfoAggregationWrapper::SetInfo(LPCOLESTR pszName, LPCOLESTR pszDomain, BYTE *pPassword, int cPassword) { Assert(m_spRouterInfo); SPIRouterAdminAccess spAdmin; spAdmin.HrQuery(m_spRouterInfo); Assert(spAdmin); return spAdmin->SetInfo(pszName, pszDomain, pPassword, cPassword); } /*!-------------------------------------------------------------------------- CreateRouterInfoAggregation Takes an existing IRouterInfo and aggregates that with the passed-in object. It returns a pointer to the non-delegating IUnknown on the IRouterInfo. This pointer is held by the controlling IUnknown. Author: KennT ---------------------------------------------------------------------------*/ TFSCORE_API(HRESULT) CreateRouterInfoAggregation(IRouterInfo *pInfo, IUnknown *punk, IUnknown **ppNonDelegatingIUnknown) { RouterInfoAggregationWrapper * pAgg = NULL; HRESULT hr = hrOK; COM_PROTECT_TRY { pAgg = new RouterInfoAggregationWrapper(pInfo, punk); *ppNonDelegatingIUnknown = pAgg->GetNonDelegatingIUnknown(); } COM_PROTECT_CATCH; return hr; } /*--------------------------------------------------------------------------- InterfaceInfoAggregationWrapper implementation ---------------------------------------------------------------------------*/ class InterfaceInfoAggregationWrapper : public IInterfaceInfo { public: InterfaceInfoAggregationWrapper(IInterfaceInfo *pInfo, IUnknown *punkOuter); virtual ~InterfaceInfoAggregationWrapper() { DEBUG_DECREMENT_INSTANCE_COUNTER(InterfaceInfoAggregationWrapper); }; // override the QI, we will use the AddRef/Release implementation // in the CDataObject DeclareIUnknownMembers(IMPL) DeclareIInterfaceInfoMembers(IMPL) IUnknown * GetNonDelegatingIUnknown() { return &m_ENonDelegatingIUnknown; } protected: LONG m_cRef; SPIInterfaceInfo m_spInterfaceInfo; DECLARE_AGGREGATION_NONDELEGATING_IUNKNOWN(InterfaceInfoAggregationWrapper) }; IMPLEMENT_AGGREGATION_IUNKNOWN(InterfaceInfoAggregationWrapper) IMPLEMENT_AGGREGATION_NONDELEGATING_IUNKNOWN(InterfaceInfoAggregationWrapper, IInterfaceInfo) DEBUG_DECLARE_INSTANCE_COUNTER(InterfaceInfoAggregationWrapper); InterfaceInfoAggregationWrapper::InterfaceInfoAggregationWrapper(IInterfaceInfo *pInfo, IUnknown *punkOuter) : m_cRef(1) { m_spInterfaceInfo.Set(pInfo); DEBUG_INCREMENT_INSTANCE_COUNTER(InterfaceInfoAggregationWrapper); if (punkOuter) m_pUnknownOuter = punkOuter; else m_pUnknownOuter = &m_ENonDelegatingIUnknown; } STDMETHODIMP_(DWORD) InterfaceInfoAggregationWrapper::GetFlags() { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->GetFlags(); } STDMETHODIMP InterfaceInfoAggregationWrapper::SetFlags(DWORD dwFlags) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->SetFlags(dwFlags); } STDMETHODIMP InterfaceInfoAggregationWrapper::Load(LPCOLESTR pszMachine, HANDLE hMachine, HANDLE hInterface) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->Load(pszMachine, hMachine, hInterface); } STDMETHODIMP InterfaceInfoAggregationWrapper::Save(LPCOLESTR pszMachine, HANDLE hMachine, HANDLE hInterface) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->Save(pszMachine, hMachine, hInterface); } STDMETHODIMP InterfaceInfoAggregationWrapper::Delete(LPCOLESTR pszMachine, HANDLE hMachine) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->Delete(pszMachine, hMachine); } STDMETHODIMP InterfaceInfoAggregationWrapper::Unload( ) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->Unload(); } STDMETHODIMP InterfaceInfoAggregationWrapper::Merge(IInterfaceInfo *pIf) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->Merge(pIf); } STDMETHODIMP_(LPCOLESTR) InterfaceInfoAggregationWrapper::GetId() { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->GetId(); } STDMETHODIMP_(DWORD) InterfaceInfoAggregationWrapper::GetInterfaceType() { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->GetInterfaceType(); } STDMETHODIMP_(LPCOLESTR) InterfaceInfoAggregationWrapper::GetDeviceName() { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->GetDeviceName(); } STDMETHODIMP_(LPCOLESTR) InterfaceInfoAggregationWrapper::GetTitle() { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->GetTitle(); } STDMETHODIMP InterfaceInfoAggregationWrapper::SetTitle( LPCOLESTR pszTitle) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->SetTitle(pszTitle); } STDMETHODIMP_(BOOL) InterfaceInfoAggregationWrapper::IsInterfaceEnabled() { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->IsInterfaceEnabled(); } STDMETHODIMP InterfaceInfoAggregationWrapper::SetInterfaceEnabledState( BOOL bEnabled) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->SetInterfaceEnabledState(bEnabled); } STDMETHODIMP InterfaceInfoAggregationWrapper::CopyCB(InterfaceCB *pifcb) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->CopyCB(pifcb); } STDMETHODIMP_(LPCOLESTR) InterfaceInfoAggregationWrapper::GetMachineName() { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->GetMachineName(); } STDMETHODIMP InterfaceInfoAggregationWrapper::SetMachineName( LPCOLESTR pszMachine) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->SetMachineName(pszMachine); } STDMETHODIMP InterfaceInfoAggregationWrapper::EnumRtrMgrInterface( IEnumRtrMgrInterfaceInfo **ppEnumRMIf) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->EnumRtrMgrInterface(ppEnumRMIf); } STDMETHODIMP InterfaceInfoAggregationWrapper::AddRtrMgrInterface( IRtrMgrInterfaceInfo *pInfo, IInfoBase *pInterfaceInfo) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->AddRtrMgrInterface(pInfo, pInterfaceInfo); } STDMETHODIMP InterfaceInfoAggregationWrapper::DeleteRtrMgrInterface( DWORD dwTransportId, BOOL fRemove) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->DeleteRtrMgrInterface(dwTransportId, fRemove); } STDMETHODIMP InterfaceInfoAggregationWrapper::ReleaseRtrMgrInterface( DWORD dwTransportId) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->ReleaseRtrMgrInterface(dwTransportId); } STDMETHODIMP InterfaceInfoAggregationWrapper::FindRtrMgrInterface( DWORD dwTransportId, IRtrMgrInterfaceInfo **ppInfo) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->FindRtrMgrInterface(dwTransportId, ppInfo); } STDMETHODIMP InterfaceInfoAggregationWrapper::RtrAdvise( IRtrAdviseSink *pRtrAdviseSink, LONG_PTR *pulConnection, LPARAM lUserParam) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->RtrAdvise(pRtrAdviseSink, pulConnection, lUserParam); } STDMETHODIMP InterfaceInfoAggregationWrapper::RtrNotify(DWORD dwChangeType, DWORD dwObjectType, LPARAM lParam) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->RtrNotify(dwChangeType, dwObjectType, lParam); } STDMETHODIMP InterfaceInfoAggregationWrapper::RtrUnadvise( LONG_PTR ulConnection) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->RtrUnadvise(ulConnection); } STDMETHODIMP InterfaceInfoAggregationWrapper::GetParentRouterInfo( IRouterInfo **ppRouterInfo) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->GetParentRouterInfo(ppRouterInfo); } STDMETHODIMP InterfaceInfoAggregationWrapper::SetParentRouterInfo( IRouterInfo *pRouterInfo) { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->SetParentRouterInfo(pRouterInfo); } HRESULT InterfaceInfoAggregationWrapper::DoDisconnect() { Assert(m_spInterfaceInfo); return m_spInterfaceInfo->DoDisconnect(); } HRESULT InterfaceInfoAggregationWrapper::AddWeakRef() { Panic0("Should not be calling AddWeakRef from the Data object!"); return E_FAIL; } HRESULT InterfaceInfoAggregationWrapper::ReleaseWeakRef() { Panic0("Should not be calling ReleaseWeakRef from the Data object!"); return E_FAIL; } HRESULT InterfaceInfoAggregationWrapper::Destruct() { Panic0("Should not be calling Destruct from the Data object!"); return E_FAIL; } /*!-------------------------------------------------------------------------- CreateInterfaceInfoAggregation Takes an existing IInterfaceInfo and aggregates that with the passed-in object. It returns a pointer to the non-delegating IUnknown on the IInterfaceInfo. This pointer is held by the controlling IUnknown. Author: KennT ---------------------------------------------------------------------------*/ TFSCORE_API(HRESULT) CreateInterfaceInfoAggregation(IInterfaceInfo *pInfo, IUnknown *punk, IUnknown **ppNonDelegatingIUnknown) { InterfaceInfoAggregationWrapper * pAgg = NULL; HRESULT hr = hrOK; COM_PROTECT_TRY { pAgg = new InterfaceInfoAggregationWrapper(pInfo, punk); *ppNonDelegatingIUnknown = pAgg->GetNonDelegatingIUnknown(); } COM_PROTECT_CATCH; return hr; } /*--------------------------------------------------------------------------- RtrMgrInfoAggregationWrapper This class is provided to use in an aggregation. ---------------------------------------------------------------------------*/ class RtrMgrInfoAggregationWrapper : public IRtrMgrInfo { public: RtrMgrInfoAggregationWrapper(IRtrMgrInfo *pInfo, IUnknown *punkOuter); virtual ~RtrMgrInfoAggregationWrapper() { DEBUG_DECREMENT_INSTANCE_COUNTER(RtrMgrInfoAggregationWrapper); }; // override the QI, we will use the AddRef/Release implementation // in the CDataObject DeclareIUnknownMembers(IMPL) DeclareIRtrMgrInfoMembers(IMPL) IUnknown * GetNonDelegatingIUnknown() { return &m_ENonDelegatingIUnknown; } protected: LONG m_cRef; SPIRtrMgrInfo m_spRtrMgrInfo; DECLARE_AGGREGATION_NONDELEGATING_IUNKNOWN(RtrMgrInfoAggregationWrapper) }; IMPLEMENT_AGGREGATION_IUNKNOWN(RtrMgrInfoAggregationWrapper) IMPLEMENT_AGGREGATION_NONDELEGATING_IUNKNOWN(RtrMgrInfoAggregationWrapper, IRtrMgrInfo) DEBUG_DECLARE_INSTANCE_COUNTER(RtrMgrInfoAggregationWrapper); RtrMgrInfoAggregationWrapper::RtrMgrInfoAggregationWrapper(IRtrMgrInfo *pInfo, IUnknown *punkOuter) : m_cRef(1) { m_spRtrMgrInfo.Set(pInfo); DEBUG_INCREMENT_INSTANCE_COUNTER(RtrMgrInfoAggregationWrapper); if (punkOuter) m_pUnknownOuter = punkOuter; else m_pUnknownOuter = &m_ENonDelegatingIUnknown; } STDMETHODIMP_(DWORD) RtrMgrInfoAggregationWrapper::GetFlags() { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->GetFlags(); } STDMETHODIMP RtrMgrInfoAggregationWrapper::SetFlags(DWORD dwFlags) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->SetFlags(dwFlags); } STDMETHODIMP RtrMgrInfoAggregationWrapper::Load(LPCOLESTR pszMachine, HANDLE hMachine, HANDLE hTransport) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->Load(pszMachine, hMachine, hTransport); } STDMETHODIMP RtrMgrInfoAggregationWrapper::Save(LPCOLESTR pszMachine, HANDLE hMachine, HANDLE hTransport, IInfoBase *pGlobal, IInfoBase *pClient, DWORD dwDeleteProtocolId) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->Save(pszMachine, hMachine, hTransport, pGlobal, pClient, dwDeleteProtocolId); } STDMETHODIMP RtrMgrInfoAggregationWrapper::Unload( ) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->Unload(); } STDMETHODIMP RtrMgrInfoAggregationWrapper::Delete(LPCOLESTR pszMachine, HANDLE hMachine) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->Delete(pszMachine, hMachine); } STDMETHODIMP RtrMgrInfoAggregationWrapper::Merge(IRtrMgrInfo *pNewRm) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->Merge(pNewRm); } STDMETHODIMP RtrMgrInfoAggregationWrapper::SetInfoBase(IInfoBase *pGlobal, IInfoBase *pClient) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->SetInfoBase(pGlobal, pClient); } STDMETHODIMP RtrMgrInfoAggregationWrapper::GetInfoBase(HANDLE hMachine, HANDLE hTransport, IInfoBase **ppGlobal, IInfoBase **ppClient) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->GetInfoBase(hMachine, hTransport, ppGlobal, ppClient); } STDMETHODIMP_(LPCOLESTR) RtrMgrInfoAggregationWrapper::GetId() { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->GetId(); } STDMETHODIMP RtrMgrInfoAggregationWrapper::SetId(LPCOLESTR pszId) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->SetId(pszId); } STDMETHODIMP_(DWORD) RtrMgrInfoAggregationWrapper::GetTransportId() { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->GetTransportId(); } STDMETHODIMP_(LPCOLESTR) RtrMgrInfoAggregationWrapper::GetTitle() { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->GetTitle(); } STDMETHODIMP RtrMgrInfoAggregationWrapper::CopyRtrMgrCB(RtrMgrCB *pRtrMgrCB) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->CopyRtrMgrCB(pRtrMgrCB); } LPCOLESTR RtrMgrInfoAggregationWrapper::GetMachineName() { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->GetMachineName(); } STDMETHODIMP RtrMgrInfoAggregationWrapper::EnumRtrMgrProtocol( IEnumRtrMgrProtocolInfo **ppEnumRtrMgrProtocol) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->EnumRtrMgrProtocol(ppEnumRtrMgrProtocol); } STDMETHODIMP RtrMgrInfoAggregationWrapper::FindRtrMgrProtocol(DWORD dwProtocolId, IRtrMgrProtocolInfo **ppInfo) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->FindRtrMgrProtocol(dwProtocolId, ppInfo); } STDMETHODIMP RtrMgrInfoAggregationWrapper::AddRtrMgrProtocol(IRtrMgrProtocolInfo *pInfo, IInfoBase *pGlobalInfo, IInfoBase *pClientInfo) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->AddRtrMgrProtocol(pInfo, pGlobalInfo, pClientInfo); } STDMETHODIMP RtrMgrInfoAggregationWrapper::SetParentRouterInfo(IRouterInfo *pRouterInfo) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->SetParentRouterInfo(pRouterInfo); } STDMETHODIMP RtrMgrInfoAggregationWrapper::GetParentRouterInfo(IRouterInfo **ppRouterInfo) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->GetParentRouterInfo(ppRouterInfo); } STDMETHODIMP RtrMgrInfoAggregationWrapper::DeleteRtrMgrProtocol( DWORD dwProtocolId, BOOL fRemove) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->DeleteRtrMgrProtocol(dwProtocolId, fRemove); } STDMETHODIMP RtrMgrInfoAggregationWrapper::ReleaseRtrMgrProtocol( DWORD dwProtocolId) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->ReleaseRtrMgrProtocol(dwProtocolId); } STDMETHODIMP RtrMgrInfoAggregationWrapper::RtrAdvise( IRtrAdviseSink *pRtrAdviseSink, LONG_PTR *pulConnection, LPARAM lUserParam) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->RtrAdvise(pRtrAdviseSink, pulConnection, lUserParam); } STDMETHODIMP RtrMgrInfoAggregationWrapper::RtrNotify(DWORD dwChangeType, DWORD dwObjectType, LPARAM lParam) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->RtrNotify(dwChangeType, dwObjectType, lParam); } STDMETHODIMP RtrMgrInfoAggregationWrapper::RtrUnadvise( LONG_PTR ulConnection) { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->RtrUnadvise(ulConnection); } HRESULT RtrMgrInfoAggregationWrapper::DoDisconnect() { Assert(m_spRtrMgrInfo); return m_spRtrMgrInfo->DoDisconnect(); } STDMETHODIMP RtrMgrInfoAggregationWrapper::AddWeakRef() { Panic0("Should not be calling AddWeakRef from the Data object!"); return E_FAIL; } STDMETHODIMP RtrMgrInfoAggregationWrapper::ReleaseWeakRef() { Panic0("Should not be calling ReleaseWeakRef from the Data object!"); return E_FAIL; } STDMETHODIMP RtrMgrInfoAggregationWrapper::Destruct() { Panic0("Should not be calling Destruct from the Data object!"); return E_FAIL; } /*!-------------------------------------------------------------------------- CreateRtrMgrInfoAggregation Takes an existing IRtrMgrInfo and aggregates that with the passed-in object. It returns a pointer to the non-delegating IUnknown on the IRtrMgrInfo. This pointer is held by the controlling IUnknown. Author: KennT ---------------------------------------------------------------------------*/ TFSCORE_API(HRESULT) CreateRtrMgrInfoAggregation(IRtrMgrInfo *pInfo, IUnknown *punk, IUnknown **ppNonDelegatingIUnknown) { RtrMgrInfoAggregationWrapper * pAgg = NULL; HRESULT hr = hrOK; COM_PROTECT_TRY { pAgg = new RtrMgrInfoAggregationWrapper(pInfo, punk); *ppNonDelegatingIUnknown = pAgg->GetNonDelegatingIUnknown(); } COM_PROTECT_CATCH; return hr; } /*--------------------------------------------------------------------------- RtrMgrProtocolInfoAggregationWrapper This class is provided to use in an aggregation. ---------------------------------------------------------------------------*/ class RtrMgrProtocolInfoAggregationWrapper : public IRtrMgrProtocolInfo { public: RtrMgrProtocolInfoAggregationWrapper(IRtrMgrProtocolInfo *pInfo, IUnknown *punkOuter); virtual ~RtrMgrProtocolInfoAggregationWrapper() { DEBUG_DECREMENT_INSTANCE_COUNTER(RtrMgrProtocolInfoAggregationWrapper); }; // override the QI, we will use the AddRef/Release implementation // in the CDataObject DeclareIUnknownMembers(IMPL) DeclareIRtrMgrProtocolInfoMembers(IMPL) IUnknown * GetNonDelegatingIUnknown() { return &m_ENonDelegatingIUnknown; } protected: LONG m_cRef; SPIRtrMgrProtocolInfo m_spRtrMgrProtocolInfo; DECLARE_AGGREGATION_NONDELEGATING_IUNKNOWN(RtrMgrProtocolInfoAggregationWrapper) }; IMPLEMENT_AGGREGATION_IUNKNOWN(RtrMgrProtocolInfoAggregationWrapper) IMPLEMENT_AGGREGATION_NONDELEGATING_IUNKNOWN(RtrMgrProtocolInfoAggregationWrapper, IRtrMgrProtocolInfo) DEBUG_DECLARE_INSTANCE_COUNTER(RtrMgrProtocolInfoAggregationWrapper); RtrMgrProtocolInfoAggregationWrapper::RtrMgrProtocolInfoAggregationWrapper(IRtrMgrProtocolInfo *pInfo, IUnknown *punkOuter) : m_cRef(1) { m_spRtrMgrProtocolInfo.Set(pInfo); DEBUG_INCREMENT_INSTANCE_COUNTER(RtrMgrProtocolInfoAggregationWrapper); if (punkOuter) m_pUnknownOuter = punkOuter; else m_pUnknownOuter = &m_ENonDelegatingIUnknown; } STDMETHODIMP_(DWORD) RtrMgrProtocolInfoAggregationWrapper::GetFlags() { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->GetFlags(); } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::SetFlags(DWORD dwFlags) { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->SetFlags(dwFlags); } STDMETHODIMP_(DWORD) RtrMgrProtocolInfoAggregationWrapper::GetProtocolId() { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->GetProtocolId(); } STDMETHODIMP_(DWORD) RtrMgrProtocolInfoAggregationWrapper::GetTransportId() { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->GetTransportId(); } STDMETHODIMP_(LPCOLESTR) RtrMgrProtocolInfoAggregationWrapper::GetTitle() { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->GetTitle(); } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::CopyCB(RtrMgrProtocolCB *pRtrMgrProtCB) { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->CopyCB(pRtrMgrProtCB); } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::RtrAdvise( IRtrAdviseSink *pRtrAdviseSink, LONG_PTR *pulConnection, LPARAM lUserParam) { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->RtrAdvise(pRtrAdviseSink, pulConnection, lUserParam); } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::RtrNotify(DWORD dwChangeType, DWORD dwObjectType, LPARAM lParam) { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->RtrNotify(dwChangeType, dwObjectType, lParam); } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::RtrUnadvise( LONG_PTR ulConnection) { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->RtrUnadvise(ulConnection); } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::GetParentRtrMgrInfo(IRtrMgrInfo **ppRm) { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->GetParentRtrMgrInfo(ppRm); } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::SetParentRtrMgrInfo(IRtrMgrInfo *pRm) { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->SetParentRtrMgrInfo(pRm); } HRESULT RtrMgrProtocolInfoAggregationWrapper::DoDisconnect() { Assert(m_spRtrMgrProtocolInfo); return m_spRtrMgrProtocolInfo->DoDisconnect(); } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::AddWeakRef() { Panic0("Should not be calling AddWeakRef from the Data object!"); return E_FAIL; } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::ReleaseWeakRef() { Panic0("Should not be calling ReleaseWeakRef from the Data object!"); return E_FAIL; } STDMETHODIMP RtrMgrProtocolInfoAggregationWrapper::Destruct() { Panic0("Should not be calling Destruct from the Data object!"); return E_FAIL; } /*!-------------------------------------------------------------------------- CreateRtrMgrProtocolInfoAggregation Takes an existing IRtrMgrProtocolInfo and aggregates that with the passed-in object. It returns a pointer to the non-delegating IUnknown on the IRtrMgrProtocolInfo. This pointer is held by the controlling IUnknown. Author: KennT ---------------------------------------------------------------------------*/ TFSCORE_API(HRESULT) CreateRtrMgrProtocolInfoAggregation(IRtrMgrProtocolInfo *pInfo, IUnknown *punk, IUnknown **ppNonDelegatingIUnknown) { RtrMgrProtocolInfoAggregationWrapper * pAgg = NULL; HRESULT hr = hrOK; COM_PROTECT_TRY { pAgg = new RtrMgrProtocolInfoAggregationWrapper(pInfo, punk); *ppNonDelegatingIUnknown = pAgg->GetNonDelegatingIUnknown(); } COM_PROTECT_CATCH; return hr; } /*--------------------------------------------------------------------------- RtrMgrInterfaceInfoAggregationWrapper This class is provided to use in an aggregation. ---------------------------------------------------------------------------*/ class RtrMgrInterfaceInfoAggregationWrapper : public IRtrMgrInterfaceInfo { public: RtrMgrInterfaceInfoAggregationWrapper(IRtrMgrInterfaceInfo *pInfo, IUnknown *punkOuter); virtual ~RtrMgrInterfaceInfoAggregationWrapper() { DEBUG_DECREMENT_INSTANCE_COUNTER(RtrMgrInterfaceInfoAggregationWrapper); }; // override the QI, we will use the AddRef/Release implementation // in the CDataObject DeclareIUnknownMembers(IMPL) DeclareIRtrMgrInterfaceInfoMembers(IMPL) IUnknown * GetNonDelegatingIUnknown() { return &m_ENonDelegatingIUnknown; } protected: LONG m_cRef; SPIRtrMgrInterfaceInfo m_spRtrMgrInterfaceInfo; DECLARE_AGGREGATION_NONDELEGATING_IUNKNOWN(RtrMgrInterfaceInfoAggregationWrapper) }; IMPLEMENT_AGGREGATION_IUNKNOWN(RtrMgrInterfaceInfoAggregationWrapper) IMPLEMENT_AGGREGATION_NONDELEGATING_IUNKNOWN(RtrMgrInterfaceInfoAggregationWrapper, IRtrMgrInterfaceInfo) DEBUG_DECLARE_INSTANCE_COUNTER(RtrMgrInterfaceInfoAggregationWrapper); RtrMgrInterfaceInfoAggregationWrapper::RtrMgrInterfaceInfoAggregationWrapper(IRtrMgrInterfaceInfo *pInfo, IUnknown *punkOuter) : m_cRef(1) { m_spRtrMgrInterfaceInfo.Set(pInfo); DEBUG_INCREMENT_INSTANCE_COUNTER(RtrMgrInterfaceInfoAggregationWrapper); if (punkOuter) m_pUnknownOuter = punkOuter; else m_pUnknownOuter = &m_ENonDelegatingIUnknown; } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::Load(LPCOLESTR pszMachine, HANDLE hMachine, HANDLE hInterface, HANDLE hTransport) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->Load(pszMachine, hMachine, hInterface, hTransport); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::Save(LPCOLESTR pszMachine, HANDLE hMachine, HANDLE hInterface, HANDLE hTransport, IInfoBase *pInterface, DWORD dwDeleteProtocolId) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->Save(pszMachine, hMachine, hInterface, hTransport, pInterface, dwDeleteProtocolId); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::Unload( ) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->Unload(); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::Delete(LPCOLESTR pszMachine, HANDLE hMachine, HANDLE hInterface) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->Delete(pszMachine, hMachine, hInterface); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::SetInfo(DWORD dwSize, PBYTE pbData) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->SetInfo(dwSize, pbData); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::GetInfoBase(HANDLE hMachine, HANDLE hInterface, HANDLE hTransport, IInfoBase **ppInterface) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->GetInfoBase(hMachine, hInterface, hTransport, ppInterface); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::SetInfoBase(HANDLE hMachine, HANDLE hInterface, HANDLE hTransport, IInfoBase *pInterface) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->SetInfoBase(hMachine, hInterface, hTransport, pInterface); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::Merge(IRtrMgrInterfaceInfo *pNewRmIf) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->Merge(pNewRmIf); } STDMETHODIMP_(LPCOLESTR) RtrMgrInterfaceInfoAggregationWrapper::GetId() { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->GetId(); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::SetId(LPCOLESTR pszId) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->SetId(pszId); } STDMETHODIMP_(DWORD) RtrMgrInterfaceInfoAggregationWrapper::GetTransportId() { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->GetTransportId(); } STDMETHODIMP_(LPCOLESTR) RtrMgrInterfaceInfoAggregationWrapper::GetInterfaceId() { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->GetInterfaceId(); } STDMETHODIMP_(DWORD) RtrMgrInterfaceInfoAggregationWrapper::GetInterfaceType() { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->GetInterfaceType(); } STDMETHODIMP_(LPCOLESTR) RtrMgrInterfaceInfoAggregationWrapper::GetTitle() { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->GetTitle(); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::SetTitle(LPCOLESTR pszTitle) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->SetTitle(pszTitle); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::CopyCB(RtrMgrInterfaceCB *pRtrMgrIfCB) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->CopyCB(pRtrMgrIfCB); } STDMETHODIMP_(LPCOLESTR) RtrMgrInterfaceInfoAggregationWrapper::GetMachineName() { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->GetMachineName(); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::SetMachineName(LPCOLESTR pszMachineName) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->SetMachineName(pszMachineName); } STDMETHODIMP_(DWORD) RtrMgrInterfaceInfoAggregationWrapper::GetFlags() { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->GetFlags(); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::SetFlags(DWORD dwFlags) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->SetFlags(dwFlags); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::EnumRtrMgrProtocolInterface( IEnumRtrMgrProtocolInterfaceInfo **ppEnumRmProtIf) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->EnumRtrMgrProtocolInterface(ppEnumRmProtIf); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::FindRtrMgrProtocolInterface(DWORD dwProtocolId, IRtrMgrProtocolInterfaceInfo **ppInfo) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->FindRtrMgrProtocolInterface(dwProtocolId, ppInfo); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::AddRtrMgrProtocolInterface(IRtrMgrProtocolInterfaceInfo *pInfo, IInfoBase *pInterfaceInfo) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->AddRtrMgrProtocolInterface(pInfo, pInterfaceInfo); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::DeleteRtrMgrProtocolInterface( DWORD dwProtocolId, BOOL fRemove) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->DeleteRtrMgrProtocolInterface(dwProtocolId, fRemove); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::ReleaseRtrMgrProtocolInterface( DWORD dwProtocolId) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->ReleaseRtrMgrProtocolInterface(dwProtocolId); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::SetParentInterfaceInfo(IInterfaceInfo *pInterfaceInfo) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->SetParentInterfaceInfo(pInterfaceInfo); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::GetParentInterfaceInfo(IInterfaceInfo **ppInterfaceInfo) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->GetParentInterfaceInfo(ppInterfaceInfo); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::RtrAdvise( IRtrAdviseSink *pRtrAdviseSink, LONG_PTR *pulConnection, LPARAM lUserParam) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->RtrAdvise(pRtrAdviseSink, pulConnection, lUserParam); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::RtrNotify(DWORD dwChangeType, DWORD dwObjectType, LPARAM lParam) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->RtrNotify(dwChangeType, dwObjectType, lParam); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::RtrUnadvise( LONG_PTR ulConnection) { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->RtrUnadvise(ulConnection); } HRESULT RtrMgrInterfaceInfoAggregationWrapper::DoDisconnect() { Assert(m_spRtrMgrInterfaceInfo); return m_spRtrMgrInterfaceInfo->DoDisconnect(); } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::AddWeakRef() { Panic0("Should not be calling AddWeakRef from the Data object!"); return E_FAIL; } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::ReleaseWeakRef() { Panic0("Should not be calling ReleaseWeakRef from the Data object!"); return E_FAIL; } STDMETHODIMP RtrMgrInterfaceInfoAggregationWrapper::Destruct() { Panic0("Should not be calling Destruct from the Data object!"); return E_FAIL; } /*!-------------------------------------------------------------------------- CreateRtrMgrInterfaceInfoAggregation Takes an existing IRtrMgrInterfaceInfo and aggregates that with the passed-in object. It returns a pointer to the non-delegating IUnknown on the IRtrMgrInterfaceInfo. This pointer is held by the controlling IUnknown. Author: KennT ---------------------------------------------------------------------------*/ TFSCORE_API(HRESULT) CreateRtrMgrInterfaceInfoAggregation(IRtrMgrInterfaceInfo *pInfo, IUnknown *punk, IUnknown **ppNonDelegatingIUnknown) { RtrMgrInterfaceInfoAggregationWrapper * pAgg = NULL; HRESULT hr = hrOK; COM_PROTECT_TRY { pAgg = new RtrMgrInterfaceInfoAggregationWrapper(pInfo, punk); *ppNonDelegatingIUnknown = pAgg->GetNonDelegatingIUnknown(); } COM_PROTECT_CATCH; return hr; } /*--------------------------------------------------------------------------- RtrMgrProtocolInterfaceInfoAggregationWrapper This class is provided to use in an aggregation. ---------------------------------------------------------------------------*/ class RtrMgrProtocolInterfaceInfoAggregationWrapper : public IRtrMgrProtocolInterfaceInfo { public: RtrMgrProtocolInterfaceInfoAggregationWrapper(IRtrMgrProtocolInterfaceInfo *pInfo, IUnknown *punkOuter); virtual ~RtrMgrProtocolInterfaceInfoAggregationWrapper() { DEBUG_DECREMENT_INSTANCE_COUNTER(RtrMgrProtocolInterfaceInfoAggregationWrapper); }; // override the QI, we will use the AddRef/Release implementation // in the CDataObject DeclareIUnknownMembers(IMPL) DeclareIRtrMgrProtocolInterfaceInfoMembers(IMPL) IUnknown * GetNonDelegatingIUnknown() { return &m_ENonDelegatingIUnknown; } protected: LONG m_cRef; SPIRtrMgrProtocolInterfaceInfo m_spRtrMgrProtocolInterfaceInfo; DECLARE_AGGREGATION_NONDELEGATING_IUNKNOWN(RtrMgrProtocolInterfaceInfoAggregationWrapper) }; IMPLEMENT_AGGREGATION_IUNKNOWN(RtrMgrProtocolInterfaceInfoAggregationWrapper) IMPLEMENT_AGGREGATION_NONDELEGATING_IUNKNOWN(RtrMgrProtocolInterfaceInfoAggregationWrapper, IRtrMgrProtocolInterfaceInfo) DEBUG_DECLARE_INSTANCE_COUNTER(RtrMgrProtocolInterfaceInfoAggregationWrapper); RtrMgrProtocolInterfaceInfoAggregationWrapper::RtrMgrProtocolInterfaceInfoAggregationWrapper(IRtrMgrProtocolInterfaceInfo *pInfo, IUnknown *punkOuter) : m_cRef(1) { m_spRtrMgrProtocolInterfaceInfo.Set(pInfo); DEBUG_INCREMENT_INSTANCE_COUNTER(RtrMgrProtocolInterfaceInfoAggregationWrapper); if (punkOuter) m_pUnknownOuter = punkOuter; else m_pUnknownOuter = &m_ENonDelegatingIUnknown; } STDMETHODIMP_(DWORD) RtrMgrProtocolInterfaceInfoAggregationWrapper::GetFlags() { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->GetFlags(); } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::SetFlags(DWORD dwFlags) { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->SetFlags(dwFlags); } STDMETHODIMP_(DWORD) RtrMgrProtocolInterfaceInfoAggregationWrapper::GetProtocolId() { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->GetProtocolId(); } STDMETHODIMP_(DWORD) RtrMgrProtocolInterfaceInfoAggregationWrapper::GetTransportId() { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->GetTransportId(); } STDMETHODIMP_(LPCOLESTR) RtrMgrProtocolInterfaceInfoAggregationWrapper::GetTitle() { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->GetTitle(); } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::SetTitle(LPCOLESTR pszTitle) { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->SetTitle(pszTitle); } STDMETHODIMP_(LPCOLESTR) RtrMgrProtocolInterfaceInfoAggregationWrapper::GetInterfaceId() { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->GetInterfaceId(); } STDMETHODIMP_(DWORD) RtrMgrProtocolInterfaceInfoAggregationWrapper::GetInterfaceType() { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->GetInterfaceType(); } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::CopyCB(RtrMgrProtocolInterfaceCB *pRtrMgrProtIfCB) { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->CopyCB(pRtrMgrProtIfCB); } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::RtrAdvise( IRtrAdviseSink *pRtrAdviseSink, LONG_PTR *pulConnection, LPARAM lUserParam) { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->RtrAdvise(pRtrAdviseSink, pulConnection, lUserParam); } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::RtrNotify(DWORD dwChangeType, DWORD dwObjectType, LPARAM lParam) { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->RtrNotify(dwChangeType, dwObjectType, lParam); } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::RtrUnadvise( LONG_PTR ulConnection) { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->RtrUnadvise(ulConnection); } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::GetParentRtrMgrInterfaceInfo(IRtrMgrInterfaceInfo **ppRm) { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->GetParentRtrMgrInterfaceInfo(ppRm); } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::SetParentRtrMgrInterfaceInfo(IRtrMgrInterfaceInfo *pRm) { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->SetParentRtrMgrInterfaceInfo(pRm); } HRESULT RtrMgrProtocolInterfaceInfoAggregationWrapper::DoDisconnect() { Assert(m_spRtrMgrProtocolInterfaceInfo); return m_spRtrMgrProtocolInterfaceInfo->DoDisconnect(); } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::AddWeakRef() { Panic0("Should not be calling AddWeakRef from the Data object!"); return E_FAIL; } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::ReleaseWeakRef() { Panic0("Should not be calling ReleaseWeakRef from the Data object!"); return E_FAIL; } STDMETHODIMP RtrMgrProtocolInterfaceInfoAggregationWrapper::Destruct() { Panic0("Should not be calling Destruct from the Data object!"); return E_FAIL; } /*!-------------------------------------------------------------------------- CreateRtrMgrProtocolInterfaceInfoAggregation Takes an existing IRtrMgrProtocolInterfaceInfo and aggregates that with the passed-in object. It returns a pointer to the non-delegating IUnknown on the IRtrMgrProtocolInterfaceInfo. This pointer is held by the controlling IUnknown. Author: KennT ---------------------------------------------------------------------------*/ TFSCORE_API(HRESULT) CreateRtrMgrProtocolInterfaceInfoAggregation(IRtrMgrProtocolInterfaceInfo *pInfo, IUnknown *punk, IUnknown **ppNonDelegatingIUnknown) { RtrMgrProtocolInterfaceInfoAggregationWrapper * pAgg = NULL; HRESULT hr = hrOK; COM_PROTECT_TRY { pAgg = new RtrMgrProtocolInterfaceInfoAggregationWrapper(pInfo, punk); *ppNonDelegatingIUnknown = pAgg->GetNonDelegatingIUnknown(); } COM_PROTECT_CATCH; return hr; }