/************************************************************************/ 
/* SISCO SOFTWARE MODULE HEADER *****************************************/ 
/************************************************************************/ 
/*   (c) Copyright Systems Integration Specialists Company, Inc.,	*/ 
/*      	  1986 - 1997, All Rights Reserved.		        */ 
/*									*/ 
/* MODULE NAME : mms_pcon.h						*/ 
/* PRODUCT(S)  : MMSEASE, MMSEASE-LITE					*/ 
/*									*/ 
/* MODULE DESCRIPTION : 						*/ 
/*	This file has the data structures and function definitions	*/ 
/*	required to interface with MMS context management services	*/ 
/*	at the primitive level.						*/ 
/*									*/ 
/*	Parameters : In general, the first parameter is the channel	*/ 
/*		     that the request or response is to be sent over.	*/ 
/*		     For Responses, the second parameter is the Invoke	*/ 
/*		     ID to be used. The last parameter is used to pass	*/ 
/*		     operation specific information by pointer. 	*/ 
/*									*/ 
/*	Return								*/ 
/*	    Values : Request functions return a pointer to the pending	*/ 
/*		     request tracking structure, of type MMSREQ_PEND.	*/ 
/*		     In case of error, the pointer is returned == 0	*/ 
/*		     and mms_op_err is written with the err code.	*/ 
/*		     Response functions return 0 if OK, else an error	*/ 
/*		     code.						*/ 
/*									*/ 
/* MODIFICATION LOG :							*/ 
/*  Date     Who   Rev			Comments			*/ 
/* --------  ---  ------   -------------------------------------------	*/ 
/* 07/10/02  JRB     05    Clarify description of maxreq_calling/called.*/ 
/* 12/10/97  MDE     04    Changed max_nest to ST_INT8			*/ 
/* 11/06/97  MDE     03    Added suicacse.h, use APP_REF typedef	*/ 
/* 08/13/97  RKR     02    Format changes				*/ 
/* 07/29/97  DSF     01    Moved APP_REF to SUIC			*/ 
/* 04/02/97  DTL   7.00    MMSEASE 7.0 release. See MODL70.DOC for	*/ 
/*			   history.					*/ 
/************************************************************************/ 
 
#ifndef MMS_PCON_INCLUDED 
#define MMS_PCON_INCLUDED 
 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
#include "mms_err.h" 
#include "mms_mp.h" 
#include "suicacse.h" 
 
/************************************************************************/ 
/************************************************************************/ 
/* CONTEXT MANAGEMENT SERVICES						*/ 
/************************************************************************/ 
/* The structures below are used to pass CONTEXT MANAGEMENT information */ 
/* to/from the MMS primitives.						*/ 
/************************************************************************/ 
 
/************************************************************************/ 
/* INITIATE								*/ 
/************************************************************************/ 
 
struct init_rslt 
  { 
  ST_BOOLEAN accept_context;	/* SD_TRUE if not error			*/ 
  ST_BOOLEAN err_info_pres;	/* error information available		*/ 
  ERR_INFO   err;		/* otherwise look here 			*/ 
  }; 
typedef struct init_rslt INIT_RSLT; 
 
 
/* This structure is used for non-core MMS-EASE P-Context's.		*/ 
/* It is attached to the primary initiate info structure as an array	*/ 
 
struct cs_init_info  
  { 
  ST_UINT    p_context;		/* P-Context for this init		*/ 
  ST_BOOLEAN local_detail_pres;	/* flag if local_detail is present	*/ 
  ST_INT32   local_detail;	/* local detail				*/ 
  ST_INT16   maxreq_calling;	/* max outst. "ind" allowed at "calling" app*/ 
				/* DEBUG: chg name to max_ind_calling?	*/ 
  ST_INT16   maxreq_called;	/* max outst. "ind" allowed at "called" app*/ 
				/* DEBUG: chg name to max_ind_called?	*/ 
  ST_BOOLEAN max_nest_pres;  	/* indicates if max_nest is present	*/ 
  ST_INT8    max_nest;		/* maximum data nesting 		*/ 
  ST_INT     init_detail_len;	/* init detail 				*/ 
  ST_UCHAR   *init_detail;	/* this is an ASN.1 encoded sequence	*/ 
  INIT_RSLT  rslt; 
  }; 
typedef struct cs_init_info  CS_INIT_INFO; 
 
 
/* REQUEST & RESPONSE : 						*/ 
 
struct init_info 
  {				/* Proposed (req) / Negiotiated (resp)	*/ 
  ST_BOOLEAN mms_p_context_pres;/* MMS Core context used		*/ 
  ST_BOOLEAN max_segsize_pres;	/* flag if max_segsize is present	*/ 
  ST_INT32   max_segsize;	/* maximum segment size 		*/ 
  ST_INT16   maxreq_calling;	/* max outst. "ind" allowed at "calling" app*/ 
				/* DEBUG: chg name to max_ind_calling?	*/ 
  ST_INT16   maxreq_called;	/* max outst. "ind" allowed at "called" app*/ 
				/* DEBUG: chg name to max_ind_called?	*/ 
  ST_BOOLEAN max_nest_pres;  	/* indicates if max_nest is present	*/ 
  ST_INT8    max_nest;		/* maximum data nesting 		*/ 
  ST_BOOLEAN mms_detail_pres;	/* mms init detail enable 		*/ 
  ST_INT16   version;		/* version				*/ 
  ST_UCHAR   param_supp[2];	/* parameter support options: bitstring	*/ 
  ST_UCHAR   serv_supp[11];	/* service support options: bitstring	*/ 
  INIT_RSLT  rslt;		/* success/failure & error info		*/ 
  ST_INT     num_cs_init;	/* number of CS init info's attached	*/ 
  ST_INT     core_position;	/* Position for CORE CONTEXT in list	*/ 
				/* (0 = first, num_cs_init = last, etc.	*/ 
/* followed by    CS_INIT_INFO cs_init[num_cs_init]			*/ 
  SD_END_STRUCT 
  };		      
