module PFCP_CodecPort_CtrlFunct {

import from PFCP_CodecPort all;
import from IPL4asp_Types all;

external function f_IPL4_listen(
				inout PFCP_PT portRef,
				in HostName locName,
				in PortNumber locPort,
				in ProtoTuple proto,
				in OptionList options := {}
			       ) return Result;

external function f_IPL4_connect(
				 inout PFCP_PT portRef,
				 in HostName remName,
				 in PortNumber remPort,
				 in HostName locName,
				 in PortNumber locPort,
				 in ConnectionId connId,
				 in ProtoTuple proto,
				 in OptionList options := {}
				) return Result;

external function f_IPL4_close(
			       inout PFCP_PT portRef,
			       in ConnectionId id,
			       in ProtoTuple proto := { unspecified := {} }
			      ) return Result;

external function f_IPL4_setUserData(
				     inout PFCP_PT portRef,
				     in ConnectionId id,
				     in UserData userData
				    ) return Result;

external function f_IPL4_getUserData(
				     inout PFCP_PT portRef,
				     in ConnectionId id,
				     out UserData userData
				    ) return Result;

}
