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

📄 setup.h

📁 基于dialogic语音卡的IVR系统源代码
💻 H
字号:
#if !defined _SETUP_H_
#define _SETUP_H_

#pragma pack( push, enter_download )
#pragma pack(1)

//提交服务请求和应答的数据通讯协议
struct Header_Comm
{
	BYTE	byteFlag;		//包标记	1:BIN包	2:XML包	3:WML包...
	DWORD	dwVerify;		//校验(保留)
	UINT	uiLength;		//随后的数据长度
};

#define LEN_STRUCT_HEADER_ROUTE_VERSION			4
#define LEN_STRUCT_HEADER_ROUTE_SOURCE			8
#define LEN_STRUCT_HEADER_ROUTE_DESTIONATION	8
#define LEN_STRUCT_HEADER_ROUTE_FUNCNO			4
#define LEN_STRUCT_HEADER_ROUTE_PACKETID		50
#define LEN_STRUCT_HEADER_ROUTE_ERRMSG			20

struct Header_Route
{
	BYTE	abyteVersion[LEN_STRUCT_HEADER_ROUTE_VERSION];		//版本号
	BYTE	byteType;				//包类型
	char	aszSource[LEN_STRUCT_HEADER_ROUTE_SOURCE];			//源地址
	char	aszDestination[LEN_STRUCT_HEADER_ROUTE_DESTIONATION];		//目的地址
	char	aszFuncNo[4];				//功能号
	char	aszPacketID[LEN_STRUCT_HEADER_ROUTE_PACKETID];		//包的ID号
	char	aszErrMsg[LEN_STRUCT_HEADER_ROUTE_ERRMSG];			//错误信息
	UINT	uiLength;				//随后的数据长度
};
/*
struct Header_Route2
{
	BYTE	abyteVersion[4];		//版本号
	BYTE	byteType;				//包类型(1:请求包,2:应答包,3:控制包)
	char	aszSource[8];			//源地址
	char	aszDestination[8];		//目的地址
	int		iResourceID;			//请求的资源ID(在语音/传真请求中可以是通道号)
	char	aszFuncNo[4];			//功能号
	char	aszPacketID[50];		//包的ID号
	char	aszErrMsg[20];			//错误信息
	UINT	uiLength;				//随后的数据长度
};
*/
#define PACKETTYPE_REQUEST	1
#define PACKETTYPE_REPLY	2
#define PACKETTYPE_CONTROL	3

struct Header_Table
{//将DATA看成是一个数据表
	UINT	uiRow;		//数据表的行数
	UINT	uiCol;		//数据表的列数
	UINT	uiLength;	//随后的数据长度
};

struct Header_TableUnit
{
	BYTE	byteType;		//数据类型
	UINT	uiLength_Name;	//变量名长度
	UINT	uiLength_Data;	//数据长度
};

#define DEFAULT_STRING "default string"	//用于GetPrivateProfileString()等中的default参数
#define SECTION_INITIALIZE "initialize"
#define SECTION_PREDEFINE "predefine"

#define STOCKINDEX		".\\stockindex.ini"
#define CONFIGFILE		".\\setup.ini"

//在CONFIGFILE中每个部分的名称
#define SECTION_SCRIPT			"Script"
#define SECTION_VRD				"ServiceProxy"
#define SECTION_TSD				"TSD"
#define KEY_MONITOREDCHANNEL	"MonitoredChannel"

#define MAX_LEN 10*1024	//解释器和编译器能够一次读入一个节点的最大长度
#define MAX_LEN_2 50*1024	//(用于CALCULATESTATEMENT_STRING能够处理长的字符串)解释器和编译器能够一次读入一个节点的最大长度
#define MAX_LEN_3 50*1024	//(用于AbstractStatementUnit2能够处理长的字符串)解释器和编译器能够一次读入一个节点的最大长度
#define PARAMNAMELEN 20	//参数名的长度
#define LEN_PACKETID	LEN_STRUCT_HEADER_ROUTE_PACKETID	//TCP上传送的请求/应答包的PACKETID的长度

//各种名称
#define NAME_VSI_INITIALIZED	"VSI Initialized"

//在SCRIPT中每个指令部分(SECTION)的项名称
#define KEY_ACTION		"action"
#define KEY_INPARAM		"inparam"
#define KEY_NEXT		"next"
#define KEY_OUTPARAM	"outparam"
#define KEY_ONERROR		"onerror"

