WindowsXP-SP1/enduser/netmeeting/core/imanager.h

204 lines
7.0 KiB
C++

#ifndef _IMANAGER_H_
#define _IMANAGER_H_
#include "confqos.h"
#include <ias.h>
#include "SDKInternal.h"
extern GUID g_csguidSecurity;
extern GUID g_csguidUserString;
extern GUID g_csguidNodeIdTag;
extern GUID g_guidLocalNodeId;
class COutgoingCall;
class COutgoingCallManager;
class CIncomingCallManager;
class CConfObject;
class CRosterInfo;
class CQoS;
class CNmSysInfo;
class COprahNCUI : public RefCount, public INodeControllerEvents, public CH323ConnEvent,
public INmManager2, public CConnectionPointContainer,
public IH323ConfAdvise
{
friend CNmSysInfo;
protected:
static COprahNCUI *m_pOprahNCUI;
COutgoingCallManager* m_pOutgoingCallManager;
CIncomingCallManager* m_pIncomingCallManager;
CNmSysInfo* m_pSysInfo;
CConfObject* m_pConfObject;
HWND m_hwnd;
UINT m_uCaps;
CQoS * m_pQoS; // The quality of service object
INmChannelVideo * m_pPreviewChannel;
static VOID CALLBACK AudioConnectResponse( LPVOID pContext1,
LPVOID pContext2,
DWORD dwFlags);
static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg,
WPARAM wParam, LPARAM lParam);
BOOL m_fAllowAV;
IH323Endpoint* m_pAVConnection;
public:
COprahNCUI(OBJECTDESTROYEDPROC ObjectDestroyed);
~COprahNCUI();
BSTR GetUserName();
UINT GetOutgoingCallCount();
BOOL GetULSName(CRosterInfo *pri);
VOID GetRosterInfo(CRosterInfo *pri);
ULONG GetRosterCaps();
ULONG GetAuthenticatedName(PBYTE * ppb);
VOID OnOutgoingCallCreated(INmCall* pCall);
VOID OnOutgoingCallCanceled(COutgoingCall* pCall);
VOID OnIncomingCallAccepted();
VOID OnIncomingCallCreated(INmCall* pCall);
BOOL AcquireAV(IH323Endpoint* pConnection);
BOOL ReleaseAV(IH323Endpoint* pConnection);
BOOL IsOwnerOfAV(IH323Endpoint* pConnection) { return m_pAVConnection == pConnection; }
VOID CancelCalls();
BOOL IsAudioAllowed() { return m_fAllowAV && (m_uCaps & (CAPFLAG_SEND_AUDIO | CAPFLAG_RECV_AUDIO)); }
BOOL IsReceiveVideoAllowed() { return m_fAllowAV && (m_uCaps & CAPFLAG_RECV_VIDEO); }
BOOL IsSendVideoAllowed() { return m_fAllowAV && (m_uCaps & CAPFLAG_SEND_VIDEO); }
BOOL IsH323Enabled() { return m_uCaps & CAPFLAG_H323_CC; }
CREQ_RESPONSETYPE OnH323IncomingCall(IH323Endpoint* pConn, P_APP_CALL_SETUP_DATA lpvMNMData);
//
// IH323ConfAdvise methods
//
STDMETHODIMP CallEvent (IH323Endpoint * lpConnection, DWORD dwStatus);
STDMETHODIMP ChannelEvent (ICommChannel *pIChannel,
IH323Endpoint * lpConnection, DWORD dwStatus );
STDMETHODIMP GetMediaChannel (GUID *pmediaID,
BOOL bSendDirection, IMediaChannel **ppI);
VOID _ChannelEvent ( ICommChannel *pIChannel,
IH323Endpoint * lpConnection,
DWORD dwStatus);
// H323 Connection events from H323UI:
VOID OnH323Connected(IH323Endpoint * lpConnection);
VOID OnH323Disconnected(IH323Endpoint * lpConnection);
// Audio Conferencing events from H323UI:
VOID OnAudioChannelStatus(ICommChannel *pIChannel,
IH323Endpoint * lpConnection, DWORD dwStatus);
// Video Conferencing events from H323UI:
VOID OnVideoChannelStatus(ICommChannel *pIChannel,
IH323Endpoint * lpConnection, DWORD dwStatus);
// T.120 events from H323UI
VOID OnT120ChannelOpen(ICommChannel *pIChannel, IH323Endpoint * lpConnection, DWORD dwStatus);
static COprahNCUI *GetInstance() { return m_pOprahNCUI; }
CConfObject *GetConfObject() { return m_pConfObject; }
VOID SetBandwidth(UINT uBandwidth) { if (NULL != m_pQoS) m_pQoS->SetBandwidth(uBandwidth); }
HRESULT AbortResolve(UINT uAsyncRequest);
//
// INodeControllerEvents methods:
//
STDMETHODIMP OnConferenceStarted( CONF_HANDLE hConference,
HRESULT hResult);
STDMETHODIMP OnConferenceEnded( CONF_HANDLE hConference);
STDMETHODIMP OnRosterChanged( CONF_HANDLE hConference,
PNC_ROSTER pRoster);
STDMETHODIMP OnIncomingInviteRequest( CONF_HANDLE hConference,
PCWSTR pcwszNodeName,
PT120PRODUCTVERSION pRequestorVersion,
PUSERDATAINFO pUserDataInfoEntries,
UINT cUserDataEntries,
BOOL fSecure);
STDMETHODIMP OnIncomingJoinRequest( CONF_HANDLE hConference,
PCWSTR pcwszNodeName,
PT120PRODUCTVERSION pRequestorVersion,
PUSERDATAINFO pUserDataInfoEntries,
UINT cUserDataEntries);
STDMETHODIMP OnQueryRemoteResult( PVOID pvCallerContext,
HRESULT hResult,
BOOL fMCU,
PWSTR* ppwszConferenceNames,
PT120PRODUCTVERSION pVersion,
PWSTR* ppwszConfDescriptors);
STDMETHODIMP OnInviteResult( CONF_HANDLE hConference,
REQUEST_HANDLE hRequest,
UINT uNodeID,
HRESULT hResult,
PT120PRODUCTVERSION pVersion);
STDMETHODIMP OnUpdateUserData( CONF_HANDLE hConference);
//
// INmManager methods
//
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppvObj);
STDMETHODIMP Initialize(ULONG *puOptions, ULONG *puchCaps);
STDMETHODIMP GetSysInfo(INmSysInfo **ppSysInfo);
STDMETHODIMP EnumConference(IEnumNmConference **ppEnum);
STDMETHODIMP CreateConference(INmConference **ppConference,
BSTR bstrName,
BSTR bstrPassword,
ULONG uchCaps);
STDMETHODIMP EnumCall(IEnumNmCall **ppEnum);
STDMETHODIMP CreateCall(INmCall **ppCall,
NM_CALL_TYPE callType,
NM_ADDR_TYPE addrType,
BSTR bstrAddr,
INmConference *pConference);
STDMETHODIMP CallConference(INmCall **ppCall,
NM_CALL_TYPE callType,
NM_ADDR_TYPE addrType,
BSTR bstrAddr,
BSTR bstrName,
BSTR bstrPassword);
//
// INmManager2 methods
//
STDMETHODIMP GetPreviewChannel(INmChannelVideo **ppChannelVideo);
STDMETHODIMP CreateASObject(IUnknown * pNotify, ULONG flags, IUnknown ** ppAS);
STDMETHODIMP AllowH323(BOOL fAllow);
STDMETHODIMP CallEx(INmCall **ppCall,
DWORD dwFlags,
NM_ADDR_TYPE addrType,
BSTR bstrName,
BSTR bstrSetup,
BSTR bstrDest,
BSTR bstrAlias,
BSTR bstrURL,
BSTR userData,
BSTR bstrConference,
BSTR bstrPassword);
STDMETHODIMP CreateConferenceEx(INmConference **ppConference,
BSTR bstrName,
BSTR bstrPassword,
DWORD dwTypeFlags,
DWORD attendeePermissions,
DWORD maxParticipants);
};
// The global instance that is declared in conf.cpp:
extern INodeController* g_pNodeController;
// The GUID is declared in opncui.cpp:
extern GUID g_csguidRosterCaps;
extern SOCKADDR_IN g_sinGateKeeper;
HRESULT OnNotifyCallStateChanged(IUnknown *pCallNotify, PVOID pv, REFIID riid);
typedef BOOL (WINAPI * PFNGETUSERSECURITYINFO) (DWORD dwGCCID, PBYTE pInfo, PDWORD pcbInfo);
typedef DWORD (WINAPI * PFNPROCESSSECURITYDATA) ( DWORD dwCode, DWORD dwParam1, DWORD dwParam2 );
#endif // _IMANAGER_H_