module MNCC_Types {

import from Osmocom_Types all;

/* for architectures where 'int' is 32bit like x86_64 */
type integer int with { variant "FIELDLENGTH(32)" };


/* GSM 04.08 Bearer Capability: Rate Adaption */
type enumerated GSM48_bcap_ra {
	GSM48_BCAP_RA_NONE	(0),
	GSM48_BCAP_RA_V110_X30	(1),
	GSM48_BCAP_RA_X31	(2),
	GSM48_BCAP_RA_OTHER	(3)
};

/* GSM 04.08 Bearer Capability: Signalling access protocol */
type enumerated GSM48_bcap_sig_access {
	GSM48_BCAP_SA_NONE		(0),
	GSM48_BCAP_SA_I440_I450 	(1),
	GSM48_BCAP_SA_X21		(2),
	GSM48_BCAP_SA_X28_DP_IN		(3),
	GSM48_BCAP_SA_X28_DP_UN		(4),
	GSM48_BCAP_SA_X28_NDP		(5),
	GSM48_BCAP_SA_X32		(6)
};

/* GSM 04.08 Bearer Capability: User Rate */
type enumerated GSM48_bcap_user_rate {
	GSM48_BCAP_UR_NONE		(0),
	GSM48_BCAP_UR_300		(1),
	GSM48_BCAP_UR_1200		(2),
	GSM48_BCAP_UR_2400		(3),
	GSM48_BCAP_UR_4800		(4),
	GSM48_BCAP_UR_9600		(5),
	GSM48_BCAP_UR_12000		(6),
	GSM48_BCAP_UR_1200_75		(7)
};

/* GSM 04.08 Bearer Capability: Parity */
type enumerated GSM48_bcap_parity {
	GSM48_BCAP_PAR_ODD		(0),
	GSM48_BCAP_PAR_EVEN		(2),
	GSM48_BCAP_PAR_NONE		(3),
	GSM48_BCAP_PAR_ZERO		(4),
	GSM48_BCAP_PAR_ONE		(5)
};

/* GSM 04.08 Bearer Capability: Intermediate Rate */
type enumerated GSM48_bcap_interm_rate {
	GSM48_BCAP_IR_NONE		(0),
	GSM48_BCAP_IR_8k		(2),
	GSM48_BCAP_IR_16k		(3)
};

/* GSM 04.08 Bearer Capability: Transparency */
type enumerated GSM48_bcap_transp {
	GSM48_BCAP_TR_TRANSP		(0),
	GSM48_BCAP_TR_RLP		(1),
	GSM48_BCAP_TR_TR_PREF		(2),
	GSM48_BCAP_TR_RLP_PREF		(3)
};

/* GSM 04.08 Bearer Capability: Modem Type */
type enumerated GSM48_bcap_modem_type {
	GSM48_BCAP_MT_NONE		(0),
	GSM48_BCAP_MT_V21		(1),
	GSM48_BCAP_MT_V22		(2),
	GSM48_BCAP_MT_V22bis		(3),
	GSM48_BCAP_MT_V23		(4),
	GSM48_BCAP_MT_V26ter		(5),
	GSM48_BCAP_MT_V32		(6),
	GSM48_BCAP_MT_UNDEF		(7),
	GSM48_BCAP_MT_AUTO_1		(8)
};

type enumerated MNCC_MsgType {
	MNCC_SETUP_REQ		('0101'O),
	MNCC_SETUP_IND		('0102'O),
	MNCC_SETUP_RSP		('0103'O),
	MNCC_SETUP_CNF		('0104'O),
	MNCC_SETUP_COMPL_REQ	('0105'O),
	MNCC_SETUP_COMPL_IND	('0106'O),
	MNCC_CALL_CONF_IND	('0107'O),
	MNCC_CALL_PROC_REQ	('0108'O),
	MNCC_PROGRESS_REQ	('0109'O),
	MNCC_ALERT_REQ		('010a'O),
	MNCC_ALERT_IND		('010b'O),
	MNCC_NOTIFY_REQ		('010c'O),
	MNCC_NOTIFY_IND		('010d'O),
	MNCC_DISC_REQ		('010e'O),
	MNCC_DISC_IND		('010f'O),
	MNCC_REL_REQ		('0110'O),
	MNCC_REL_IND		('0111'O),
	MNCC_REL_CNF		('0112'O),
	MNCC_FACILITY_REQ	('0113'O),
	MNCC_FACILITY_IND	('0114'O),
	MNCC_START_DTMF_IND	('0115'O),
	MNCC_START_DTMF_RSP	('0116'O),
	MNCC_START_DTMF_REJ	('0117'O),
	MNCC_STOP_DTMF_IND	('0118'O),
	MNCC_STOP_DTMF_RSP	('0119'O),
	MNCC_MODIFY_REQ		('011a'O),
	MNCC_MODIFY_IND		('011b'O),
	MNCC_MODIFY_RSP		('011c'O),
	MNCC_MODIFY_CNF		('011d'O),
	MNCC_MODIFY_REJ		('011e'O),
	MNCC_HOLD_IND		('011f'O),
	MNCC_HOLD_CNF		('0120'O),
	MNCC_HOLD_REJ		('0121'O),
	MNCC_RETRIEVE_IND	('0122'O),
	MNCC_RETRIEVE_CNF	('0123'O),
	MNCC_RETRIEVE_REJ	('0124'O),
	MNCC_USERINFO_REQ	('0125'O),
	MNCC_USERINFO_IND	('0126'O),
	MNCC_REJ_REQ		('0127'O),
	MNCC_REJ_IND		('0128'O),
	MNCC_PROGRESS_IND	('0129'O),
	MNCC_CALL_PROC_IND	('012a'O),
	MNCC_CALL_CONF_REQ	('012b'O),
	MNCC_START_DTMF_REQ	('012c'O),
	MNCC_STOP_DTMF_REQ	('012d'O),
	MNCC_HOLD_REQ		('012e'O),
	MNCC_RETRIEVE_REQ	('012f'O),

	MNCC_BRIDGE		('0200'O),
	MNCC_FRAME_RECV		('0201'O),
	MNCC_FRAME_DROP		('0202'O),
	MNCC_LCHAN_MODIFY	('0203'O),
	MNCC_RTP_CREATE		('0204'O),
	MNCC_RTP_CONNECT	('0205'O),
	MNCC_RTP_FREE		('0206'O),

	GSM_TCHF_FRAME		('0300'O),
	GSM_TCHF_FRAME_EFR	('0301'O),
	GSM_TCHH_FRAME		('0302'O),
	GSM_TCH_FRAME_AMR	('0303'O),
	GSM_BAD_FRAME		('03ff'O),

	MNCC_SOCKET_HELLO	('0400'O)
};

const integer GSM_MAX_FACILITY := 128;
const integer GSM_MAX_SSVERSION := 128;
const integer GSM_MAX_USERUSER := 128;

type record MNCC_bearer_cap_data {
	GSM48_bcap_ra		rate_adaptation,
	GSM48_bcap_sig_access	sig_access,
	int			async,
	int			nr_stop_bits,
	int			nr_data_bits,
	GSM48_bcap_user_rate	user_rate,
	GSM48_bcap_parity	parity,
	GSM48_bcap_interm_rate	interm_rate,
	GSM48_bcap_transp	transp,
	GSM48_bcap_modem_type	modem_type
};

type record length(0..8) of int MNCC_speech_vers;

/* Expanded fields from GSM TS 04.08, Table 10.5.102 */
type record MNCC_bearer_cap {
	int			transfer,
	int			mode,
	int			coding,
	int			radio,
	int			speech_ctm,
	MNCC_speech_vers	speech_ver,
	MNCC_bearer_cap_data	data	optional
};

template MNCC_bearer_cap ts_MNCC_bcap_voice := {
	transfer	:= 0,	/* speech */
	mode		:= 0,	/* circuit */
	coding		:= 0,	/* GSM standard */
	radio		:= 3,	/* FR/HR, FR preferred */
	speech_ctm	:= 0,	/* not supported */
	speech_ver	:= { 0, 2, 4, 1, 5, -1 },
	data		:= omit
};

type record MNCC_number {
	GSM48_type_of_number	number_type,
	GSM48_num_plan_ind	plan,
	GSM48_present_ind	presence,
	GSM48_screening_ind	screen,
	charstring		number
};

/* 24.008 10.5.118 */
type enumerated GSM48_num_plan_ind {
	GSM48_NUMPLAN_UNKNOWN		(0),
	GSM48_NUMPLAN_E164		(1),
	GSM48_NUMPLAN_X121		(3),
	GSM48_NUMPLAN_F69		(4),
	GSM48_NUMPLAN_NATIONAL		(8),
	GSM48_NUMPLAN_PRIVATE		(9),
	GSM48_NUMPLAN_CTS		(11),
	GSM48_NUMPLAN_RESERVED		(15)
};

/* 04.08 10.5.118 */
type enumerated GSM48_type_of_number {
	GSM48_TON_UNKNOWN		(0),
	GSM48_TON_INTERNATIONAL		(1),
	GSM48_TON_NATIONAL		(2),
	GSM48_TON_NETWORK_SPECIFIC	(3),
	GSM48_TON_SHORT_CODE		(4)
};

/* 04.08 10.5.120 */
type enumerated GSM48_present_ind {
	GSM48_PRES_IND_ALLOWED		(0),
	GSM48_PRES_IND_RESTRICTED	(1),
	GSM48_PRES_IND_NUM_NOT_AVAIL	(2),
	GSM48_PRES_IND_RESERVED		(3)
};

type enumerated GSM48_screening_ind {
	GSM48_SCR_IND_NOT_SCREENED	(0),
	GSM48_SCR_IND_VERIF_PASSED	(1),
	GSM48_SCR_IND_VERIF_FAILED	(2),
	GSM48_SCR_IND_NETW_PROVIDED	(3)
};

/* 24.008 Table 10.5.122 */
type enumerated GSM48_cause_coding {
	GSM48_CAUSE_CS_Q931		('00'B),
	GSM48_CAUSE_CS_RSVD		('01'B),
	GSM48_CAUSE_CS_NATIONAL		('10'B),
	GSM48_CAUSE_CS_GSM		('11'B)
}

type enumerated GSM48_cause_loc {
	GSM48_CAUSE_LOC_USER				('0000'B),
	GSM48_CAUSE_LOC_PRN_S_LU			('0001'B),
	GSM48_CAUSE_LOC_PUN_S_LU			('0010'B),
	GSM48_CAUSE_LOC_TRANS_NET			('0011'B),
	GSM48_CAUSE_LOC_PUN_S_RU			('0100'B),
	GSM48_CAUSE_LOC_PRN_S_RU			('0101'B),
	GSM48_CAUSE_LOC_INN_NET				('0111'B),
	GSM48_CAUSE_LOC_NET_BEYOND			('1010'B)
}



template (value) MNCC_number ts_MNCC_number(charstring number,
				    GSM48_type_of_number ton := GSM48_TON_INTERNATIONAL,
				    GSM48_num_plan_ind npi := GSM48_NUMPLAN_E164,
				    GSM48_present_ind pres := GSM48_PRES_IND_ALLOWED,
				    GSM48_screening_ind screen := GSM48_SCR_IND_NOT_SCREENED) := {
	number_type := ton,
	plan := npi,
	presence := pres,
	screen := screen,
	number := number
}

template MNCC_number tr_MNCC_number(template charstring number,
				    template GSM48_type_of_number ton := ?,
				    template GSM48_num_plan_ind npi := ?,
				    template GSM48_present_ind pres := ?,
				    template GSM48_screening_ind screen := ?) := {
	number_type := ton,
	plan := npi,
	presence := pres,
	screen := screen,
	number := number
}

type record MNCC_cause {
	GSM48_cause_loc		location,
	GSM48_cause_coding	coding,
	int		rec,
	int		rec_val,
	int		val,
	octetstring	diag
} with {
	variant (location) "FIELDLENGTH(32)";
	variant (coding) "FIELDLENGTH(32)";
}

template (value) MNCC_cause ts_MNCC_cause(int val,
				  GSM48_cause_loc loc := GSM48_CAUSE_LOC_PUN_S_LU,
				  GSM48_cause_coding coding := GSM48_CAUSE_CS_GSM,
				  octetstring diag := ''O) := {
	location := loc,
	coding := coding,
	rec := 0,
	rec_val := 0,
	val := val,
	diag := diag
}

type record MNCC_useruser {
	int		proto,
	charstring	info
};

type record MNCC_progress {
	int		coding,
	int		location,
	int		descr
};

type record MNCC_cccap {
	int		dtmf,
	int		pcp
};

type int MNCC_notify (0..127);
type charstring MNCC_keypad length (1);

type enumerated MNCC_bcap {
	GSM_MNCC_BCAP_SPEECH	(0),
	GSM_MNCC_BCAP_UNR_DIG	(1),
	GSM_MNCC_BCAP_AUDIO	(2),
	GSM_MNCC_BCAP_FAX_G3	(3),
	GSM_MNCC_BCAP_OTHER_ITC	(4),
	GSM_MNCC_BCAP_RESERVED	(7)
};


type record MNCC_PDU_Signal {
	uint32_t	callref,

	MNCC_bearer_cap	bearer_cap optional,
	MNCC_number	called optional,
	MNCC_number	calling optional,
	MNCC_number	redirecting optional,
	MNCC_number	connected optional,
	MNCC_cause	cause optional,
	MNCC_progress	progress optional,
	MNCC_useruser	useruser optional,
	charstring	facility optional,
	MNCC_cccap	cccap optional,
	charstring	ssversion optional,

	int		clir_sup,
	int		clir_inv,
	int		signal optional,

	MNCC_keypad	keypad optional,
	int		more,
	MNCC_notify	notify,
	int		emergency optional,
	charstring	imsi,

	uint8_t		lchan_type,	/* empty in OSmoMSC */
	uint8_t		lchan_mode	/* empty in OsmoMSC */
};


type record MNCC_PDU_Data {
	uint32_t	callref,
	octetstring	data
};

type record MNCC_PDU_Rtp {
	uint32_t	callref,
	uint32_t	ip,
	uint16_t	rtp_port,
	uint32_t	payload_type,
	uint32_t	payload_msg_type
};

type record MNCC_PDU_Hello {
	uint32_t	version,
	uint32_t	mncc_size,
	uint32_t	data_frame_size,
	uint32_t	called_offset,
	uint32_t	signal_offset,
	uint32_t	emergency_offset,
	uint32_t	lchan_type_offset
};


type union MNCC_MsgUnion {
	MNCC_PDU_Signal	signal,
	MNCC_PDU_Data	data,
	MNCC_PDU_Rtp	rtp,
	MNCC_PDU_Hello	hello
};


type record MNCC_PDU {
	MNCC_MsgType	msg_type,
	MNCC_MsgUnion	u
} with { variant (u) "CROSSTAG(
			hello, msg_type = MNCC_SOCKET_HELLO;
			rtp, {	msg_type = MNCC_RTP_CREATE,
				msg_type = MNCC_RTP_CONNECT,
				msg_type = MNCC_RTP_FREE };
			data, {	msg_type = GSM_TCHF_FRAME,
				msg_type = GSM_TCHF_FRAME_EFR,
				msg_type = GSM_TCHH_FRAME,
				msg_type = GSM_TCH_FRAME_AMR,
				msg_type = GSM_BAD_FRAME };
			signal, OTHERWISE
			)"
};