//在SCRIPT中ACTION的值
#define ACTION_WTRING		"wtring"
#define ACTION_PLAY1		"play1"
#define ACTION_PLAY2		"play2"
#define ACTION_PLAY3		"play3"
#define ACTION_PLAY4		"play4"
#define ACTION_PLAY5		"play5"
#define ACTION_GETINFO		"GetInfo"
#define ACTION_PLAYINFO		"PlayInfo"
#define ACTION_GETKEY		"getkey"
#define ACTION_LANG			"LANG"
#define ACTION_SENDFAX		"SendFax"
#define ACTION_SENDFAX2		"SendFax2"
#define ACTION_RCVFAX		"RecvFax"
#define ACTION_RECORD		"Record"
#define ACTION_ONHOOK		"OnHook"
#define ACTION_OFFHOOK		"OffHook"
#define ACTION_DIAL			"Dial"
#define ACTION_CALLSERVICE	"CallService"
#define ACTION_TIF			"Tif"
#define ACTION_ASR			"ASR"
#define ACTION_WTREQUEST	"wtrequest"
#define ACTION_ANSWERREQUEST	"answerrequest"
#define ACTION_SLEEP		"Sleep"
#define ACTION_JUMP			"Jump"
#define ACTION_RETURN		"Return"
//----xyw add at 2001/6/16
#define ACTION_SENDFSK      "SendFsk"
#define ACTION_RECVFSK      "RecvFsk"
//----Xyw add end

//----xyw add at 2001/9/20
#define ACTION_TRANSFER      "Transfer"
#define ACTION_CONFERENCE    "Conference"
#define ACTION_SETTIMER      "SetTimer"
//----Xyw add end

//----lj add at 2003/07/16
#define ACTION_ACCESSDB       "Accessdb"    
//----lj add end


//ServiceNo值(需要和ANSWER.H中的CMD_XXX对应)
#define SERVICE_WTRING		0
#define SERVICE_PLAY1		1
#define SERVICE_PLAY2		2
#define SERVICE_PLAY3		3
#define SERVICE_GETKEY		4
#define SERVICE_PLAYSIGNAL	5
#define SERVICE_PLAY4		6
#define SERVICE_PLAY5		7
#define SERVICE_PLAYINFO	8
#define SERVICE_GETINFO		9
#define SERVICE_SENDFAX		10
#define SERVICE_SENDFAX2	11
#define SERVICE_RCVFAX		20
#define SERVICE_RECORD		30
#define SERVICE_OFFHOOK		49
#define SERVICE_ONHOOK		50
#define SERVICE_DIAL		51
#define SERVICE_LOG			60
#define SERVICE_LANG		99

//----xyw add at 2001/6/16
#define SERVICE_SENDFSK     81
#define SERVICE_RECVFSK     82
//----Xyw add end

//----xyw add at 2001/9/20
#define SERVICE_TRANSFER    83
#define SERVICE_CONFERENCE  84
#define SERVICE_SETTIMER    85
//----Xyw add end

#define RUNTYPE_CLIENT		1
#define RUNTYPE_SERVER		2


//服务数据包中用到的SERVICETYPE和FUNCNO
#define SERVICETYPE_IVR		1
#define SERVICETYPE_FAX		2
#define SERVICETYPE_ASR_MD	3
#define SERVICETYPE_ASR_EN	4
#define SERVICETYPE_ASR_CT	5
#define SERVICETYPE_TIF		8
#define SERVICETYPE_TSD		9
#define SERVICETYPE_STOCK	11
#define SERVICETYPE_IPMAN	12
#define SERVICETYPE_BANK	13

#define FUNCNO_WTREQUEST	1

//应用服务的服务号





//VSCRIPT语言保留符号
#define RESERVED_SYMBOL "=<>!|()"

//内部变量名
#define RESULTSET_ROWCOUNT "ResultSet_RowCount"
#define RESULTSET_COLCOUNT "ResultSet_ColCount"
#define LASTIID "LastIID"

//数据类型(比如用在判断resultset[i][j]的类型)
#define DATATYPE_INTEGER	1
#define DATATYPE_STRING		2
#define DATATYPE_FLOAT		3
#define DATATYPE_BINARY		4
#define DATATYPE_TABLE		5
#define DATATYPE_UNKNOWN	-1

