www.pudn.com > lucent_softphone.rar > DirectoryNumber.h


	 
// DirectoryNumber.h : Declaration of the CDirectoryNumber 
 
#ifndef __DIRECTORYNUMBER_H_ 
#define __DIRECTORYNUMBER_H_ 
 
#include "resource.h"       // main symbols 
#include "lucentCtiCP.h" 
 
#include "dnevent.h" 
 
#include  
using namespace std; 
 
#define ERR_INI	-100 
///////////////////////////////////////////////////////////////////////////// 
// CDirectoryNumber 
class ATL_NO_VTABLE CDirectoryNumber :  
	public CComObjectRootEx, 
	public CComCoClass, 
	public IConnectionPointContainerImpl, 
	public IDirectoryNumber, 
	public CProxy_IDirectoryNumberEvents< CDirectoryNumber >, 
	public IGenesysOB 
{ 
public: 
	CDirectoryNumber() 
	{ 
		m_pUnkMarshaler = NULL; 
	} 
 
DECLARE_REGISTRY_RESOURCEID(IDR_DIRECTORYNUMBER) 
DECLARE_NOT_AGGREGATABLE(CDirectoryNumber) 
DECLARE_GET_CONTROLLING_UNKNOWN() 
 
DECLARE_PROTECT_FINAL_CONSTRUCT() 
 
BEGIN_COM_MAP(CDirectoryNumber) 
	COM_INTERFACE_ENTRY(IDirectoryNumber) 
	COM_INTERFACE_ENTRY(IConnectionPointContainer) 
	COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p) 
	COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer) 
	COM_INTERFACE_ENTRY(IGenesysOB) 
END_COM_MAP() 
BEGIN_CONNECTION_POINT_MAP(CDirectoryNumber) 
CONNECTION_POINT_ENTRY(DIID__IDirectoryNumberEvents) 
END_CONNECTION_POINT_MAP() 
 
 
	HRESULT FinalConstruct() 
	{ 
		m_invokeId=0; 
		m_serverHandle=0; 
		m_monitorId=0; 
		m_lErrCode=ERR_INI; 
		m_ErrMsg=""; 
		m_bConnect=FALSE; 
		m_splitMonitorId=0; 
 
		m_bIsCmdMsg=FALSE; 
		memset(&m_ani,0,sizeof(DeviceID_t)); 
		memset(&m_dnis,0,sizeof(DeviceID_t)); 
		memset(&m_activeConnId,0,sizeof(ConnectionID_t)); 
		memset(&m_holdConnId,0,sizeof(ConnectionID_t)); 
		memset(&m_deviceId,0,sizeof(DeviceID_t)); 
		memset(&m_agentId,0,sizeof(AgentID_t)); 
		memset(&m_agentPwd,0,sizeof(AgentPassword_t)); 
		memset(&m_agentGroup,0,sizeof(AgentGroup_t) ); 
		memset(&m_thisDevice,0,sizeof (ExtendedDeviceID_t)); 
		memset(&m_otherDevice,0,sizeof (ExtendedDeviceID_t)); 
		m_agentStat=AS_NotReady; 
		m_bLogged=FALSE; 
		m_callType=CT_Unknown; 
 
		return CoCreateFreeThreadedMarshaler( 
			GetControllingUnknown(), &m_pUnkMarshaler.p); 
	} 
 
	void FinalRelease() 
	{ 
		m_pUnkMarshaler.Release(); 
 
		 
	} 
 
	CComPtr m_pUnkMarshaler; 
public: 
	BOOL DefaultHandler(dnevent* event); 
 
	BOOL Initialize(BSTR deviceId,ACSHandle_t serverHandle,InvokeID_t invokeId); 
	void Uninitialize(); 
	BOOL KVListToAppString(IKVList* pkvlist, char* pAppString,UINT bufLen); 
	BOOL GetAnsiFromBSTR(char** dest, BSTR source); 
	BOOL GetAnsiFromInt(char** dest,int source); 
	BOOL ValidateString(char* pStr,UINT bufLen); 
 
	InvokeID_t m_invokeId; 
	ACSHandle_t m_serverHandle; 
	CSTAMonitorCrossRefID_t m_monitorId; 
	CSTAMonitorCrossRefID_t m_splitMonitorId; 
	BOOL m_bIsCmdMsg; 
