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.

200 lines
7.1 KiB
C

/************************************************************************/
/* SISCO SOFTWARE MODULE HEADER *****************************************/
/************************************************************************/
/* (c) Copyright Systems Integration Specialists Company, Inc., */
/* 1997, All Rights Reserved */
/* */
/* PROPRIETARY AND CONFIDENTIAL */
/* */
/* MODULE NAME : cosp.h */
/* PRODUCT(S) : MOSI Stack (over TP4) */
/* */
/* MODULE DESCRIPTION : */
/* This header file defines variable and functions */
/* internal to the COSP (decoding and encoding). */
/* */
/* */
/* GLOBAL FUNCTIONS DEFINED IN THIS MODULE : */
/* */
/* */
/* MODIFICATION LOG : */
/* Date Who Rev Comments */
/* -------- --- ------ ------------------------------------------- */
/* 09/12/01 JRB 03 Reverse cosp_enc_cn_ac change (not needed). */
/* 08/01/01 JRB 02 Del rem_addr from cosp_enc_cn_ac proto. */
/* 05/27/97 JRB 7.00 MMSEASE 7.0 release. */
/* 01/13/97 EJV 01 Created */
/************************************************************************/
#ifndef COSP_INCLUDED
#define COSP_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
extern ST_UCHAR cosp_only_ssel [1+MAX_SSEL_LEN];
/*======================================================*/
/* */
/* C O N N E C T I O N S T A T E S */
/* */
/*======================================================*/
/* Valid states, the first IDLE state must be 0) */
#define COSP_CSTATE_IDLE 0 /* idle, transport not connected*/
#define COSP_CSTATE_WAIT_TCON_CNF 1 /* wait T-CONNECT.cnf */
#define COSP_CSTATE_IDLE_TCON 100 /* idle, transport connected */
#define COSP_CSTATE_WAIT_AC 2 /* wait for ACCEPT SPDU */
#define COSP_CSTATE_WAIT_DN 3 /* wait for DISCONNECT SPDU */
#define COSP_CSTATE_WAIT_CON_RSP 8 /* wait S-CONNECT.rsp */
#define COSP_CSTATE_WAIT_REL_RSP 9 /* wait for S-RELEASE.rsp */
#define COSP_CSTATE_WAIT_TDISCON_IND 16 /* wait T-DISCONNECT.ind */
#define COSP_CSTATE_DATA_XFER 713 /* Data Transfer state */
/*======================================================*/
/* */
/* C O S P P R O T O C O L D E F I N E S */
/* */
/* D E C O D E D S P D U S T R U C T U R E S */
/* */
/*======================================================*/
/* Encoding for supported COSP versions codes */
#define COSP_VER1 (ST_UCHAR) 1
#define COSP_VER2 (ST_UCHAR) 2
/* Encoding of SPDU Session Identifier (SI) codes */
#define COSP_SI_DATA (ST_UCHAR) 1
#define COSP_SI_GIVE_TOKEN (ST_UCHAR) 1 /* this is correct DT=GIVE-TOKEN */
#define COSP_SI_FINISH (ST_UCHAR) 9
#define COSP_SI_DISCON (ST_UCHAR) 10
#define COSP_SI_REFUSE (ST_UCHAR) 12
#define COSP_SI_CONNECT (ST_UCHAR) 13
#define COSP_SI_ACCEPT (ST_UCHAR) 14
#define COSP_SI_ABORT (ST_UCHAR) 25
#define COSP_SI_AB_ACCEPT (ST_UCHAR) 26
/* struct used to store decoded params from CONNECT or ACCEPT SPDU */
typedef struct tagCOSP_CN_AC
{
ST_UCHAR prot_option;
ST_UINT16 initiator_tsdu_size;
ST_UINT16 responder_tsdu_size;
ST_UCHAR ver_num;
ST_UCHAR ses_urequir [2]; /* byte0 (bits 9-16), byte1 (bits 1-8)*/
ST_UCHAR loc_ssel [1+MAX_SSEL_LEN];
ST_UCHAR rem_ssel [1+MAX_SSEL_LEN];
ST_UINT udata_len; /* SS-user data length */
ST_UCHAR *udata_ptr; /* SS-user data pointer */
}COSP_CN_AC;
/* Encoding for Reason Code PI in a REFUSE SPDU generated by SS-user */
#define COSP_RF_REASON_U_NOT_SPECIFIED (ST_UCHAR) 0
#define COSP_RF_REASON_U_CONGESTION (ST_UCHAR) 1
#define COSP_RF_REASON_U_REJECT (ST_UCHAR) 2
/* Encoding for Reason Code PI in a REFUSE SPDU generated by SS-provider */
#define COSP_RF_REASON_S_INV_SSEL (ST_UCHAR) 128+1
#define COSP_RF_REASON_S_NOT_ATTACHED (ST_UCHAR) 128+2
#define COSP_RF_REASON_S_CONGESTION (ST_UCHAR) 128+3
#define COSP_RF_REASON_S_INV_VERSION (ST_UCHAR) 128+4
#define COSP_RF_REASON_S_NOT_SPECIFIED (ST_UCHAR) 128+5
#define COSP_RF_REASON_S_RESTRICTIONS (ST_UCHAR) 128+6
/* struct used to store decoded params from REFUSE SPDU */
typedef struct tagCOSP_RF
{
ST_BOOLEAN disconnect; /* if SD_TRUE then disconnect transport */
ST_UCHAR ver_num;
ST_UCHAR reason; /* reason code for refuse connection */
ST_UCHAR ses_urequir [2]; /* byte0 (bits 9-16), byte1 (bits 1-8) */
ST_UINT udata_len; /* SS-user data length */
ST_UCHAR *udata_ptr; /* SS-user data pointer */
}COSP_RF;
#define COSP_P_AB_SPDU_LEN 9 /* P-ABORT is fixed in size */
/* Encoding for Transport Disconnect PI in an ABORT (and FINISH) SPDU */
#define COSP_TCONN_KEEP (ST_UCHAR) 0x00
#define COSP_TCONN_RELEASE (ST_UCHAR) 0x01
/* | with one reason code below */
#define COSP_AB_REASON_USER_ABORT (ST_UCHAR) 0x02
#define COSP_AB_REASON_PROT_ERROR (ST_UCHAR) 0x04
#define COSP_AB_REASON_NO_REASON (ST_UCHAR) 0x08
#define COSP_AB_REASON_IMPLEMENTATION (ST_UCHAR) 0x10
/* struct used to store decoded params from ABORT SPDU */
typedef struct tagCOSP_AB
{
ST_BOOLEAN disconnect; /* if SD_TRUE then disconnect transport */
ST_UCHAR reason; /* reason code for abort connection */
ST_UINT reflect_par_len; /* Reflect param length */
ST_UCHAR reflect_par [9]; /* Reflect param */
ST_UINT udata_len; /* SS-user data length */
ST_UCHAR *udata_ptr; /* SS-user data pointer */
}COSP_AB;
/* struct used to store decoded params from FINISH SPDU */
typedef struct tagCOSP_FN_DN
{
ST_BOOLEAN disconnect; /* SD_TRUE to discon transport (FN)*/
ST_UINT udata_len; /* SS-user data length */
ST_UCHAR *udata_ptr; /* SS-user data pointer */
}COSP_FN_DN;
/* struct used to store decoded params from DATA SPDU */
typedef struct tagCOSP_DT
{
ST_UINT udata_len; /* SS-user data length */
ST_UCHAR *udata_ptr; /* SS-user data pointer */
}COSP_DT;
/*======================================================*/
/* */
/* E N C O D E / D E C O D E F U N C T I O N S */
/* */
/*======================================================*/
/* cosp_enc.c */
ST_UINT cosp_envelope_len (ACSE_CONN *con, ST_UINT rem_ssel_len, ST_UCHAR spdu_type);
ST_RET cosp_enc_cn_ac (ACSE_CONN *con, PRES_ADDR *rem_addr,
char **spdu_ptr, ST_UINT *spdu_len, ST_UCHAR spdu_type);
ST_RET cosp_enc_rf (ACSE_CONN *con, char **spdu_ptr, ST_UINT *spdu_len, ST_UCHAR reason);
ST_RET cosp_enc_fn_dn (ACSE_CONN *con, char **spdu_ptr, ST_UINT *spdu_len, ST_UCHAR spdu_type);
ST_RET cosp_enc_u_ab (ACSE_CONN *con, char **spdu_ptr, ST_UINT *spdu_len);
ST_RET cosp_enc_p_ab (char *spdu_ptr, ST_INT err_code);
ST_RET cosp_enc_dt (ACSE_CONN *con, char **spdu_ptr, ST_UINT *spdu_len);
/* cosp_dec.c */
ST_RET cosp_dec_cn_ac (COSP_CN_AC *dec_par, char *spdu_buf, ST_UINT spdu_len, ST_UCHAR spdu_type);
ST_RET cosp_dec_rf (COSP_RF *dec_par, char *spdu_buf, ST_UINT spdu_len);
ST_RET cosp_dec_fn_dn (COSP_FN_DN *dec_par, char *spdu_buf, ST_UINT spdu_len, ST_UCHAR spdu_type);
ST_RET cosp_dec_ab (COSP_AB *dec_par, char *spdu_buf, ST_UINT spdu_len);
ST_RET cosp_dec_dt (COSP_DT *dec_par, char *spdu_buf, ST_UINT spdu_len);
#ifdef __cplusplus
}
#endif
#endif /* end of 'already included' */