⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directorynumber.cpp

📁 利用AVAYA AES的TASPI开发的一套软电话系统,仅供参考,ACTIVEX形式的.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	{
		MSG msg;
		while (GetMessage(&msg,NULL,0,0))
		{
			if (msg.message==UM_CMDMSG)
			{
				if (msg.wParam==UM_APIFAILED ||msg.wParam==CSTA_CONNECTION_CLEARED)
				{
					if (m_lErrCode==ERR_INI)
					{
						m_lErrCode=LUCENT_HOLDCALL_ERR;
						m_ErrMsg="Hold call failed.";
					}
					break;
				}
				else if (msg.wParam==CSTA_HELD)
				{
					ret=TRUE;
					break;
				}
			}
		}
	}else
	{
		m_lErrCode=retCode;
		m_ErrMsg="HoldCall return value";
	}
	m_bIsCmdMsg=bSave;
	if (!ret)
	{
		char tep[300];
		wsprintf((char*)&tep,"error:%s,code:%d.",m_ErrMsg.c_str(),m_lErrCode);
		WriteLog((char*)&tep);
	}
	return ret;
}

STDMETHODIMP_(BOOL) CDirectoryNumber::InitConferenceCall(BSTR dn, LPKVLIST data)
{
	// TODO: Add your implementation code here
	BOOL ret=FALSE;

	DeviceID_t calledDevice={0};
	RetCode_t code=-1;
	if (B2C(dn,(char*)&calledDevice,sizeof(DeviceID_t)))
	{
		BOOL bSave=m_bIsCmdMsg;
		m_bIsCmdMsg=TRUE;
		WriteLog("Consultation call service.");
		if (data)
		{
			ATTPrivateData_t privateData;
			memset(&privateData,0,sizeof(ATTPrivateData_t));
			ATTUserToUserInfo_t attData;
			memset(&attData,0,sizeof(ATTUserToUserInfo_t ));
			attData.type=UUI_IA5_ASCII;
			
			if (KVListToAppString(data,(char*)attData.data.value,sizeof(attData.data.value)-1))
			{
				attData.data.length=strlen((char*)attData.data.value);
				code=attV6ConsultationCall(&privateData,NULL,TRUE,&attData);
				if (code==ACSPOSITIVE_ACK)
				{
					code=cstaConsultationCall(m_serverHandle,m_invokeId,
									&m_activeConnId,&calledDevice,
									(PrivateData_t*)&privateData);
				}
			}
		}
		if (code!=ACSPOSITIVE_ACK)
			code=cstaConsultationCall(m_serverHandle,m_invokeId,
								&m_activeConnId,&calledDevice,
								NULL);
		m_lErrCode=ERR_INI;
		m_ErrMsg="";
		if (code==ACSPOSITIVE_ACK)
		{
			MSG msg;
			while (GetMessage(&msg,NULL,0,0))
			{
				if (msg.message==UM_CMDMSG)
				{
					if (msg.wParam==UM_APIFAILED ||msg.wParam==CSTA_CONNECTION_CLEARED)
					{
						if (m_lErrCode==ERR_INI)
						{
							m_lErrCode=LUCENT_CONSULTATION_ERR;
							m_ErrMsg="Consultation call failed.";
						}
						ReconnectCall();
						break;
					}
					else if (msg.wParam==CSTA_ORIGINATED)
					{
						ret=OnConsultDial();
						break;
					}
				}
			}
		}else
		{
			m_lErrCode=code;
			m_ErrMsg="Consultation call return an error.";
		}
		m_bIsCmdMsg=bSave;
	}else
	{
		m_lErrCode=LUCENT_INVALID_PARAM;
		m_ErrMsg="Invalid parameter.";
	}

	if (!ret)
	{
		char tep[300];
		wsprintf((char*)&tep,"error:%s,code:%d.",m_ErrMsg.c_str(),m_lErrCode);
		WriteLog((char*)&tep);
	}
	return ret;
}

