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.
203 lines
7.0 KiB
203 lines
7.0 KiB
#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_
|
|
|