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.

814 lines
32 KiB
C

1 year ago
#ifndef SUICACSE_H
#define SUICACSE_H
/************************************************************************/
/* SISCO SOFTWARE MODULE HEADER *****************************************/
/************************************************************************/
/* (c) Copyright Systems Integration Specialists Company, Inc., */
/* 1988 - 2005, All Rights Reserved */
/* */
/* MODULE NAME : suicacse.h */
/* PRODUCT(S) : SUIC */
/* */
/* MODULE DESCRIPTION : */
/* This module contains SUIC definitions and external declarations for */
/* global SUIC variables. This module should be included with user */
/* functions that need to interface with SUIC */
/* */
/* MODIFICATION LOG : */
/* Date Who Rev Comments */
/* -------- --- ------ ------------------------------------------- */
/* 07/11/05 EJV 31 Mv find_*_dib_entry from marb_def.h (user funs)*/
/* Add DIB_xxx macros to access DIB_ENTRY fields.*/
/* Moved dib_match_* funs to use w/MMSEASE_MOSI */
/* 06/24/05 EJV 30 Moved s_chk_resource here from marben_a.h */
/* 04/11/05 EJV 29 Move DIRECTORY_SUPPORT under MARBEN code. */
/* Added MMSEASE_MOSI to inc lean_a.h (clearer) */
/* 03/23/05 JRB 28 Move APP_REF to asn1r so only apps using SUIC*/
/* need this file. */
/* 03/22/05 JRB 27 Make MARBEN the default stack. */
/* 06/14/04 EJV 26 Rem MAP30_ACSE (mds.h includes lber.h that */
/* conflicts on AIX, see note). */
/* 06/09/04 EJV 25 Removed obsolete REDUCED_STACK, ADD_COT7_EXT,*/
/* ADD_RS_EXT defines. */
/* 04/20/04 EJV 24 Added back s_free_part_security_info. */
/* 10/21/03 EJV 23 Del s_free_part_security_info. */
/* 10/13/03 EJV 22 Changed defined(vms) to defined(__VMS) */
/* 06/25/03 EJV 21 Added MAP30_ACSE def before mds.h include */
/* 06/16/03 EJV 20 Renamed ACSE_FLOW_PRINT to ACSE_DIB_PRINT. */
/* Alligned comments in DIB_ENTRY */
/* Added DIB_MATCH_CTRL and related defs, funcs */
/* 06/13/03 EJV 19 Del unused ACSE_xxx_PRINT_TYPEs. Made log */
/* masks 2 bytes. Added ACSE_FLOW_PRINT. */
/* 06/13/03 EJV 18 Added SUIC_LIB (mds.h needed only in SUIC) */
/* 05/20/03 EJV 17 Added encryptCtrl to dib_entry. */
/* Added encryptSet to CHAN_INFO. */
/* 05/01/03 ASK 16 Change security protos to use S_SEC_SPARAMS */
/* 04/11/03 EJV 15 Reversed commenting out ssec.h for MMS_LITE. */
/* 04/02/03 EJV 14 Moved authenticate fields to s_chan_info. */
/* Added s_set_auth_info() proto. */
/* Commented out ssec.h for MMS_LITE (for now). */
/* 03/31/03 EJV 13 Removed SECURITY_SUPPORT code (not used). */
/* Added undef _WINDOWS below include mds.h. */
/* Del obsolete s_block() (UNIX only) */
/* and s_comm_disable, s_comm_enable. */
/* Removed SE_... related to SECURITY_SUPPORT. */
/* 02/20/03 JRB 12 Del PSOS code. */
/* 11/12/02 EJV 11 ASS_INFO: ACSE_AUTH_ENABLED code always enabl*/
/* 11/04/02 EJV 10 ASS_INFO: added ACSE_AUTH_ENABLED, */
/* Added proto s_clear_auth; */
/* 01/08/02 EJV 09 Keep MARBEN undefined: not needed in MMS-Lite*/
/* 12/14/01 EJV 08 Del code for unsupported platforms & hardware*/
/* 04/26/99 DSF 07 Security related changes */
/* 02/09/98 RKR 06 Made ChannelTypeToUse perm part of DIB_ENTRY */
/* 11/13/97 DSF 05 Changed APP_REF_FORM defines to be consistent*/
/* with ASS_INFO */
/* 09/26/97 DSF 04 Added ACSE_ABORT_PRINT */
/* 08/13/97 DSF 03 AR Name management support */
/* 07/29/97 DSF 02 Security Attack stuff */
/* 07/29/97 DSF 01 APP_REF stuff moved here */
/* 04/11/97 DSF 7.00 MMSEASE 7.0 release. See MODLS70.DOC for */
/* history. */
/************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#include "glberror.h"
#include "asn1r.h"
#include "dibmatch.h"
#include "slog.h"
#include "acseauth.h"
#include "ssec.h" /* Security include file */
/************************************************************************/
/* Defines that all SUICs should use. Must be before other #includes */
/************************************************************************/
/* Transport provider definitions */
#define TP4 0
#define TCP 1
/* Selector size limits */
#define MAX_P_SEL 16
#define MAX_S_SEL 16
#define MAX_T_SEL 32
#define MAX_N_SEL 20
#define IP_ADDR_LEN 4
#define HOST_NAME_LEN 64
#define RFC1006_PORT 102
#define MAX_NAME_LEN 64
#define MAX_HOST_LEN 32
#define TAG_MNGT_ADDR 0
#define TAG_MNGT_HOST 1
/************************************************************************/
/* This define represents the maximum number of channels. */
extern ST_INT s_max_chan; /* actual number of suic channels used */
extern ST_INT s_msgsize; /* max transfer data size */
/************************************************************************/
/* Select the board type here */
/* These defines are used in the sample source code to make use of */
/* board specific operations, such as status or debug displays. */
/** #define DECNP5 **/
/** #define MARBEN **/
/* Now select the stack specific include file */
#if defined(LEAN_T) || defined(MMSEASE_MOSI)
#include "lean_a.h"
#elif defined(DECNP5)
#define MAX_SUIC_CHAN 200
#include "decnp5_a.h" /* OpenVMS */
#else
/* Default stack is MARBEN. Define it now, if makefile didn't. */
#if !defined(MARBEN)
#define MARBEN
#endif
#include "marben_a.h" /* MARBEN */
#define DIRECTORY_SUPPORT (defined (X500_SUPPORT) || defined (LDAP_SUPPORT))
#endif
#include "gen_list.h"
/************************************************************************/
/************************************************************************/
/* Error code definitions */
/* These codes are returned when a SUIC command function detects an */
/* error condition. */
/************************************************************************/
#define SE_CPU_ALLOC 0x0B01 /* Memory allocation error */
#define SE_CHAN_ERR 0x0B02 /* Invalid channel number */
#define SE_QUE_FULL 0x0B03 /* SUIC send queue full */
#define SE_CHAN_CTRL 0x0B04 /* Channel control error */
#define SE_CTRL_ALLOC 0x0B05 /* control block alloc error */
#define SE_INSFRES 0x0B06 /* insufficient SUIC resources */
#define SE_NAMENOTFOUND 0x0B07 /* name not found in local DIB */
#define SE_CHANNOTREG 0x0B08 /* channel not registered */
#define SE_NOPARAM 0x0B09 /* mandatory param missing */
#define SE_INVPARAM 0x0B0A /* invalid param supplied */
#define SE_INVPDU 0x0B0B /* invalid PDU encounetred */
#define SE_INVASN 0x0B0C /* invalid ASN specified */
#define SE_INVTSN 0x0B0D /* invalid TSN specified */
#define SE_INVCTXT 0x0B0E /* invalid AP context specified */
#define SE_INVPCI 0x0B0F /* invalid PCI specified */
#define SE_INVOBJID 0x0B10 /* invalid OBJECT IDENTIFIER */
#define SE_SIMPLY_ENC 0x0B11 /* simply encoded data */
#define SE_MSGSIZETOOBIG 0x0B12 /* user-set s_smgsize too big */
#define SE_NOLLP 0x0B13 /* your LLP isn't up */
#define SE_NOT_BOUND 0x0B14 /* not bound to a DSA */
#define SE_MDS_UNEXPECTED 0x0B15 /* unexpected MDS result */
#define SE_MDS_INVALID_SYNTAX 0x0B16 /* invalid attribute syntax */
#define SE_BAD_MECH_NAME 0x0B17 /* unrecognized authentication mechanism name */
#define SE_ACTIVATE 0x0B1C /* Name activation problem */
#define SE_DEACTIVATE 0x0B1D /* Name deactivation problem */
/************************************************************************/
/* SUIC Debug mechanism variables, functions. */
/************************************************************************/
#define ACSE_IND_PRINT 0x0001
#define ACSE_CNF_PRINT 0x0002
#define ACSE_ERR_PRINT 0x0004
#define ACSE_DEC_PRINT 0x0008
#if defined(__VMS)
#define OSAK_PRINT 0x0010
#define OSAK_DEB 0x0020
#endif
#define ACSE_NERR_PRINT 0x0040
#define ACSE_ABORT_PRINT 0x0080
#define ACSE_DIB_PRINT 0x0100
extern ST_UINT s_debug_sel;
extern ST_VOID (*s_menu_fun) (ST_VOID);
/************************************************************************/
/* The variable below is set to exception code when exceptions occur. */
/************************************************************************/
extern ST_INT s_err; /* set when SUIC exception detected */
extern ST_INT s_map_err; /* set when E_SUBSYS id used */
/************************************************************************/
/* Exception code definitions */
/************************************************************************/
#define SX_INTERNAL 0x0F01 /* internal SUIC error */
#define SX_CPU_ALLOC 0x0F02 /* memory allocation error */
#define SX_CTRL_ALLOC 0x0F03 /* control block alloc error */
#define SX_NOCTRL 0x0F04 /* Out of control blocks */
#define SX_NODATA 0x0F05 /* Out of data buffers */
#define SX_QUE_FULL 0x0F06 /* SUIC send queue full */
#define SX_INVPDU 0x0F07 /* invalid PDU data field */
#define SX_INVCHAN 0x0F08 /* invalid channel number */
#define SX_BADCB 0x0F09 /* unknown CB from board */
#define SX_ENCERR 0x0F0A /* ASN.1 encode error */
#define SX_CTRL_FREE 0x0F0B /* control block free error */
#define SX_DATA_FREE 0x0F0C /* data buffer free error */
#define SX_DATABUF_OVRFLW 0x0F0D /* data being received */
/* exceeds s_msgsize */
/************************************************************************/
/* SUIC state masks */
/************************************************************************/
#define SM_CHAN_REG 0x0001 /* channel registered */
#define SM_ASS_REQ_PEND 0x0002 /* associate request pending */
#define SM_LISTEN 0x0004 /* listen outstanding */
#define SM_ASS_ACTIVE 0x0008 /* association active */
#define SM_CANLISTEN_PEND 0x0010 /* cancel pending */
#define SM_REL_REQ_PEND 0x0020 /* release request pending */
#define SM_ABT_REQ_PEND 0x0040 /* abort request pending */
#define SM_P_ABORT 0x0080 /* Issue P-Abort to User */
#define SM_ASS_IND_RCVD 0x0100 /* associate Indication received*/
#define SM_ASS_RSP_PEND 0x0200 /* associate response pending */
#define SM_ASS_REJ_PEND 0x0400 /* associate reject pending */
#define SM_REL_IND_RCVD 0x0800 /* release indication received */
#define SM_REL_RSP_PEND 0x1000 /* release response pending */
#define SM_MDS_READ_PEND 0x2000 /* MDS read request pending */
/************************************************************************/
/* The structure below is used to save the various info about the */
/* state of the channels on a per-channel basis. */
/* This structure is used to pass data. */
/************************************************************************/
/* NOTE: The ACSE_AUTH_ENABLED code is used in MMS-EASE and MMS-LITE */
/* based products to provide password or 'other' authorization */
/* capability. */
struct s_chan_info
{
ST_LONG reserved; /* reserved for SUIC */
ST_CHAR *name; /* local name */
ST_INT transport; /* TP4 vs. TCP/IP */
ST_UINT AP_ctxt_mask; /* application context name mask */
ST_BOOLEAN AP_title_pres; /* present flag */
MMS_OBJ_ID AP_title; /* AP title */
ST_BOOLEAN AP_inv_id_pres; /* present flag */
ST_INT32 AP_invoke_id; /* AP invocation ID */
ST_BOOLEAN AE_qual_pres; /* present flag */
ST_INT32 AE_qual; /* AE qualifier */
ST_BOOLEAN AE_inv_id_pres; /* present flag */
ST_INT32 AE_invoke_id; /* AE invocation ID */
ST_INT p_sel_len; /* P-selector length */
ST_UCHAR p_sel[MAX_P_SEL]; /* P-selector */
ST_INT s_sel_len; /* S-selector length */
ST_UCHAR s_sel[MAX_T_SEL]; /* S-selector */
ST_INT t_sel_len; /* T-selector length */
ST_UCHAR t_sel[MAX_T_SEL]; /* T-selector */
ST_INT net_addr_len; /* Network address length */
ST_UCHAR net_addr[MAX_N_SEL]; /* Network address */
ST_CHAR ip_addr[HOST_NAME_LEN + 1]; /* TCP/IP dotted decimal or host name */
ST_INT port; /* TCP/IP port number */
ST_CHAR *part_name; /* partner name */
ST_INT part_transport; /* TP4 vs. TCP/IP */
ST_UINT part_AP_ctxt_mask; /* partner application context name mask*/
ST_BOOLEAN part_AP_title_pres; /* present flag */
MMS_OBJ_ID part_AP_title; /* partner AP title */
ST_BOOLEAN p_AP_inv_id_pres; /* present flag */
ST_INT32 part_AP_invoke_id; /* partner AP invocation ID */
ST_BOOLEAN part_AE_qual_pres; /* present flag */
ST_INT32 part_AE_qual; /* partner AE qualifier */
ST_BOOLEAN p_AE_inv_id_pres; /* present flag */
ST_INT32 part_AE_invoke_id; /* partner AE invocation ID */
ST_INT part_p_sel_len; /* P-selector length */
ST_UCHAR part_p_sel[MAX_P_SEL]; /* P-selector */
ST_INT part_s_sel_len; /* S-selector length */
ST_UCHAR part_s_sel[MAX_T_SEL]; /* S-selector */
ST_INT part_t_sel_len; /* T-selector length */
ST_UCHAR part_t_sel[MAX_T_SEL]; /* T-selector */
ST_INT part_net_addr_len; /* Network address length */
ST_UCHAR part_net_addr[MAX_N_SEL]; /* Network address */
ST_CHAR part_ip_addr[HOST_NAME_LEN + 1];/* TCP/IP dotted decimal or host name */
ST_INT part_port; /* TCP/IP port number */
ST_INT state_mask; /* association state mask */
/*#if defined(ACSE_AUTH_ENABLED) */
ACSE_AUTH_INFO authInfo; /* local authentication info */
ACSE_AUTH_INFO partAuthInfo; /* partner authentication info */
/* valid after s_associate_ind or */
/* s_associate_cnf called. */
ST_BOOLEAN encryptSet; /* encryption info set flag */
S_SEC_ENCRYPT_CTRL encryptCtrl; /* encryption info */
/*#endif*/ /* ACSE_AUTH_ENABLED */
#ifdef DECNP5
ST_BOOLEAN already_gave_buffers; /* OSAK doesn't need any more buffers. */
#endif
} ;
typedef struct s_chan_info CHAN_INFO;
extern CHAN_INFO *s_chan_info;
/************************************************************************/
/* The structure below is used to save the various info about the */
/* state of the association on a channel-by-channel basis. */
/* This structure is used to receive data. */
/************************************************************************/
struct acse_ar_info
{
ST_LONG reserved1; /* reserved for provider use */
ST_CHAR *ar_name; /* local name */
ST_INT transport; /* TP4 vs. TCP/IP */
ST_UINT AP_ctxt_mask; /* reserved for provider use */
ST_INT AP_title_form; /* 0 == form 1, 1 == form 2 */
ST_BOOLEAN AP_title_pres; /* present flag */
MMS_OBJ_ID AP_title; /* AP title */
ST_BOOLEAN AP_inv_id_pres; /* present flag */
ST_INT32 AP_invoke_id; /* AP invocation ID */
ST_BOOLEAN AE_qual_pres; /* present flag */
ST_INT32 AE_qual; /* AE qualifier */
ST_BOOLEAN AE_inv_id_pres; /* present flag */
ST_INT32 AE_invoke_id; /* AE invocation ID */
ST_INT p_sel_len; /* P-selector length */
ST_UCHAR p_sel[MAX_P_SEL]; /* P-selector */
ST_INT s_sel_len; /* S-selector length */
ST_UCHAR s_sel[MAX_T_SEL]; /* S-selector */
ST_INT t_sel_len; /* T-selector length */
ST_UCHAR t_sel[MAX_T_SEL]; /* T-selector */
ST_INT net_addr_len; /* Network address length */
ST_UCHAR net_addr[MAX_N_SEL]; /* Network address */
ST_CHAR ip_addr[HOST_NAME_LEN + 1]; /* TCP/IP dotted decimal or host name */
ST_BOOLEAN part_name_found; /* partner name found in DIB */
ST_CHAR *part_ar_name; /* partner name */
ST_UINT part_AP_ctxt_mask; /* reserved for provider */
ST_INT part_AP_title_form; /* 0 == form 1, 1 == form 2 */
ST_BOOLEAN part_AP_title_pres; /* present flag */
MMS_OBJ_ID part_AP_title; /* partner AP title */
ST_BOOLEAN part_AP_inv_id_pres; /* present flag */
ST_INT32 part_AP_invoke_id; /* partner AP invocation ID */
ST_BOOLEAN part_AE_qual_pres; /* present flag */
ST_INT32 part_AE_qual; /* partner AE qualifier */
ST_BOOLEAN part_AE_inv_id_pres; /* present flag */
ST_INT32 part_AE_invoke_id; /* partner AE invocation ID */
ST_INT pci_mask; /* reserved for provider */
ST_INT part_p_sel_len; /* P-selector length */
ST_UCHAR part_p_sel[MAX_P_SEL]; /* P-selector */
ST_INT part_s_sel_len; /* S-selector length */
ST_UCHAR part_s_sel[MAX_T_SEL]; /* S-selector */
ST_INT part_t_sel_len; /* T-selector length */
ST_UCHAR part_t_sel[MAX_T_SEL]; /* T-selector */
ST_INT part_net_addr_len; /* Network address length */
ST_UCHAR part_net_addr[MAX_N_SEL]; /* Network address */
ST_CHAR part_ip_addr[HOST_NAME_LEN + 1]; /* TCP/IP dotted decimal or host name */
};
typedef struct acse_ar_info ACSE_AR_INFO; /* used by MMS */
typedef struct acse_ar_info ASS_INFO; /* used by SUIC */
extern ASS_INFO *s_ass_info;
/************************************************************************/
/* The structure below is used to represent Abstract Syntax Names that */
/* may be used by the application. */
/************************************************************************/
extern MMS_OBJ_ID *asn_table;
#define ASN_USER_BASE 3 /* where user-defined names begin */
/************************************************************************/
/* The structure below is used to represent Transfer Syntax Names that */
/* may be used by the application. */
/************************************************************************/
extern MMS_OBJ_ID *tsn_table;
#define TSN_USER_BASE 1 /* where user-defined names begin */
/************************************************************************/
/* The structure below is used to represent Application Context Names */
/* that may be used by the application. */
/************************************************************************/
extern MMS_OBJ_ID *context_table;
#define CTXT_USER_BASE 4 /* where user-defined contexts begin */
/************************************************************************/
/* The following are the default masks */
/************************************************************************/
/* AP Context names */
#define SM_ISO_MMS_AP_CTXT 0x01
#define SM_MAP_MMS_AP_CTXT 0x02
#define SM_PRIVATE_AP_CTXT 0x04
#define SM_ISO_MMS_IS_AP_CTXT 0x08
/* Abstract Syntax names */
#define SM_ISO_MMS_ASN 0x01
#define SM_MAP_MMS_ASN 0x02
#define SM_PRIVATE_ASN 0x04
/* Transfer Syntax names */
#define SM_ASN1_TSN 0x01
/************************************************************************/
/* The structure below is used to identify components of the presenta- */
/* tion context list (both definition and result) */
/************************************************************************/
struct pc_def
{
ST_INT result; /* result, used on response only */
ST_INT pci; /* pci, used only on confirms/indications */
/* This field must not be modified by the user */
ST_UINT asn_mask; /* abstract syntax name mask */
ST_UINT tsn_mask; /* transfer syntax name mask */
} ;
typedef struct pc_def PC_DEF;
/************************************************************************/
/* The structure below is used to represent the user data list before */
/* presentation contexts have been negotiated */
/************************************************************************/
struct u_data
{
ST_INT list_index; /* for request/indication, this refers to an */
/* index into pc_deflist whose entry represents */
/* presentation context on which data is to be */
/* carried. For response/confirm, this refers */
/* to an index into result list */
ST_UINT tsn_mask; /* transfer syntax name mask */
ST_INT u_data_len; /* user data length */
ST_CHAR *user_data; /* pointer to user data */
} ;
typedef struct u_data U_DATA;
/************************************************************************/
/* The structure below is used to represent the user data list after */
/* presentation contexts have been negotiated */
/************************************************************************/
struct trans_data
{
/* This is really asn_mask */
ST_UINT pci_mask; /* mask representing index into pci_table */
ST_INT len; /* data length */
ST_CHAR *data; /* pointer to data */
} ;
typedef struct trans_data TRANS_DATA;
/************************************************************************/
/* The structure below is used to save Directory and other information */
/* about local and remote AE's read in from DIB file */
/************************************************************************/
#if defined (MARBEN) || defined (DECNP5)
#ifndef DIB_ENTRY_DEFINED
#define DIB_ENTRY_DEFINED
struct dib_entry
{
DBL_LNK lnk; /* link pointer */
ST_LONG reserved; /* reserved field */
ST_LONG reserved2; /* reserved field */
#if defined (MARBEN) && defined (_WIN32)
ST_INT mngt_tag; /* management operation tag */
ST_CHAR host_name[MAX_HOST_LEN + 1];
ST_CHAR *comment;
#endif
#if DIRECTORY_SUPPORT
ST_CHAR *name; /* user-defined ASCII character string */
#else
ST_CHAR name[MAX_NAME_LEN + 1]; /* user-defined ASCII character string */
#endif
ST_BOOLEAN local; /* local or remote name */
#ifdef MARBEN
ST_BOOLEAN sharable; /* shared flag (local names only) */
#endif
ST_INT transport; /* transport provider: TP4 vs. TCP */
ST_BOOLEAN AP_title_pres; /* present flag */
MMS_OBJ_ID AP_title; /* AP title */
ST_BOOLEAN AP_inv_id_pres; /* present flag */
ST_INT32 AP_invoke_id; /* AP invocation ID */
ST_BOOLEAN AE_qual_pres; /* present flag */
ST_INT32 AE_qual; /* AE qualifier */
ST_BOOLEAN AE_inv_id_pres; /* present flag */
ST_INT32 AE_invoke_id; /* AE invocation ID */
ST_INT p_sel_len; /* P-selector length */
ST_UCHAR p_sel[MAX_P_SEL]; /* P-selector */
ST_INT s_sel_len; /* S-selector length */
ST_UCHAR s_sel[MAX_T_SEL]; /* S-selector */
ST_INT t_sel_len; /* T-selector length */
ST_UCHAR t_sel[MAX_T_SEL]; /* T-selector */
ST_INT net_addr_len; /* Network address length */
ST_UCHAR net_addr[MAX_N_SEL]; /* Network address */
ST_INT port; /* TCP/IP port number */
ST_CHAR ip_addr[HOST_NAME_LEN + 1]; /* TCP/IP dotted decimal or host name */
/*#if defined(ACSE_AUTH_ENABLED) */
S_SEC_ENCRYPT_CTRL encryptCtrl; /* encryption info */
/*#endif*/ /* ACSE_AUTH_ENABLED */
/*#ifdef PRODUCT_ONLY_VMS_ALPHA */
ST_INT ChannelTypeToUse;
/*#endif */
} ;
typedef struct dib_entry DIB_ENTRY;
/************************************************************************/
#if defined (MARBEN)
#if defined (_WIN32)
typedef struct
{
ST_CHAR host_name[MAX_HOST_LEN + 1];
ST_INT net_addr_len; /* Network address length */
ST_UCHAR net_addr[MAX_N_SEL]; /* Network address */
ST_CHAR ip_addr[HOST_NAME_LEN + 1]; /* TCP/IP dotted decimal or host name */
} HOSTNAME_INFO;
#endif /* defined (_WIN32) */
#endif /* defined (MARBEN) */
/************************************************************************/
/* Variables used for reading DIB file */
extern ST_BOOLEAN s_manual_dib_load; /* User to set DIB Table */
extern ST_INT num_dib_entries; /* Number of entries */
extern DIB_ENTRY *dib_table; /* Pointer to dib table */
#endif /* !DIB_ENTRY_DEFINED */
#endif /* defined MARBEN || DECNP5 */
#define TYPE_ORIGINAL 0
#define TYPE_UNIVERSAL 1
extern ST_INT s_activate_type; /* local name activation type */
/************************************************************************/
/************************************************************************/
/* The structure below is used to identify PCI */
/* Used by s_lookup_pci (). */
/************************************************************************/
struct pc
{
ST_INT asn_index; /* index into asn_table */
ST_INT tsn_index; /* index into tsn_table */
} ;
typedef struct pc PC;
/************************************************************************/
ST_RET s_start (ST_VOID);
ST_VOID s_end (ST_VOID);
extern ST_VOID (*s_event_notify) (ST_VOID);
extern ST_VOID (*s_usr_nap) (ST_VOID);
extern ST_CHAR *(*s_send_priv_data) (ST_INT *);
ST_BOOLEAN s_serve (ST_VOID);
ST_BOOLEAN s_read_mail (ST_VOID);
ST_VOID s_send_mail (ST_VOID);
ST_INT s_lookup_pci (ST_INT chan, ST_INT pci_mask, PC *pc_arr);
/* User defined 'done' functions */
ST_VOID s_activate_done (ST_CHAR *name, ST_RET retcode);
ST_VOID s_deactivate_done (ST_CHAR *name, ST_RET retcode);
ST_VOID s_listen_done (ST_INT chan, ST_RET retcode);
ST_VOID s_canlisten_done (ST_INT chan, ST_RET retcode);
ST_VOID s_assreq_done (ST_INT chan, ST_RET retcode);
ST_VOID s_assrsp_done (ST_INT chan, ST_RET retcode);
ST_VOID s_relreq_done (ST_INT chan, ST_RET retcode);
ST_VOID s_relrsp_done (ST_INT chan, ST_RET retcode);
ST_VOID s_u_abort_done (ST_INT chan, ST_RET retcode);
ST_VOID s_transfer_done (ST_INT chan, ST_RET retcode);
ST_VOID s_receive_done (ST_INT chan, ST_RET retcode);
/* User defined 'indication' functions */
ST_VOID s_associate_ind (ST_INT chan,
ST_INT num_pc_defs, PC_DEF *pc_deflist,
ST_INT num_u_data, U_DATA *u_data_list,
ST_BOOLEAN matched);
ST_VOID s_associate_cnf (ST_INT chan,
ST_INT num_result, PC_DEF *result_list,
ST_INT num_u_data, U_DATA *u_data_list,
ST_RET retcode);
ST_VOID s_release_ind (ST_INT chan, ST_INT reason,
ST_INT num_u_data, TRANS_DATA *u_data_list);
ST_VOID s_release_cnf (ST_INT chan, ST_INT reason,
ST_INT num_u_data, TRANS_DATA *u_data_list);
ST_VOID s_u_abort_ind (ST_INT chan, ST_INT reason,
ST_INT num_u_data, TRANS_DATA *u_data_list);
ST_VOID s_p_abort_ind (ST_INT chan, ST_INT reason);
ST_VOID s_transfer_ind (ST_INT chan,
ST_INT num_trans, TRANS_DATA *data,
ST_BOOLEAN eom);
/* SUIC command functions */
ST_RET s_reg_title (ST_INT chan, ST_CHAR *name);
ST_RET s_activate (ST_CHAR *name);
ST_RET s_deactivate (ST_CHAR *name);
ST_RET s_load_part_info (ST_INT chan, ST_CHAR *name);
ST_RET s_listen (ST_INT chan, ST_UINT ap_context_mask);
ST_RET s_cancel_listen (ST_INT chan);
ST_RET s_associate_req (ST_INT chan, ST_UINT ap_context_mask,
ST_INT num_pc_defs, PC_DEF *pc_deflist,
ST_INT num_u_data, U_DATA *u_data_list);
ST_RET s_associate_rsp (ST_INT chan, ST_UINT ap_context_mask,
ST_INT reason, ST_INT num_result, PC_DEF *result_list,
ST_INT num_u_data, U_DATA *u_data_list);
ST_RET s_release_req (ST_INT chan, ST_INT reason,
ST_INT num_u_data, TRANS_DATA *u_data_list);
ST_RET s_release_rsp (ST_INT chan, ST_INT reason,
ST_INT num_u_data, TRANS_DATA *u_data_list);
ST_RET s_u_abort (ST_INT chan, ST_INT reason,
ST_INT num_u_data, TRANS_DATA *u_data_list);
ST_RET s_receive (ST_INT chan);
ST_RET s_transfer_req (ST_INT chan,
ST_INT num_trans, TRANS_DATA *data, ST_BOOLEAN eom);
ST_VOID s_free_databuf (ST_CHAR *buf);
ST_VOID s_except (ST_INT except_code);
ST_RET s_set_ap_title (ST_CHAR *name, ST_BOOLEAN en, MMS_OBJ_ID *ap_title);
ST_RET s_set_ae_qual (ST_CHAR *name, ST_BOOLEAN en, ST_INT32 ae_qual);
ST_RET s_set_ap_invoke (ST_CHAR *name, ST_BOOLEAN en, ST_INT32 ap_invoke);
ST_RET s_set_ae_invoke (ST_CHAR *name, ST_BOOLEAN en, ST_INT32 ae_invoke);
ST_UINT s_install_ap_ctxt (MMS_OBJ_ID *ap_ctxt);
ST_UINT s_install_asn (MMS_OBJ_ID *asn);
ST_UINT s_install_tsn (MMS_OBJ_ID *tsn);
ST_VOID s_perror (ST_RET errcode);
ST_VOID s_perror_log (FILE *logfile, ST_RET errcode);
ST_VOID s_perror_str (ST_CHAR *errbuf, ST_INT max_len, ST_RET errcode);
ST_BOOLEAN s_chk_idle (ST_VOID);
APP_REF *s_find_proc (ST_CHAR *arname);
ST_INT s_find_arname (APP_REF *app_ref_ptr, ST_BOOLEAN match_ae_qual,
ST_CHAR *ar_ptr);
ST_RET s_find_paddr (ACSE_AR_INFO *ar_info, ST_CHAR *ar_ptr);
ST_RET s_chk_resource (ST_INT chan, ST_INT *out_size,
ST_INT *pend_size, ST_LONG *mem_size);
/* ---------------------- DIB_ENTRY_DEFINED start ----------------------------- */
#if defined (DIB_ENTRY_DEFINED)
ST_RET s_add_rem_arname (DIB_ENTRY *dib);
ST_RET s_del_rem_arname (ST_CHAR *name);
ST_RET s_mod_rem_arname (DIB_ENTRY *dib);
ST_RET s_get_rem_arname (ST_CHAR *name, DIB_ENTRY *dib);
#if defined (MARBEN) && defined (_WIN32)
ST_RET s_create_hostname (HOSTNAME_INFO *info);
#endif
#if defined (MARBEN)
/* these are user functions (moved from marb_def.h here) */
ST_RET init_dirser (ST_VOID);
DIB_ENTRY *find_dib_entry (ST_CHAR *name);
DIB_ENTRY *find_loc_dib_entry (ST_CHAR *name);
DIB_ENTRY *find_rem_dib_entry (ST_CHAR *name);
#endif /* defined (MARBEN) */
/* Since the MMS-EASE can run over Marben SUIC or LITE Stack we have to deal */
/* with different DIB_ENTRY structures. To make the same code work both ways */
/* field access macros should do the trick. */
#if defined(MMSEASE_MOSI)
#define DIB_PSEL_LEN(de) ((de)->pres_addr.psel_len)
#define DIB_PSEL(de) ((de)->pres_addr.psel)
#define DIB_SSEL_LEN(de) ((de)->pres_addr.ssel_len)
#define DIB_SSEL(de) ((de)->pres_addr.ssel)
#define DIB_TSEL_LEN(de) ((de)->pres_addr.tsel_len)
#define DIB_TSEL(de) ((de)->pres_addr.tsel)
#define DIB_TP_TYPE(de) ((de)->pres_addr.tp_type)
#define DIB_NSAP_LEN(de) ((de)->pres_addr.nsap_len)
#define DIB_NSAP(de) ((de)->pres_addr.netAddr.nsap)
#define DIB_IPADDR_ULONG(de,f) ((de)->pres_addr.netAddr.ip)
#define DIB_PORT(de) ((de)->pres_addr.port)
/* following defs values are different between MARBEN and MMSEASE_MOSI */
#define DIB_TP_TYPE_TCP TP_TYPE_TCP
#define DIB_TP_TYPE_TP4 TP_TYPE_TP4
#elif defined(MARBEN)
/* NOTE: casting some of the fields to be the same as in MMS-LITE PRES_ADDR */
#define DIB_PSEL_LEN(de) ((ST_UINT)(de)->p_sel_len)
#define DIB_PSEL(de) ((de)->p_sel)
#define DIB_SSEL_LEN(de) ((ST_UINT)(de)->s_sel_len)
#define DIB_SSEL(de) ((de)->s_sel)
#define DIB_TSEL_LEN(de) ((ST_UINT)(de)->t_sel_len)
#define DIB_TSEL(de) ((de)->t_sel)
#define DIB_TP_TYPE(de) ((de)->transport)
#define DIB_NSAP_LEN(de) ((ST_UINT)(de)->net_addr_len)
#define DIB_NSAP(de) ((de)->net_addr)
#define DIB_IPADDR_ULONG(de,f) (convertIPAddr ((de)->ip_addr,f))
#define DIB_PORT(de) ((ST_UINT16)(ST_UINT)(de)->port)
/* following defs values are different between MARBEN and MMSEASE_MOSI */
#define DIB_TP_TYPE_TCP TCP
#define DIB_TP_TYPE_TP4 TP4
#endif /* defined (MARBEN) */
#if defined (MARBEN) || defined(MMSEASE_MOSI)
/************************************************************************/
/* General address matching defines, control, functions */
ST_RET dib_match_remote_ar (DIB_MATCH_CTRL *matchCtrl, ST_INT chan,
DIB_ENTRY **dib_entry_out);
ST_RET dib_match_local_ar (DIB_MATCH_CTRL *matchCtrl, ST_INT chan,
DIB_ENTRY **dib_entry_out);
ST_INT dib_cmp_local_addr (DIB_MATCH_CTRL *matchCtrl, ST_INT chan,
DIB_ENTRY *dib_entry);
ST_INT dib_cmp_remote_addr (DIB_MATCH_CTRL *matchCtrl, ST_INT chan,
DIB_ENTRY *dib_entry);
#endif /* defined (MARBEN) || defined(MMSEASE_MOSI) */
#endif /* DIB_ENTRY_DEFINED */
/* ---------------------- DIB_ENTRY_DEFINED end ------------------------------- */
/* ---------------------- security functions ---------------------------------- */
ST_RET s_set_security_info (ST_INT chan, S_SEC_SPARAMS *secParams);
ST_RET s_get_security_info (ST_INT chan, S_SEC_SPARAMS *secParams);
ST_RET s_free_security_info (ST_INT chan);
ST_RET s_free_part_security_info (ST_INT chan);
#if defined(SUIC_LIB)
/* SUIC_LIB is defined in compilation of SUIC lib, we do not need to compile */
/* the mds.h in other libs! */
/* The MAP30_ACSE define was deleted from here as it brings the lber.h that */
/* defines sockbuf that conflicts with "/usr/include/sys/socketvar.h" on AIX. */
/* In application code if X.500 Directory or LDAP support is needed the user */
/* code will have to include this piece of code (in DIRECTORY_SUPPORT define). */
#if DIRECTORY_SUPPORT
#include "mds.h"
#ifdef _WIN32
/* NOTE: the mds.h includes ldap.h including msdos.h. The last file defines */
/* _WINDOWS (and other system defines: __MSDOS__, WINDOWS...) that we */
/* probably want to keep undefined. */
#undef _WINDOWS
#undef __MSDOS__
#endif /* _WIN32 */
#endif /* DIRECTORY_SUPPORT */
#endif /* SUIC_LIB */
#ifdef __cplusplus
}
#endif
#endif /* SUICACSE_H */