STDMETHODIMP_(BOOL) CDirectoryNumber::InitTransferCall(BSTR dn, LPKVLIST data)
{
	// TODO: Add your implementation code here
	return InitConferenceCall(dn,data);
}

STDMETHODIMP_(BOOL) CDirectoryNumber::ReleaseCall(BSTR connid, BOOL hangup)
{
	// TODO: Add your implementation code here
	BOOL ret=FALSE;

	WriteLog("Clear connection service.");
	BOOL bSave=m_bIsCmdMsg;
	m_bIsCmdMsg=TRUE;
	RetCode_t code=cstaClearConnection(m_serverHandle,m_invokeId,&m_activeConnId,NULL);
	m_lErrCode=0;
	if (code==ACSPOSITIVE_ACK)
	{
		MSG msg;
		while (GetMessage(&msg,NULL,0,0))
		{
			if (msg.message==UM_CMDMSG)
			{
				if (msg.wParam==UM_APIFAILED)
				{
					if (m_lErrCode==0)
					{
						m_lErrCode=LUCENT_CLEARCALL_ERR;
						m_ErrMsg="Clear call failed.";
					}
					break;
				}
				else if (/*msg.wParam==CSTA_CALL_CLEARED || */msg.wParam==CSTA_CONNECTION_CLEARED)
				{
					ret=TRUE;
					break;
				}
			}
		}
	}else
	{
		m_lErrCode=code;
		m_ErrMsg="Clear call return value.";
	}
	m_bIsCmdMsg=bSave;
	if (!ret)
	{
		char tep[300];
		wsprintf((char*)&tep,"error:%s,code:%d.",m_ErrMsg.c_str(),m_lErrCode);
		WriteLog((char*)&tep);
	}
	return ret;
}

STDMETHODIMP_(BOOL) CDirectoryNumber::RetrieveCall(BSTR connid)
{
	// TODO: Add your implementation code here
	BOOL ret=FALSE;

	BOOL bSave=m_bIsCmdMsg;
	m_bIsCmdMsg=TRUE;
	WriteLog("Retreive call service.");
	RetCode_t retCode=cstaRetrieveCall(m_serverHandle,m_invokeId,
										&m_holdConnId,NULL);
	m_lErrCode=ERR_INI;
	m_ErrMsg="";
	if (retCode==ACSPOSITIVE_ACK)
	{
		MSG msg;
		while (GetMessage(&msg,NULL,0,0))
		{
			if (msg.message==UM_CMDMSG)
			{
				if (msg.wParam==UM_APIFAILED||msg.wParam==CSTA_CONNECTION_CLEARED)
				{
					if (m_lErrCode==ERR_INI)
					{
						m_lErrCode=LUCENT_RETRIEVECALL_ERR;
						m_ErrMsg="Retrieve call failed.";
					}
					break;
				}
				else if (msg.wParam==CSTA_RETRIEVED)
				{
					ret=TRUE;
					break;
				}
			}
		}
	}else
	{
		m_lErrCode=retCode;
		m_ErrMsg="Retrive call return an error.";
	}
	m_bIsCmdMsg=bSave;

	if (!ret)
	{
		char tep[300];
		wsprintf((char*)&tep,"error:%s,code:%d.",m_ErrMsg.c_str(),m_lErrCode);
		WriteLog((char*)&tep);
	}
	return ret;
}

