module SCCP_CodecPort {

/* Simple SCCP Codec Port, translating between raw MTP3 primitives with
 * octetstring payload towards the MTP3 provider, and MTP3-SCCP primitives
 * which carry the decoded SCCP data types as payload.
 *
 * (C) 2019 by Harald Welte <laforge@gnumonks.org>
 * All rights reserved.
 *
 * Released under the terms of GNU General Public License, Version 2 or
 * (at your option) any later version.
 */

import from General_Types all;
import from Osmocom_Types all;

import from MTP3asp_Types all;
import from MTP3asp_PortType all;
import from SCCP_Types all;

/* MTP3asp_Types.Types.MessageTypes.ASP_MTP3_TRANSFERind with PDU_SCCP instead of octetstring */
type record SCCP_MTP3_TRANSFERind {
	MTP3_Field_sio	sio,
	integer		opc,
	integer		dpc,
	integer		sls,
	PDU_SCCP	data
};

/* MTP3asp_Types.Types.MessageTypes.ASP_MTP3_TRANSFERreq with PDU_SCCP instead of octetstring */
type record SCCP_MTP3_TRANSFERreq {
	MTP3_Field_sio	sio,
	integer		opc,
	integer		dpc,
	integer		sls,
	PDU_SCCP	data
};

private function f_dec_TRANSFERind(in ASP_MTP3_TRANSFERind pin, out SCCP_MTP3_TRANSFERind pout) {
	pout.sio := pin.sio;
	pout.opc := pin.opc;
	pout.dpc := pin.dpc;
	pout.sls := pin.sls;
	pout.data := dec_PDU_SCCP(pin.data);
	//port.setstate(0);
} with {extension "prototype(fast)" }


private function f_enc_TRANSFERreq(in SCCP_MTP3_TRANSFERreq pin, out ASP_MTP3_TRANSFERreq pout) {
	pout.sio := pin.sio;
	pout.opc := pin.opc;
	pout.dpc := pin.dpc;
	pout.sls := pin.sls;
	pout.data := enc_PDU_SCCP(pin.data);
	//port.setstate(0);
} with {extension "prototype(fast)" }

type port SCCP_CODEC_PT message {
	out	SCCP_MTP3_TRANSFERreq;
	in	SCCP_MTP3_TRANSFERind,
		ASP_MTP3_PAUSE,
		ASP_MTP3_RESUME,
		ASP_MTP3_STATUS;
} with { extension "internal user MTP3asp_PT
	out(SCCP_MTP3_TRANSFERreq -> ASP_MTP3_TRANSFERreq: function(f_enc_TRANSFERreq))
	in(ASP_MTP3_TRANSFERind -> SCCP_MTP3_TRANSFERind: function(f_dec_TRANSFERind);
	   ASP_MTP3_PAUSE -> ASP_MTP3_PAUSE: simple;
	   ASP_MTP3_RESUME -> ASP_MTP3_RESUME: simple;
	   ASP_MTP3_STATUS -> ASP_MTP3_STATUS: simple)"
}


}