//字符串所代表的数据类型(比如用在getstringtype()中)
//字符串是从脚本中取出来的
#define STRINGTYPE_UNKNOWN		-1	//未知类型
#define STRINGTYPE_CONST_INT	1	//整型数字常量
#define STRINGTYPE_VAR_INT		2	//整型数字变量
#define STRINGTYPE_VAR_STRING	3	//字符串型变量
#define STRINGTYPE_CONST_STRING 4	//字符串型常量
#define STRINGTYPE_RESULTSET	5	//结果集类型
#define STRINGTYPE_CONST_FLOAT	6	//浮点型常量
#define STRINGTYPE_VAR_FLOAT	7	//浮点型变量
#define STRINGTYPE_VOICELIST	8	//声音列表VOICELIST
#define STRINGTYPE_FUNC			9	//内部函数名

//请求/应答参数的类型
#define PARAMTYPE_INT		1
#define PARAMTYPE_STRING	2
#define PARAMTYPE_VOICELIST	3
#define PARAMTYPE_FLOAT		4
#define PARAMTYPE_RESULTSET 5
#define PARAMTYPE_BINARY	6

//voicelist中用到,对voicelist的成员(字符串)的读音方法
#define READ_VOICEFILE 0	//字符串代表文件名
#define READ_VALUE 1	//读成数量
#define READ_DIGIT 2	//按位读出
#define READ_TIME 3		//读成时间
#define READ_DATE 4		//读成日期
#define READ_MONEY 1	//读成资金
#define READ_FLOAT 1	//读成浮点数
#define READ_PERCENT	6	//读成百分数

//内部函数名
#define FUNC_MOD				"mod"
#define FUNC_LEN				"len"
#define FUNC_ISVALIDDATE		"IsValidDate"
#define FUNC_ISVALIDTIME		"IsValidTime"
#define FUNC_INFODTMF			"Info_DTMF"
#define FUNC_INFOHEADER			"Info_Header"
#define FUNC_ISVALIDSTOCKID		"IsValidStockID"
#define FUNC_GETDATE			"GetDate"
#define FUNC_SAVEFILE			"SaveFile"
#define FUNC_ABSTRACTDATA		"AbstractData"
//ldy add 2000/12/4
#define FUNC_ISVALIDNUMBER      "IsValidNumber"
#define FUNC_DIVIDE				"Div"
//xyw add 2001/7/14
#define FUNC_GETEXCHANGETYPE     "GetExchangeType"
#define FUNC_SUBSTR				 "SubStr"
//xyw add 2001/9/12
#define FUNC_GETTIME			 "GetTime"
//xyw add 2001/9/19
#define FUNC_ENCODEDTMF          "EncodeDTMF"
#define FUNC_DECODEDTMF          "DecodeDTMF"
//xyw add 2002/4/17
#define FUNC_GETANI              "GetANI"
#define FUNC_GETDNIS             "GetDNIS"
#define FUNC_GETCHN              "GetCHN"
//xyw add 2002/6/27
#define FUNC_GETMSG              "GetMSG"
#define FUNC_GETMID              "GetMID"
//xyw add 2003/1/20
#define FUNC_READINI             "ReadINI"
//lj add 2003/09/15
#define FUNC_ISSTOCK             "IsStock"
#define FUNC_ISMARKET            "IsMarket"

//SERVICEBROKER中的TCP SOCKET类要用到的
#define WM_SOCK_SENDREQUEST WM_USER + 1001
#define WM_SOCK_CLOSED		WM_USER + 1002

//vsinterpreter和gdithread(sourcemonitor)通讯要用到的
#define WM_GDI_CREATEMONITOR	WM_USER + 10001		//W:(int)通道号	L:(char *)脚本文件

struct VSInstruction
{
	char IID[100];
	char Last_IID[100];
	char *szAction;
	char *szInParam;
	char *szNext;
	char *szOutParam;
	char *szOnError;
};

struct GlobalVariable
{
	char *szName;	//在脚本中的名字
	int iType;	//数据类型, 1:	int;	2:	char *
	int nSize;	//数据长度
	void *pVariable;	//指向数据的指针
};

struct GlobalVariableList
{
	int nCount;	//全局变量的个数
	struct GlobalVariable *Global;	//全局变量的链表
};