STDMETHODIMP_(BOOL) CDirectoryNumber::SingleStepTransfer(BSTR dn, LPKVLIST data)
{
	// TODO: Add your implementation code here
	BOOL ret=FALSE;
	DeviceID_t transDevice={0};
	RetCode_t retCode=-1;
	WriteLog("Single step transfer call service.");
	if (B2C(dn,(char*)&transDevice,sizeof(DeviceID_t)))
	{
		BOOL bSave=m_bIsCmdMsg;
		m_bIsCmdMsg=TRUE;
		WriteLog("Consultation call service.");
		if (data)
		{
			ATTPrivateData_t privateData;
			memset(&privateData,0,sizeof(ATTPrivateData_t ));
			ATTUserToUserInfo_t attData;
			memset(&attData,0,sizeof(ATTUserToUserInfo_t ));
			attData.type=UUI_IA5_ASCII;
			
			if (KVListToAppString(data,(char*)attData.data.value,sizeof(attData.data.value)-1))
			{
				attData.data.length=strlen((char*)attData.data.value);
				retCode=attV6ConsultationCall(&privateData,NULL,FALSE,&attData);
				if (retCode==ACSPOSITIVE_ACK)
				{
					retCode=cstaConsultationCall(m_serverHandle,m_invokeId,
									&m_activeConnId,&transDevice,
									(PrivateData_t*)&privateData);
				}
			}
		}
		if (retCode!=ACSPOSITIVE_ACK)
			retCode=cstaConsultationCall(m_serverHandle,m_invokeId,
								&m_activeConnId,&transDevice,
								NULL);
		m_lErrCode=ERR_INI;
		m_ErrMsg="";
		if (retCode==ACSPOSITIVE_ACK)
		{
			MSG msg;
			while (GetMessage(&msg,NULL,0,0))
			{
				if (msg.message==UM_CMDMSG)
				{
					if (msg.wParam==UM_APIFAILED)
					{
						if (m_lErrCode==ERR_INI ||msg.wParam==CSTA_RETRIEVED)
						{
							m_lErrCode=LUCENT_CONSULTATION_ERR;
							m_ErrMsg="Consultation call failed.";
						}
						ReconnectCall();
						break;
					}else if (msg.wParam==CSTA_CONNECTION_CLEARED)
					{
						m_lErrCode=LUCENT_CALL_RELEASED;
						m_ErrMsg="The call was released by the other party.";
						RetrieveCall(NULL);
						break;
					}else if (msg.wParam==CSTA_TRANSFERRED)
					{//transfer call ok
						ret=TRUE;
						break;
					}else if (msg.wParam==CSTA_DELIVERED/*CSTA_ESTABLISHED*/)
					{//begin transfer the call nomatter the other party answer it or not
						WriteLog("Transfer call service.");
						retCode=cstaTransferCall(m_serverHandle,m_invokeId,
											&m_holdConnId,&m_activeConnId,NULL);
						if (retCode!=ACSPOSITIVE_ACK)
						{
							m_lErrCode=LUCENT_TRANSFERCALL_ERR;
							m_ErrMsg="Transfer call failed.";
							ReconnectCall();
							break;
						}
					}
				}
			}
		}else
		{
			m_lErrCode=retCode;
			m_ErrMsg="cstaConsultationCall return an error.";
		}
		m_bIsCmdMsg=bSave;
	}
	if (!ret)
	{
		char tep[300];
		wsprintf((char*)&tep,"error:%s,code:%d.",m_ErrMsg.c_str(),m_lErrCode);
		WriteLog((char*)&tep);
	}
	return ret;
}


void CDirectoryNumber::DNPostMessage(UINT msg,WPARAM wParam,LPARAM lParam)
{
	while (!PostMessage(NULL,msg,wParam,lParam))
		Sleep(100);
	return;
}

