You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

487 lines
19 KiB
C

1 year ago
#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 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>
#define MAX_NAME_LEN 128 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>
#define MAX_FILE_NAME 255 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>
#define MAX_NAME_BUF 5000 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_RPT_NAME_BUF 1000 //<2F><><EFBFBD>󱨸<EFBFBD><F3B1A8B8><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>ƻ<EFBFBD><C6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_OBJ_NAME 5000 //<2F><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define MAX_RPT_DATA_NUM 5000 //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD>ؽṹ<D8BD><EFBFBD><E5B6A8>
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<63><62><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>0<EFBFBD><30>ʾ<EFBFBD><CABE>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʾ<EFBFBD><CABE>̬<EFBFBD><CCAC><EFBFBD><EFBFBD> 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 */
/* <20><><EFBFBD><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD>˱<EFBFBD><CBB1><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĸ<DDB5><C4B8><EFBFBD> */
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]; /* ָ<><D6B8>Reference */
ST_INT type; /* ָ<><D6B8>rt->el_tag */
ST_INT len; /* ָ<><D6B8>rt->u.p.el_len */
ST_INT data_size; /* ָҶ<D6B8><D2B6><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
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;
//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>
static ST_CHAR *spareMem;
static ST_INT memErrDetected;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
typedef unsigned int (*SERVER_DISC_CALLBACK_FUN)(char *server_name, int reason);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջص<D5BB><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
typedef unsigned int (*RPT_CALLBACK_FUN)(char *server_name, RPT_INFO *rpt_info);
//<2F><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջص<D5BB><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
typedef unsigned int (*CTRL_RPT_CALLBACK_FUN)(char *server_name, char *oper_name, char oper_result);
//mms<6D><73><EFBFBD>ݽṹ<DDBD><E1B9B9>Ϣ
typedef struct
{
ST_CHAR name[MAX_REF_LEN + 1]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_INT type; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_INT len; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
ST_INT size; //<2F><><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
}DATA_DIR;
//mms<6D>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD><E1B9B9>Ϣ
typedef struct
{
ST_UINT32 fsize; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
ST_BOOLEAN mtimpres; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>޸<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>־
time_t mtime; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>޸<EFBFBD>ʱ<EFBFBD><CAB1>
ST_CHAR filename [MAX_FILE_NAME+1]; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
} DIR_ENTRY;
//<2F>ͻ<EFBFBD><CDBB>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>壬ÿ<E5A3AC><C3BF><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ýṹ<C3BD><E1B9B9>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
DBL_LNK l; //<2F><><EFBFBD><EFBFBD>˫<EFBFBD><CBAB>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ľṹ<C4BD><E1B9B9>
ST_CHAR sever_name[MAX_NAME_LEN]; //<2F><><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ST_UINT8 level;
MVL_NET_INFO *clientNetInfo; //<2F><><EFBFBD>ź<EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ľṹ<C4BD><E1B9B9>
MVL_VMD_CTRL *client_vmd; //<2F><><EFBFBD><EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ľṹ<C4BD><E1B9B9>
ALL_RCB_INFO *all_rcb_info;
SERVER_DISC_CALLBACK_FUN server_disk_callback_fun;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ӻص<D3BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
RPT_CALLBACK_FUN rpt_callback_fun; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջص<D5BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
CTRL_RPT_CALLBACK_FUN ctrl_rpt_callback_fun; //<2F><><EFBFBD>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
}CLIENT_CTRL;
CLIENT_CTRL *head_client_ctrl_list;
/*<2A>ⲿ<EFBFBD>ӿں<D3BF><DABA><EFBFBD>*/
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__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);
//Ŀ¼<C4BF><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__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);//<2F><><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
//<2F><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><E8B1B8><EFBFBD>߼<EFBFBD><DFBC>ڵ㡢<DAB5><E3A1A2><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
__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]);
//<2F><><EFBFBD><EFBFBD>Ŀ¼ͨ<C2BC>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɻ<EFBFBD><C9BB><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢĿ¼
__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);
//Ҷ<>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>ݶ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>
__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);
//Զ<>̶<EFBFBD>д1<D0B4><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__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);
//Զ<>̶<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__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);
//Զ<>̶<EFBFBD>дָ<D0B4><D6B8><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
__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 );
//<2F><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD>
__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);
//<2F><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
__declspec(dllexport) unsigned int mms_register_rpt_callback(char *server_name, RPT_CALLBACK_FUN callback_fun);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>Ӻ<EFBFBD><D3BA><EFBFBD>ע<EFBFBD><D7A2>
__declspec(dllexport) unsigned int mms_register_server_disc_callback(char *server_name, SERVER_DISC_CALLBACK_FUN callback_fun);
//<2F><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
__declspec(dllexport) unsigned int mms_register_ctrl_rpt_callback(char *server_name, CTRL_RPT_CALLBACK_FUN callback_fun);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ΪҶ<CEAA>ӽڵ<D3BD><DAB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__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 );
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ͷ<EFBFBD><CDB7>ļ<EFBFBD><C4BC>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
__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 );
//<2F><>ȡԶ<C8A1>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
__declspec(dllexport) unsigned int mms_get_file(char *server_name, char *rem_file_name, char *loc_file_name, void *reserved);
//<2F><><EFBFBD><EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__declspec(dllexport) unsigned int mms_rename_file(char *server_name, char *old_file_name, char *new_file_name, void *reserved );
//<2F>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
__declspec(dllexport) unsigned int mms_set_file(char *server_name, char *loc_file_name, char *rem_file_name, void *reserved );
//ɾ<><C9BE>Զ<EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
__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);
//<2F><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD>
__declspec(dllexport) unsigned int mms_fetch_data_type(char *server_name, char *var_ref, int *data_type, int *data_size, int *data_len);
//////////////////////////////////////
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ<CAB1>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ӿ<EFBFBD>*/
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);
/*<2A><><EFBFBD><EFBFBD>Ϊmms<6D>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ӿ<EFBFBD>*/
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);
//<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>osicfg
__declspec(dllexport) unsigned int mms_load_OsiCfg(); //yhc
#ifdef __cplusplus
}
#endif