external function enc_MNCC_PDU(in MNCC_PDU pdu) return octetstring;

external function dec_MNCC_PDU(in octetstring stream) return MNCC_PDU;

template (value) MNCC_PDU ts_MNCC_HELLO(uint32_t version := 5) := {
	msg_type := MNCC_SOCKET_HELLO,
	u := {
		hello := {
			version := version,
			mncc_size := 836,
			data_frame_size := 8,
			called_offset := 104,
			signal_offset := 796,
			emergency_offset := 812,
			lchan_type_offset := 0
		}
	}
}

template MNCC_PDU ts_MNCC_Sign(MNCC_MsgType msg_type, MNCC_PDU_Signal sign) := {
	msg_type := msg_type,
	u := {
		signal := sign
	}
}

template MNCC_PDU ts_MNCC_SIMPLE(MNCC_MsgType msg_type, uint32_t call_id) := {
	msg_type := msg_type,
	u := {
		signal := {
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

template MNCC_PDU tr_MNCC_SIMPLE(template MNCC_MsgType msg_type, template uint32_t call_id) := {
	msg_type := msg_type,
	u := {
		signal := {
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}



/* MT: MSC <- MNCC: SETUP.req from ext. MNCC handler to MSC */
template MNCC_PDU ts_MNCC_SETUP_req(uint32_t call_id, charstring called, charstring calling, charstring imsi := "") := {
	msg_type := MNCC_SETUP_REQ,
	u := {
		signal := {	/* See 24.008 9.3.23.1 */
			callref := call_id,
			bearer_cap := ts_MNCC_bcap_voice,		/* mandatory */
			called := valueof(ts_MNCC_number(called)),	/* optional */
			calling := valueof(ts_MNCC_number(calling)),	/* optional */
			redirecting := omit,				/* optional */
			connected := omit,
			cause := omit,
			progress := omit,				/* optional */
			useruser := omit,				/* optional */
			facility := omit,				/* optional */
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,					/* optional */
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := imsi,
			lchan_type := 0,
			lchan_mode := 0
		}
	}
};
template MNCC_PDU tr_MNCC_SETUP_req(template uint32_t call_id := ?,
				    template charstring called := ?,
				    template charstring calling := *,
				    template charstring imsi := ?) := {
	msg_type := MNCC_SETUP_REQ,
	u := {
		signal := {	/* See 24.008 9.3.23.1 */
			callref := call_id,
			bearer_cap := *,				/* mandatory in CC */
			called := tr_MNCC_number(called),		/* optional */
			calling := tr_MNCC_number(calling),		/* optional */
			redirecting := *,				/* optional */
			connected := omit,
			cause := omit,
			progress := *,					/* optional */
			useruser := *,					/* optional */
			facility := *,					/* optional */
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := *,					/* optional */
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := imsi,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
};


/* MO: MSC <- MNCC: Respons to SETUP.ind */
template MNCC_PDU ts_MNCC_SETUP_rsp(uint32_t call_id, charstring imsi := "",
				    template MNCC_number connected := omit) := {
	msg_type := MNCC_SETUP_RSP,
	u := {
		signal := {	/* See 24.008 9.3.5 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := connected,
			cause := omit,
			progress := omit,
			useruser := omit,				/* optional */
			facility := omit,				/* optional */
			cccap := omit,
			ssversion := omit,				/* optional */
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := imsi,
			lchan_type := 0,
			lchan_mode := 0
		}
	}
};
template MNCC_PDU tr_MNCC_SETUP_rsp(template uint32_t call_id,
				    template charstring imsi := ?,
				    template MNCC_number connected := *) := {
	msg_type := MNCC_SETUP_RSP,
	u := {
		signal := {	/* See 24.008 9.3.5 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := connected,
			cause := omit,
			progress := omit,
			useruser := *,					/* optional */
			facility := *,					/* optional */
			cccap := omit,
			ssversion := *,					/* optional */
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := imsi,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
};


/* MO: MSC -> MNCC: SETUP.ind from MSC to ext. MNCC handler */
template MNCC_PDU tr_MNCC_SETUP_ind(template uint32_t call_id := ?, template MNCC_number called := ?,
				    template MNCC_number calling := *, template charstring imsi :=?) := {
	msg_type := MNCC_SETUP_IND,
	u := {
		signal := {	/* See 24.008 9.3.23.2 */
			callref := call_id,
			bearer_cap := ?,				/* mandatory */
			called := called,				/* mandatory */
			calling := calling,				/* optional */
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := *,					/* optional */
			facility := *,					/* optional */
			cccap := *,					/* optional */
			ssversion := *,					/* optional */
			clir_sup := ?,					/* optional */
			clir_inv := ?,					/* optional */
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := imsi,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}
template (value) MNCC_PDU ts_MNCC_SETUP_ind(uint32_t call_id, MNCC_number called,
				    template (omit) MNCC_number calling := omit,
				    template (omit) charstring imsi := omit,
				    template (value) MNCC_bearer_cap bcap := ts_MNCC_bcap_voice) := {
	msg_type := MNCC_SETUP_IND,
	u := {
		signal := {	/* See 24.008 9.3.23.2 */
			callref := call_id,
			bearer_cap := valueof(bcap),			/* mandatory */
			called := called,				/* mandatory */
			calling := calling,				/* optional */
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,				/* optional */
			facility := omit,				/* optional */
			cccap := omit,					/* optional */
			ssversion := omit,				/* optional */
			clir_sup := 0,					/* optional */
			clir_inv := 0,					/* optional */
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := imsi,
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/* MO: MSC <- MNCC: SETUP.cnf; Response to SETUP.ind */
template MNCC_PDU ts_MNCC_SETUP_CNF(uint32_t call_id, template MNCC_number connected := omit) := {
	msg_type := MNCC_SETUP_CNF,
	u := {
		signal := {	/* See 24.008 9.3.5 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := connected,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/* MT: MSC -> MNCC: SETUP.cnf; Response to SETUP.req */
template MNCC_PDU tr_MNCC_SETUP_cnf(uint32_t call_id, template MNCC_number connected := *) := {
	msg_type := MNCC_SETUP_CNF,
	u := {
		signal := {	/* See 24.008 9.3.5 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := connected,
			cause := omit,
			progress := *,
			useruser := *,
			facility := *,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}

/* MT: MSC -> MNCC: SETUP_COMPL.req; request to send CONNECT ACK */
template MNCC_PDU tr_MNCC_SETUP_COMPL_req(template uint32_t call_id) :=
		tr_MNCC_SIMPLE(MNCC_SETUP_COMPL_REQ, call_id); /* See 24.008 9.3.6 */

/* MT: MSC -> MNCC: SETUP_COMPL.ind; receipt of CONNECT ACK */
template MNCC_PDU tr_MNCC_SETUP_COMPL_ind(template uint32_t call_id := ?) :=
		tr_MNCC_SIMPLE(MNCC_SETUP_COMPL_IND, call_id); /* See 24.008 9.3.6 */
template (value) MNCC_PDU ts_MNCC_SETUP_COMPL_ind(uint32_t call_id) :=
		ts_MNCC_SIMPLE(MNCC_SETUP_COMPL_IND, call_id); /* See 24.008 9.3.6 */

/* MT: MSC -> MNCC: REJ.req; reject MT call */
template MNCC_PDU tr_MNCC_REJ_req(template uint32_t call_id, template MNCC_cause cause := *) := {
	msg_type := MNCC_REJ_REQ,
	u := {
		signal := {	/* See 24.008 9.3.19 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := omit,
			useruser := *,
			facility := *,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}

/* MO: MSC <- MNCC: REJ.ind; reject MO call */
template MNCC_PDU ts_MNCC_REJ_ind(uint32_t call_id, template MNCC_cause cause := omit) := {
	msg_type := MNCC_REJ_IND,
	u := {
		signal := {	/* See 24.008 9.3.19 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/* MT: MSC -> MNCC: CALL_CONF.req; send CALL CONFIRMED to MS */
template MNCC_PDU tr_MNCC_CALL_CONF_ind(template uint32_t call_id, template MNCC_bearer_cap bcap := *,
					template MNCC_cause cause := *,
					template MNCC_cccap cccap := *) := {
	msg_type := MNCC_CALL_CONF_IND,
	u := {
		signal := {	/* See 24.008 9.3.2 */
			callref := call_id,
			bearer_cap := bcap,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := cccap,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}
template MNCC_PDU ts_MNCC_CALL_CONF_ind(uint32_t call_id,
					template (omit) MNCC_bearer_cap bcap := omit,
					template (omit) MNCC_cause cause := omit,
					template (omit) MNCC_cccap cccap := omit) := {
	msg_type := MNCC_CALL_CONF_IND,
	u := {
		signal := {	/* See 24.008 9.3.2 */
			callref := call_id,
			bearer_cap := bcap,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := cccap,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}


/* MO: MSC <- MNCC: CALL_PROC.req; call establishment initiated in network */
template MNCC_PDU ts_MNCC_CALL_PROC_req(uint32_t call_id, template MNCC_bearer_cap bcap := omit,
					template MNCC_progress prog := omit,
					template charstring fac := omit,
					template MNCC_cccap cccap := omit) := {
	msg_type := MNCC_CALL_PROC_REQ,
	u := {
		signal := {	/* See 24.008 9.3.2 */
			callref := call_id,
			bearer_cap := bcap,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := prog,
			useruser := omit,
			facility := fac,
			cccap := cccap,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}
template MNCC_PDU tr_MNCC_CALL_PROC_req(template uint32_t call_id,
					template MNCC_bearer_cap bcap := *,
					template MNCC_progress prog := *,
					template charstring fac := *,
					template MNCC_cccap cccap := *) := {
	msg_type := MNCC_CALL_PROC_REQ,
	u := {
		signal := {	/* See 24.008 9.3.2 */
			callref := call_id,
			bearer_cap := bcap,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := prog,
			useruser := omit,
			facility := fac,
			cccap := cccap,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}


/*     MSC <- MNCC: PROGRESS.req; PROGRESS message from ISDN */
template MNCC_PDU ts_MNCC_PROGRESS_req(uint32_t call_id, MNCC_progress prog,
					template MNCC_useruser uu := omit) := {
	msg_type := MNCC_PROGRESS_REQ,
	u := {
		signal := {	/* See 24.008 9.3.17 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := prog,
			useruser := uu,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/* MO: MSC <- MNCC: ALERT.req; indicate that user alerting has been initiated */
template MNCC_PDU ts_MNCC_ALERT_req(uint32_t call_id, template MNCC_progress prog := omit,
				    template charstring fac := omit,
				    template MNCC_useruser uu := omit) := {
	msg_type := MNCC_ALERT_REQ,
	u := {
		signal := {	/* See 24.008 9.3.1 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := prog,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}
template MNCC_PDU tr_MNCC_ALERT_req(template uint32_t call_id,
				    template MNCC_progress prog := *,
				    template charstring fac := *,
				    template MNCC_useruser uu := *) := {
	msg_type := MNCC_ALERT_REQ,
	u := {
		signal := {	/* See 24.008 9.3.1 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := prog,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}



/* MT: MSC -> MNCC: ALERRT.ind; indicates that mobile user alerting has been initiated */
template MNCC_PDU tr_MNCC_ALERT_ind(template uint32_t call_id, template MNCC_progress prog := omit,
				    template charstring fac := omit,
				    template MNCC_useruser uu := omit) := {
	msg_type := MNCC_ALERT_IND,
	u := {
		signal := {	/* See 24.008 9.3.1 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := prog,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}
template (value) MNCC_PDU ts_MNCC_ALERT_ind(uint32_t call_id,
				    template (omit) MNCC_progress prog := omit,
				    template (omit) charstring fac := omit,
				    template (omit) MNCC_useruser uu := omit) := {
	msg_type := MNCC_ALERT_IND,
	u := {
		signal := {	/* See 24.008 9.3.1 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := prog,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}


/*   : MSC <- MNCC: NOTIFY.req; request to send information pertaining to a call (such as user suspended) */
template MNCC_PDU ts_MNCC_NOTIFY_req(uint32_t call_id, MNCC_notify notify) := {
	msg_type := MNCC_NOTIFY_REQ,
	u := {
		signal := {	/* See 24.008 9.3.16 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := notify,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC -> MNCC: NOTIFY.ind; indication to the mobile user */
template MNCC_PDU tr_MNCC_NOTIFY_ind(template uint32_t call_id, template MNCC_notify notify) := {
	msg_type := MNCC_NOTIFY_IND,
	u := {
		signal := {	/* See 24.008 9.3.16 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := notify,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}

/*   : MSC -> MNCC: DISC.ind; mobile user requests disconnect */
template MNCC_PDU tr_MNCC_DISC_ind(template uint32_t call_id := ?, template MNCC_cause cause := ?,
				   template MNCC_progress prog := *,
				   template charstring fac := *,
				   template MNCC_useruser uu := *) := {
	msg_type := MNCC_DISC_IND,
	u := {
		signal := {	/* See 24.008 9.3.7 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := prog,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}
template (value) MNCC_PDU ts_MNCC_DISC_ind(uint32_t call_id, template (value) MNCC_cause cause,
				   template (omit) MNCC_progress prog := omit,
				   template (omit) charstring fac := omit,
				   template (omit) MNCC_useruser uu := omit) := {
	msg_type := MNCC_DISC_IND,
	u := {
		signal := {	/* See 24.008 9.3.7 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := prog,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC <- MNCC: DISC.req; indicate disconnect to mobile user */
template MNCC_PDU ts_MNCC_DISC_req(uint32_t call_id, MNCC_cause cause,
				   template MNCC_progress prog := omit,
				   template charstring fac := omit,
				   template MNCC_useruser uu := omit) := {
	msg_type := MNCC_DISC_REQ,
	u := {
		signal := {	/* See 24.008 9.3.7 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := prog,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}
template MNCC_PDU tr_MNCC_DISC_req(template uint32_t call_id,
				   template MNCC_cause cause := *,
				   template MNCC_progress prog := omit,
				   template charstring fac := omit,
				   template MNCC_useruser uu := omit) := {
	msg_type := MNCC_DISC_REQ,
	u := {
		signal := {	/* See 24.008 9.3.7 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := prog,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}


/*   : MSC -> MNCC: REL.ind; mobile user informs network that user wants to release call + MM */
template MNCC_PDU tr_MNCC_REL_ind(template uint32_t call_id := ?, template MNCC_cause cause := ?,
				  template charstring fac := *, template MNCC_useruser uu := *) := {
	msg_type := MNCC_REL_IND,
	u := {
		signal := {	/* See 24.008 9.3.18 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := omit,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}
template (value) MNCC_PDU ts_MNCC_REL_ind(uint32_t call_id,
				  template (value) MNCC_cause cause,
				  template (omit) charstring fac := omit,
				  template (omit) MNCC_useruser uu := omit) := {
	msg_type := MNCC_REL_IND,
	u := {
		signal := {	/* See 24.008 9.3.18 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := omit,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC <- MNCC: REL.req; indicate to mobile user tat network intents to release MM */
template MNCC_PDU ts_MNCC_REL_req(uint32_t call_id, MNCC_cause cause,
				  template charstring fac := omit, template MNCC_useruser uu := omit) := {
	msg_type := MNCC_REL_REQ,
	u := {
		signal := {	/* See 24.008 9.3.18 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := omit,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}
template MNCC_PDU tr_MNCC_REL_req(template uint32_t call_id, template MNCC_cause cause := *,
				  template charstring fac := *, template MNCC_useruser uu := *) := {
	msg_type := MNCC_REL_REQ,
	u := {
		signal := {	/* See 24.008 9.3.18 */
			callref := call_id,
			bearer_cap := omit,
			called := *,
			calling := *,
			redirecting := *,
			connected := *,
			cause := cause,
			progress := omit,
			useruser := uu,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := ?,
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}


/*   : MSC -> MNCC: REL.cnf; confirm REL_req */
template MNCC_PDU tr_MNCC_REL_cnf(template uint32_t call_id := ?, template MNCC_cause cause := ?,
				  template charstring fac := *, template MNCC_useruser uu := *)
modifies tr_MNCC_REL_ind := {
	msg_type := MNCC_REL_CNF
};
template (value) MNCC_PDU ts_MNCC_REL_cnf(uint32_t call_id,
					  template (value) MNCC_cause cause,
					  template (omit) charstring fac := omit,
					  template (omit) MNCC_useruser uu := omit)
modifies ts_MNCC_REL_ind := {
	msg_type := MNCC_REL_CNF
};


/*   : MSC <- MNCC: FACILITY.req; request transmission of facility */
template MNCC_PDU ts_MNCC_FACILITY_req(uint32_t call_id, charstring fac) := {
	msg_type := MNCC_FACILITY_REQ,
	u := {
		signal := {	/* See 24.008 9.3.9 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC -> MNCC: FACILITY.req; indicate reception of facility */
template MNCC_PDU tr_MNCC_FACILITY_ind(template uint32_t call_id := ?, template charstring fac := ?) := {
	msg_type := MNCC_FACILITY_IND,
	u := {
		signal := {	/* See 24.008 9.3.9 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := fac,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}

/*   : MSC -> MNCC: START_DTMF.ind; MS has */
template MNCC_PDU tr_MNCC_START_DTMF_ind(template uint32_t call_id := ?, template MNCC_keypad keypad := ?) := {
	msg_type := MNCC_START_DTMF_IND,
	u := {
		signal := {	/* See 24.008 9.3.24 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := keypad,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}

/*   : MSC <- MNCC: START_DTMF.rsp; Acknowledge start of DTMF */
template MNCC_PDU ts_MNCC_START_DTMF_rsp(uint32_t call_id, MNCC_keypad keypad) := {
	msg_type := MNCC_START_DTMF_RSP,
	u := {
		signal := {	/* See 24.008 9.3.25 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := keypad,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC <- MNCC: START_DTMF.rsp; Acknowledge start of DTMF */
template MNCC_PDU ts_MNCC_START_DTMF_rej(uint32_t call_id, MNCC_cause cause) := {
	msg_type := MNCC_START_DTMF_REJ,
	u := {
		signal := {	/* See 24.008 9.3.26 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC -> MNCC: STOP_DTMF.ind */
template MNCC_PDU tr_MNCC_STOP_DTMF_ind(template uint32_t call_id := ?) :=
	tr_MNCC_SIMPLE(MNCC_STOP_DTMF_IND, call_id); /* See 24.008 9.3.29 */

/*   : MSC <- MNCC: STOP_DTMF.rsp; Acknowledge stop of DTMF */
template MNCC_PDU ts_MNCC_STOP_DTMF_rsp(uint32_t call_id) :=
	ts_MNCC_SIMPLE(MNCC_STOP_DTMF_RSP, call_id); /* See 24.008 9.3.30 */

/*   : MSC -> MNCC: MODIFY.ind; request to start MO in-call modification */
template MNCC_PDU tr_MNCC_MODIFY_ind(template uint32_t call_id := ?, template MNCC_bearer_cap bcap := ?) := {
	msg_type := MNCC_MODIFY_IND,
	u := {
		signal := {	/* See 24.008 9.3.14 */
			callref := call_id,
			bearer_cap := bcap,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}

/*   : MSC <- MNCC: MODIFY.rsp; tespond to MO in-call modification */
template MNCC_PDU ts_MNCC_MODIFY_rsp(uint32_t call_id, MNCC_bearer_cap bcap) := {
	msg_type := MNCC_MODIFY_RSP,
	u := {
		signal := {	/* See 24.008 9.3.14 */
			callref := call_id,
			bearer_cap := bcap,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC <- MNCC: MODIFY.req; request to start MT in-call modification */
template MNCC_PDU ts_MNCC_MODIFY_req(uint32_t call_id, MNCC_bearer_cap bcap) := {
	msg_type := MNCC_MODIFY_REQ,
	u := {
		signal := {	/* See 24.008 9.3.14 */
			callref := call_id,
			bearer_cap := bcap,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC -> MNCC: MODIFY.cnf; MS has responded to MT in-call modification */
template MNCC_PDU tr_MNCC_MODIFY_cnf(template uint32_t call_id := ?,
				     template MNCC_bearer_cap bcap := ?) := {
	msg_type := MNCC_MODIFY_CNF,
	u := {
		signal := {	/* See 24.008 9.3.14 */
			callref := call_id,
			bearer_cap := bcap,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}

/*   : MSC <- MNCC: Request transmission of USERINFO to MS */
template MNCC_PDU ts_MNCC_USERINFO_req(uint32_t call_id, MNCC_useruser uu, integer more) := {
	msg_type := MNCC_USERINFO_REQ,
	u := {
		signal := {	/* See 24.008 9.3.31 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := uu,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := more,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC -> MNCC: Indicate reception of USERINFO from MS */
template MNCC_PDU tr_MNCC_USERINFO_ind(template uint32_t call_id := ?, template MNCC_useruser uu := ?,
					integer more) := {
	msg_type := MNCC_USERINFO_IND,
	u := {
		signal := {	/* See 24.008 9.3.31 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := omit,
			progress := omit,
			useruser := uu,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := more,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC -> MNCC: HOLD.ind; MS requests hold of call */
template MNCC_PDU tr_MNCC_HOLD_ind(template uint32_t call_id := ?) :=
				tr_MNCC_SIMPLE(MNCC_HOLD_IND, call_id); /* See 24.008 9.3.10 */

/*   : MSC <- MNCC: HOLD.cnf; network confirms hold of call */
template MNCC_PDU ts_MNCC_HOLD_cnf(uint32_t call_id) :=
				ts_MNCC_SIMPLE(MNCC_HOLD_CNF, call_id); /* See 24.008 9.3.11 */

/*   : MSC <- MNCC: HOLD.rej; network rejects hold of call */
template MNCC_PDU ts_MNCC_HOLD_rej(uint32_t call_id, MNCC_cause cause) := {
	msg_type := MNCC_HOLD_REJ,
	u := {
		signal := {	/* See 24.008 9.3.12 */
			callref := call_id,
			bearer_cap := omit,
			called := omit,
			calling := omit,
			redirecting := omit,
			connected := omit,
			cause := cause,
			progress := omit,
			useruser := omit,
			facility := omit,
			cccap := omit,
			ssversion := omit,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := omit,
			imsi := "",
			lchan_type := 0,
			lchan_mode := 0
		}
	}
}

/*   : MSC -> MNCC: RETRIEVE.ind; MS requests retrieval of held call */
template MNCC_PDU tr_MNCC_RETRIEVE_ind(template uint32_t call_id := ?) :=
				tr_MNCC_SIMPLE(MNCC_RETRIEVE_IND, call_id); /* See 24.008 9.3.20 */

/*   : MSC <- MNCC: RETRIEVE.cnf; network confirms retrieve of call */
template MNCC_PDU ts_MNCC_RETRIEVE_cnf(uint32_t call_id) :=
				ts_MNCC_SIMPLE(MNCC_RETRIEVE_CNF, call_id); /* See 24.008 9.3.21 */

/*   : MSC <- MNCC: RETRIEVE.rej; network rejects retrieve of call */
template MNCC_PDU ts_MNCC_RETRIEVE_rej(uint32_t call_id, MNCC_cause cause)
modifies ts_MNCC_HOLD_rej := {		/* See 24.008 9.3.22 */
	msg_type := MNCC_RETRIEVE_REJ
}


template MNCC_PDU ts_MNCC_SIMPLE_RTP(MNCC_MsgType msg_type, uint32_t call_id) := {
	msg_type := msg_type,
	u := {
		rtp := {
			callref := call_id,
			ip := 0,
			rtp_port := 0,
			payload_type := 0,
			payload_msg_type := 0
		}
	}
}

/* MSC <- MNCC: RTP_CREATE.req; request creation of RTP */
template MNCC_PDU ts_MNCC_RTP_CREATE(uint32_t call_id) := ts_MNCC_SIMPLE_RTP(MNCC_RTP_CREATE, call_id);

/* MSC -> MNCC: RTP_CREATE.rsp; acknowledge creation of RTP (stating MSC side IP/Port) */
template MNCC_PDU tr_MNCC_RTP_CREATE(template uint32_t call_id := ?) := {
	msg_type := MNCC_RTP_CREATE,
	u := {
		rtp := {
			callref := call_id,
			ip := ?,
			rtp_port := ?,
			payload_type := ?,
			payload_msg_type := ?
		}
	}
}

/* MSC <- MNCC: RTP_CONNECT.req; request connect of RTP */
template MNCC_PDU ts_MNCC_RTP_CONNECT(uint32_t call_id, uint32_t ip, uint32_t rtp_port, uint32_t pt) := {
	msg_type := MNCC_RTP_CONNECT,
	u := {
		rtp := {
			callref := call_id,
			ip := ip,
			rtp_port := rtp_port,
			payload_type := pt,
			payload_msg_type := 0
		}
	}
}
template MNCC_PDU tr_MNCC_RTP_CONNECT(template uint32_t call_id,
				      template uint32_t ip := ?,
				      template uint32_t rtp_port := ?,
				      template uint32_t pt := ?) := {
	msg_type := MNCC_RTP_CONNECT,
	u := {
		rtp := {
			callref := call_id,
			ip := ip,
			rtp_port := rtp_port,
			payload_type := pt,
			payload_msg_type := 0
		}
	}
}


/* MSC <- MNCC: RTP_FREE.req; request connect of RTP */
template MNCC_PDU ts_MNCC_RTP_FREE(uint32_t call_id) := ts_MNCC_SIMPLE_RTP(MNCC_RTP_FREE, call_id);

function f_mncc_get_call_id(MNCC_PDU pdu) return uint32_t {
	if (ischosen(pdu.u.rtp)) {
		return pdu.u.rtp.callref;
	} else if (ischosen(pdu.u.data)) {
		return pdu.u.data.callref;
	} else if (ischosen(pdu.u.signal)) {
		return pdu.u.signal.callref;
	} else  {
		setverdict(fail, "Unable to determine Callref for MNCC", pdu);
		mtc.stop
	}
}

} with { encode "RAW" ; variant "FIELDORDER(msb)" }
