module VPCD_CodecPort_CtrlFunct {

  import from VPCD_CodecPort all;
  import from IPL4asp_Types all;

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

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

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

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

  external function f_IPL4_setGetMsgLen(
    inout VPCD_CODEC_PT portRef,
    in ConnectionId id,
    inout f_IPL4_getMsgLen f,
    in ro_integer msgLenArgs
  );


}

