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
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 */
|