SKTAL_DLG and SKTAL_CPT Structure Definitions

/*

* Quality of service indicator octet definitions:

* (To select more than one option OR together options)

*/

#define QOSI_RET_OPT (0x01) /* Return Option */

#define QOSI_SEQ_CTRL (0x02) /* Sequence Control */

#define QOSI_SLS_KEY (0x04) /* SLS key present */

#define QOSI_PRIORITY (0x08) /* Message priority octet present */

#define QOSI_NETWK_IND (0x10) /* Use provided network indicator */

#define QOSI_PROT_VER (0x20) /* Force inclusion of the TCAP ver */

/*

* TCAP_PN_TERMINATION Values:

*/

#define TCAP_END_BASIC (0) /* Basic end */

#define TCAP_END_PREARRANGED (1) /* Pre-arranged end */

/*

* TCAP_PN_CPT_PRESENT Values:

*/

#define TCAP_NO_CPT (0) /* No component(s) present */

#define TCAP_CPT_PRESENT (1) /* Component(s) present */

/*

* TCAP_PN_LAST_CPT Values:

*/

#define TCAP_MORE_CPTS (0) /* More component(s) to follow */

#define TCAP_LAST_CPT (1) /* This is the last component */

#define TCPEND_BASIC TCAP_END_BASIC

#define TCPEND_PREARRANGED TCAP_END_PREARRANGED

#define TCP_NO_CPT TCAP_NO_CPT

#define TCP_CPT_PRESENT TCAP_CPT_PRESENT

#define TCP_MORE_CPTS TCAP_MORE_CPTS

#define TCP_LAST_CPT TCAP_LAST_CPT

/* Size values for Manual TCAP Parser */

#define MAX_TCAP_CPT_SIZE (304)

#define MAX_NO_OF_TCAP_CPTS (4)

#define MAX_TCAP_DLG_SIZE (336)

#define MAX_TCAP_TRANS_SIZE \

(MAX_TCAP_DLG_SIZE + (MAX_TCAP_CPT_SIZE * MAX_NO_OF_TCAP_CPTS))

/********************************************************************

* *

* Structure definitions for Component Primitives *

* *

********************************************************************/

/*

* Definitions for buffer sizes in the 'C' structured

* representation of TCAP protocol primitives.

*

* Each value must allow space for the tag, length and associated data to be stored.

* The user may need to change the values given in

* order to support larger parameters or to reduce

* the size of the structures if it is known that

* certain parameters lengths will never be exceeded.

*/

#define IV_SIZE (4) /* space for 'invoke_id' parameter */

#define OP_SIZE (32) /* space for 'operation' parameter */

#define PR_SIZE (256) /* space for 'parameter' parameter */

#define ER_SIZE (32) /* space for 'error' parameter */

#define PB_SIZE (16) /* space for 'problem' parameter */

#define AC_SIZE (64)/* space for 'ac_name' parameter */

#define UI_SIZE (256) /* space for 'user_info' parameter */

#define AB_SIZE (256) /* space for 'abt_info' parameter */

/*

* Substructures for Components

*/

typedef struct cpt_inv_id

{

SKTAL_USHORT len;

SKTAL_OCTET data [IV_SIZE];

}

CPT_INV_ID;

typedef struct cpt_op

{

SKTAL_USHORT len;

SKTAL_OCTET data [OP_SIZE];

}

CPT_OP;

typedef struct cpt_param

{

SKTAL_USHORT len;

SKTAL_OCTET data [PR_SIZE];

}

CPT_PARAM;

typedef struct cpt_error_code

{

SKTAL_USHORT len;

SKTAL_OCTET data [ER_SIZE];

}

CPT_ERROR_CODE;

typedef struct cpt_problem

{

SKTAL_USHORT len;

SKTAL_OCTET data [PB_SIZE];

}

CPT_PROBLEM;

/*

* Invoke primitive. REQ and IND

* Invoke not last primitive. REQ and IND

*/

typedef struct cpt_invoke

{

CPT_INV_ID invoke_id;

CPT_OP operation;

CPT_PARAM param;

#if defined(CCITT)

SKTAL_USHORT opClass; /* 1, 2, 3 or 4 */

#dendif

SKTAL_USHORT timeout; /* 0 .. 409 */

CPT_INV_ID linked_id;

#define correlation_id linked_id /* FOR ANSI */

}

CPT_INVOKE;

/*

* Return result last primitive. REQ and IND

* Return result not last primitive. REQ and IND

*/

typedef struct cpt_result

{

CPT_INV_ID invoke_id;

#if defined(CCITT)

CPT_OP operation;

#endif

CPT_PARAM param;

}

CPT_RESULT;

/*

* User error primitive. REQ and IND

*/

typedef struct cpt_error

{

CPT_INV_ID invoke_id;

CPT_ERROR_CODE error;

CPT_PARAM param;

}

CPT_ERROR;

/*

* User reject primitive. REQ and IND

* Local reject primitive. IND only.

* Remote reject primitive. IND only.

*/

typedef struct cpt_reject

{

CPT_INV_ID invoke_id;

CPT_PROBLEM problem;

#if defined(ANSI)

CPT_PARAM param;

#endif

}

