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

📄 pansr.cpp

📁 基于dialogic语音卡的IVR系统源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				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 + -