private: 
	DeviceID_t m_deviceId; //the monitered device 
 
	ConnectionID_t m_activeConnId; // the active connecton id 
	ConnectionID_t m_holdConnId; // the hold connection id 
 
	ExtendedDeviceID_t m_otherDevice; // other dn in this evnet 
	ExtendedDeviceID_t m_thisDevice; //this dn in this event 
	DeviceID_t m_dnis;//the dnis (the called device NO) 
	DeviceID_t m_ani;//the ani (the calling device NO) 
 
	AgentID_t m_agentId;//agent id 
	AgentPassword_t m_agentPwd;// agent password 
	AgentGroup_t m_agentGroup; //agent group 
	AGENTSTATES m_agentStat;//agent state 
	BOOL m_bLogged; 
	CALLTYPES m_callType; // the call type 
 
	long m_lErrCode; 
	string m_ErrMsg; 
 
	BOOL m_bConnect; // the connect state flag 
	BOOL OnCallDial(); 
	BOOL OnConsultDial(); 
	void DNPostMessage(UINT msg, WPARAM wParam ,LPARAM lParam); 
	BOOL FillEvent(dnevent* pEvent);// Before this event is fired out, fill some info into it 
 
	BOOL GetCallInfo(CSTADeliveredEvent_t* pDeliverEvent); 
	BOOL GetCallInfo(CSTAEstablishedEvent_t* pDeliverEvent); 
	BOOL GetCallInfo(CSTAHeldEvent_t* pHeldEvent); 
	BOOL GetCallInfo(CSTARetrievedEvent_t* pRetrieveEvent); 
	BOOL GetCallInfo(CSTAConnectionClearedEvent_t* pConnclearEvnet); 
	BOOL GetCallInfo(CSTAConferencedEvent_t* pConfer); 
	BOOL GetCallInfo(CSTATransferredEvent_t* pTransfer); 
	BOOL GetCallInfo(CSTAFailedEvent_t* pFailed); 
//	BOOL GetCallInfo(CSTAFailedEvent_t* pFailed); 
	BOOL GetCallInfo(CSTAOriginatedEvent_t* pOriginated); 
	BOOL GetCallInfo(CSTALoggedOnEvent_t* pLogon); 
	BOOL GetCallInfo(CSTALoggedOffEvent_t* pLogoff); 
 
	BOOL MonitorSplit(AgentGroup_t* agentSplit);// monitor a acd group for agent login and logout 
	void StopMonitor(CSTAMonitorCrossRefID_t monitorId); //stop a monitor 
 
