You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
305 lines
5.8 KiB
305 lines
5.8 KiB
#include "precomp.h"
|
|
#include "confroom.h"
|
|
|
|
// NetMeeting SDK stuff
|
|
#include "SDKInternal.h"
|
|
#include "NmConference.h"
|
|
#include "NmMember.h"
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Construction and Destruction
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
CNmMemberObj::CNmMemberObj(): m_bIsSelf(false)
|
|
{
|
|
DBGENTRY(CNmMemberObj::CNmMemberObj);
|
|
DBGEXIT(CNmMemberObj::CNmMemberObj);
|
|
}
|
|
|
|
CNmMemberObj::~CNmMemberObj()
|
|
{
|
|
DBGENTRY(CNmMemberObj::~CNmMemberObj);
|
|
|
|
DBGEXIT(CNmMemberObj::~CNmMemberObj);
|
|
}
|
|
|
|
//static
|
|
HRESULT CNmMemberObj::CreateInstance(CNmConferenceObj* pConfObj, INmMember* pInternalINmMember, INmMember** ppMember)
|
|
{
|
|
DBGENTRY(CNmMemberObj::CreateInstance);
|
|
HRESULT hr = E_OUTOFMEMORY;
|
|
|
|
CComObject<CNmMemberObj>* p = NULL;
|
|
p = new CComObject<CNmMemberObj>(NULL);
|
|
|
|
if (p != NULL)
|
|
{
|
|
CNmMemberObj* pThis = static_cast<CNmMemberObj*>(p);
|
|
|
|
pThis->m_spInternalINmMember = pInternalINmMember;
|
|
pThis->m_pConferenceObj = pConfObj;
|
|
|
|
pThis->m_bIsSelf = (pInternalINmMember && (S_OK == pInternalINmMember->IsSelf()));
|
|
|
|
if(pThis != NULL)
|
|
{
|
|
pThis->SetVoid(NULL);
|
|
|
|
// We do this so that we don't accidentally Release out of memory
|
|
++pThis->m_dwRef;
|
|
hr = pThis->FinalConstruct();
|
|
--pThis->m_dwRef;
|
|
|
|
if(hr == S_OK)
|
|
{
|
|
hr = pThis->QueryInterface(IID_INmMember, reinterpret_cast<void**>(ppMember));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
|
|
if(FAILED(hr))
|
|
{
|
|
delete p;
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::CreateInstance,hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// INmMember methods
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
STDMETHODIMP CNmMemberObj::GetName(BSTR *pbstrName)
|
|
{
|
|
DBGENTRY(CNmMemberObj::GetName);
|
|
HRESULT hr = S_OK;
|
|
|
|
if(m_spInternalINmMember)
|
|
{
|
|
hr = m_spInternalINmMember->GetName(pbstrName);
|
|
}
|
|
else
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::GetName,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::GetID(ULONG * puID)
|
|
{
|
|
DBGENTRY(CNmMemberObj::GetID);
|
|
HRESULT hr = S_OK;
|
|
|
|
if(m_spInternalINmMember)
|
|
{
|
|
hr = m_spInternalINmMember->GetID(puID);
|
|
}
|
|
else
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::GetID,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::GetNmVersion(ULONG *puVersion)
|
|
{
|
|
DBGENTRY(CNmMemberObj::GetNmVersion);
|
|
HRESULT hr = S_OK;
|
|
|
|
if(m_spInternalINmMember)
|
|
{
|
|
m_spInternalINmMember->GetNmVersion(puVersion);
|
|
}
|
|
else
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
|
|
|
|
DBGEXIT_HR(CNmMemberObj::GetNmVersion,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::GetAddr(BSTR *pbstrAddr, NM_ADDR_TYPE *puType)
|
|
{
|
|
DBGENTRY(CNmMemberObj::GetAddr);
|
|
HRESULT hr = S_OK;
|
|
|
|
if(m_spInternalINmMember)
|
|
{
|
|
hr = m_spInternalINmMember->GetAddr(pbstrAddr, puType);
|
|
}
|
|
else
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::GetAddr,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::GetUserData(REFGUID rguid, BYTE **ppb, ULONG *pcb)
|
|
{
|
|
DBGENTRY(CNmMemberObj::GetUserData);
|
|
HRESULT hr = S_OK;
|
|
|
|
if(m_spInternalINmMember)
|
|
{
|
|
m_spInternalINmMember->GetUserData(rguid, ppb, pcb);
|
|
}
|
|
else
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::GetUserData,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::GetConference(INmConference **ppConference)
|
|
{
|
|
DBGENTRY(CNmMemberObj::GetConference);
|
|
HRESULT hr = S_OK;
|
|
|
|
if(ppConference)
|
|
{
|
|
hr = E_FAIL;
|
|
|
|
if(m_pConferenceObj)
|
|
{
|
|
IUnknown * pUnk = m_pConferenceObj->GetUnknown();
|
|
if(SUCCEEDED(pUnk->QueryInterface(IID_INmConference, reinterpret_cast<void**>(ppConference))))
|
|
{
|
|
hr = S_OK;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_POINTER;
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::GetConference,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::GetNmchCaps(ULONG *puchCaps)
|
|
{
|
|
DBGENTRY(CNmMemberObj::GetNmchCaps);
|
|
HRESULT hr = S_OK;
|
|
|
|
if(m_spInternalINmMember)
|
|
{
|
|
hr = m_spInternalINmMember->GetNmchCaps(puchCaps);
|
|
}
|
|
else
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::GetNmchCaps,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::GetShareState(NM_SHARE_STATE *puState)
|
|
{
|
|
DBGENTRY(CNmMemberObj::GetShareState);
|
|
HRESULT hr = E_POINTER;
|
|
|
|
if(puState)
|
|
{
|
|
ULONG ulGCCId;
|
|
hr = GetID(&ulGCCId);
|
|
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
hr = ::GetShareState(ulGCCId, puState);
|
|
}
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::GetShareState,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::IsSelf(void)
|
|
{
|
|
DBGENTRY(CNmMemberObj::IsSelf);
|
|
HRESULT hr = S_OK;
|
|
|
|
hr = m_bIsSelf ? S_OK : S_FALSE;
|
|
|
|
DBGEXIT_HR(CNmMemberObj::IsSelf,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::IsMCU(void)
|
|
{
|
|
DBGENTRY(CNmMemberObj::IsMCU);
|
|
HRESULT hr = S_OK;
|
|
|
|
if(m_spInternalINmMember)
|
|
{
|
|
hr = m_spInternalINmMember->IsMCU();
|
|
}
|
|
else
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::IsMCU,hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP CNmMemberObj::Eject(void)
|
|
{
|
|
DBGENTRY(CNmMemberObj::Eject);
|
|
HRESULT hr = S_OK;
|
|
|
|
if(m_spInternalINmMember)
|
|
{
|
|
hr = m_spInternalINmMember->Eject();
|
|
}
|
|
else
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
|
|
DBGEXIT_HR(CNmMemberObj::Eject,hr);
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// IInternalMemberObj methods
|
|
/////////////////////////////////////////////////////////////////////////
|
|
STDMETHODIMP CNmMemberObj::GetInternalINmMember(INmMember** ppMember)
|
|
{
|
|
DBGENTRY(CNmMemberObj::GetInternalINmMember);
|
|
HRESULT hr = S_OK;
|
|
|
|
ASSERT(ppMember);
|
|
|
|
*ppMember = m_spInternalINmMember;
|
|
(*ppMember)->AddRef();
|
|
|
|
DBGEXIT_HR(CNmMemberObj::GetInternalINmMember,hr);
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
|
|
|