STDMETHODIMP_(BOOL) CDirectoryNumber::ReconnectCall()
{
	// TODO: Add your implementation code here
	BOOL ret=FALSE;

	BOOL bSave=m_bIsCmdMsg;
	m_bIsCmdMsg=TRUE;
	WriteLog("Reconnect call service.");
	RetCode_t retCode=cstaReconnectCall(m_serverHandle,m_invokeId,
							&m_activeConnId,&m_holdConnId,NULL);
	m_lErrCode=ERR_INI;
	m_ErrMsg="";
	if (retCode==ACSPOSITIVE_ACK)
	{
		MSG msg;
		while (GetMessage(&msg,NULL,0,0))
		{
			if (msg.message==UM_CMDMSG)
			{
				if (msg.wParam==UM_APIFAILED)
				{
					if (m_lErrCode==ERR_INI)
					{
						m_lErrCode=LUCENT_RECONNECT_ERR;
						m_ErrMsg="Reconnect call failed.";
					}
					break;
				}
				else if(msg.wParam==CSTA_RETRIEVED)
				{
					ret=TRUE;
					break;
				}
			}
		}
	}else
	{
		m_lErrCode=retCode;
		m_ErrMsg="Reconnect call return an error.";
	}
	m_bIsCmdMsg=bSave;
	if (!ret)
	{
		char tep[300];
		wsprintf((char*)&tep,"error:%s,code:%d.",m_ErrMsg.c_str(),m_lErrCode);
		WriteLog((char*)&tep);
	}
	return ret;
}

BOOL CDirectoryNumber::FillEvent(dnevent* pEvent)//other DN
{
	pEvent->ConnID=m_activeConnId.callID;
	memcpy(&pEvent->ThisDN,&m_thisDevice.deviceID,sizeof(DeviceID_t));
	memcpy(&pEvent->OtherDN,&m_otherDevice.deviceID,sizeof(DeviceID_t));
	memcpy(&pEvent->AgentID,&m_agentId,sizeof(AgentID_t));
	memcpy(&pEvent->ANI,&m_ani,sizeof(AgentID_t));
	memcpy(&pEvent->DNIS,&m_dnis,sizeof(AgentID_t));
	pEvent->CallType=m_callType;
	return TRUE;
}

STDMETHODIMP_(BOOL) CDirectoryNumber::AgentSetNotReady(AGENTMODES mode)
{
	// TODO: Add your implementation code here

	BOOL bRet=FALSE;
	WriteLog("Agent set not ready service.");
	{
		BOOL bSave=m_bIsCmdMsg;
		m_bIsCmdMsg=TRUE;
/////////////MARK by rick --begin
//
//			ATTWorkMode_t workMode;
//			switch (mode)
//			{
//			case AM_ManualIn:
//				workMode=WM_MANUAL_IN;
//				break;
//			case AM_AutoIn:
//				workMode=WM_AUTO_IN;
//				break;
//			case AM_AfterCallWork:
//				workMode=WM_AFTCAL_WK;
//				break;
//			case AM_AuxWork:
//				workMode=WM_AUX_WORK;
//				break;
//			default:
//				workMode=WM_AUX_WORK;
//				break;
//			}
//			ATTPrivateData_t privateData={0};
//			RetCode_t retCode=attV6SetAgentState(&privateData,
//										workMode,
//										0,//reason code not available
//										FALSE); //not pending
//			if (retCode==ACSPOSITIVE_ACK)
//				retCode=cstaSetAgentState(m_serverHandle,m_invokeId,&m_deviceId,
//											AM_NOT_READY,//angent mode
//											&m_agentId,//agent id
//											&m_agentGroup,//agent group
//											&m_agentPwd,//agent password
//											(PrivateData_t*)&privateData); //private data
//			if (retCode!=ACSPOSITIVE_ACK)
//				if (mode==AM_AfterCallWork)
//					retCode=cstaSetAgentState(m_serverHandle,m_invokeId,&m_deviceId,
//											AM_WORK_NOT_READY,//angent mode
//											&m_agentId,//agent id
//											&m_agentGroup,//agent group
//											&m_agentPwd,//agent password
//											NULL); //private data
//				else

/////////////MARK --end
		AgentMode_t workMode;
		switch (mode)
			{
			case AM_AfterCallWork:
				workMode=AM_WORK_NOT_READY;
				break;
			case AM_AuxWork:
				workMode=AM_NOT_READY;
				break;
			default:
				workMode=AM_NOT_READY;
				break;
			}
		RetCode_t	retCode=cstaSetAgentState(m_serverHandle,m_invokeId,&m_deviceId,
											workMode,//angent mode
											&m_agentId,//agent id
											&m_agentGroup,//agent group
											&m_agentPwd,//agent password
											NULL); //private data
		m_lErrCode=ERR_INI;
		m_ErrMsg="";
		if (retCode==ACSPOSITIVE_ACK)
		{
			MSG msg;
			while (GetMessage(&msg,NULL,0,0))
			{
				if (msg.message==UM_CMDMSG)
				{
					if (msg.wParam==UM_APIFAILED)
					{
						if (m_lErrCode==ERR_INI)
						{
							m_lErrCode=LUCENT_AGENT_SETNOTREADY_ERR;
							m_ErrMsg="Agent set notready failed.";
						}
						break;
					}
					else if (msg.wParam==CSTA_SET_AGENT_STATE_CONF)
					{
						bRet=TRUE;
						break;
					}
				}
			}
		}else
		{
			m_lErrCode=retCode;
			m_ErrMsg="cstaSetAgentState return an error,";
		}
		m_bIsCmdMsg=bSave;
	}
	if (!bRet)
	{
		char tep[300];
		wsprintf((char*)&tep,"error:%s,code:%d.",m_ErrMsg.c_str(),m_lErrCode);
		WriteLog((char*)&tep);
	}
	return bRet;
}

