|
|
#ifndef __NmManager_h__
#define __NmManager_h__
#include "resource.h" // main symbols
#include "SDKInternal.h"
#include "ias.h"
#include "iplgxprt.h"
#include "it120xprt.h"
extern bool g_bSDKPostNotifications;
/////////////////////////////////////////////////////////////////////////////
// CNmManagerObj
class ATL_NO_VTABLE CNmManagerObj : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<CNmManagerObj, &CLSID_NmManager>, public IConnectionPointContainerImpl<CNmManagerObj>, public IConnectionPointImpl<CNmManagerObj, &IID_INmManagerNotify, CComDynamicUnkArray>, public INmManager, public INmObject, public INmManagerNotify, public IInternalConfExe, public IPluggableTransport
{ friend class CNmConferenceObj; // Datatypes and constants
CONSTANT(MSECS_PER_SEC_CPU_USAGE = 900);
// Static Data
static CSimpleArray<CNmManagerObj*>* ms_pManagerObjList; static DWORD ms_dwID;
// Member Data
bool m_bNmActive; bool m_bInitialized; ULONG m_uOptions; ULONG m_chCaps; CSimpleArray<INmConference*> m_SDKConferenceObjs; CSimpleArray<INmCall*> m_SDKCallObjs; CComPtr<INmManager2> m_spInternalNmManager; DWORD m_dwInternalNmManagerAdvise; bool m_bSentConferenceCreated; DWORD m_dwID; DWORD m_dwSysInfoID;
CComBSTR m_bstrConfName;
static IT120PluggableTransport *ms_pT120Transport; public:
#ifdef ENABLE_UPDATE_CONNECTION
static IPluggableTransportNotify *ms_pPluggableTransportNotify; #endif
static HRESULT InitSDK(); static void CleanupSDK();
// Because this is in a local server, we are not going to be able to be aggregated...
DECLARE_NOT_AGGREGATABLE(CNmManagerObj)
// This is the resource ID for the .rgs file
DECLARE_REGISTRY_RESOURCEID(IDR_NMMANAGER)
BEGIN_COM_MAP(CNmManagerObj) COM_INTERFACE_ENTRY(INmManager) COM_INTERFACE_ENTRY(IConnectionPointContainer) COM_INTERFACE_ENTRY(INmObject) COM_INTERFACE_ENTRY(INmManagerNotify) COM_INTERFACE_ENTRY(IInternalConfExe) COM_INTERFACE_ENTRY(IPluggableTransport) END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CNmManagerObj) CONNECTION_POINT_ENTRY(IID_INmManagerNotify) END_CONNECTION_POINT_MAP()
///////////////////////////////////////////////
// Construction and destruction
CNmManagerObj(); ~CNmManagerObj();
HRESULT FinalConstruct(); void FinalRelease();
ULONG InternalRelease();
///////////////////////////////////////////////
// INmManager
STDMETHOD(Initialize)( ULONG * puOptions, ULONG * puchCaps); STDMETHOD(GetSysInfo)(INmSysInfo **ppSysInfo); STDMETHOD(CreateConference)(INmConference **ppConference, BSTR bstrName, BSTR bstrPassword, ULONG uchCaps); STDMETHOD(EnumConference)(IEnumNmConference **ppEnum); STDMETHOD(CreateCall)(INmCall **ppCall, NM_CALL_TYPE callType,NM_ADDR_TYPE addrType, BSTR bstrAddr, INmConference *pConference); STDMETHOD(CallConference)(INmCall **ppCall, NM_CALL_TYPE callType,NM_ADDR_TYPE uType, BSTR bstrAddr, BSTR bstrConferenceName, BSTR bstrPassword); STDMETHOD(EnumCall)(IEnumNmCall **ppEnum);
// INmObject
STDMETHOD(CallDialog)(long hwnd, int cdOptions); STDMETHOD(ShowLocal)(NM_APPID id); STDMETHOD(VerifyUserInfo)(UINT_PTR hwnd, NM_VUI options);
// IInternalConfExe
STDMETHOD(LoggedIn)(); STDMETHOD(IsRunning)(); STDMETHOD(InConference)(); STDMETHOD(LDAPLogon)(BOOL bLogon); STDMETHOD(GetLocalCaps)(DWORD* pdwLocalCaps); STDMETHOD(IsNetMeetingRunning)(); STDMETHOD(GetActiveConference)(INmConference** ppConf); STDMETHOD(ShellCalltoProtocolHandler)(BSTR url, BOOL bStrict); STDMETHOD(Launch)(); STDMETHOD(LaunchApplet)(NM_APPID appid, BSTR strCmdLine); STDMETHOD(GetUserData)(REFGUID rguid, BYTE **ppb, ULONG *pcb); STDMETHOD(SetUserData)(REFGUID rguid, BYTE *pb, ULONG cb); STDMETHOD(SetSysInfoID)(DWORD dwID) { m_dwSysInfoID = dwID; return S_OK; } STDMETHOD(DisableH323)(BOOL bDisableH323); STDMETHOD(SetCallerIsRTC)(BOOL bCallerIsRTC); STDMETHOD(DisableInitialILSLogon)(BOOL bDisableH323);
//
// INmManagerNotify methods:
//
STDMETHOD(NmUI)(CONFN uNotify); STDMETHOD(ConferenceCreated)(INmConference *pInternalConference); STDMETHOD(CallCreated)(INmCall *pInternalCall);
//
// IPluggableTransport
//
STDMETHOD(CreateConnection)( BSTR *pbstrConnectionID, // For placing a call and closing connection
PLUGXPRT_CALL_TYPE eCaller, // Caller or Callee
DWORD dwProcessID, // Used for DuplicateHandle
HCOMMDEV hCommLink, // Handle to communications file handle
HEVENT hevtDataAvailable, // Ready To Read event ( data avail )
HEVENT hevtWriteReady, // Ready To Write event
HEVENT hevtConnectionClosed, // Connection closed ( unexpectedly???)
PLUGXPRT_FRAMING eFraming, // framing of bits sent on link
PLUGXPRT_PARAMETERS *pParams // OPTIONAL framing specific parameters
);
#ifdef ENABLE_UPDATE_CONNECTION
STDMETHOD(UpdateConnection)( BSTR bstrConnectionID, DWORD dwProcessID, // Used for DuplicateHandle
HCOMMDEV hCommLink // Handle to communications file handle
); #endif
STDMETHOD(CloseConnection)(BSTR bstrConnectionID);
STDMETHOD(EnableWinsock)(void);
STDMETHOD(DisableWinsock)(void);
#ifdef ENABLE_UPDATE_CONNECTION
STDMETHOD(AdvisePluggableTransport)(IPluggableTransportNotify *, DWORD *pdwCookie);
STDMETHOD(UnAdvisePluggableTransport)(DWORD dwCookie); #endif
//
// Notifications
//
HRESULT Fire_NmUI(CONFN uNotify); HRESULT Fire_ConferenceCreated(INmConference *pConference); HRESULT Fire_CallCreated(INmCall* pCall);
INmConference* GetSDKConferenceFromInternalConference(INmConference* pInternalConference); INmCall* GetSDKCallFromInternalCall(INmCall* pInternalCall);
HRESULT RemoveCall(INmCall* pSDKCallObj); HRESULT RemoveConference(INmConference* pSDKConferenceObj);
bool AudioNotifications(); bool VideoNotifications(); bool DataNotifications(); bool FileTransferNotifications(); bool AppSharingNotifications(); bool OfficeMode() const { return m_bInitialized && (NM_INIT_OBJECT == m_uOptions); }
static void NetMeetingLaunched();
static void AppSharingChannelChanged(); void _AppSharingChannelChanged();
static void AppSharingChannelActiveStateChanged(bool bActive); void _AppSharingChannelActiveStateChanged(bool bActive);
static void SharableAppStateChanged(HWND hWnd, NM_SHAPP_STATE state); void _SharableAppStateChanged(HWND hWnd, NM_SHAPP_STATE state);
static void ASLocalMemberChanged(); void _ASLocalMemberChanged();
static void ASMemberChanged(UINT gccID); void _ASMemberChanged(UINT gccID);
static void NM211_CONF_NM_STARTED(bool bConfStarted);
static void AudioChannelActiveState(BOOL bActive, BOOL bIsIncoming); void _AudioChannelActiveState(BOOL bActive, BOOL bIsIncoming);
static void VideoChannelActiveState(BOOL bActive, BOOL bIsIncoming); void _VideoChannelActiveState(BOOL bActive, BOOL bIsIncoming);
static void OnShowUI(BOOL fShow);
static UINT GetManagerCount() { return ms_pManagerObjList->GetSize(); }; static UINT GetManagerCount(ULONG uOption);
static void VideoPropChanged(DWORD dwProp, BOOL bIsIncoming); void _VideoPropChanged(DWORD dwProp, BOOL bIsIncoming);
static void VideoChannelStateChanged(NM_VIDEO_STATE uState, BOOL bIsIncoming); void _VideoChannelStateChanged(NM_VIDEO_STATE uState, BOOL bIsIncoming);
private: ///////////////////////////////////////////////
// Helper Fns
INmConference* _GetActiveConference();
void EnsureTransportInterface(void); static BOOL InitPluggableTransportSDK(void); static void CleanupPluggableTransportSDK(void);
DWORD MapNmCallTypeToCallFlags(NM_CALL_TYPE callType, NM_ADDR_TYPE addrType, UINT uCaps); HRESULT SdkPlaceCall(NM_CALL_TYPE callType, NM_ADDR_TYPE addrType, BSTR bstrAddr, BSTR bstrConf, BSTR bstrPw, INmCall **ppInternalCall); };
#endif //__NmManager_h__
|