// IDirectoryNumber 
public: 
	STDMETHOD_(BOOL, SendDTMF)(/*[in]*/ BSTR tone); 
	STDMETHOD(get_HoldConnID)(/*[out, retval]*/ BSTR *pVal); 
	STDMETHOD(get_ActiveConnID)(/*[out, retval]*/ BSTR *pVal); 
	STDMETHOD(ID2ConnID)(/*[in]*/ long id, /*[out, retval]*/ BSTR *connid); 
	STDMETHOD(get_HoldID)(/*[out, retval]*/ long *pVal); 
	STDMETHOD(get_ActiveID)(/*[out, retval]*/ long *pVal); 
	STDMETHOD_(BOOL, UpdateData)(/*[in, optional]*/ BSTR connid, /*[in]*/ LPKVLIST data); 
	STDMETHOD_(BOOL, DeleteData)(/*[in, optional]*/ BSTR connid, /*[in]*/ BSTR key); 
	STDMETHOD_(BOOL, DeleteAllData)(/*[in, optional]*/ BSTR connid); 
	STDMETHOD_(BOOL, AttachData)(/*[in, optional]*/ BSTR connid, /*[in]*/ LPKVLIST data); 
	STDMETHOD_(BOOL, CancelForward)(/*[in, optional]*/ FORWARDMODES mode); 
	STDMETHOD_(BOOL, Forward)(/*[in]*/ BSTR dn, /*[in, optional]*/ FORWARDMODES mode); 
	STDMETHOD_(BOOL, AlternateCall)(); 
	STDMETHOD_(BOOL, SingleStepTransfer)(/*[in]*/ BSTR dn, /*[in, optional]*/ LPKVLIST data); 
	STDMETHOD_(BOOL, MuteTransfer)(/*[in]*/ BSTR dn, /*[in, optional]*/ LPKVLIST data); 
	STDMETHOD_(BOOL, RedirectCall)(/*[in]*/ BSTR dn, /*[in, optional]*/ BSTR connid); 
	STDMETHOD_(BOOL, MergeCalls)(/*[in, optional]*/ MERGETYPES type); 
	STDMETHOD_(BOOL, ReconnectCall)(); 
	STDMETHOD_(BOOL, DeleteFromConference)(/*[in]*/ BSTR dn); 
	STDMETHOD_(BOOL, CompleteConference)(); 
	STDMETHOD_(BOOL, InitConferenceCall)(/*[in]*/ BSTR dn, /*[in, optional]*/ LPKVLIST data); 
	STDMETHOD_(BOOL, CompleteTransfer)(); 
	STDMETHOD_(BOOL, InitTransferCall)(/*[in]*/ BSTR dn, /*[in, optional]*/ LPKVLIST data); 
	STDMETHOD_(BOOL, RetrieveCall)(/*[in, optional]*/ BSTR connid); 
	STDMETHOD_(BOOL, HoldCall)(/*[in, optional]*/ BSTR connid); 
	STDMETHOD_(BOOL, ReleaseCall)(/*[in, optional]*/ BSTR connid, /*[in, optional]*/ BOOL hangup = FALSE); 
	STDMETHOD_(BOOL, AnswerCall)(/*[in, optional]*/ BSTR connid); 
	STDMETHOD_(BOOL, MakeCall)(/*[in]*/ BSTR dn, /*[in, optional]*/ LPKVLIST data); 
	STDMETHOD_(BOOL, AgentSetNotReady)(/*[in, optional]*/ AGENTMODES mode); 
	STDMETHOD_(BOOL, AgentSetReady)(/*[in, optional]*/ AGENTMODES mode); 
	STDMETHOD_(BOOL, AgentLogout)(); 
	STDMETHOD_(BOOL, AgentLogin)(/*[in]*/ BSTR AgentID, /*[in, optional]*/ BSTR AgentPassword, /*[in, optional]*/ BSTR ACDQ, /*[in, optional]*/ AGENTMODES mode); 
	STDMETHOD(get_ErrReport)(/*[out, retval]*/ BOOL *pVal); 
	STDMETHOD(get_DND)(/*[out, retval]*/ BOOL *pVal); 
	STDMETHOD(get_OnHook)(/*[out, retval]*/ BOOL *pVal); 
	STDMETHOD(get_AgentState)(/*[out, retval]*/ AGENTSTATES *pVal); 
	STDMETHOD(get_ACDQ)(/*[out, retval]*/ BSTR *pVal); 
	STDMETHOD(get_AgentID)(/*[out, retval]*/ BSTR *pVal); 
	STDMETHOD(get_Logged)(/*[out, retval]*/ BOOL *pVal); 
	STDMETHOD(get_Type)(/*[out, retval]*/ ADDRTYPES *pVal); 
	STDMETHOD(get_Number)(/*[out, retval]*/ BSTR *pVal); 
	STDMETHOD(get_Registered)(/*[out, retval]*/ BOOL *pVal); 
	STDMETHOD(get_ErrMsg)(/*[out, retval]*/ BSTR *pVal); 
	STDMETHOD(get_ErrCode)(/*[out, retval]*/ long *pVal); 
// IGenesysOB 
	STDMETHOD(get_RescheduleFlag)(int * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(get_CampaignBatchID)(int * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(get_CampaignID)(int * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(get_Campaign)(BSTR * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(get_ProjectName)(BSTR * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(get_CustomerID)(int * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(get_CustomerName)(BSTR * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(get_CustomerTitle)(BSTR * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(get_EventID)(int * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(put_EventID)(int pVal) 
	{ 
		return E_NOTIMPL; 
	} 
	STDMETHOD(get_PhoneNumber)(BSTR * pVal) 
	{ 
		if (pVal == NULL) 
			return E_POINTER; 
			 
		return E_NOTIMPL; 
	} 
	STDMETHOD(put_PhoneNumber)(BSTR pVal) 
	{ 
		return E_NOTIMPL; 
	} 
	STDMETHOD(put_NeverCall)(BOOL) 
	{ 
		return E_NOTIMPL; 
	} 
	STDMETHOD(put_ExpectedStartDate)(BSTR ) 
	{ 
		return E_NOTIMPL; 
	} 
	STDMETHOD_(BOOL, Init)(LPKVLIST data) 
	{ 
		return 0; 
	} 
	STDMETHOD_(VOID, Uninit)() 
	{ 
		return; 
	} 
	STDMETHOD(get_AgentMode)(/*[out, retval]*/ AGENTMODES *pVal) 
	{ 
		*pVal=AM_Unknown; 
		return S_OK; 
	} 
	STDMETHOD(put_DND)(/*[in]*/ BOOL newVal) 
	{ 
		return S_OK; 
	} 
	STDMETHOD(put_ErrReport)(/*[in]*/ BOOL newVal) 
	{ 
		return S_OK; 
	} 
 
}; 
 
#endif //__DIRECTORYNUMBER_H_