STDMETHODIMP_(BOOL) CDirectoryNumber::AgentSetReady(AGENTMODES mode)
{
	// TODO: Add your implementation code here
	BOOL bRet=FALSE;
	WriteLog("Agent set ready service.");
	{
		BOOL bSave=m_bIsCmdMsg;
		m_bIsCmdMsg=TRUE;

			ATTWorkMode_t workMode;
			switch (mode)
			{
			case AM_ManualIn:
				workMode=WM_MANUAL_IN;
				break;
			case AM_AutoIn:
				workMode=WM_AUTO_IN;
				break;
			default:
				workMode=WM_AUTO_IN;
				break;
			}
			ATTPrivateData_t privateData={0};
			RetCode_t retCode=attV6SetAgentState(&privateData,
										workMode,
										0,//reason code not available
										FALSE); //not pending
			if (retCode==ACSPOSITIVE_ACK)
				retCode=cstaSetAgentState(m_serverHandle,m_invokeId,&m_deviceId,
											AM_READY,//angent mode
											&m_agentId,//agent id
											&m_agentGroup,//agent group
											&m_agentPwd,//agent password
											(PrivateData_t*)&privateData); //private data
			if (retCode!=ACSPOSITIVE_ACK)
				 retCode=cstaSetAgentState(m_serverHandle,m_invokeId,&m_deviceId,
											AM_READY,//angent mode
											&m_agentId,//agent id
											&m_agentGroup,//agent group
											&m_agentPwd,//agent password
											NULL); //private data
		m_lErrCode=ERR_INI;
		m_ErrMsg="";
		if (retCode==ACSPOSITIVE_ACK)
		{
			m_lErrCode=0;
			MSG msg;
			while (GetMessage(&msg,NULL,0,0))
			{
				if (msg.message==UM_CMDMSG)
				{
					if (msg.wParam==UM_APIFAILED)
					{
						if (m_lErrCode==ERR_INI)
						{
							m_lErrCode=LUCENT_AGENT_SETREADY_ERR;
							m_ErrMsg="Agent set ready failed.";
						}
						break;
					}
					else if (msg.wParam==CSTA_SET_AGENT_STATE_CONF)
					{
						bRet=TRUE;
						break;
					}
				}
			}
		}else
		{
			m_lErrCode=retCode;
			m_ErrMsg="agentsetready return an error.";
		}
		m_bIsCmdMsg=bSave;
	}
	if (!bRet)
	{
		char tep[300];
		wsprintf((char*)&tep,"error:%s,code:%d.",m_ErrMsg.c_str(),m_lErrCode);
		WriteLog((char*)&tep);
	}
	return bRet;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -