📄 directorynumber.cpp
字号:
{
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 + -