///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2000-2019 Ericsson Telecom AB
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
///////////////////////////////////////////////////////////////////////////////
//
//  File:               SCTP_Daemon_Dynamic_IPL4_CtrlFunct.ttcn
//  Rev:                <RnXnn>
//  Prodnr:             CNL 113 630
//  Updated:            2010-11-24
//  Contact:            http://ttcn.ericsson.se
//  Reference:          
//

module IP_Daemon_Dynamic_IPL4_CtrlFunct {

  import from IP_Daemon_Dynamic_Interface_Definitions all;
  import from IPL4asp_Types all;
  
  external function f_IPL4_listen(
    inout IPDD_Interface_PT portRef, 
    in HostName locName,
    in PortNumber locPort,
    in ProtoTuple proto,
    in OptionList options := {}
  ) return Result; 

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

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

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

  external function f_IPL4_setGetMsgLen(
    inout IPDD_Interface_PT portRef,
    in ConnectionId id := -1,
    inout f_getMsgLen f,
    in ro_integer msgLenArgs
  );
  
} // module SCTP_Daemon_Dynamic_IPL4_CtrlFunct