/*
struct Param
{
	int iSize;	//pParam指向的数据大小
	int iType;	//参数的类型(1:整形,2:字符串,3:浮点, 4:二进制)
	void *param;	//真正的参数值就放在这里
};

struct ParamList
{
	int nCount;	//参数表中参数的个数
	struct Param *paramlist;	//指向参数链表
};
*/
struct VoiceListMember
{
	int iType;	//这个成员的类型	0:表示声音文件名; 1:表示值; 2:表示DIGIT; 3:表示时间; 4:表示日期; 5:表示资金; 6:表示浮点数;
	void *pVoice;	//表示语音的字符串,"hello.vox", "123"(一百二十三), "123"(一二三), "021000"(二点十分), "19990102"(一九九九年一月二日), "12.3"(十二点三元)
};

struct VoiceList
{
	int nCount;	//成员个数
	struct VoiceListMember *pmember;
};

struct Field
{
	int iSize;		//pdata指向数据的大小
	int iType;		//pdata指向的数据类型(1:整形,2:字符串,3:浮点, 4:二进制)
	int iStatus;	//表明这个字段是否已被设置,1:yes, 0:no
	char aszFieldName[PARAMNAMELEN];	//字段名
	void *pdata;
};

struct ResultSet
{
	int iRowCount;
	int iColCount;
	struct Field **ppfield;
};

struct CurrentState
{
/**********************************************************
注意:	在此结构增加或减少时,要考虑对脚本跳转功能的影响
		(参见CallJump, CallReturn, SourceMonitor_LoadFile, ProcessSpecialServiceReply等函数)
**********************************************************/
	int ISN;	//表示当前正在执行的指令序号,从0开始,每执行一条指令,递增1,并且把它作为请求的一部分;服务方应答时把它作为应答的一部分.解释器依靠它来判断服务方的应答是否和请求对应,不一样的话,就说明所问非所答(比如服务方可能回答两次),不予理会
				//ISN在DOACTION()中递增
	int ISN_Voice;	//用于保存上一次Voice请求的ISN
	BOOL ISN_Voice_Replied;
	int ISN_App;	//用于保存上一次App请求的ISN
	BOOL ISN_App_Replied;
//	BOOL bActionDone;	//表示当前指令的ACTION是否已被调用。若是,解释器所要作的事就是保存ACTION的执行结果(由SCRIPT的outparam指定),并调用next中指向的指令的action
	int iChannelNo;		//表示本数据结构所对应的线路号(由1开始)
	int iCheckType;		//和INFOTONE间数据传送的校验方法	0:无校验; 1:校验和
	int iBoundType;		//0:未知 1:INBOUND 2:OUTBOUND
	int iCountOfTurnOn;	//本通道的接通数


	struct VSInstruction vsi;
	char aszFirstInstructionIID[100];

	//其他数据结构
	struct GlobalVariableList m_globalVariableList_Integer;	//在当前脚本中有效的全局变量表
	struct GlobalVariableList m_globalVariableList_String;
	struct GlobalVariableList m_globalVariableList_Float;
	struct GlobalVariableList m_universalVariableList_Integer;	//在所有脚本中都有效的通用变量表,无论是否JUMP到其他脚本中执行(如果JUMP到的其他脚本中有此变量,则保留原有值)
	struct GlobalVariableList m_universalVariableList_String;
	struct GlobalVariableList m_universalVariableList_Float;
//	struct VoiceList *m_pvoiceList1;	//这个成员作为指针,(应用服务创建,放入应答队列,解释器取出它之后)会放到语音服务请求队列中去,语音服务模块使用完会释放
	struct ResultSet *presultSet;	//由应用服务返回的表格式结果,放在这个指针里
//	int iResultSet_RowCount, iResultSet_ColCount;	//(对SCRIPT中RecordSet=ReplyParam2)存放表格式结果的行数和列数
	struct CurrentState *pPreviousCurrentState;
	char aszReturnIID[100];

	char aszInstructionFile[100];

	char aszPacketID[LEN_STRUCT_HEADER_ROUTE_PACKETID];	//在WTREQUEST时保存应答包(就是传真请求)的ID,在ANSWERREQUEST时再填进去
};

extern int iServiceType_TSD;
extern int iFuncNo_AnswerRequest;

#pragma pack( pop, enter_download )

#endif

⌨️ 快捷键说明

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