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

127 lines
3.6 KiB
C++

#ifndef _ICALL_IN_H_
#define _ICALL_IN_H_
#include "rostinfo.h"
// BUGBUG:
// This is defined as 128 because the RNC_ROSTER structure has the
// same limitation. Investigate what the appropriate number is.
const int MAX_CALLER_NAME = 128;
class COprahNCUI;
class CIncomingCall : public INmCall, public DllRefCount, public CConnectionPointContainer
{
private:
COprahNCUI * m_pOprahNCUI;
IH323Endpoint* m_pConnection;
BOOL m_fInvite;
CONF_HANDLE m_hConf;
BSTR m_bstrCaller;
NM_CALL_STATE m_State;
UINT m_dwFlags;
USER_DATA_LIST m_UserData;
GUID m_guidNode;
BOOL m_fMemberAdded;
VOID ProcessT120UserData(
PUSERDATAINFO pUserDataInfoEntries,
UINT cUserDataEntries);
public:
CIncomingCall( COprahNCUI *pOprahNCUI,
IH323Endpoint* pConnection,
P_APP_CALL_SETUP_DATA lpvMNMData,
DWORD dwFlags);
CIncomingCall( COprahNCUI *pOprahNCUI,
BOOL fInvite,
CONF_HANDLE hConf,
PCWSTR pcwszNodeName,
PUSERDATAINFO pUserDataInfoEntries,
UINT cUserDataEntries);
~CIncomingCall();
// this method will need to be changed to support proposed the cookie for NM3.0 callers
// it will still need to handle 2.X callers
BOOL MatchAcceptedCaller(PCWSTR pcwszNodeName);
BOOL MatchAcceptedCaller(GUID* pguidNodeId);
BOOL MatchActiveCaller(GUID* pguidNodeId);
IH323Endpoint * GetH323Connection() { return m_pConnection; }
HRESULT OnH323Connected();
HRESULT OnH323Disconnected();
UINT GetFlags() { return m_dwFlags; }
BOOL IsDataOnly() { return (0 == ((CRPCF_AUDIO | CRPCF_VIDEO) & m_dwFlags)); }
BOOL DidUserAccept() { return (NM_CALL_ACCEPTED == m_State); }
VOID SetConfHandle(CONF_HANDLE hConf) { m_hConf = hConf; }
CONF_HANDLE GetConfHandle() { return m_hConf; }
VOID OnIncomingT120Call(
BOOL fInvite,
PUSERDATAINFO pUserDataInfoEntries,
UINT cUserDataEntries);
HRESULT OnT120ConferenceEnded();
HRESULT Terminate(BOOL fReject);
GUID * GetNodeGuid() { return &m_guidNode; }
void Ring();
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppvObj);
STDMETHODIMP IsIncoming(void);
STDMETHODIMP GetState(NM_CALL_STATE *pState);
STDMETHODIMP GetName(BSTR *pbstrName);
STDMETHODIMP GetAddr(BSTR *pbstrAddr, NM_ADDR_TYPE *puType);
STDMETHODIMP GetUserData(REFGUID rguid, BYTE **ppb, ULONG *pcb);
STDMETHODIMP GetConference(INmConference **ppConference);
STDMETHODIMP Accept(void);
STDMETHODIMP Reject(void);
STDMETHODIMP Cancel(void);
};
class CIncomingCallManager
{
private:
COBLIST m_CallList;
public:
CIncomingCallManager();
~CIncomingCallManager();
CREQ_RESPONSETYPE OnIncomingH323Call(
COprahNCUI *pManager,
IH323Endpoint* pConnection,
P_APP_CALL_SETUP_DATA lpvMNMData);
VOID OnH323Connected(IH323Endpoint * lpConnection);
VOID OnH323Disconnected(IH323Endpoint * lpConnection);
HRESULT OnIncomingT120Call(
COprahNCUI *pManager,
BOOL fInvite,
CONF_HANDLE hConf,
PCWSTR pcwszNodeName,
PUSERDATAINFO pUserDataInfoEntries,
UINT cUserDataEntries,
BOOL fSecure);
VOID OnT120ConferenceEnded(CONF_HANDLE hConference);
CIncomingCall* MatchAcceptedCaller(PCWSTR pcwszNodeName);
CIncomingCall* MatchAcceptedCaller(GUID* pguidNodeId);
CIncomingCall* MatchActiveCaller(GUID* pguidNodeId);
GUID* GetGuidFromT120UserData(
PUSERDATAINFO pUserDataInfoEntries,
UINT cUserDataEntries);
VOID CancelCalls();
};
#endif // _ICALL_IN_H_