|
|
// File: call.h
#ifndef _CALL_H_
#define _CALL_H_
#include "oblist.h"
#include "SDKInternal.h"
const HRESULT NM_CALLERR_NOT_REGISTERED = NM_E(0x01EF);
class CDlgCall; // from dlgcall.h
class CPopupMsg;
class CCall : public RefCount, INmCallNotify2 {
private: INmCall* m_pInternalICall;// Call Object in core
CPopupMsg* m_ppm; // Popup incomming call dialog
LPTSTR m_pszDisplayName; // Display Name
LPTSTR m_pszCallTo; // CallTo (original)
BOOL m_fSelectedConference; BOOL m_fIncoming; BOOL m_fInRespond; // Responding to call dialog?
NM_ADDR_TYPE m_nmAddrType; BOOL m_bAddToMru;
POSITION m_pos; // position in g_pCallList
DWORD m_dwTick; // tick count at call start
DWORD m_dwCookie;
CDlgCall * m_pDlgCall; // Outgoing call dialog
VOID RemoveProgress(void); VOID ShowProgress(BOOL fShow);
VOID LogCall(BOOL fAccepted);
public: CCall(LPCTSTR pszCallTo, LPCTSTR pszDisplayName, NM_ADDR_TYPE nmAddrType, BOOL bAddToMru, BOOL fIncoming); ~CCall();
// IUnknown methods
STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void); STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppv);
// INmCallNotify methods
STDMETHODIMP NmUI(CONFN uNotify); STDMETHODIMP StateChanged(NM_CALL_STATE uState); STDMETHODIMP Failed(ULONG uError); STDMETHODIMP Accepted(INmConference *pConference);
// INmCallNotify3 methods
STDMETHODIMP CallError(UINT cns); STDMETHODIMP RemoteConference(BOOL fMCU, BSTR *pwszConfNames, BSTR *pbstrConfToJoin); STDMETHODIMP RemotePassword(BSTR bstrConference, BSTR *pbstrPassword, PBYTE pb, DWORD cb, BOOL fIsService);
// Internal methods
VOID Update(void); BOOL FComplete(void); BOOL RemoveFromList(void); VOID OnRing(void); BOOL RespondToRinging(DWORD dwCLEF); HRESULT OnUIRemoteConference(BOOL fMCU, PWSTR* pwszConfNames, BSTR *pbstrConfToJoin);
VOID SetNmCall(INmCall * pCall);
HRESULT PlaceCall ( DWORD dwFlags, NM_ADDR_TYPE addrType, const TCHAR * const setupAddress, const TCHAR * const destinationAddress, const TCHAR * const alias, const TCHAR * const url, const TCHAR * const conference, const TCHAR * const password, const TCHAR * const userData );
VOID Cancel(BOOL fDisplayCancelMsg);
INmCall * GetINmCall() {return m_pInternalICall;} LPTSTR GetPszName() {return m_pszDisplayName;} BOOL FIncoming() {return m_fIncoming;} NM_CALL_STATE GetState(); DWORD GetTickCount() {return m_dwTick;} VOID DisplayPopup(void); VOID SetSelectedConference() {m_fSelectedConference = TRUE;}
static VOID CALLBACK PopupMsgRingingCallback(LPVOID pContext, DWORD dwFlags); };
// Fake connection points
HRESULT OnUICallCreated(INmCall *pNmCall);
// Global utility Functions
int CleanupE164StringEx(LPTSTR szPhoneNumber); CCall * CallFromNmCall(INmCall * pNmCall); DWORD GetCallStatus(LPTSTR pszStatus, int cchMax, UINT * puID); BOOL FIsCallInProgress(void); VOID FreeCallList(void);
CCall * CreateIncomingCall(INmCall * pNmCall);
// Commands
VOID CancelAllOutgoingCalls(void); VOID CancelAllCalls(void);
BOOL FIpAddress(LPCTSTR pcsz);
VOID DisplayCallError(HRESULT hr, LPCTSTR pcszName);
// Gateway utility routines
BOOL FH323GatewayEnabled(void); int GetDefaultGateway(LPTSTR psz, UINT cchMax); HRESULT CreateGatewayAddress(LPTSTR pszResult, UINT cchMax, LPCTSTR pszAddr);
// Gatekeeper logon state
extern NM_GK_STATE g_GkLogonState;
BOOL FGkEnabled(void); void GkLogon(void); void GkLogoff(void); void SetGkLogonState(NM_GK_STATE state); bool IsGatekeeperLoggedOn(void); bool IsGatekeeperLoggingOn(void);
class CCallResolver {
private: LPTSTR m_pszAddr; // Address (original)
LPTSTR m_pszAddrIP; // Address (IP)
NM_ADDR_TYPE m_addrType; // Address type (of m_pszAddr)
HRESULT ResolveIpName(LPCTSTR pcszAddr); HRESULT ResolveMachineName(LPCTSTR pcszAddr); HRESULT ResolveUlsName(LPCTSTR pcszAddr); HRESULT ResolveGateway(LPCTSTR pcszAddr); HRESULT CheckHostEnt(HOSTENT * pHostInfo);
public: CCallResolver(LPCTSTR pszAddr, NM_ADDR_TYPE addrType); ~CCallResolver();
LPCTSTR GetPszAddr() { return m_pszAddr; } NM_ADDR_TYPE GetAddrType() { return m_addrType; } LPCTSTR GetPszAddrIP() { return m_pszAddrIP; }
HRESULT Resolve(); };
#endif // _CALL_H_
|