/************************************************************************/
/* SISCO SOFTWARE MODULE HEADER *****************************************/
/************************************************************************/
/*   (c) Copyright Systems Integration Specialists Company, Inc.,	*/
/*      	1986 - 2005, All Rights Reserved		        */
/*									*/
/* MODULE NAME : mvl_acse.h    						*/
/* PRODUCT(S)  : MMSEASE-LITE						*/
/*									*/
/* MODULE DESCRIPTION : 						*/
/*									*/
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE :				*/
/*	NONE								*/
/*									*/
/* MODIFICATION LOG :							*/
/*  Date     Who   Rev			Comments			*/
/* --------  ---  ------   -------------------------------------------	*/
/* 05/10/05  EJV     26    Moved up osicfgx proto. 			*/
/* 04/06/05  EJV     25    Added MMSEASE_MOSI.				*/
/* 03/28/05  JRB     24    Del suicacse header.				*/
/* 08/11/04  JRB     23    Del global funct ptr u_mvl_connect_ind_fun.	*/
/*			   Fix mvl_abort_req_ex return (ST_RET).	*/
/* 07/08/04  JRB     22    Del unused global var mvl_local_cl_ar_name.	*/
/* 07/23/03  MDE     21    Removed ACSE_AUTH_ENABLED			*/
/* 06/16/03  EJV     20    Removed m_match.h, s_match.h includes	*/
/*			   Chg M_MATCH_CTRL to DIB_MATCH_CTRL.		*/
/* 06/10/03  MDE     19    Added address matching			*/
/* 10/11/02  ASK     18    Added mvla_initiate_req_ex and 		*/
/*			   u_mvl_connect_*_ex				*/
/* 05/13/02  MDE     17    Added structure element comments		*/
/* 05/03/02  MDE     16    Added mvl_add_bind_ctrl, associated changes	*/
/* 02/25/02  MDE     15    More changes to MVL_CFG_INFO			*/
/* 02/20/02  MDE     14    Changes to new MVL_CFG_INFO, for mult. bind	*/
/* 02/07/02  JRB     13    Define MVL_CFG_INFO & pass to mvl_start_acse.*/
/*			   Move osicfgx proto here, add MVL_CFG_INFO arg*/
/*			   Del global var mvl_local_ar_name.		*/
/* 01/29/02  JRB     12    Replace mvl_init_cl_netinfo funct with	*/
/*			   mvl_init_audt_addr.				*/
/* 11/28/01  MDE     11    mvl_set_num_connections,mvl_set_max_msg_size */
/* 01/05/01  MDE     10    Changes for use over Marben			*/
/* 06/26/00  JRB     09    Del "#define MVL_ACSE". Not used.		*/
/*			   Move "#define COACSE" to mvl_defs.h (avoids	*/
/*			     mvl_defs.h dependence on mvl_acse.h).	*/
/* 03/09/00  MDE     08    Added _mvl_init_conn_ctrl			*/
/* 07/30/99  JRB     07    Chg ma_clbind_ctrl from static to global.	*/
/* 04/13/99  MDE     06    Added '_mvla_initiate_locDe'			*/
/* 03/18/99  MDE     05    Made connection limits runtime settable	*/
/* 11/16/98  MDE     04    Removed mvl_release, mvla_release (obsolete)	*/
/* 07/16/98  MDE     03    Addded 'mvl_dib_entry_to_app_ref'		*/
/* 06/19/98  JRB     02    Add tp_type, etc. to NET_BIND_CTRL.		*/
/* 09/10/97  MDE     01    MMS-LITE V4.0 Release			*/
/************************************************************************/

#ifndef MVL_ACSE_INCLUDED
#define MVL_ACSE_INCLUDED

