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.
 
 
 
 
 
 

328 lines
10 KiB

// File: confroom.h
#ifndef _CONFROOM_H_
#define _CONFROOM_H_
#include <ias.h>
#include "MRUList.h"
#include "AudioCtl.h"
#include "ConfUtil.h"
#include "callto.h"
class CTopWindow;
class CMainUI;
class CSeparator;
class CRoomListView;
class CConfStatusBar;
class CPopupMsg;
class CFloatToolbar;
class CVideoWindow;
class CParticipant;
class CComponentWnd;
class CAudioControl;
class CCall;
struct IComponentWnd;
struct IConferenceLink;
struct TOOLSMENUSTRUCT;
struct MYOWNERDRAWSTRUCT;
struct RichAddressInfo;
interface IEnumRichAddressInfo;
interface IConferenceChangeHandler : public IUnknown
{
public:
virtual void OnCallStarted() = 0;
virtual void OnCallEnded() = 0;
virtual void OnAudioLevelChange(BOOL fSpeaker, DWORD dwVolume) = 0;
virtual void OnAudioMuteChange(BOOL fSpeaker, BOOL fMute) = 0;
virtual void OnChangeParticipant(CParticipant *pPart, NM_MEMBER_NOTIFY uNotify) = 0;
virtual void OnChangePermissions() = 0;
virtual void OnVideoChannelChanged(NM_CHANNEL_NOTIFY uNotify, INmChannel *pChannel) = 0;
} ;
class CConfRoom : RefCount, INmConferenceNotify2, IAppSharingNotify, IAudioEvent
{
friend class CNetMeetingObj;
friend bool IsSpeakerMuted();
friend bool IsMicMuted();
friend void MuteSpeaker(BOOL fMute);
friend void MuteMicrophone(BOOL fMute);
friend DWORD GetRecorderVolume();
friend DWORD GetSpeakerVolume();
friend void SetRecorderVolume(DWORD dw);
friend void SetSpeakerVolume(DWORD dw);
friend CVideoWindow* GetLocalVideo();
friend CVideoWindow* GetRemoteVideo();
private:
CTopWindow * m_pTopWindow;
CSimpleArray<CParticipant*> m_PartList; // CParticipant list
CCopyableArray<IConferenceChangeHandler*> m_CallHandlerList;
CParticipant * m_pPartLocal;
UINT m_cParticipants;
DWORD m_dwConfCookie;
INmConference2 * m_pInternalNmConference;
CAudioControl * m_pAudioControl;
IAppSharing * m_pAS;
NM30_MTG_PERMISSIONS m_settings; // Settings for the meeting
NM30_MTG_PERMISSIONS m_attendeePermissions; // Everybody BUT host
BOOL m_fTopProvider : 1; // TRUE if we're the top provider
BOOL m_fGetPermissions : 1;
BOOL LeaveConference(void);
VOID SaveSettings();
// handlers:
VOID OnCallStarted();
VOID OnCallEnded();
void OnChangeParticipant(CParticipant *pPart, NM_MEMBER_NOTIFY uNotify);
void OnChangePermissions();
BOOL OnPersonJoined(INmMember * pMember);
BOOL OnPersonLeft(INmMember * pMember);
VOID OnPersonChanged(INmMember * pMember);
VOID CheckTopProvider(void);
DWORD GetCallFlags();
public:
CConfRoom();
~CConfRoom();
// IUnknown methods:
//
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppvObj);
//
// INmConferenceNotify2 methods:
//
STDMETHODIMP NmUI(CONFN uNotify);
STDMETHODIMP StateChanged(NM_CONFERENCE_STATE uState);
STDMETHODIMP MemberChanged(NM_MEMBER_NOTIFY uNotify, INmMember *pMember);
STDMETHODIMP ChannelChanged(NM_CHANNEL_NOTIFY uNotify, INmChannel *pChannel);
STDMETHODIMP StreamEvent(NM_STREAMEVENT uEvent, UINT uSubCode,INmChannel __RPC_FAR *pChannel);
STDMETHODIMP OnConferenceCreated(INmConference *pConference);
//
// IAppSharingNotify methods
//
STDMETHODIMP OnReadyToShare(BOOL fReady);
STDMETHODIMP OnShareStarted(void);
STDMETHODIMP OnSharingStarted(void);
STDMETHODIMP OnShareEnded(void);
STDMETHODIMP OnPersonJoined(IAS_GCC_ID gccMemberID);
STDMETHODIMP OnPersonLeft(IAS_GCC_ID gccMemberID);
STDMETHODIMP OnStartInControl(IAS_GCC_ID gccOfMemberID);
STDMETHODIMP OnStopInControl(IAS_GCC_ID gccOfMemberID);
STDMETHODIMP OnPausedInControl(IAS_GCC_ID gccOfMemberID);
STDMETHODIMP OnUnpausedInControl(IAS_GCC_ID gccOfMemberID);
STDMETHODIMP OnControllable(BOOL fControllable);
STDMETHODIMP OnStartControlled(IAS_GCC_ID gccByMemberID);
STDMETHODIMP OnStopControlled(IAS_GCC_ID gccByMemberID);
STDMETHODIMP OnPausedControlled(IAS_GCC_ID gccByMemberID);
STDMETHODIMP OnUnpausedControlled(IAS_GCC_ID gccByMemberID);
virtual void OnLevelChange(BOOL fSpeaker, DWORD dwVolume);
virtual void OnMuteChange(BOOL fSpeaker, BOOL fMute);
// end IGenWindow interface
// Public methods:
BOOL Init();
HWND Create(BOOL fShowUI);
VOID CleanUp();
BOOL BringToFront();
VOID UpdateUI(DWORD dwUIMask);
VOID ForceWindowResize();
BOOL FIsClosing();
CTopWindow * GetTopWindow() { return m_pTopWindow; }
HWND GetTopHwnd();
HPALETTE GetPalette();
CSimpleArray<CParticipant*>& GetParticipantList()
{ return m_PartList; }
DWORD GetMeetingPermissions(void) { return m_attendeePermissions; }
DWORD GetMeetingSettings(void) { return m_settings; }
void CmdShowFileTransfer(void);
void CmdShowSharing(void);
void CmdShowMeetingSettings(HWND hwnd);
HRESULT FreeAddress(RichAddressInfo **ppAddr);
HRESULT CopyAddress(RichAddressInfo *pAddrIn,
RichAddressInfo **ppAddrOut);
HRESULT
ResolveAndCall
(
const HWND parentWindow,
const TCHAR * const displayName,
const RichAddressInfo * const rai,
const bool secure
);
HRESULT GetRecentAddresses(IEnumRichAddressInfo **ppEnum);
CVideoWindow* GetLocalVideo();
CVideoWindow* GetRemoteVideo();
CAudioControl* GetAudioControl() { return(m_pAudioControl); }
BOOL FIsConferenceActive(void) { return NULL != GetActiveConference(); }
INmConference2* GetActiveConference(void);
INmConference2* GetConference() { return m_pInternalNmConference; }
DWORD GetConferenceStatus(LPTSTR pszStatus, int cchMax, UINT * puID);
HRESULT HostConference(LPCTSTR pcszName, LPCTSTR pcszPassword, BOOL fSecure, DWORD permitFlags, UINT maxParticipants);
void OnCommand(HWND hwnd, int wCommand, HWND hwndCtl, UINT codeNotify);
HRESULT GetSelectedAddress(LPTSTR pszAddress, UINT cchAddress,
LPTSTR pszEmail=NULL, UINT cchEmail=0,
LPTSTR pszName=NULL, UINT cchName=0);
// Application Sharing Functions
BOOL FCanShare();
BOOL FIsSharingAvailable();
void LaunchHostUI(void);
BOOL FInShare();
BOOL FIsSharing();
BOOL FIsControllable();
HRESULT GetPersonShareStatus(UINT gcc, IAS_PERSON_STATUS * pas);
HRESULT AllowControl(BOOL fAllow);
HRESULT RevokeControl(UINT gccTo);
HRESULT GiveControl(UINT gccTo);
HRESULT CancelGiveControl(UINT gccTo);
// the following methods are used by scrapi only
HRESULT CmdShare(HWND hwnd);
HRESULT CmdUnshare(HWND hwnd);
BOOL FIsWindowShareable(HWND hwnd);
BOOL FIsWindowShared(HWND hwnd);
HRESULT GetShareableApps(IAS_HWND_ARRAY** ppList);
HRESULT FreeShareableApps(IAS_HWND_ARRAY* pList);
// Audio Functions
VOID SetSpeakerVolume(DWORD dwLevel);
VOID SetRecorderVolume(DWORD dwLevel);
VOID MuteSpeaker(BOOL fMute);
VOID MuteMicrophone(BOOL fMute);
VOID OnAudioDeviceChanged();
VOID OnAGC_Changed();
VOID OnSilenceLevelChanged();
// Member Functions
CParticipant * GetH323Remote(void);
CParticipant * ParticipantFromINmMember(INmMember * pMember);
CParticipant * GetLocalParticipant() {return m_pPartLocal;}
BOOL FTopProvider() {return m_fTopProvider;}
VOID AddConferenceChangeHandler(IConferenceChangeHandler *pch);
VOID RemoveConferenceChangeHandler(IConferenceChangeHandler *pch);
IAppSharing *GetAppSharing() { return(m_pAS); }
BOOL CanCloseChat(HWND hwndMain);
BOOL CanCloseWhiteboard(HWND hwndMain);
BOOL CanCloseFileTransfer(HWND hwndMain);
void ToggleLdapLogon();
// Stuff needed by CTopWindow
UINT GetMemberCount(void) { return m_cParticipants; }
BOOL OnHangup(HWND hwndParent, BOOL fNeedConfirm=TRUE);
BOOL FHasChildNodes(void);
VOID TerminateAppSharing(void);
VOID FreePartList(void);
VOID StartAppSharing(void);
BOOL IsSharingAllowed();
BOOL IsNewWhiteboardAllowed();
BOOL IsOldWhiteboardAllowed();
BOOL IsChatAllowed();
BOOL IsFileTransferAllowed();
BOOL IsNewCallAllowed();
static HRESULT HangUp(BOOL bUserPrompt = TRUE);
// Global UI shutdown handler:
static VOID UIEndSession(BOOL fLogoff);
static
void
get_securitySettings
(
bool & userAlterable,
bool & secure
);
};
HRESULT ShareWindow(HWND hWnd);
HRESULT UnShareWindow(HWND hWnd);
HRESULT GetWindowState(NM_SHAPP_STATE* pState, HWND hWnd);
BOOL AllowingControl();
HRESULT GetShareableApps(IAS_HWND_ARRAY** ppList);
HRESULT FreeShareableApps(IAS_HWND_ARRAY * pList);
// Global utility functions
BOOL FTopProvider(void);
BOOL FRejectIncomingCalls(void);
BOOL FIsConfRoomClosing(void);
extern CConfRoom * g_pConfRoom;
inline CConfRoom * GetConfRoom(void) {return g_pConfRoom; }
inline CTopWindow * GetTopWindow(void)
{ return(NULL == g_pConfRoom ? NULL : g_pConfRoom->GetTopWindow()); }
HRESULT GetShareState(ULONG ulGCCId, NM_SHARE_STATE *puState);
BOOL ConfRoomInit(HANDLE hInstance);
BOOL CreateConfRoomWindow(BOOL fShowUI = TRUE);
DWORD MapNmAddrTypeToNameType(NM_ADDR_TYPE addrType);
HRESULT AllowControl(bool bAllowControl);
HRESULT RevokeControl(UINT gccID);
bool IsSpeakerMuted();
bool IsMicMuted();
DWORD GetRecorderVolume();
DWORD GetSpeakerVolume();
BOOL CmdShowNewWhiteboard(LPCTSTR szFile);
BOOL CmdShowOldWhiteboard(LPCTSTR szFile);
VOID CmdShowChat(void);
void PauseLocalVideo(BOOL fPause);
void PauseRemoteVideo(BOOL fPause);
BOOL IsLocalVideoPaused();
BOOL IsRemoteVideoPaused();
HRESULT GetRemoteVideoState(NM_VIDEO_STATE *puState);
HRESULT GetLocalVideoState(NM_VIDEO_STATE *puState);
HRESULT GetImageQuality(ULONG* pul, BOOL bIncoming);
HRESULT SetImageQuality(ULONG ul, BOOL bIncoming);
HRESULT SetCameraDialog(ULONG ul);
HRESULT GetCameraDialog(ULONG* pul);
#endif // _CONFROOM_H_