module NS_CodecPort_CtrlFunct {

  import from NS_CodecPort all;
  import from IPL4asp_Types all;

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

  external function f_IPL4_connect(
    inout NS_CODEC_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 NS_CODEC_PT portRef,
    in ConnectionId id,
    in ProtoTuple proto := { unspecified := {} }
  ) return Result;

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

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

}

