#ifdef __cplusplus 
extern "C"  
{ 
#endif 
 
#include "glbtypes.h" 
#include "sysincs.h" 
#include "signal.h" 
#include "mmsdefs.h" 
#include "mms_pvmd.h" 
#include "mms_pvar.h" 
#include "mms_vvar.h" 
#include "mms_err.h" 
#include "mms_pcon.h" 
#include "asn1defs.h" 
#include "mmsop_en.h" 
#include "locale.h" 
 
#include "mvl_acse.h" 
#include "mvl_log.h" 
#include "tp4api.h" 
#include "clntobj.h" 
#include "smpval.h" 
 
#include "lean_a.h"	 
#include "scl.h" 
#include "sx_arb.h"	 
#include "mloguser.h"	 
 
#include "mvl_defs.h" 
#include "str_util.h" 
 
#define MAX_REF_LEN 65        //最大的引用长度 
#define MAX_NAME_LEN 128      //最大的名称长度 
#define MAX_FILE_NAME 255     //最大文件名称长度 
 
#define MAX_NAME_BUF  5000    //最大名称缓冲区长度 
#define MAX_RPT_NAME_BUF 1000 //最大报告控制块名称缓冲区长度 
#define MAX_OBJ_NAME 5000     //数据集中元素的最大数量 
#define MAX_RPT_DATA_NUM 5000 //一个报告中的最大数据数目 
 
 
//报告控制块相关结构体定义 
typedef struct 
{ 
    ST_INT mmsbool;	            /* named so not confused with C++ 'bool' type	*/ 
    ST_INT int8u; 
    ST_INT int16u;	            /* for SqNum.			*/ 
			                    /* NOTE: UCA server sends int8u for SqNum	*/ 
			                    /* but it's safe to decode it as int16u		*/ 
    ST_INT int32u;	            /* for IntgPd			*/ 
    ST_INT vstring65;	        /* for RptID & ObjectReference	*/ 
    ST_INT btime6;	            /* for EntryTime		*/ 
    ST_INT ostring8;	        /* for EntryID			*/ 
    ST_INT vstring32;	        /* for RptId			*/ 
    ST_INT bvstring6;	        /* for TrgOps (IEC)		*/ 
    ST_INT bvstring8;	        /* for OptFlds,TrgOps (UCA)	*/ 
    ST_INT bvstring10;	        /* for OptFlds (IEC)		*/ 
    ST_INT bstr6;		        /* for Reason (IEC)		*/ 
    ST_INT bstr8;		        /* for Reason (UCA)		*/ 
    ST_INT bstr9;		        /* for Writing OptFlds (IEC). Can't write all 10 bits.*/ 
} RPT_TYPEIDS; 
 
typedef struct 
{ 
    ST_CHAR    RptID[66];		 
    struct                      /* BVstring */	 
    {				 
        ST_INT16 len_1;		 
        ST_UCHAR data_1[2];		/* BVstring9 - need 2 bytes	*/ 
    } OptFlds;			 
    ST_UINT16  SqNum; 
    MMS_BTIME6 TimeOfEntry; 
    ST_CHAR    DatSetNa[66]; 
    ST_BOOLEAN BufOvfl; 
    ST_UINT16 SubSeqNum; 
    ST_BOOLEAN MoreSegmentsFollow; 
    ST_UINT8 EntryID [8];		/* ostring8			*/ 
    ST_UINT32 ConfRev; 
    ST_UINT8 *Inclusion;		/* ptr to bitstring		*/ 
				                /* Must alloc appropriate size	*/ 
				                /* buffer for bitstring.	*/ 
    ST_CHAR *dataRefName;		/* ptr to array of dataRefName	*/ 
    MMS_BVSTRING *Reason;		/* ptr to array of Reason bitstrings	*/ 
				                /* WARNING: this only works for variable*/ 
				                /* len bitstring up to 8 bits. 		*/ 
} RCB_DATA;		 
 
typedef struct 
{ 
    MVL_VAR_ASSOC *  RptID; 
    MVL_VAR_ASSOC *  OptFlds; 
    MVL_VAR_ASSOC *  SqNum; 
    MVL_VAR_ASSOC *  TimeOfEntry; 
    MVL_VAR_ASSOC *  DatSetNa; 
    MVL_VAR_ASSOC *  BufOvfl; 
    MVL_VAR_ASSOC *  SubSeqNum; 
    MVL_VAR_ASSOC *  MoreSegmentsFollow; 
    MVL_VAR_ASSOC *  EntryID; 
    MVL_VAR_ASSOC *  ConfRev; 
    MVL_VAR_ASSOC *  Inclusion; 
    MVL_VAR_ASSOC ** dataRefName;	/* array of ptrs	*/ 
    MVL_VAR_ASSOC ** dataValue;	    /* array of ptrs	*/ 
    MVL_VAR_ASSOC ** Reason;	    /* array of ptrs	*/ 
} RCB_VAR; 
 
typedef struct 
{ 
    DBL_LNK link;		            /* allows linked list of this struct	*/ 
    ST_INT rcb_type;	            /* RCB_TYPE_UCA, RCB_TYPE_IEC_BRCB, etc.	*/ 
	ST_INT rcb_create_type;         /*rcb建立方式，0表示动态建立，1表示静态建立 liwei 2012.07.13*/ 
			                        /* see RCB_TYPE.. defines in 'mvl_uca.h'.	*/ 
    ST_CHAR RptID [66];	            /* RptID of this RCB (Vstring65)	*/ 
    OBJECT_NAME **varNameArray;	    /* array of variable names in NVL	*/ 
    ST_INT numDsVar;	            /* num variables in rpt dataset	*/ 
    ST_INT *typeIdArr;	            /* array of type ids	*/ 
    ST_INT InclusionTypeid;	        /*Type ID for Inclusion Bitstring*/ 
    RCB_DATA rcb_data; 
    RCB_VAR rcb_var; 
	 
} RCB_INFO; 
 
typedef struct 
{ 
    RPT_TYPEIDS *rpt_typeids; 
    RCB_INFO *rcb_info_list;	    /* linked list of RCB_INFO structs	*/ 
} ALL_RCB_INFO;	                    /* used to track multiple RCBs.	*/ 
 
typedef struct 
{ 
	ST_CHAR    *RptID;		 
	struct                          /* BVstring */	 
    {				 
		ST_UINT16   len_1;		 
		ST_UCHAR    data_1[2];		/* BVstring9 - need 2 bytes	*/ 
    } *OptFlds;			 
	ST_UINT16       *SqNum; 
	MMS_BTIME6		*TimeOfEntry; 
	ST_CHAR			*DatSetNa; 
	ST_BOOLEAN		*BufOvfl; 
	ST_UINT16	    *SubSeqNum; 
	ST_BOOLEAN		*MoreSegmentsFollow; 
	ST_UINT8	    *EntryID;		    /* ostring8			*/ 
	ST_UINT32	    *ConfRev; 
	ST_UINT8	    *Inclusion;		    /* ptr to bitstring		*/ 
	                                    /* Must alloc appropriate size	*/ 
	                                    /* buffer for bitstring.	*/ 
	ST_CHAR			**dataRefName;		/* ptr to array of dataRefName	*/ 
	ST_VOID			**Value; 
	MMS_BVSTRING	**Reason;		    /* ptr to array of Reason bitstrings	*/ 
	 
	/* 增加字段，存储此报告发送的数据集所包含的数据的个数 */ 
	ST_INT		    num_data; 
	 
}RPT_INFO; 
 
typedef struct   
{ 
	time_t	time;		/* number of seconds elapsed since midnight (00:00:00), January 1, 1970 */ 
}MMS_GTIME; 
 
typedef struct   
{ 
	ST_UCHAR	value[1]; 
}MMS_BSTRING; 
 
typedef struct 
{ 
	ST_INT32 numMSec;  /* Number of milliseconds since midnight	*/ 
}MMS_BTIME4; 
 
typedef struct   
{ 
	ST_UCHAR	value[1]; 
}MMS_OSTRING; 
 
typedef struct   
{ 
	ST_INT16	data_len; 
	ST_UCHAR	value[1]; 
}MMS_OVSTRING; 
 
typedef wchar_t ST_WCHAR; 
 
typedef struct   
{ 
	ST_CHAR    name[MAX_REF_LEN + 1];		/* 指其Reference */ 
	ST_INT		type;						/* 指其rt->el_tag */ 
	ST_INT		len;						/* 指其rt->u.p.el_len */ 
	 
	ST_INT		data_size;					/* 指叶子数据长度 */ 
	union 
	{ 
		ST_BOOLEAN		*bool_value; 
		ST_UCHAR		*bcd_value; 
		 
		ST_INT8			*int8_value; 
		ST_INT16		*int16_value; 
		ST_INT32		*int32_value; 
		 
		ST_UINT8		*uint8_value; 
		ST_UINT16		*uint16_value; 
		ST_UINT32		*uint32_value; 
		 
		ST_FLOAT		*float_value; 
		ST_DOUBLE		*double_value; 
		 
		ST_CHAR			*vstring_value; 
		ST_CHAR			*fstring_value; 
		ST_WCHAR		*utf8string_value; 
		ST_WCHAR		*utf8vstring_value; 
		 
		MMS_GTIME		*gtime_value; 
		MMS_BTIME4		*btime4_value; 
		MMS_BTIME6		*btime6_value; 
		MMS_UTC_TIME	*utctime_value; 
		 
		MMS_BSTRING	    *bstring_value; 
		MMS_BVSTRING	*bvstring_value; 
		 
		MMS_OSTRING	    *ostring_value; 
		MMS_OVSTRING	*ovstring_value; 
		 
		ST_VOID			*any_value; 
	}value; 
	 
	MMS_BVSTRING		*reason_code; 
}PRIM_DATA; 
 
//内存监控变量 
static ST_CHAR *spareMem; 
static ST_INT memErrDetected; 
 
//服务器断开回调函数指针 
typedef unsigned int (*SERVER_DISC_CALLBACK_FUN)(char *server_name, int reason); 
//报告接收回调函数指针 
typedef unsigned int (*RPT_CALLBACK_FUN)(char *server_name, RPT_INFO *rpt_info); 
//控制报告接收回调函数指针 
typedef unsigned int (*CTRL_RPT_CALLBACK_FUN)(char *server_name, char *oper_name, char oper_result); 
 
//mms数据结构信息 
typedef struct 
{ 
	ST_CHAR			name[MAX_REF_LEN + 1];      //本层名称		 
	ST_INT			type;		                //数据类型						 
	ST_INT			len;					    //数据长度 
	ST_INT			size;					    //数据占用字节数 
}DATA_DIR; 
 
//mms文件列表结构信息 
typedef struct 
{ 
	ST_UINT32		fsize; 			            //文件长度 
	ST_BOOLEAN		mtimpres;			        //是否显示最后一次修改时间标志 
	time_t			mtime; 			            //文件最后一次修改时间 
    ST_CHAR			filename [MAX_FILE_NAME+1]; //文件名称 
} DIR_ENTRY; 
 
//客户端控制信息结构体，每连接一个服务器，应创建一个该结构体实例，并加入链表中 
typedef struct 
{                                        
	DBL_LNK l;                          //存放双向循环链表指针的结构体 
	ST_CHAR sever_name[MAX_NAME_LEN];      //被调用的远程服务器名称 
    ST_UINT8 level;  
	MVL_NET_INFO  *clientNetInfo;       //存放和远程服务器间联系的网络信息的结构体 
	MVL_VMD_CTRL *client_vmd;           //存放远程服务器数据信息的结构体 
    ALL_RCB_INFO *all_rcb_info; 
    SERVER_DISC_CALLBACK_FUN server_disk_callback_fun;//服务器断开连接回调函数 
    RPT_CALLBACK_FUN rpt_callback_fun;                //报告接收回调函数 
	CTRL_RPT_CALLBACK_FUN ctrl_rpt_callback_fun;         //控制结束报告回调函数 
}CLIENT_CTRL; 
 
CLIENT_CTRL *head_client_ctrl_list; 
 
 
/*外部接口函数*/ 
 
//初始化及连接管理函数 
__declspec(dllexport) unsigned int  mms_init(); 
__declspec(dllexport) unsigned int  mms_quit(); 
__declspec(dllexport) unsigned int  mms_connect(char *server_name, int level); 
__declspec(dllexport) unsigned int  mms_disconnect(char  *server_name); 
 
//目录服务函数 
__declspec(dllexport) unsigned int  mms_directory_service_fun(char *server_name); 
__declspec(dllexport) unsigned int mms_directory_create_fun(char *server_name, char *scl_file_name, char *ied_name, char *access_point_name);//2010.5.26 
__declspec(dllexport) unsigned int  mms_free_directory_service_fun(char *server_name);//添加函数，用于释放指定服务器的虚拟设备控制体资源 
 
//获得逻辑设备、逻辑节点、数据集、日志名称列表函数 
__declspec(dllexport) unsigned int mms_fetch_domain_name_list(char *server_name, char(**domain_names)[MAX_NAME_LEN], int *num_dom); 
__declspec(dllexport) void   mms_free_domain_name_list(char (*domain_names)[MAX_NAME_LEN]); 
 
__declspec(dllexport) unsigned int mms_fetch_var_name_list(char *server_name, char *domain_name, char(**var_names)[MAX_NAME_LEN], int *num_var); 
__declspec(dllexport) void mms_free_var_name_list(char (*var_names)[MAX_NAME_LEN]); 
 
__declspec(dllexport) unsigned int mms_fetch_dataset_name_list(char *server_name, char *domain_name, char (**ds_names)[MAX_NAME_LEN], int *num_ds); 
__declspec(dllexport) void mms_free_dataset_name_list(char (*ds_names)[MAX_NAME_LEN]); 
 
__declspec(dllexport) unsigned int mms_fetch_dataset_entry_name_list(char *server_name, char *dataset_ref, char (**var_refs)[MAX_NAME_LEN], int *num_vars); 
__declspec(dllexport) void mms_free_dataset_entry_name_list(char (*var_refs)[MAX_NAME_LEN]); 
 
__declspec(dllexport) unsigned int mms_fetch_log_name_list(char *server_name, char *domain_name, char (**log_names)[MAX_NAME_LEN], int *log_num); 
__declspec(dllexport) void mms_free_log_name_list(char (*log_names)[MAX_NAME_LEN]); 
 
//数据目录通用函数，可获得指定引用下一级的数据信息目录 
__declspec(dllexport) unsigned int mms_fetch_data_directory(char *server_name, char *var_ref, DATA_DIR **dir_info, int *num); 
__declspec(dllexport) void mms_free_data_directory(DATA_DIR *dir_info); 
 
//叶子节点数据读写函数（本地） 
__declspec(dllexport) unsigned int mms_local_read_prim_data(char *server_name, char *prim_ref, void *prim_buf); 
__declspec(dllexport) unsigned int mms_local_write_prim_data(char *server_name, char *prim_ref, void *prim_buf); 
 
//远程读写1个数据至本地数据缓冲区中 
__declspec(dllexport) unsigned int mms_remote_read_1_data(char *server_name, char *data_ref); 
__declspec(dllexport) unsigned int mms_remote_write_1_data(char *server_name, char *data_ref); 
//远程读写多个数据至本地数据缓冲区中 
__declspec(dllexport) unsigned int mms_remote_read_data(char *server_name, int var_num, char **var_refs, void *reserved); 
__declspec(dllexport) unsigned int mms_remote_write_data(char *server_name, int var_num, char **var_refs, void *reserved); 
 
//远程读写指定数据集数据至本地数据缓冲区 
__declspec(dllexport) unsigned int mms_remote_read_dataset(char *server_name, char *dataset_ref, void *reserved ); 
__declspec(dllexport) unsigned int mms_remote_write_dataset(char *server_name, char *dataset_ref, void *reserved ); 
 
//动态建立数据集及删除数据集函数 
__declspec(dllexport) unsigned int mms_create_dataset(char *server_name, char *dataset_ref, int var_num, char (*var_refs)[MAX_NAME_LEN], void *reserved); 
__declspec(dllexport) unsigned int mms_delete_dataset(char *server_name, char *dataset_ref, void *reserved); 
 
//报告回调函数注册 
__declspec(dllexport) unsigned int mms_register_rpt_callback(char *server_name, RPT_CALLBACK_FUN callback_fun); 
//服务器断开连接函数注册 
__declspec(dllexport) unsigned int mms_register_server_disc_callback(char *server_name, SERVER_DISC_CALLBACK_FUN callback_fun); 
//控制报告回调函数注册 
__declspec(dllexport) unsigned int mms_register_ctrl_rpt_callback(char *server_name, CTRL_RPT_CALLBACK_FUN callback_fun); 
 
//将报告数据转换为叶子节点数据的转换函数 
__declspec(dllexport) unsigned int mms_rpt_info_to_prim_data_list(char *server_name, RPT_INFO *rpt_info, PRIM_DATA **prims, int *num ); 
__declspec(dllexport) void  mms_free_prim_data_list(PRIM_DATA *prim_list, int num ); 
 
//获取与释放文件列表函数 
__declspec(dllexport) unsigned int mms_get_file_list(char *server_name, char *fs_name, DIR_ENTRY **file_info, int *file_num, void *reserved ); 
__declspec(dllexport) unsigned int mms_free_file_list(char *server_name, DIR_ENTRY *dir_entries ); 
 
//获取远程服务器文件函数 
__declspec(dllexport) unsigned int mms_get_file(char *server_name, char *rem_file_name, char *loc_file_name, void *reserved); 
//更改远程服务器上文件名函数 
__declspec(dllexport) unsigned int mms_rename_file(char *server_name, char *old_file_name, char *new_file_name, void *reserved ); 
//用本地文件替代远程服务器上的文件函数 
__declspec(dllexport) unsigned int mms_set_file(char *server_name, char *loc_file_name, char *rem_file_name, void *reserved ); 
//删除远程服务器文件函数 
__declspec(dllexport) unsigned int mms_delete_file(char *server_name, char *file_name, void *reserved); 
 
__declspec(dllexport) unsigned int mms_server_create_fun(char *server_name, char *scl_file_name, char *ied_name, char *access_point_name); 
 
__declspec(dllexport) unsigned int mms_modify_server_ip_addr(char *server_name, ST_ULONG ip_addr); 
 
//////////////////////////////////// 
__declspec(dllexport) unsigned int mms_jinit(char *server_name, char *log_ref); 
__declspec(dllexport) unsigned int mms_jstat(char *server_name, char *log_ref); 
__declspec(dllexport) unsigned int mms_jread(char *server_name, char *log_ref, int start_flag, int stop_flag,  
				                             char *start_entry, long num_of_entries, MMS_BTOD start_time, MMS_BTOD end_time); 
 
__declspec(dllexport) unsigned int set_opear_name(char *opear_name); 
 
 
//////////////////////////////////// 
typedef struct 
{ 
	char name[256]; 
	int  type; 
	int  size; 
	char desc[1025]; 
}DATA_INFO; 
 
 
__declspec(dllexport) unsigned int mms_fetch_dataset_datainfo(char *server_name, 
															  char *dataset_ref, 
															  DATA_INFO **data_info, 
															  int *num,  
															  int desc_get_mode, 
															  int leaf_mode); 
 
 
__declspec(dllexport)  unsigned int mms_fetch_leaf_data_info(char *server_name,  
									  char *data_ref, 
									  char *comp_name, 
									  DATA_INFO *data_info,  
									  int *leaf_num, 
									  int leaf_mode); 
 
 
unsigned int get_dU_str(char *server_name, char *in_str, char *out_str); 
 
//获取指定数据引用的类型及长度 
__declspec(dllexport) unsigned int mms_fetch_data_type(char *server_name, char *var_ref, int *data_type, int *data_size, int *data_len); 
////////////////////////////////////// 
/*以下暂时为内部函数，不提供外部接口*/ 
MVL_VAR_ASSOC * fetch_vmd_var_ctrl(MVL_VMD_CTRL *vmd_ctrl, char *data_ref, char *data_name, char *ld_name, ST_UINT8 level); 
MVL_NVLIST_CTRL * fetch_vmd_nvl_ctrl(MVL_VMD_CTRL *vmd_ctrl, char *dataset_ref, char *dataset_name, char *ld_name); 
ST_RET fetch_remote_name_list(MVL_NET_INFO *clientNetInfo, char *name_dom, char(*name_list)[128], char(*rpt_list)[128], int *num_name, int *num_rpt, int mms_class, int objscope, ST_UINT8 level); 
ST_RET fetch_remote_domain_name_list(MVL_NET_INFO *clientNetInfo, char(*name_list)[128], int *num_dom); 
ST_RET fetch_remote_var_dom_list(MVL_NET_INFO *clientNetInfo, char *name_dom, char(*name_list)[128], char(*rpt_list)[128], int *num_var, int *num_rpt, ST_UINT8 level); 
ST_RET fetch_remote_var_attr_dom(MVL_NET_INFO *clientNetInfo, MVL_VMD_CTRL *vmd_ctrl, char *name_dom, char *name_var, int *type_id, int *data_size); 
ST_RET fetch_remote_nvl_dom_list(MVL_NET_INFO *clientNetInfo, char *name_dom, char(*name_list)[128], int *num_nvl); 
ST_RET fetch_remote_nvl_attr_dom(MVL_NET_INFO *clientNetInfo, char *name_dom, char *name_nvl, OBJECT_NAME *var_obj, int *num_var_nvl); 
MVL_NET_INFO *SearchConnectServer(char *server_name, CLIENT_CTRL **client_ctrl); 
CLIENT_CTRL * FindConnectServer(MVL_NET_INFO *clientNetInfo); 
 
/*以下为mms内部函数，不提供外部接口*/ 
void client_server(LPVOID pParam); 
static ST_VOID disc_ind_fun (MVL_NET_INFO *cc, ST_INT discType); 
 
MVL_NET_INFO *connectToServer (ST_CHAR *clientARName, ST_CHAR *serverARName); 
ST_RET disconnectFromServer (MVL_NET_INFO *clientNetInfo); 
ST_RET waitReqDone (MVL_REQ_PEND *req, ST_INT timeout); 
ST_VOID doCommService (); 
 
unsigned int init_iec_rpt (MVL_NET_INFO *clientNetInfo, RPT_TYPEIDS *rpt_typeids,MVL_VMD_CTRL *vmd_ctrl, 
		                   ST_CHAR *dom_name, ST_CHAR *rcb_name);	 
 
ST_RET var_read (MVL_NET_INFO *net_info, ST_CHAR *varName, ST_INT scope, 
	             ST_CHAR *domName,ST_INT type_id, ST_VOID *dataDest, 
	             ST_INT timeOut); 
 
ST_RET nvl_read (MVL_NET_INFO *net_info, ST_CHAR *nvlName, ST_INT scope, 
	             ST_CHAR *domName,ST_INT *type_id, ST_CHAR **dataDest, 
	             ST_INT num_var, ST_INT timeOut); 
 
ST_RET var_write (MVL_NET_INFO *netInfo, ST_CHAR *varName, ST_INT scope,  
                  ST_CHAR *domName, ST_INT type_id, ST_VOID *dataSrc,  
                  ST_INT timeOut); 
 
ST_RET nvl_write (MVL_NET_INFO *net_info, ST_CHAR (*varName)[MAX_REF_LEN], ST_INT scope, 
	              ST_CHAR *domName,ST_INT *type_id, ST_CHAR **dataSrc, 
	              ST_INT num_var, ST_INT timeOut); 
 
ST_RET m_var_read (MVL_NET_INFO *net_info, ST_CHAR (*varName)[MAX_REF_LEN], ST_INT scope, 
                   ST_CHAR (*domName)[MAX_REF_LEN], ST_INT *type_id, ST_CHAR **dataDest, 
	               ST_INT num_var, ST_INT timeOut); 
 
ST_RET m_var_write (MVL_NET_INFO *net_info, ST_CHAR (*varName)[MAX_REF_LEN], ST_INT scope, 
                    ST_CHAR (*domName)[MAX_REF_LEN], ST_INT *type_id, ST_CHAR **dataSrc, 
	                ST_INT num_var, ST_INT timeOut); 
 
static ST_RET getFile (MVL_NET_INFO *clientNetInfo, ST_CHAR *loc_file, ST_CHAR *rem_file); 
 
static ST_VOID init_mem (); 
static ST_VOID free_mem(); 
 
static ST_VOID init_log_cfg (ST_VOID); 
static ST_VOID mem_chk_error_detected (ST_VOID); 
static ST_VOID *my_malloc_err (ST_UINT size); 
static ST_VOID *my_calloc_err (ST_UINT num, ST_UINT size); 
static ST_VOID *my_realloc_err (ST_VOID *old, ST_UINT size); 
 
ST_RET rpt_typeids_find (RPT_TYPEIDS *rpt_typeids); 
 
RCB_INFO *rcb_info_create (MVL_NET_INFO *net_info, ST_CHAR *domName, MVL_VMD_CTRL *vmd_ctrl, 
	ST_CHAR *rcbName, RPT_TYPEIDS *rpt_typeids, ST_INT timeOut); 
ST_VOID rcb_info_destroy (RCB_INFO *rcb_info); 
 
ST_RET u_iec_rpt_ind (MVL_COMM_EVENT *event); 
ST_VOID u_iec_rpt_ind_data (MVL_VAR_ASSOC **info_va, 
	ST_UINT8 *OptFldsData,	/* ptr to data part of OptFlds bvstring	*/ 
	ST_UINT8 *InclusionData,	/* ptr to Inclusion bstring	*/ 
	RCB_INFO *rcb_info, 
	ST_INT va_total, 
    RPT_INFO *rpt_info); 
ST_INT vmd_type_id_create (MVL_VMD_CTRL *vmd_ctrl, ST_CHAR *type_name, ST_UCHAR *asn1_data, ST_UINT asn1_len); 
 
//liwei 2012.07.13 
ST_INT my_type_id_create_from_tdl (ST_CHAR *type_name, ST_CHAR *tdl, MVL_VMD_CTRL *vmd_ctrl); 
ST_RET rcb_info_var_create (RCB_INFO *rcb_info, RPT_TYPEIDS *rpt_typeids); 
 
 
static ST_VOID kbService (ST_VOID); 
 
//yhc 
__declspec(dllexport) void mms_free_dataset_datainfo(DATA_INFO *data_info); 
 
//重新装置osicfg 
__declspec(dllexport) unsigned int mms_load_OsiCfg();  //yhc 
 
#ifdef __cplusplus 
} 
#endif

 