Leaked source code of windows server 2003
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

/***************************************************************************/
/** 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_ */