typedef struct init_info INIT_INFO; 
 
#ifndef MMS_LITE 
MMSREQ_PEND *mp_init (ST_INT chan, ST_CHAR *partner, INIT_INFO *info_ptr); 
ST_RET mp_init_resp (MMSREQ_IND *indptr, INIT_INFO *info); 
#else 
ST_RET mpl_init         (INIT_INFO *info); 
ST_RET mpl_cs_init      (CS_INIT_INFO *info); 
ST_RET mpl_init_resp    (INIT_INFO *info); 
ST_RET mpl_cs_init_resp (CS_INIT_INFO *info); 
#endif 
 
/************************************************************************/ 
/* CONCLUDE								*/ 
/************************************************************************/ 
 
/* REQUEST : NULL							*/ 
/* RESPONSE : NULL							*/ 
 
#ifndef MMS_LITE 
MMSREQ_PEND *mp_conclude (ST_INT chan); 
ST_RET mp_conclude_resp (MMSREQ_IND *ind); 
#else 
ST_RET mpl_conclude (ST_VOID); 
ST_RET mpl_conclude_resp (ST_VOID); 
#endif 
 
/************************************************************************/ 
/* CANCEL								*/ 
/************************************************************************/ 
 
/* REQUEST : NULL							*/ 
/* RESPONSE : NULL							*/ 
 
#ifndef MMS_LITE 
MMSREQ_PEND *mp_cancel (MMSREQ_PEND *req); 
ST_RET mp_cancel_resp   (MMSREQ_IND *ind); 
#else 
ST_RET mpl_cancel        (ST_VOID); 
ST_RET mpl_cancel_resp   (ST_VOID); 
#endif 
 
/************************************************************************/ 
/* REJECT								*/ 
/************************************************************************/ 
 
struct reject_resp_info 
  { 
  ST_BOOLEAN detected_here; 	/* flag indicating where error occurred */ 
  ST_BOOLEAN invoke_known;	/* flag indicating if invoke ID known	*/ 
  ST_UINT32  invoke;		/* invoke ID of service rejected	*/ 
  ST_INT     pdu_type;		/* pdu type of service rejected 	*/ 
  ST_INT16   rej_class;		/* reject class 			*/ 
  ST_INT16   rej_code;		/* reject code				*/ 
  }; 
typedef struct reject_resp_info	REJECT_RESP_INFO; 
 
#ifndef MMS_LITE 
ST_RET mp_reject_resp (ST_INT chan, REJECT_RESP_INFO *info); 
ST_RET mp_reject_ind  (MMSREQ_IND *ind,REJECT_RESP_INFO *info); 
ST_RET mp_reject_conf (MMSREQ_PEND *req,REJECT_RESP_INFO *info); 
#else 
ST_RET mpl_reject_resp (REJECT_RESP_INFO *info); 
#endif 
 
/************************************************************************/ 
/* ABORT REQUEST FUNCTION						*/ 
/************************************************************************/ 
 
ST_RET mp_abort (ST_INT chan, ST_INT reason); 
 
/************************************************************************/ 
/************************************************************************/ 
/* This function is used to convert convert an AR Name into an ASN.1    */ 
/* encoded ApplicationReference based on the TPY DIB information        */ 
/************************************************************************/ 
 
ST_RET ms_arname_to_asn1 (ST_CHAR *arname, ST_UCHAR *asn1_buf, ST_INT asn1_buf_len,  
				ST_UCHAR **asn1_out, ST_INT *asn1_len_out);  
 
/* This function is used to convert an ASN.1 encoded                    */ 
/* ApplicationReference	to the AR Name                                   */ 
ST_RET ms_asn1_to_arname (ST_CHAR *arname, ST_UCHAR *asn1, ST_INT asn1len); 
 
/* This function is used to find an AR Name based on the app_ref        */ 
/* information.                                                         */ 
ST_RET ms_appref_to_arname (ST_CHAR *arname, APP_REF *appref); 
 
/* This function is used to transition between an AR Name and its'      */ 
/* corresponding app_ref information.                                   */ 
ST_RET ms_arname_to_appref (ST_CHAR *arname, APP_REF **appref_out); 
 
/* This function is used to convert to an ApplicationReference to ASN.1	*/ 
ST_RET ms_appref_to_asn1 (APP_REF *appref, ST_UCHAR *dest, ST_INT dest_len,  
				ST_UCHAR **asn1_out,  ST_INT *asn1_len_out); 
 
/* This function is used to convert ASN.1 encoded ApplicationReference  */ 
/* data to an intermediate form.					*/ 
ST_RET ms_asn1_to_appref (APP_REF *appref, ST_UCHAR *asn1, ST_INT asn1len); 
 
 
#ifdef __cplusplus 
} 
#endif 
 
#endif	/* MMS_PCON_INCLUDED */