#ifdef __cplusplus
extern "C" {
#endif

#if defined(MMSEASE_MOSI)
/* min includes */
#include "mms_def2.h"
#else
#include "acse2usr.h"
#include "mvl_defs.h"

/************************************************************************/
/* Some error return codes */
#define REQ_INCOMPLETE  	0x100
#define LOCAL_NAME_NOT_FOUND 	0x101
#define REMOTE_NAME_NOT_FOUND 	0x102

#define MVLE_LOCAL_NAME 	0x101
#define MVLE_REMOTE_NAME 	0x102
#define MVLE_NUM_CONNECTIONS	0x103

/************************************************************************/
/* Bind and Connection control structures				*/

struct dib_entry;   /* Forward declaration */
#endif /* !defined(MMSEASE_MOSI) */

typedef struct net_bind_ctrl
  {
/* These parameters must be set before using in mvl_start_acse		*/
  ST_CHAR ar_name[MAX_AR_LEN+1];	
  ST_INT num_calling;
  ST_INT num_called;

/* Internal */
  ST_VOID *user_info;
#ifdef LEAN_T
  ST_INT tp_type;
  ST_INT32 copp_bind_id_tcp;
  ST_INT32 copp_bind_id_tp4;
#else
  ST_INT32 copp_bind_id;
#endif
  ST_INT32 clpp_bind_id;
  struct dib_entry *de;
  } NET_BIND_CTRL;

/************************************************************************/
/* MVL configuration information. Filled in by user or configuration	*/
/* and passed to mvl_start_acse.					*/
/************************************************************************/
//typedef struct 
//{
//	ST_INT auto_acssoc_time;           //自动重联时间
//	ST_INT entryID_num;               //entryID缓存最大个数
//	ST_BOOLEAN SG_Variable_List;       //定值变量
//	ST_BOOLEAN SG_rw_mode;             //定值读写方式
//	ST_BOOLEAN Rpt_Many_Instance;      //报告实现方式
//	ST_BOOLEAN Variable_rw_mode;       //VA读写方式
//	ST_BOOLEAN IED_create_mode;        //对象空间创建模式
//	ST_BOOLEAN keepCon;                //keepCon标志
//}AI_DEFAULT_CFG;
//
//typedef struct 
//{
//	DBL_LNK l;
//	ST_CHAR ied_name[MAX_AR_LEN+1];
//	AI_DEFAULT_CFG def_cfg;
//}AI_IED_CFG;
//
//typedef struct 
//{
//	AI_DEFAULT_CFG default_cfg;            //默认配置
//	ST_INT max_dyn_ds_num;             //动态数据集最大个数
//	ST_INT max_tdlBuf_len;             //TDL最大长度
//	ST_INT max_typeID_num;             //TYPEID最大个数
//	AI_IED_CFG *ied_cfg;               //装置配置数组
// }AI_CFG_INFO;


typedef struct
  {
  ST_INT max_msg_size;	     	/* Max MMS message size			*/
  ST_INT num_calling;	     	/* total number of calling connections	*/
  ST_INT num_called;	     	/* total number of called connections	*/

/* Used for single local address binding (LEAN-T)			*/ 
  ST_CHAR local_ar_name[MAX_AR_LEN+1];

/* Used for multiple local address binding only (MARBEN)		*/ 
#ifdef MAP30_ACSE		/* Select bind mode */
  ST_BOOLEAN use_bind_ctrl;	/* Set to 0 for single local		*/
#endif

/* User sets these only when use_bind_ctrl is SD_TRUE (MARBEN)		*/
  ST_INT         max_bind_ctrl;	/* Max allowed				*/
  ST_INT         num_bind_ctrl;	/* Active bindings			*/
  NET_BIND_CTRL *bind_ctrl;	/* Array of NET_BIND_CTRL		*/

/* Internal use */
  ST_INT calling_used;		/* Number mvl_calling_conn_ctrl bound	*/
  ST_INT called_used;		/* Number mvl_called_conn_ctrl bound	*/
  } MVL_CFG_INFO;

/* Persistant config information; set by MVL during mvl_start_acse 	*/
extern MVL_CFG_INFO *mvl_cfg_info;

ST_RET osicfgx (ST_CHAR *xml_filename, MVL_CFG_INFO *mvlCfg);
ST_RET osicfgx_ex(ST_CHAR *logFileName, MVL_CFG_INFO *mvlCfg);
//ST_VOID releaseAcsiCfg(AI_CFG_INFO *cfg_info);

#if !defined(MMSEASE_MOSI)

/************************************************************************/
/* Global configuration variables					*/

extern INIT_INFO *mvl_init_resp_info;
extern NET_BIND_CTRL ma_clbind_ctrl;	/* to save clpp_bind info.	*/

#if defined(MAP30_ACSE)
extern ST_INT 	      mvl_num_bind_ctrl;
extern NET_BIND_CTRL *mvl_bind_ctrl;
#endif
ST_RET mvla_set_init_ar (ST_CHAR *ar_name);

/************************************************************************/
/* ACSE interface related MVL ACSE functions				*/

ST_VOID mvl_set_max_msg_size (ST_INT max_msg_size);

ST_RET mvl_start_acse (MVL_CFG_INFO *cfgInfo);
ST_RET mvl_end_acse (ST_VOID);


ST_VOID _mvl_init_conn_ctrl (ST_VOID);

ST_RET mvl_initiate_req (ST_CHAR *remAr,
			INIT_INFO *req_info, 
			INIT_INFO *resp_info,
			MVL_NET_INFO **net_info_out);

ST_RET mvla_initiate_req (ST_CHAR *remAr,
			INIT_INFO *req_info, 
			INIT_INFO *resp_info,
			MVL_NET_INFO **net_info_out,
			MVL_REQ_PEND **req_out);

ST_INT mvla_initiate_req_ex (ST_CHAR *remAr,
			     INIT_INFO *req_info, 
			     INIT_INFO *resp_info,
			     MVL_NET_INFO **net_info_out,
			     MVL_REQ_PEND **req_out,
			     ACSE_AUTH_INFO *auth_info,
			     S_SEC_ENCRYPT_CTRL *encrypt_info);

/* If this variable is not NULL, MVL will use it as the source for the	*/
/* local dib entry for an initiate request.				*/
extern struct dib_entry *_mvla_initiate_locDe;

ST_RET mvl_abort_req (MVL_NET_INFO *cc);
ST_RET mvl_abort_req_ex (MVL_NET_INFO *cc, 
			 ST_BOOLEAN diagnostic_pres, 
			 ST_ACSE_AUTH diagnostic);

ST_RET mvl_init_audt_addr (AUDT_APDU *audt, ST_CHAR *locArName, ST_CHAR *remArName);
ST_VOID mvl_dib_entry_to_app_ref (struct dib_entry *de, struct app_ref *appRef);
ST_RET mvl_add_bind_ctrl (NET_BIND_CTRL *bc);

/************************************************************************/
/* User defined function pointer to handle disconnect indications	*/

#define MVL_ACSE_RELEASE_IND	1
#define MVL_ACSE_ABORT_IND	2
extern ST_VOID (*u_mvl_disc_ind_fun) (MVL_NET_INFO *cc, ST_INT discType);

/************************************************************************/
/* User defined functions to handle connect indications & confirms.	*/
/* User must supply these functions.					*/

extern ST_ACSE_AUTH u_mvl_connect_ind_ex (MVL_NET_INFO *cc, INIT_INFO *init_info, ACSE_AUTH_INFO *req_auth_info, ACSE_AUTH_INFO *rsp_auth_info);
extern ST_ACSE_AUTH u_mvl_connect_cnf_ex (MVL_NET_INFO *cc, AARE_APDU *ass_rsp_info);

/************************************************************************/

/* MVL level address matching functions */
ST_RET mvl_match_remote_ar (DIB_MATCH_CTRL *matchCtrl, struct mvl_net_info *cc, 
			    struct dib_entry **dib_entry_out);
ST_RET mvl_match_local_ar  (DIB_MATCH_CTRL *matchCtrl, struct mvl_net_info *cc, 
			    struct dib_entry **dib_entry_out);
ST_INT mvl_cmp_local_addr  (DIB_MATCH_CTRL *matchCtrl, struct mvl_net_info *cc, 
			    struct dib_entry *dib_entry);
ST_INT mvl_cmp_remote_addr (DIB_MATCH_CTRL *matchCtrl, struct mvl_net_info *cc, 
			    struct dib_entry *dib_entry);

#if defined(MAP30_ACSE)
ST_RET mvl_net_info_to_chan (MVL_NET_INFO *cc, ST_INT *chanOut);
#endif

#endif /* !defined(MMSEASE_MOSI) */

/************************************************************************/
#ifdef __cplusplus
}
#endif

#endif 	/* MVL_ACSE_INCLUDED */
/************************************************************************/

