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_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_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_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_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 },
	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 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
}

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)";
}

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 int MNCC_keypad (0..127);

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 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
		}
	}
};

/* MT: MSC -> MNCC: Respons to SETUP.req */
template MNCC_PDU tr_MNCC_SETUP_rsp(template uint32_t call_id := ?, template MNCC_number connected := *,
				    template charstring imsi := ?) := {
	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 := *,
			facility := *,
			cccap := omit,
			ssversion := *,
			clir_sup := 0,
			clir_inv := 0,
			signal := omit,
			keypad := omit,
			more := 0,
			notify := 0,
			emergency := *,
			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 := ?
		}
	}

}

/* 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 := *,
			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 := ?
		}
	}
}

/* MO: MSC <- MNCC: SETUP_COMPL.req; request to send CONNECT ACK */
template MNCC_PDU ts_MNCC_SETUP_COMPL_req(uint32_t call_id) :=
		ts_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 */

/* 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 ts_MNCC_CALL_CONF_req(uint32_t call_id, template MNCC_bearer_cap bcap := omit,
					template MNCC_cause cause := omit,
					template 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
		}
	}
}

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


/* 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_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 := *,
			imsi := ?,
			lchan_type := ?,
			lchan_mode := ?
		}
	}
}

/*   : 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 := ?
		}
	}
}

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

/*   : 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 := ?
		}
	}
}

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

/*   : 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
};

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

/* 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);
		self.stop
	}
}

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