📄 pansr.cpp
字号:
strcpy( dxinfo[ channum ].msg_name, (char *)((pParamList->pParam)[0].pParam) );
maxwait = *(int *)((pParamList->pParam)[1].pParam);
errcode = RecordFile( channum, maxwait );
break;
case CMD_GETDIG:
//XYW add at 2000/12/14
if( dxinfo[ channum ].state < ST_READY ) break;
if( dxinfo[ channum ].warnType == 3 )
{
dxinfo[ channum ].warnType = 0;
WriteReplyQueue( channum, TDX_ERROR );
break;
}
//XYW add end
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
dxinfo[ channum ].state = ST_GETDIG ;
strcpy( Condition , (char *)pParamList->pParam->pParam );
Getpara( Condition, dxinfo[ channum ].ac_count, dxinfo[channum].ac_mask, dxinfo[ channum ].ac_time );
strcpy( dxinfo[ channum ].ac_code, "" );
if( dxinfo[ channum ].ac_count <= 30 )
errcode = get_digits( channum, &(dxinfo[ channum ].digbuf), dxinfo[ channum ].ac_count , dxinfo[ channum ].ac_mask, dxinfo[ channum ].ac_time*10 );
else
errcode = get_digits( channum, &(dxinfo[ channum ].digbuf), 30 , dxinfo[ channum ].ac_mask, 30 );
break;
case CMD_PLAYTONE:
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
dxinfo[ channum ].state = ST_PLAYTONE ;
break;
case CMD_GETINFOTONE:
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
dxinfo[ channum ].state = ST_GETDIG;
strcpy( Condition , (char *)pParamList->pParam->pParam );
dxinfo[ channum ].ac_infotone = new char[10];
i = CVSInterpreter::AbstractData( Condition, 2, dxinfo[ channum ].ac_infotone, ',' );
if( i != 0 ) strcpy( dxinfo[ channum ].ac_infotone, "F0000F" );
Getpara( Condition, maxdigs, maskdig, maxwait );
dx_clrdigbuf( dxinfo[ channum ].chdev ); //pxm add
errcode = get_digits( channum, &(dxinfo[ channum ].digbuf), maxdigs ,0, maxwait );
break;
case CMD_PLAYINFOTONE:
//XYW add at 2000/11/24
if( dxinfo[ channum ].state < ST_READY ) break;
//XYW add end
pNode = new VOCNODE;
pNode->service = pParamList->iServiceNo;
pNode->reqid = pParamList->ISN;
pNode->bIsIvr = pParamList->bIsIVR;
pNode->ac_count = 1;
pNode->bIsClear = 0 ;
pNode->pVocinfo = new VOCINFO;
strcpy( pNode->pVocinfo->Content, (char *)pParamList->pParam->pParam );
pNode->pVocinfo->Kind = 0;
if( dxinfo[ channum ].service == CMD_PLAY5 )
{
Eralist( channum );
dx_stopch( dxinfo[ channum ].chdev, EV_ASYNC );
while ( ATDX_STATE( dxinfo[ channum ].chdev ) != CS_IDLE );
}
Putlist( channum, pNode );
if( (dxinfo[ channum ].ac_count == 0 && dxinfo[ channum ].ac_voice == NULL) || dxinfo[ channum ].state != ST_PLAY )
{
Getlist( channum );
errcode = PlayMsg( channum );
}
break;
//XYW add at 2001/06/17
case CMD_SENDFSK:
if( dxinfo[ channum ].state < ST_READY ) break;
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
dxinfo[ channum ].state = ST_SENDFSK;
strcpy( ViewCtr, (char *)((pParamList->pParam)[0].pParam) );
strcpy( FuncCtr, (char *)((pParamList->pParam)[1].pParam) );
strcpy( rawdata, (char *)((pParamList->pParam)[2].pParam) );
dxinfo[channum].msg_buf = NULL;
if( dxinfo[ channum ].warnType == 1 && dxinfo[ channum ].warnTime < GetTickCount() )
{
dxinfo[ channum ].warnType = 2;
strcpy( rawdata, "\r\n\r\n\r\n!!!!警告:您已超过了规定的使用时间,如需继续使用,请按确定键或取消键并尽快使用,否则请挂机。" );
strcpy( ViewCtr, "00000001" );
strcpy( FuncCtr, "1" );
}
if( dxinfo[ channum ].warnType == 2 && dxinfo[ channum ].stopTime < GetTickCount() )
{
dxinfo[ channum ].warnType = 3;
strcpy( rawdata, "\r\n\r\n\r\n!!!对不起,您的使用时间已到,请挂机。" );
strcpy( ViewCtr, "00000101" );
strcpy( FuncCtr, "4" );
}
PreTreatData( rawdata );
rc = ReadyData( rawdata, strlen(rawdata), (void **)&dxinfo[channum].msg_buf, dxinfo[channum].msg_len , FuncCtr, ViewCtr );
if( rc < 0 )
{
WriteReplyQueue( channum, TDX_ERROR );
break;
}
rc = SendFskData ( dxinfo[channum].chdev, FALSE, dxinfo[ channum ].msg_buf, dxinfo[channum].msg_len );
if( rc < 0 )
{
WriteReplyQueue( channum, TDX_ERROR );
}
break;
case CMD_SENDFAX:
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
dxinfo[ channum ].state = ST_SENDFAX;
strcpy( dxinfo[ channum ].msg_name, (char *)pParamList->pParam->pParam );
if( !FaxSend( channum ) )
{
WriteReplyQueue( channum, TDX_ERROR );
}
break;
case CMD_RECVFAX:
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
dxinfo[ channum ].state = ST_RECVFAX;
strcpy( dxinfo[ channum ].msg_name, (char *)pParamList->pParam->pParam );
if( !FaxRecv( channum ) )
{
WriteReplyQueue( channum, TDX_ERROR );
}
break;
case CMD_ONHOOK:
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
dxinfo[ channum ].state = ST_ONHOOK;
if( frontend == CT_NTANALOG )
{
set_hkstate( channum, DX_ONHOOK );
}
else
{
/*
if( stricmp( dxinfo[ channum ].protocol, "isdn" ) == 0 )
{
rc = gc_ResetLineDev( dxinfo[ channum ].g_dev, EV_ASYNC );
if (rc != GC_SUCCESS)
ShowError("gc_ResetLineDev()");
}
else
{
rc = gc_DropCall( dxinfo[ channum ].g_crn, GC_NORMAL_CLEARING, EV_ASYNC );
if( rc != GC_SUCCESS )
ShowError("gc_DropCall()");
}
*/
//Add 2002-12-04 by XYW
Ccs_sr_ReleaseCall( channum );
//Add end
}
break;
case CMD_OFFHOOK:
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
dxinfo[ channum ].state = ST_OFFHOOK;
if( frontend == CT_NTANALOG )
{
set_hkstate( channum, DX_OFFHOOK );
}
else
{
WriteReplyQueue( channum, TDX_USER );
}
break;
case CMD_DIAL:
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
strcpy( dxinfo[ channum ].dnis_buf, (char *)((pParamList->pParam)[0].pParam) );
dxinfo[ channum ].ac_count = *(int *)((pParamList->pParam)[1].pParam);
dxinfo[ channum ].state = ST_DIAL ;
if( frontend == CT_NTANALOG )
{
errcode = DialOut( channum );
}
else
{
/*
if( stricmp( dxinfo[ channum ].protocol, "isdn" ) == 0 )
{
MAKECALL_BLK mkcall_blk;
InitMakeCallBlk(&mkcall_blk);
rc= cc_MakeCall( dxinfo[ channum ].g_dev, &dxinfo[ channum ].g_crn, dxinfo[ channum ].dnis_buf, &mkcall_blk, 0, EV_ASYNC);
}
else
{
rc= gc_MakeCall( dxinfo[ channum ].g_dev, &dxinfo[ channum ].g_crn, dxinfo[ channum ].dnis_buf, NULL, 0, EV_ASYNC);
}
if (rc != GC_SUCCESS)
{
ShowError("gc_MakeCall()");
WriteReplyQueue( channum, TDX_ERROR );
}
*/
//Add 2002-12-04 by XYW
Ccs_sr_MakeCall( channum, dxinfo[ channum ].dnis_buf );
//Add end
}
break;
case CMD_TRANSFER:
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
strcpy( FuncCtr, (char *)((pParamList->pParam)[0].pParam) );
strcpy( dxinfo[ channum ].dnis_buf, (char *)((pParamList->pParam)[1].pParam) );
dxinfo[ channum ].state = ST_CONMSI ;
/*
if( atoi(FuncCtr) == 1 )
rc = Transfer2MSI( channum );
else
rc = Transfer2PUB( channum );
if (rc < 0 )
{
WriteReplyQueue( channum, TDX_ERROR );
}
*/
//Add 2002-12-04 by XYW
Ccs_sr_TransCall( channum, dxinfo[ channum ].dnis_buf);
//Add end
break;
case CMD_SETPATH:
//XYW modified at 2000/12/16
if( dxinfo[ channum ].state < ST_READY ) break;
//XYW modified end
dxinfo[ channum ].service = pParamList->iServiceNo;
dxinfo[ channum ].reqid = pParamList->ISN;
dxinfo[ channum ].bIsIVR = pParamList->bIsIVR;
strcpy( Condition, (char *)pParamList->pParam->pParam);
ptrStr = strchr( Condition, ',' );
strcpy( dxinfo[ channum ].msg_path, ptrStr+1 );
Ltrim( dxinfo[ channum ].msg_path );
strcpy( ptrStr, "");
Rtrim( Condition );
strupr( Condition );
dxinfo[ channum ].language = 0;
if( strcmp( Condition, "CANTONESE" ) == 0 )
dxinfo[ channum ].language = 1;
if( strcmp( Condition, "ENGLISH" ) == 0 )
dxinfo[ channum ].language = 2;
i = strlen( dxinfo[ channum ].msg_path );
if( dxinfo[ channum ].msg_path[ i-1] != '\\' )
strcat( dxinfo[ channum ].msg_path, "\\" );
WriteReplyQueue( channum, TDX_USER );
break;
default: break;
}
}
return ( errcode );
}
int WriteReplyQueue( int channum, int event )
{
int errcode = 0;
int iLen = 0, iBufLen=0;
char tempbuf[256];
CFileFind m_FileFind;
struct ParamList *pParamList;
int iServiceType = GetPrivateProfileInt("ServiceID","IVR",1,".\\setup.ini");
CServiceDataQueue::CreateParamList( &pParamList, iServiceType, dxinfo[ channum ].service, channum , dxinfo[ channum ].reqid );
switch ( event )
{
case TDX_SETHOOK:
if ( ATDX_HOOKST( dxinfo[ channum ].chdev ) == DX_ONHOOK )
{
if( dxinfo[ channum ].service == CMD_ONHOOK )
{
if( dxinfo[ channum ].conch != 0 )
RouteBackFromTalk(dxinfo[ channum ].conch);
CServiceDataQueue::AddParamListMember_Integer( pParamList, 1 );
}
else
{
if( dxinfo[ channum ].conch != 0 )
{
WriteReplyQueue( dxinfo[ channum ].conch, TDX_ERROR );
errcode = RouteBackFromTalk(dxinfo[ channum ].conch);
}
pParamList->iServiceNo = CMD_USERSTOP ;
CServiceDataQueue::AddParamListMember_Integer( pParamList, 0 );
}
}
else //DX_OFFHOOK
{
dxinfo[ channum ].state = ST_READY;
dxinfo[ channum ].warnTime = GetTickCount() + warnspan*1000;
dxinfo[ channum ].stopTime = GetTickCount() + stopspan*1000;
dxinfo[ channum ].warnType = warntype;
if(dxinfo[ channum ].service == CMD_WTRING || dxinfo[ channum ].service == CMD_OFFHOOK )
{
CServiceDataQueue::AddParamListMember_Integer( pParamList, 1 );
}
else
{
CServiceDataQueue::FreeParamList(pParamList);
return( dxinfo[channum ].state );
}
}
break;
//Add at 2001/11/06 by xyw
case MSMM_OFFHOOK:
CServiceDataQueue::FreeParamList(pParamList);
return( dxinfo[ channum ].state );
case MSMM_ONHOOK:
CServiceDataQueue::AddParamListMember_Integer( pParamList, 1 );
break;
//Add end
case TDX_ERROR:
pParamList->iServiceNo = CMD_USERSTOP ;
CServiceDataQueue::AddParamListMember_Integer( pParamList, 0 );
dxinfo[ channum ].state = ST_WTRING;
break;
case TDX_PLAYTONE:
if( dxinfo[ channum ].service == CMD_WTRING )
{
if (dxinfo[ channum ].state == ST_READY )
{
CServiceDataQueue::AddParamListMember_Integer( pParamList, 1 );
break;
}
else
{
CServiceDataQueue::FreeParamList(pParamList);
return( dxinfo[ channum ].state );
}
}
if( dxinfo[ channum ].service == CMD_PLAYINFOTONE )
{
if( dxinfo[ channum ].ac_count == 0 )
{
delete dxinfo[ channum ].ac_infotone;
dxinfo[ channum ].ac_infotone =NULL;
CServiceDataQueue::AddParamListMember_Integer( pParamList, 1 );
break;
}
else
{
CServiceDataQueue::FreeParamList(pParamList);
PlayInfoTone( channum );
return( dxinfo[ channum ].state );
}
}
if( dxinfo[ channum ].service == CMD_PLAYTONE )
{
CServiceDataQueue::AddParamListMember_Integer( pParamList, 1 );
break;
}
CServiceDataQueue::FreeParamList(pParamList);
return( dxinfo[ channum ].state );
case TDX_CST:
if ( ATDX_HOOKST( dxinfo[ channum ].chdev ) == DX_ONHOOK )
{
pParamList->iServiceNo = CMD_USERSTOP ;
CServiceDataQueue::AddParamListMember_Integer( pParamList, 0 );
}
else
{
CServiceDataQueue::FreeParamList(pParamList);
return( dxinfo[ channum ].state );
}
break;
case TDX_PLAY:
ShowTERMMSK( dxinfo[ channum ].chdev );
if( dxinfo[ channum ].service == CMD_PLAY1 ||
dxinfo[ channum ].service == CMD_PLAY2 ||
dxinfo[ channum ].service == CMD_PLAY3 ||
dxinfo[ channum ].service == CMD_PLAY4 ||
dxinfo[ channum ].service == CMD_PLAY5 ||
dxinfo[ channum ].service == CMD_PLAYINFOTONE)
{
if (ATDX_TERMMSK( dxinfo[ channum ].chdev ) & TM_MAXDTMF) //语音打断
{
CServiceDataQueue::AddParamListMember_Integer( pParamList, 2 );
if( dxinfo[ channum ].ac_voice != NULL ) delete dxinfo[ channum ].ac_voice;
dxinfo[ cha
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -