/************************************************************************/ 
/* SISCO SOFTWARE MODULE HEADER *****************************************/ 
/************************************************************************/ 
/*	(c) Copyright Systems Integration Specialists Company, Inc.,	*/ 
/*	1995-2005, All Rights Reserved					*/ 
/*									*/ 
/* MODULE NAME : acse2usr.h 						*/ 
/* PRODUCT(S)  :							*/ 
/*									*/ 
/* MODULE DESCRIPTION :							*/ 
/*	ACSE main header file.						*/ 
/*									*/ 
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE :				*/ 
/*									*/ 
/* MODIFICATION LOG :							*/ 
/*  Date     Who   Rev     Comments					*/ 
/* --------  ---  ------   -------------------------------------------  */ 
/* 05/05/05  EJV    33	   PRES_ADDR added port.			*/ 
/* 03/28/05  EJV    32     MMSEASE_MOSE: add MAX_PSEL_LEN, MAX_SSEL_LEN	*/ 
/* 10/21/03  JRB    31     Add a_get_event_handles_unix.		*/ 
/* 08/25/03  EJV    30     Del old password auth (OBSOLETE_ACSE_AUTH)	*/ 
/*			   Added a_get_chan.				*/ 
/*			   Renamed encrypt_info to encrypt_ctrl		*/ 
/* 07/23/03  MDE    29     Removed ACSE_AUTH_ENABLED, S_SEC_ENABLED	*/ 
/* 06/17/03  EJV    28     Added ACSE_LOG_DIB mask.			*/ 
/* 06/13/03  MDE    27     Added Security				*/ 
/* 10/14/02  ASK    26     Added abort diagnostic to ABRT_APDU.		*/ 
/* 09/30/02  ASK    25     Moved authentication defines / protos into   */ 
/*			   acseauth.h					*/ 
/* 09/27/02  ASK    24     Add authentication stuff to AARE_APDU	*/ 
/* 06/20/02  JRB    23     Add calling_paddr to AARQ_APDU.		*/ 
/*			   Replace "nsap" in PRES_ADDR with union.	*/ 
/* 05/02/02  MDE    22     Added _copp_bind				*/ 
/* 02/14/02  ASK    21     Add a_associate_reqm				*/ 
/* 01/22/02  JRB    20     Add args to copp_initialize (same as MAP30..)*/ 
/*			   Del a_set_msgsize (no longer needed).	*/ 
/* 01/10/02  JRB    19     Add cltp_decode_nsdu_2 proto.		*/ 
/* 12/20/01  JRB    18     Del clpp_bind functions and bind id args to	*/ 
/*			   a_unit_data_req & u_a_unit_data_ind.		*/ 
/* 05/10/01  JRB    17     Chg SSEL_LEN from 16 to 4.			*/ 
/* 12/18/00  EJV    16     Added remAr param to a_associate_req for	*/ 
/*			   Lite over Marben stack (MAP30_ACSE).		*/ 
/* 08/05/99  JRB    15     Add a_get_ev... prototype.			*/ 
/* 07/14/99  JRB    14     Add ACSE Password Authentication stuff.	*/ 
/* 01/28/99  JRB    13     Move cltp_decode_nsdu proto from TP4 to here.*/ 
/* 12/04/98  JRB    12     Del "audt_debug_sel".			*/ 
/*			   Add "loc_mac" to AUDT_APDU.			*/ 
/* 08/13/98  JRB    11     Lint cleanup.				*/ 
/* 08/14/97  JRB    10     Added "tp_type" to PRES_ADDR.		*/ 
/*			   Del MAX_TSEL_LEN & MAX_NSAP_LEN defines (use	*/ 
/*			   MAX_TSEL_LEN & MAX_IP_ADDR_LEN in tp4api.h).	*/ 
/* 05/27/97  JRB   7.00    MMSEASE 7.0 release.				*/ 
/* 04/10/97  JRB    09     Chg error defs to use base from "glberror.h".*/ 
/* 03/07/97  JRB    08     Add COPP & COSP logmasks for MOSI.		*/ 
/* 02/20/97  JRB    07     Move *_debug_sel & logmasks from acse2log.h	*/ 
/*			   to acse2usr.h.				*/ 
/* 01/09/97  MDE    06     Allow user to specify destination MAC	*/ 
/* 01/01/97  RKR    05     Added ACSE2USR_INCLUDED and __cplusplus	*/ 
/* 10/04/96  JRB    04     Add adlcAddr to PRES_ADDR for MCGW.		*/ 
/* 08/15/96  JRB    03     Add a_buffers_avail prototype for LEAN_T.	*/ 
/* 04/18/96  JRB    02     Chg a_associate_req return to ST_LONG.		*/ 
/* 03/26/96  MDE    01     Added header, 'REDUCED_STACK' support       	*/ 
/************************************************************************/ 
 
#ifndef ACSE2USR_INCLUDED 
#define ACSE2USR_INCLUDED 
 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
#include "asn1defs.h" 
#include "acseauth.h" 
#include "ssec.h" 
#include "clnp_usr.h" 
#include "tp4api.h"	/* Need TP_TYPE_* defines for "tp_type" values.	*/ 
			/* Need MAX_TSEL_LEN & MAX_IP_ADDR_LEN defines.	*/ 
 
 
/****************************************************************/ 
/* Log Control							*/ 
/****************************************************************/ 
#define ACSE_LOG_ERR		0x00000001 
#define ACSE_LOG_ENC		0x00000002 
#define ACSE_LOG_DEC		0x00000004 
#define ACSE_LOG_DIB		0x00000008 
 
#define COPP_LOG_ERR		0x00000100L 
#define COPP_LOG_DEC		0x00001000L 
#define COPP_LOG_DEC_HEX	0x00002000L 
#define COPP_LOG_ENC		0x00004000L 
#define COPP_LOG_ENC_HEX	0x00008000L 
 
#define COSP_LOG_ERR		0x00010000L 
#define COSP_LOG_DEC		0x00100000L 
#define COSP_LOG_DEC_HEX	0x00200000L 
#define COSP_LOG_ENC		0x00400000L 
#define COSP_LOG_ENC_HEX	0x00800000L 
 
 
extern ST_UINT acse_debug_sel; 
 
/************************************************************************/ 
/* Error codes (returned from a_* functions).				*/ 
/* NOTE: Values begin from E_ACSE2 (found in glberror.h).		*/ 
/* NOTE: The exception codes (EX_ACSE_*) do not have separate range.	*/ 
/************************************************************************/ 
#define E_ACSE_ENC_ERR		0x3001 
#define E_ACSE_SEND_ERR		0x3002 
#define E_ACSE_INVALID_CONN_ID	0x3003 
#define E_ACSE_INVALID_STATE	0x3004 
#define E_ACSE_INVALID_PARAM	0x3005 
#define E_ACSE_BUFFER_OVERFLOW	0x3006 
#define E_ACSE_MEMORY_ALLOC	0x3007 
 
/************************************************************************/ 
/* Exception codes (passed to u_a_except or u_cla_except).		*/ 
/* Caused by decode or state problems.					*/ 
/************************************************************************/ 
#define EX_ACSE_DECODE		0x3081 
#define EX_ACSE_INVALID_STATE	0x3082 
 
/************************************************************************/ 
/* Structure definitions.						*/ 
/************************************************************************/ 
/* This structure represents the entire Presentation address		*/ 
/* NOTE: Using Fastbyte Presentation and Session, there are no P-Sels	*/ 
/*       and S-Sels, so the P-Address is equivalent to the T-Address	*/ 
 
#if defined(MMSEASE_MOSI) 
#define MAX_PSEL_LEN	16 
#define MAX_SSEL_LEN	16 
#else 
#define MAX_PSEL_LEN	4	/* International Std Profile recommends 4*/ 
#define MAX_SSEL_LEN	4	/* GOSIP Ver2 recommends len of 2	*/  
#endif 
/* MAX_TSEL_LEN defined in "tp4api.h"	*/ 
/* MAX_IP_ADDR_LEN defined in "tp4api.h"	*/ 
typedef struct tagPRES_ADDR 
  { 
#if !defined(REDUCED_STACK) 
  ST_UINT psel_len; 
  ST_UCHAR psel [MAX_PSEL_LEN]; 
  ST_UINT ssel_len; 
  ST_UCHAR ssel [MAX_SSEL_LEN]; 
  ST_INT tp_type;	/* Type of transport: TP_TYPE_TP4 or TP_TYPE_TCP.*/ 
  ST_UINT tsel_len; 
  ST_UCHAR tsel [MAX_TSEL_LEN]; 
  ST_UINT nsap_len; 
  union 
    {	/* If TP_TYPE_TP4, use "nsap". If TP_TYPE_TCP, use "ip".	*/ 
    ST_UCHAR nsap [CLNP_MAX_LEN_NSAP];	/* NSAP OR			*/ 
    ST_ULONG ip;			/* IP Addr (network byte order)	*/ 
    }netAddr; 
  ST_UINT16  port; 
#if defined (MCGW) 
  ST_UINT16 adlcAddr; 
#endif	/* defined (MCGW)	*/ 
#else 
  ST_UINT16 adlcAddr; 
#endif 
  } PRES_ADDR; 
 
/* This structure is used for any data that must be encoded/decoded	*/ 
/* by the user instead of the ACSE.					*/ 
/* If len == 0, or ptr == NULL, it is assumed there is no data.		*/ 
typedef struct tagBUFFER 
  { 
  ST_INT len;			/* Length of encoded data.		*/ 
  ST_UCHAR *ptr;		/* Pointer to encoded data.		*/ 
  } BUFFER; 
 
/* This structure contains AE_TITLE info.				*/ 
typedef struct tagAE_TITLE 
  { 
  ST_BOOLEAN AP_title_pres;          	/* present flag                 */ 
  MMS_OBJ_ID AP_title;          	/* AP title                     */ 
  ST_BOOLEAN AE_qual_pres;           	/* present flag                 */ 
  ST_INT32 AE_qual;                 	/* AE qualifier                 */ 
  ST_BOOLEAN AP_inv_id_pres;         	/* present flag                 */ 
  ST_INT32 AP_inv_id;       	     	/* AP invocation ID             */ 
  ST_BOOLEAN AE_inv_id_pres;         	/* present flag                 */ 
  ST_INT32 AE_inv_id;	            	/* AE invocation ID             */ 
  } AE_TITLE; 
 
/* This structure is used for the AARQ_APDU.			*/ 
typedef struct tagAARQ_APDU 
  { 
  /* The following entries passed to peer in AARQ-apdu.*/ 
  /* ACSE sets and checks "protocol-version".  Must be "version1".	*/ 
  ST_BOOLEAN	ASO_context_name_pres; 
  MMS_OBJ_ID	ASO_context_name; 
  AE_TITLE	called_ae_title; 
  AE_TITLE	calling_ae_title; 
 
  /* authentication and security */ 
  ACSE_AUTH_INFO     auth_info; 
  S_SEC_ENCRYPT_CTRL encrypt_ctrl; 
   
  BUFFER	user_info;		/* User must encode/decode	*/ 
 
  /* The following entries passed to presentation.			*/ 
  /* NOTE:  "calling_paddr" ignored by "a_associate_req" function.	*/ 
  /*        Contains remote addr when "u_a_associate_ind" called.	*/ 
  PRES_ADDR	calling_paddr; 
  PRES_ADDR	called_paddr; 
  } AARQ_APDU; 
 
/* This structure is used for the AUDT_APDU				*/ 
/* NOTE: same as AARQ_APDU except add calling_paddr.			*/ 
typedef struct tagAUDT_APDU 
  { 
  /* The following entries passed to peer in AUDT-apdu.*/ 
  /* ACSE sets and checks "protocol-version".  Must be "version1".	*/ 
  ST_BOOLEAN	ASO_context_name_pres; 
  MMS_OBJ_ID	ASO_context_name; 
  AE_TITLE	called_ae_title; 
  AE_TITLE	calling_ae_title; 
  BUFFER	user_info;		/* User must encode/decode	*/ 
   
  /* The following entries passed to or received from presentation.	*/ 
  PRES_ADDR	calling_paddr; 
  PRES_ADDR	called_paddr; 
 
  /* User doesn't need to set loc_mac before calling a_unit_data_req.	*/ 
  /* Decode process fills in loc_mac before calling u_a_unit_data_ind.	*/ 
  ST_UCHAR	  loc_mac  [CLNP_MAX_LEN_MAC];	/* Local MAC addr	*/ 
  ST_BOOLEAN rem_mac_valid;			/* SD_TRUE if MAC addr valid	*/ 
  ST_UCHAR	  rem_mac  [CLNP_MAX_LEN_MAC];		/* Remote MAC addr		*/ 
  } AUDT_APDU; 
 
 
/* This structure is used for the AARE_APDU.				*/ 
typedef struct tagAARE_APDU 
  { 
  /* ACSE sets and checks "protocol-version".  Must be "version1".	*/ 
  ST_BOOLEAN	ASO_context_name_pres; 
  MMS_OBJ_ID	ASO_context_name; 
  AE_TITLE	responding_ae_title; 
  ST_INT16		result; 
  ST_BOOLEAN	result_source_diag_pres; 
  ST_UINT16	result_source;		/* Passed as asn1_tag to ASN1 functs	*/ 
  ST_INT16		result_diag; 
 
  /* authentication and security */ 
  ACSE_AUTH_INFO     auth_info; 
  S_SEC_ENCRYPT_CTRL encrypt_ctrl; 
   
  BUFFER	user_info;		/* User must encode/decode	*/ 
  } AARE_APDU; 
 
/* This structure is used for the RLRQ_APDU.			*/ 
typedef struct tagRLRQ_APDU 
  { 
  ST_BOOLEAN reason_pres; 
  ST_INT16 reason; 
  BUFFER user_info;			/* User must encode/decode	*/ 
  } RLRQ_APDU; 
 
/* This structure is used for the RLRE_APDU.			*/ 
typedef struct tagRLRE_APDU 
  { 
  ST_BOOLEAN reason_pres; 
  ST_INT16 reason; 
  BUFFER user_info;			/* User must encode/decode	*/ 
  /* NOTE: With Fastbyte presentation and session, there is no way to	*/ 
  /*       refuse a release, so the "Result" parameter is assumed to be	*/ 
  /*       "affirmative", and is therefore not needed in this structure.*/ 
  } RLRE_APDU; 
 
/* This structure is used for the ABRT_APDU.			*/ 
typedef struct tagABRT_APDU 
  { 
  ST_INT16 source;		/* Abort source (0=user, 1=provider)		*/ 
  ST_BOOLEAN   diagnostic_pres; 
  ST_ACSE_AUTH diagnostic;  /* Abort diagnostic; codes in acseauth.h */ 
  BUFFER user_info;			/* User must encode/decode	*/ 
  } ABRT_APDU; 
 
/* NOTE: the ASO-association-identifier in the ACSE specification is not*/ 
/* supported in this implementation.  It will not be sent in outgoing	*/ 
/* APDUs and will be ignored in incoming APDUs.				*/ 
 
/************************************************************************/ 
/* Prototypes								*/ 
/************************************************************************/ 
ST_RET copp_initialize (ST_INT max_conns, ST_UINT msg_size); 
ST_RET copp_terminate (ST_VOID); 
ST_BOOLEAN copp_event (ST_VOID); 
#if defined(MAP30_ACSE) 
ST_RET copp_bind (ST_LONG user_bind_id, ST_CHAR *loc_ar_name,  
                  ST_INT num_calling, ST_INT num_called); 
ST_RET _copp_bind (ST_LONG user_bind_id, ST_CHAR *loc_ar_name,  
                   ST_INT num_calling, ST_INT num_called,  
                   ST_BOOLEAN activate); 
#else 
ST_RET copp_bind (ST_LONG user_bind_id, PRES_ADDR *pres_addr,  
	ST_INT sharable, ST_INT max_conns); 
#endif  /* !defined(MAP30_ACSE) */ 
ST_VOID u_copp_bind_cnf (ST_LONG user_bind_id, ST_LONG copp_bind_id, ST_RET result); 
ST_RET copp_unbind (ST_LONG copp_bind_id); 
ST_VOID u_copp_unbind_cnf (ST_LONG user_bind_id); 
ST_RET audt_set_msgsize (ST_UINT len); 
#if defined(MAP30_ACSE) 
ST_LONG a_associate_req ( 
	ST_LONG copp_bind_id,	/* ACSE's bind ID received in u_copp_bind_cnf*/ 
	ST_LONG user_conn_id,	/* USER's ID for this connection	*/ 
	AARQ_APDU *info,	/* AARQ_APDU info			*/ 
	ST_CHAR *remAr);	/* remote AR Name.			*/ 
 
ST_LONG a_associate_reqm ( 
	ST_LONG copp_bind_id,	/* ACSE's bind ID received in u_copp_bind_cnf*/ 
	ST_LONG user_conn_id,	/* USER's ID for this connection	*/ 
        AARQ_APDU *aarq_apdu, 	/* AARQ_APDU info			*/ 
        ST_CHAR *locAr, 	/* local AR Name.			*/ 
        ST_CHAR *remAr);		/* remote AR Name.			*/ 
#else 
ST_LONG a_associate_req ( 
	ST_LONG copp_bind_id,	/* ACSE's bind ID received in u_copp_bind_cnf*/ 
	ST_LONG user_conn_id,	/* USER's ID for this connection	*/ 
	AARQ_APDU *info);	/* AARQ_APDU info.			*/ 
#endif  /* !defined(MAP30_ACSE) */ 
ST_VOID u_a_associate_ind ( 
	ST_LONG user_bind_id,	/* USER's Bind ID passed to copp_bind	*/ 
	ST_LONG acse_conn_id,	/* ACSE's ID for this connection	*/ 
	AARQ_APDU *info);	/* AARQ_APDU info.			*/ 
ST_RET a_associate_rsp ( 
	ST_LONG acse_conn_id,	/* ACSE's ID for this connection	*/ 
	ST_LONG user_conn_id,	/* USER's ID for this connection	*/ 
	AARE_APDU *info);	/* AARE_APDU info.			*/ 
ST_VOID u_a_associate_cnf ( 
	ST_LONG acse_conn_id,	/* ACSE's ID for this connection	*/ 
	ST_LONG user_conn_id,	/* USER's ID for this connection	*/ 
	AARE_APDU *info);	/* AARE_APDU info.			*/ 
ST_RET a_release_req ( 
	ST_LONG acse_conn_id,	/* ACSE's ID for this connection	*/ 
	RLRQ_APDU *info);	/* RLRQ_APDU info.			*/ 
ST_VOID u_a_release_ind ( 
	ST_LONG user_conn_id,	/* USER's ID for this connection	*/ 
	RLRQ_APDU *info);	/* RLRQ_APDU info.			*/ 
ST_RET a_release_rsp ( 
	ST_LONG acse_conn_id,	/* ACSE's ID for this connection	*/ 
	RLRE_APDU *info);	/* RLRE_APDU info.			*/ 
ST_VOID u_a_release_cnf ( 
	ST_LONG user_conn_id,	/* user's ID for this connection	*/ 
	RLRE_APDU *info);	/* RLRE_APDU info.			*/ 
ST_RET a_abort_req ( 
	ST_LONG acse_conn_id,	/* ACSE's ID for this connection	*/ 
	ABRT_APDU *info);	/* ABORT request info.			*/ 
ST_VOID u_a_abort_ind ( 
	ST_LONG user_conn_id,	/* USER's ID for this connection	*/ 
	ABRT_APDU *info);	/* ABORT request info.			*/ 
ST_RET a_data_req ( 
	ST_LONG acse_conn_id,	/* ACSE's ID for this connection	*/ 
	ST_UINT data_len, 
	ST_UCHAR *data); 
ST_VOID u_a_data_ind ( 
	ST_LONG user_conn_id,	/* USER's ID for this connection	*/ 
	ST_UINT data_len, 
	ST_UCHAR *data); 
ST_INT a_buffers_avail ( 
	ST_LONG acse_conn_id);	/* ACSE's ID for this connection	*/ 
ST_VOID u_a_except ( 
	ST_LONG user_conn_id,	/* USER's ID for this connection	*/ 
	ST_INT code,		/* See EX_ACSE_* defines		*/ 
	ST_CHAR *filename,		/* Source code file name		*/ 
	ST_INT line);		/* source code line number		*/ 
ST_VOID u_cla_except ( 
	ST_LONG user_bind_id,	/* USER's ID for this bind		*/ 
	ST_INT code,		/* See EX_ACSE_* defines		*/ 
	ST_CHAR *filename,		/* Source code file name		*/ 
	ST_INT line);		/* source code line number		*/ 
 
ST_RET clpp_initialize (ST_VOID); 
ST_RET clpp_terminate (ST_VOID); 
ST_RET a_unit_data_req ( 
		AUDT_APDU *info);	/* AUDT_APDU info.			*/ 
ST_VOID u_a_unit_data_ind ( 
		AUDT_APDU *info);	/* AUDT_APDU info.			*/ 
ST_BOOLEAN clpp_event (ST_VOID); 
 
ST_VOID cltp_decode_nsdu (N_UNITDATA *n_unitdata); 
ST_RET cltp_decode_nsdu_2 (N_UNITDATA *pNudt, AUDT_APDU *pAudt); 
 
/************************************************************************/ 
/* Address resolution utility functions.				*/ 
/************************************************************************/ 
ST_UCHAR *a_get_rem_nsap (ST_LONG acse_conn_id); 
ST_ULONG a_get_rem_ip_addr (ST_LONG acse_conn_id); 
 
/************************************************************************/ 
/* Miscellaneous functions						*/ 
/************************************************************************/ 
ST_EVENT_SEM a_get_event_handles (ST_INT *pNumEntries); 
int *a_get_event_handles_unix (ST_INT *pNumEntries);	/* for UNIX-like systems*/ 
ST_RET a_get_chan (ST_LONG acse_conn_id, ST_INT *chan_out); 
 
 
/************************************************************************/ 
#ifdef __cplusplus 
} 
#endif 
 
#endif /* ACSE2USR_INCLUDED */ 
/************************************************************************/ 
 

 