CPT_REJECT;

/*

* User cancel primitive. REQ only.

* Local cancel primitive. IND only.

*/

typedef struct cpt_cancel

{

CPT_INV_ID invoke_id;

}

CPT_CANCEL;

/*

* Timer Reset primitive (ITU White Book 97 only). REQ only.

*/

#if defined(CCITT)

typedef struct cpt_timerReset

{

CPT_INV_ID invoke_id;

}

CPT_TIMER_RESET;

#endif

/*

* Union of all of the above

*/

typedef struct tcap_cpt

{

SKTAL_USHORT last_component; /* either 0 or non-zero */

SKTAL_USHORT ptype; /* prim type (TCPPT_xxx values) */

Union

{

CPT_INVOKE invoke;

CPT_RESULT result;

CPT_ERROR error;

CPT_REJECT reject;

CPT_CANCEL cancel;

#if defined(CCITT)

CPT_TIMER_RESET timerReset;

#endif

}

u;

}

TCAP_CPT;

/********************************************************************

* *

* Structure definitions for Dialogue Primitives *

* *

********************************************************************/

/*

* Dialog substructures

*/

typedef struct dlg_qos

{

SKTAL_OCTET indicator;

SKTAL_OCTET sls_key;

SKTAL_OCTET priority;

SKTAL_OCTET networkInd;

}

DLG_QOS;

typedef struct ac_name

{

SKTAL_USHORT len;

SKTAL_OCTET data [AC_SIZE];

}

DLG_AC_NAME;

typedef struct usr_inf

{

SKTAL_USHORT len;

SKTAL_OCTET data [UI_SIZE];

}

DLG_USR_INF;

typedef struct abt_inf

{

SKTAL_USHORT len;

SKTAL_OCTET data[AB_SIZE];

}

DLG_ABT_INF;

/*

* ITU and ANSI UNI. REQ and IND.

*/

typedef struct dlg_uni

{

SKTAL_USHORT cpt_present; /* 0 or 1 */

DLG_QOS qos;

DLG_AC_NAME ac_name;

DLG_USR_INF user_info;

SCCP_ADDR orig_addr;

SCCP_ADDR dest_addr;

MTP3_POINT_CODE opc; /* for use when address doesn't include */

MTP3_POINT_CODE dpc; /* for use when address doesn't include */

}

DLG_UNI;

/*

* ITU BEGIN, ANSI QUERY W/PERM and WO/PERM. REQ and IND.

*/

typedef struct dlg_begin

{

SKTAL_USHORT cpt_present; /* 0 or 1 */

DLG_QOS qos;

DLG_AC_NAME ac_name;

DLG_USR_INF user_info;

SCCP_ADDR orig_addr;

SCCP_ADDR dest_addr;

MTP3_POINT_CODE opc; /* for use when address doesn't include */

MTP3_POINT_CODE dpc; /* for use when address doesn't include */

}

DLG_BEGIN;

/*

* ITU CONTINUE, ANSI CONV W/PERM and WO/PERM. REQ and IND.

*/

typedef struct dlg_continue

{

SKTAL_USHORT cpt_present; /* 0 or 1 */

DLG_QOS qos; /* Indication only. Ignore for request */

DLG_AC_NAME ac_name;

DLG_USR_INF user_info;

SCCP_ADDR orig_addr;

MTP3_POINT_CODE opc; /* for use when address doesn't include */

}

DLG_CONTINUE;

/*

* ITU END, ANSI RESP. REQ and IND.

*/

typedef struct dlg_end

{

SKTAL_USHORT cpt_present; /* 0 or 1 */

DLG_QOS qos; /* Indication only. Ignore for request */

DLG_AC_NAME ac_name;

DLG_USR_INF user_info;

SKTAL_OCTET termination; /* 0 or 1 */

}

DLG_END;

/*

* ITU U-ABORT. REQ only.

* ITU P-ABORT. IND only.

* ANSI ABORT, IND only.

*/

typedef struct dlg_abort

{

SKTAL_USHORT abort_reason;

DLG_QOS qos; /* Indication only. Ignore for request */

DLG_AC_NAME ac_name; /* P-ABORT does not include this */

DLG_USR_INF user_info; /* P-ABORT does not include this */

DLG_ABT_INF abort_info; /* ANSI only */

}

DLG_ABORT;

/*

* ITU NOTICE and ANSI NOTICE. IND only (based on QOS return option).

*/

typedef struct dlg_notice

{

SKTAL_OCTET report_cause;

SKTAL_OCTET user_data_len; /* Presence depends on manufacturer */

SCCP_ADDR orig_addr; /* Presence depends on manufacturer */

SCCP_ADDR dest_addr; /* Presence depends on manufacturer */

SCCP_DATA user_data; /* Presence depends on manufacturer */

}

DLG_NOTICE;

/*

* Union of above types

*/

typedef struct tcap_dlg

{

SKTAL_USHORT ptype; /* primitive type (TCPPT_xxx values) */

Union

{

DLG_UNI uni;

DLG_BEGIN begin;

DLG_CONTINUE cont;

DLG_END end;

DLG_ABORT abort;

DLG_NOTICE notice;

}

u;

}

SKTAL_DLG;