/* ECBE (REST) interface client of osmo-cbc test suite in TTCN-3
 * (C) 2022 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
 * All rights reserved.
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

module CBS_Message {

import from Osmocom_Types all;

import from BSSAP_Types all;
import from BSSMAP_Templates all;

import from CBSP_Types all;

/* Messages used for coordination between handlers and test_CT: */
const charstring COORD_MSG_CONNECTED := "COORD_MSG_CONNECTED";


type record CBS_Message {
	uint16_t msg_id,
	uint16_t ser_nr,
	uint16_t old_ser_nr optional,
	BSSMAP_FIELD_CellIdentificationList cell_list,
	uint8_t channel_ind optional,
	CBSP_Category category,
	uint16_t rep_period,
	uint16_t num_bcast_req,
	uint8_t dcs,
	CBS_MessageContents content
};
type record CBS_MessageContent {
	octetstring payload,
	uint8_t user_len
};
type record of CBS_MessageContent CBS_MessageContents;

function msg_id_is_etws(uint16_t msg_id) return boolean
{
	if (msg_id >= 4352 and msg_id <= 4359) {
		return true;
	}
	return false;
}

}
