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.
243 lines
8.2 KiB
243 lines
8.2 KiB
/***************************************************************************/
|
|
/** Microsoft Windows **/
|
|
/** Copyright(c) Microsoft Corp., 1995-1996 **/
|
|
/***************************************************************************/
|
|
|
|
//
|
|
// File: iconf.h
|
|
// Created: ChrisPi 12/6/95
|
|
// Modified:
|
|
//
|
|
// The CConfObject class is defined
|
|
//
|
|
|
|
#ifndef _ICONF_H_
|
|
#define _ICONF_H_
|
|
|
|
#include <inodecnt.h>
|
|
#include "h323.h"
|
|
#include "connpnts.h"
|
|
#include "medialst.h"
|
|
#include <atlbase.h>
|
|
#include <lst.h>
|
|
|
|
enum CONFSTATE
|
|
{
|
|
CS_UNINITIALIZED,
|
|
CS_CREATING,
|
|
CS_COMING_UP,
|
|
CS_RUNNING,
|
|
CS_GOING_DOWN,
|
|
CS_TERMINATED
|
|
};
|
|
|
|
enum AC_TYPE
|
|
{
|
|
CLT_T120,
|
|
CLT_H323
|
|
};
|
|
|
|
class CNmMember;
|
|
class CNmChannelAudio;
|
|
class CNmChannelVideo;
|
|
class CNmChannelData;
|
|
|
|
class CConfObject : public INmConference2, public CConnectionPointContainer,
|
|
public IStreamEventNotify
|
|
{
|
|
protected:
|
|
COBLIST m_MemberList;
|
|
COBLIST m_DataChannelGUIDS;
|
|
|
|
CNmChannelAudio * m_pChannelAudioLocal;
|
|
CNmChannelVideo * m_pChannelVideoLocal;
|
|
CNmChannelAudio * m_pChannelAudioRemote;
|
|
CNmChannelVideo * m_pChannelVideoRemote;
|
|
IH323ConfAdvise * m_pIH323ConfAdvise;
|
|
// Attributes:
|
|
|
|
CONFSTATE m_csState;
|
|
CONF_HANDLE m_hConf;
|
|
BOOL m_fConferenceCreated;
|
|
BOOL m_fServerMode;
|
|
|
|
BSTR m_bstrConfName;
|
|
BSTR m_bstrConfPassword;
|
|
PBYTE m_pbConfHashedPassword;
|
|
DWORD m_cbConfHashedPassword;
|
|
|
|
NM30_MTG_PERMISSIONS m_attendeePermissions;
|
|
UINT m_maxParticipants;
|
|
|
|
CNmMember * m_pMemberLocal;
|
|
UINT m_uDataMembers;
|
|
UINT m_uH323Endpoints;
|
|
UINT m_uMembers;
|
|
UINT m_ourNodeID;
|
|
UINT m_uGCCConferenceID;
|
|
ULONG m_cRef;
|
|
BOOL m_fSecure;
|
|
|
|
VOID AddMember(CNmMember * pMember, IH323Endpoint * pConnection);
|
|
VOID RemoveMember(POSITION pos);
|
|
VOID RemoveMember(CNmMember * pMember)
|
|
{
|
|
POSITION pos = m_MemberList.GetPosition(pMember);
|
|
if (NULL != pos)
|
|
{
|
|
RemoveMember(pos);
|
|
}
|
|
}
|
|
VOID ResetDataMember(CNmMember * pMember,
|
|
ROSTER_DATA_HANDLE hData);
|
|
VOID RemoveOldDataMembers(int nExpected);
|
|
CNmMember * MatchDataToH323Member(REFGUID pguidNodeId,
|
|
UINT uNodeId,
|
|
PVOID pvUserInfo);
|
|
VOID AddDataToH323Member(CNmMember * pMember,
|
|
PVOID pvUserInfo,
|
|
UINT cbUserInfo,
|
|
UINT uCaps,
|
|
NC_ROSTER_NODE_ENTRY* pRosterNode);
|
|
CNmMember * CreateDataMember(BOOL fLocal,
|
|
REFGUID pguidNodeId,
|
|
PVOID pvUserInfo,
|
|
UINT cbUserInfo,
|
|
UINT uCaps,
|
|
NC_ROSTER_NODE_ENTRY* pRosterNode);
|
|
CNmMember * MatchH323ToDataMembers(REFGUID pguidNodeId,
|
|
IH323Endpoint * pConnection);
|
|
|
|
VOID CreateMember(IH323Endpoint * pConnection, REFGUID rguidNode, UINT uNodeID);
|
|
VOID AddH323ToDataMember(CNmMember * pMember, IH323Endpoint * pConnection);
|
|
VOID RemoveH323FromDataMember(CNmMember * pMember, IH323Endpoint * pConnection);
|
|
VOID SetT120State(CONFSTATE state);
|
|
VOID OnH323ChannelChange(DWORD dwFlags, BOOL fIncoming, BOOL fOpen, ICommChannel *pIChannel);
|
|
VOID AddMemberToAVChannels(CNmMember *pMember);
|
|
VOID RemoveMemberFromAVChannels(CNmMember *pMember);
|
|
VOID CreateAVChannels(IH323Endpoint * pConnection, CMediaList* pMediaList);
|
|
VOID OpenAVChannels(IH323Endpoint * pConnection, CMediaList* pMediaList);
|
|
VOID DestroyAVChannels();
|
|
ICommChannel * CreateT120Channel(IH323Endpoint * pConnection, CMediaList* pMediaList);
|
|
VOID OpenT120Channel(IH323Endpoint * pConnection, CMediaList* pMediaList, ICommChannel *pChannelT120);
|
|
VOID CheckState(NM_CONFERENCE_STATE pState);
|
|
|
|
HRESULT __stdcall EventNotification(UINT uDirection, UINT uMediaType, UINT uEventCode, UINT uSubCode);
|
|
|
|
|
|
public:
|
|
|
|
// Methods:
|
|
|
|
CConfObject();
|
|
~CConfObject();
|
|
VOID Init(IH323ConfAdvise * pci) {m_pIH323ConfAdvise = pci; };
|
|
VOID OnConferenceCreated() {m_fConferenceCreated = TRUE; }
|
|
VOID OnMemberUpdated(INmMember *pMember);
|
|
VOID OnChannelUpdated(INmChannel *pChannel);
|
|
|
|
HRESULT CreateConference(void);
|
|
HRESULT JoinConference(LPCWSTR pcwszConferenceName,
|
|
LPCWSTR pcwszPassword,
|
|
LPCSTR pcszAddress,
|
|
BSTR bstrUserString,
|
|
BOOL fRetry = FALSE);
|
|
HRESULT InviteConference(LPCSTR pszAddr,
|
|
BSTR bstrUserString,
|
|
REQUEST_HANDLE *phRequest);
|
|
HRESULT LeaveConference(BOOL fForceLeave=TRUE);
|
|
HRESULT CancelInvite(REQUEST_HANDLE hRequest)
|
|
{
|
|
if (NULL == m_hConf)
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
return m_hConf->CancelInvite(hRequest);
|
|
}
|
|
|
|
HRESULT LeaveH323(BOOL fKeepAV);
|
|
|
|
// Properties:
|
|
|
|
BSTR GetConfName() { return m_bstrConfName; };
|
|
UINT GetOurNodeID() { return m_ourNodeID; };
|
|
UINT GetGCCConferenceID() { return m_uGCCConferenceID; };
|
|
UINT GetNumMembers() { return m_uMembers; };
|
|
BOOL InCall() { return (m_uMembers > 0); };
|
|
COBLIST* GetMemberList() { return &m_MemberList; };
|
|
CONF_HANDLE GetConfHandle() { return m_hConf; };
|
|
CONFSTATE GetT120State() { return m_csState; };
|
|
BOOL IsConferenceActive() { return m_hConf!= NULL; };
|
|
BOOL IsConferenceCreated() { return m_fConferenceCreated; };
|
|
BOOL IsConfObjSecure() { return m_fSecure; };
|
|
CNmMember * GetLocalMember() { return m_pMemberLocal; };
|
|
NM30_MTG_PERMISSIONS GetConfAttendeePermissions() { return m_attendeePermissions; }
|
|
UINT GetConfMaxParticipants() { return m_maxParticipants; }
|
|
|
|
DWORD GetDwUserIdLocal(void);
|
|
HRESULT GetMediaChannel (GUID *pmediaID,BOOL bSendDirection, IMediaChannel **ppI);
|
|
|
|
VOID SetConfName(BSTR bstr);
|
|
VOID SetConfPassword(BSTR bstr);
|
|
VOID SetConfHashedPassword(BSTR bstr);
|
|
VOID SetConfSecurity(BOOL fSecure);
|
|
VOID SetConfAttendeePermissions(NM30_MTG_PERMISSIONS attendeePermissions);
|
|
VOID SetConfMaxParticipants(UINT maxParticipants);
|
|
|
|
CNmMember * PMemberFromNodeGuid(REFGUID pguidNode);
|
|
CNmMember * PMemberFromGCCID(UINT uNodeID);
|
|
CNmMember * PMemberFromH323Endpoint(IH323Endpoint * pConnection);
|
|
CNmMember * PDataMemberFromName(PCWSTR pwszName);
|
|
|
|
// Event Handlers:
|
|
|
|
VOID OnT120Connected(IH323Endpoint * pConnection, UINT uNodeID);
|
|
|
|
// Data Conferencing (R1.1, T.120) events from NCUI:
|
|
BOOL OnRosterChanged(PNC_ROSTER pRoster);
|
|
BOOL OnT120Invite(CONF_HANDLE hConference, BOOL fSecure);
|
|
BOOL OnConferenceEnded();
|
|
BOOL OnConferenceStarted(CONF_HANDLE hNewConf,
|
|
HRESULT Result);
|
|
|
|
// H323 Connection events from opncui.cpp:
|
|
VOID OnH323Connected(IH323Endpoint * pConnection, DWORD dwFlags, BOOL fAddMember, REFGUID rguidNode);
|
|
VOID OnH323Disconnected(IH323Endpoint * pConnection, BOOL fHasAV);
|
|
VOID OnAudioChannelStatus(ICommChannel *pIChannel, IH323Endpoint * lpConnection, DWORD dwStatus);
|
|
VOID OnVideoChannelStatus(ICommChannel *pIChannel, IH323Endpoint * lpConnection, DWORD dwStatus);
|
|
|
|
// INmConference
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
STDMETHODIMP_(ULONG) Release(void);
|
|
STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppvObj);
|
|
|
|
STDMETHODIMP GetName(BSTR *pbstrName);
|
|
STDMETHODIMP GetID(ULONG *puID);
|
|
STDMETHODIMP GetState(NM_CONFERENCE_STATE *pState);
|
|
STDMETHODIMP GetNmchCaps(ULONG *puchCaps);
|
|
STDMETHODIMP GetTopProvider(INmMember **ppMember);
|
|
STDMETHODIMP EnumMember(IEnumNmMember **ppEnum);
|
|
STDMETHODIMP GetMemberCount(ULONG *puCount);
|
|
STDMETHODIMP EnumChannel(IEnumNmChannel **ppEnum);
|
|
STDMETHODIMP GetChannelCount(ULONG *puCount);
|
|
STDMETHODIMP CreateDataChannel(INmChannelData **ppChannel, REFGUID rguid);
|
|
STDMETHODIMP IsHosting(void);
|
|
STDMETHODIMP Host(void);
|
|
STDMETHODIMP Leave(void);
|
|
STDMETHODIMP LaunchRemote(REFGUID rguid, INmMember *pMember);
|
|
|
|
// INmConference3
|
|
STDMETHODIMP DisconnectAV(INmMember *pMember);
|
|
STDMETHODIMP ConnectAV(INmMember *pMember);
|
|
STDMETHODIMP GetConferenceHandle(DWORD_PTR *pdwHandle);
|
|
STDMETHODIMP CreateDataChannelEx(INmChannelData **ppChannel, REFGUID rguid, BYTE* pER);
|
|
|
|
void _EraseDataChannelGUIDS(void);
|
|
void RemoveDataChannelGUID(REFGUID rguid);
|
|
};
|
|
|
|
CConfObject * GetConfObject(void);
|
|
HRESULT GetConference(INmConference **ppConference);
|
|
COBLIST * GetMemberList(void);
|
|
|
|
#endif /* _ICONF_H_ */
|